/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
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/

Søg
Reklame
Statistik
Spørgsmål : 177579
Tips : 31968
Nyheder : 719565
Indlæg : 6409075
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste