|
| IllegalStateException ved JSP-side Fra : Henrik Davidsen |
Dato : 23-05-05 15:50 |
|
Hejsa
Jeg har lavet et webbaseret program i jsp, og har haft det kørt på en lokal
version af Apache + tomcat. Da systemet skal i drift, kommer det til at køe
på en iis med tomcat, og så får jeg en IllegalStateException. Fejlen opstår
ved fejlslagen login. Der er en index-side, med en login-form. Når man
trykker på login-knappen, sendes man over til en valideringsside, som
tjekker brugernavn og password. Hvis man taster korrekt, bliver man sendt
videre til side A, og hvis man har tastet forkert, bliver man sendt tilbage
til index-siden.
Man kan godt logge ind uden fejl, hvis man vel at mærke skriver det rigtige
brugernavn og password. Men hvis man skriver forkert i brugernavn eller
password, kommer der nu en IllegalStateException. Jeg kan ikke gennemskue
hvorfor den kommer, når man godt kan logge ind normalt, og fejlen kan ikke
genskabes på min lokale apache+tomcat.
Fejlen er præcis følgende:
type Exception report
message
description The server encountered an internal error () that prevented it
from fulfilling this request.
exception
java.lang.IllegalStateException
org.apache.coyote.tomcat5.CoyoteResponseFacade.sendRedirect(CoyoteResponseFacade.java:352)
org.apache.jsp.validateuser_jsp._jspService(validateuser_jsp.java:139)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
Et udsnip af koden i valideringssiden ser sådan ud:Bruger b =
ldl.getBruger(brugernavn, password);if (b!=null){
b.setAfdeling(hdl1.getAfdeling(b)); session.setMaxInactiveInterval(600);
if (b.getRettighedsniveau() == Bruger.AFDELINGSCHEF) {
response.sendRedirect("skadeshaantering.jsp"); return; } else
if (b.getRettighedsniveau() == Bruger.VIRKSOMHEDSCHEF) {
response.sendRedirect("skadeshaantering.jsp"); return; } else
if (b.getRettighedsniveau() >= Bruger.SUPERBRUGER) {
response.sendRedirect("admin_virk.jsp"); return; }}else { try
{ throw new Exception("Fejl ved login"); } catch(Exception e)
{ session.setAttribute("undladSendTilFejl",""); %> <%@
include file="log.jsp"%> <%
response.sendRedirect("index.jsp?loggetInd=false&brugernavn="+brugernavn);
return; }}hvis man kommer ind i den første if (b!= null), så virker
response.sendRedirect() fint. Men kommer man ned i else-delen, kommer den
IllegalStateException. Det ENESTE der sker i logfilen, er at exceptionen der
kastes, med beskeden "Fejl ved login", fanges, og gemmes til en database.
Der er dog én eneste ting i log.jsp som måske kan være fejlen. (jeg kunne
selvfølgelig teste det, men vil godt ligehøre her først, da jeg ikke selv
har adgang til produktionsmaskinen, så det betyder at en opdatering skal
gennem2 hænder før det kommer på - så jeg vil godt lige være sikker først)
Det er, at jeg gemmer en attribut i session-objektet.Kan det være det der
giver en IllegalStateException? Og i så fald hvorfor?/Sjang
| |
Henrik Davidsen (23-05-2005)
| Kommentar Fra : Henrik Davidsen |
Dato : 23-05-05 15:58 |
|
Hmm... den posting lignede lort... jeg prøver lige igen
/Sjang
| |
Henrik Davidsen (23-05-2005)
| Kommentar Fra : Henrik Davidsen |
Dato : 23-05-05 16:04 |
|
> Fejlen er præcis følgende:
> type Exception report
>
> message
>
> description The server encountered an internal error () that prevented it
> from fulfilling this request.
>
> exception
>
> java.lang.IllegalStateException
> org.apache.coyote.tomcat5.CoyoteResponseFacade.sendRedirect(CoyoteResponseFacade.java:352)
> org.apache.jsp.validateuser_jsp._jspService(validateuser_jsp.java:139)
> org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
> javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
> org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
> org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
> org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
> javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
Ovenstående fejlbeskrivelse, skulle kunne læses.
> Et udsnip af koden i valideringssiden ser sådan ud:
Bruger b = ldl.getBruger(brugernavn, password);
if (b!=null){
b.setAfdeling(hdl1.getAfdeling(b));
session.setMaxInactiveInterval(600);
if (b.getRettighedsniveau() == Bruger.AFDELINGSCHEF) {
response.sendRedirect("skadeshaantering.jsp");
return;
}
else
if (b.getRettighedsniveau() == Bruger.VIRKSOMHEDSCHEF) {
response.sendRedirect("skadeshaantering.jsp");
return;
}
else
if (b.getRettighedsniveau() >= Bruger.SUPERBRUGER) {
response.sendRedirect("admin_virk.jsp");
return;
}
}
else {
try
{
throw new Exception("Fejl ved login");
}
catch(Exception e) {
session.setAttribute("undladSendTilFejl","");
%>
<%@ include file="log.jsp"%>
<%
response.sendRedirect("index.jsp?loggetInd=false&brugernavn="+brugernavn);
return;
}
}
hvis man kommer ind i den første if (b!= null), så virker
response.sendRedirect() fint. Men kommer man ned i else-delen, kommer den
IllegalStateException.
Det ENESTE der sker i logfilen, er at exceptionen der
kastes, med beskeden "Fejl ved login", fanges, og gemmes til en database.
Der er dog én eneste ting i log.jsp som måske kan være fejlen. (jeg kunne
selvfølgelig teste det, men vil godt lige høre her først, da jeg ikke selv
har adgang til produktionsmaskinen, så det betyder at en opdatering skal
gennem 2 hænder før det kommer på - så jeg vil godt lige være sikker først)
Det er, at jeg gemmer en attribut i session-objektet. Kan det være det der
giver en IllegalStateException? Og i så fald hvorfor?
/Sjang
| |
Jonathan Stein (23-05-2005)
| Kommentar Fra : Jonathan Stein |
Dato : 23-05-05 16:13 |
|
Henrik Davidsen wrote:
> catch(Exception e) {
> ...
> response.sendRedirect("index.jsp?loggetInd=false&brugernavn="+brugernavn);
Det kan også være, at du skal flytte din redirect uden for catch-blokken
eller pakke den ind i en ny try-blok.
M.v.h.
Jonathan
--
Er din email vigtig? Er du træt af, at din hjemmeside er nede?
Stabilt webhotel på redundant setup med daglig backup.
POP3, IMAP, PHP, JSP, Java, Perl, Python, Telnet, SSH, Cron-jobs m.v.
http://www.jsp-hotel.dk/
| |
Henrik Lynggaard (23-05-2005)
| Kommentar Fra : Henrik Lynggaard |
Dato : 23-05-05 19:59 |
|
Henrik Davidsen wrote:
>>Fejlen er præcis følgende:
>>type Exception report
>>
>>
>>exception
>>
> catch(Exception e) {
> session.setAttribute("undladSendTilFejl","");
> %>
> <%@ include file="log.jsp"%>
> <%
> response.sendRedirect("index.jsp?loggetInd=false&brugernavn="+brugernavn);
> return;
> }
> }
>
> hvis man kommer ind i den første if (b!= null), så virker
> response.sendRedirect() fint. Men kommer man ned i else-delen, kommer den
> IllegalStateException.
>
> Det ENESTE der sker i logfilen, er at exceptionen der
> kastes, med beskeden "Fejl ved login", fanges, og gemmes til en database.
Uden at have testet det Er det ikke muligt at du implicit har
skrevet noget til jsp siden. Enten p.g.a side indholdet mellem %> og <%
eller via din include.
Prøv evt med %><%@ include file="log.jsp"%><% i stedet for.
ps hvorfor i det hele taget kaste en exception og fange den igen bare
for en login fejl ?
| |
Jonathan Stein (23-05-2005)
| Kommentar Fra : Jonathan Stein |
Dato : 23-05-05 16:10 |
|
Henrik Davidsen wrote:
> Man kan godt logge ind uden fejl, hvis man vel at mærke skriver det rigtige
> brugernavn og password. Men hvis man skriver forkert i brugernavn eller
> password, kommer der nu en IllegalStateException. Jeg kan ikke gennemskue
> hvorfor den kommer, når man godt kan logge ind normalt, og fejlen kan ikke
> genskabes på min lokale apache+tomcat.
En hurtig tanke: Skriver du noget på siden inden du redirecter? (F.eks.
en DOCTYPE erklæring eller en HEAD-sektion).
I så fald går det måske godt lokalt, fordi siden bliver cachet på serveren.
M.v.h.
Jonathan
--
Er din email vigtig? Er du træt af, at din hjemmeside er nede?
Stabilt webhotel på redundant setup med daglig backup.
POP3, IMAP, PHP, JSP, Java, Perl, Python, Telnet, SSH, Cron-jobs m.v.
http://www.jsp-hotel.dk/
| |
Henrik Davidsen (23-05-2005)
| Kommentar Fra : Henrik Davidsen |
Dato : 23-05-05 16:58 |
|
> En hurtig tanke: Skriver du noget på siden inden du redirecter? (F.eks. en
> DOCTYPE erklæring eller en HEAD-sektion).
Nej jeg skriver intet på siden før jeg redirecter, det er det der gør jeg at
jeg ikke helt forstår det.
/Sjang
| |
Jonathan Stein (23-05-2005)
| Kommentar Fra : Jonathan Stein |
Dato : 23-05-05 21:28 |
|
Henrik Davidsen wrote:
>>En hurtig tanke: Skriver du noget på siden inden du redirecter? (F.eks. en
>>DOCTYPE erklæring eller en HEAD-sektion).
>
> Nej jeg skriver intet på siden før jeg redirecter, det er det der gør jeg at
> jeg ikke helt forstår det.
Heller ikke bare et mellemrum eller et linjeskift?
F.eks. bare:
<%@ ...Noget spændende her... %>
<% ... noget mere på en ny linje ... %>
M.v.h.
Jonathan
--
Er din email vigtig? Er du træt af, at din hjemmeside er nede?
Stabilt webhotel på redundant setup med daglig backup.
POP3, IMAP, PHP, JSP, Java, Perl, Python, Telnet, SSH, Cron-jobs m.v.
http://www.jsp-hotel.dk/
| |
Thorbjoern Ravn Ande~ (23-05-2005)
| Kommentar Fra : Thorbjoern Ravn Ande~ |
Dato : 23-05-05 20:59 |
|
"Henrik Davidsen" <sjangREMOVE@sjang.dk> writes:
> java.lang.IllegalStateException
> org.apache.coyote.tomcat5.CoyoteResponseFacade.sendRedirect(CoyoteResponseFacade.java:352)
Har du printet noget ud inden du redirecter?
--
Thorbjørn Ravn Andersen
http://unixsnedkeren.dk/ravn/
| |
|
|