# Fehlermeldung beim redirect in der JSP



## freez (23. Nov 2006)

Hallo,

ich habe ein kleines Problem beim redirect:


```
if(!request.isRequestedSessionIdValid()){
			response.sendRedirect("./site2.jsp");
		}
		
		HttpSession httpsession = request.getSession(false);
		aur.xmlMenuBean xmb = (aur.xmlMenuBean)httpsession.getAttribute("xmlMenuBean");

		if(xmb == null || xmb.getDoc() == null){
			response.sendRedirect("./site2.jsp");
		}
```

in Zeile 9 bringt er folgenden Fehler (in der Fehlermeldung "at org.apache.jsp.work.site_jsp._jspService(site_jsp.java:53)"):

```
23.11.2006 19:42:15 org.apache.catalina.core.StandardWrapperValve invoke
SCHWERWIEGEND: Servlet.service() for servlet jsp threw exception
java.lang.IllegalStateException
	at org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:432)
	at org.apache.jsp.work.site_jsp._jspService(site_jsp.java:53)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:334)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
	at java.lang.Thread.run(Unknown Source)
```

Ich sehe keinen Fehler ... was ist an der Zeile verkehrt? Die Datei "site2.jsp" existiert.


----------



## bronks (23. Nov 2006)

Ich nehme an, daß vor dem sendRedirect() ein OutStream aufgemacht wude. sendRedirect() funktioniert nur, wenn noch keine Daten geschrieben wurden.


----------



## freez (24. Nov 2006)

Du hast Recht  Nur wie umgehe ich das ganze? Ich habe den Code schon ganz oben in der JSP drin und der Code zur JSP schaut so aus:


```
public void _jspService(HttpServletRequest request, HttpServletResponse response)
        throws java.io.IOException, ServletException {

    JspFactory _jspxFactory = null;
    PageContext pageContext = null;
    HttpSession session = null;
    ServletContext application = null;
    ServletConfig config = null;
    JspWriter out = null;
    Object page = this;
    JspWriter _jspx_out = null;
    PageContext _jspx_page_context = null;


    try {
      _jspxFactory = JspFactory.getDefaultFactory();
      response.setContentType("text/html");
      pageContext = _jspxFactory.getPageContext(this, request, response,
      			null, true, 8192, true);
      _jspx_page_context = pageContext;
      application = pageContext.getServletContext();
      config = pageContext.getServletConfig();
      session = pageContext.getSession();
      out = pageContext.getOut();
      _jspx_out = out;


        if(!request.isRequestedSessionIdValid()){
			response.sendRedirect("./nav.htm?id=010000");
		}
		
		HttpSession httpsession = request.getSession();
		aur.xmlMenuBean xmb = (aur.xmlMenuBean)httpsession.getAttribute("xmlMenuBean");

		if(xmb == null || xmb.getDoc() == null){
			response.sendRedirect("./nav.htm?id=020000");
		}

      out.write(" \r\n");
.... something more
```

Und in der JSP selbst schaut es so aus:


```
<%
        if(!request.isRequestedSessionIdValid()){
			response.sendRedirect("./nav.htm?id=010000");
		}
		
		HttpSession httpsession = request.getSession();
		aur.xmlMenuBean xmb = (aur.xmlMenuBean)httpsession.getAttribute("xmlMenuBean");

		if(xmb == null || xmb.getDoc() == null){
			response.sendRedirect("./nav.htm?id=020000");
		}
%> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="nav.css" media="screen,projection" />
<title>Navigation</title>
</head>
... something more
```

wie kriege ich das jetzt hin, daß mein Code vor "out = pageContext.getOut();" ausgeführt wird?


----------



## freez (3. Dez 2006)

Hallo,

ich habe nun eine Lösung für mein Problem, welche aber net so ganz 100%ig ist. Ich lasse den Browser per meta Tag ein forward machen, wenn bestimmte Bedingungen erfüllt sind. Allerdings ist es noch sehr unschön, da die ganze Seite erst einmal angezeigt wird, bevor der Browser den forward macht. Vielleicht weiß ja jemand, wie ich das doch noch per request.sendRedirect() machen kann. Das wäre natürlich viel schöner 

Hier der Code dazu:

```
<%@ page contentType="text/html; charset=ISO-8859-15" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<%
      if(!request.isRequestedSessionIdValid()){
%><meta http-equiv="refresh" content="0; URL=login.jsp"><%
      }
      
      HttpSession httpsession = request.getSession();
      aur.xmlMenuBean xmb = (aur.xmlMenuBean)httpsession.getAttribute("xmlMenuBean");

      if(xmb == null || xmb.checkState(aur.xmlMenuBean.STATE_NEW)){
%><meta http-equiv="refresh" content="0; URL=login.jsp"><%
      }
%>
```

Solche Sachen werden doch bestimmt öfter in JSP's gebraucht. Dazu muß doch jemand ein Beispiel haben. Geht das vielleicht mit JSF's besser?


----------



## freez (5. Dez 2006)

Hallo,

ich wollte einen kleinen Statusbericht abgeben, wie es nun mit dem redirect so läuft.

Ich habe mir das ix Tutorial zu JSF auf heise.de gekauft (3x 90ct.) ... Ausgaben 4/2006 bis 6/2006. Kleine Wertung meinerseits: Für einen groben Überblick reichts. Durch das Tutorial führt ein Beipiel, auf welches aber zu wenig eingegangen wird.

Ausserdem habe ich mir die "myEclipseIDE" zum testen gedownloaded und mal versucht mein Projekt in JSF umzusetzen. Anfangs mit leichten Problemen aber im Endeffekt ist mein Projekt jetzt einfacher geworden. Vor allem benötige ich bis jetzt kein Servlet. Finde ich schon recht interessant.

Naja, und zu dem Problem mit dem redirect: Es funktioniert hervorragend. Ich kann in meiner Seite ein paar Statusabfragen machen und bei Bedarf auf eine andere Seite umleiten. Super. So, wie ich es mir vorgestellt habe.

Vielen Dank, an die, die sich die Mühe für mich gemacht haben zu antworten  .

Beste Grüße
Denis


----------

