# Redirct-Problem



## Mox (22. Aug 2006)

Hi,

hier habe ich irgendwas noch nicht begriffen,
warum geht folgender redirect nicht: ?

file1.jsp:

```
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%  pageContext.include("file2.jsp"); %>
```

file2.jsp:

```
<% pageContext.forward("/file3.jsp"); %>
```

bei Aussführung erhält man dann bei _pageContext.forward("/file3.jsp")_
den Fehler: 

```
error:java.lang.IllegalStateException: Cannot forward after response has been committed
```

Der Fehler bedeutet wohl, dass bereits Daten zum Client gesendet wurden.
Nur haben die Scripte selbst doch noch gar nichts gesendet, da erzeugt JSP
wohl von selbst schon Ausgaben.

Wie kann man das lösen ?

Gruss
Mox


----------



## SlaterB (22. Aug 2006)

wenns doch eh nur drei Zeilen sind:
schon mal versucht
 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 
wegzulassen? 
das erzeugt nunmal ein bisschen Output, in diesem Fall nicht mal nur allgemeinen, sondern gar eine Festlegung des Outputs auf HTML,
wie soll da noch ein Redirect funktionieren?

der Browser denkt nun dass HTML kommt und kann nicht mehr einen Redirect ausführen

(meine Vermutung)


----------



## mox (22. Aug 2006)

ja mit der ersten Zeile weglassen funktioniert das.

Nur hab ich dann dass Problem, dass ich keine Packages mehr importieren kann,
denn schon bei einem kurzen

```
<%@ page import="java.io.*" %>
```
statt dem ursprünglichen

```
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
```

geht es schon nicht mehr mit dem Redirect.

Hat einer ne Idee ?


----------



## SlaterB (23. Aug 2006)

ein JSP ist immer das gleiche wie ein Servlet, und ein Servlet muss ja zumindest seine eigene Klasse importieren,
am import liegts also nicht,

auch die erste Zeile macht keinen Unfug wie ich jetzt festgestellt habe, netterweise erzeugt ein Tomcat nämlich die java-Klassen zu den jsp,

bei zwei Zeilen:

```
package org.apache.jsp.view;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
import java.io.*;

public final class file1_jsp extends org.apache.jasper.runtime.HttpJspBase
    implements org.apache.jasper.runtime.JspSourceDependent {

  private static java.util.List _jspx_dependants;

  public Object getDependants() {
    return _jspx_dependants;
  }

  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;

      out.write('\r');
      out.write('\n');
 pageContext.include("file2.jsp"); 
      out.write('\r');
      out.write('\n');
    } catch (Throwable t) {
      if (!(t instanceof SkipPageException)){
        out = _jspx_out;
        if (out != null && out.getBufferSize() != 0)
          out.clearBuffer();
        if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
      }
    } finally {
      if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_page_context);
    }
  }
}
```

das Problem ist dabei nicht der Inhalt der ersten Zeile sondern der Zeilenumbruch, der in die Response geschrieben wird,

mit

```
<%@ page language="java" contentType="text/xml; charset=UTF-8" pageEncoding="UTF-8"%><% pageContext.include("file2.jsp"); %>
```
funktionierts, auch wenns nicht schön aussieht

-------


```
<%@ page language="java" contentType="text/xml; charset=UTF-8" pageEncoding="UTF-8"%> <% pageContext.include("file2.jsp"); %>
```
würde wiederum nicht klappen da bereits das eine Leerzeichen in die Ausgabe wandert


----------



## mox (24. Aug 2006)

Hi SlaterB,

danke für Deine Hilfe, jetzt ist die Ursache klar.

Nur ist das aus Wartungsgründen keine wirklich gute Lösung,
allen Code bis zur  Redirect-Anweisung unformatiert zusammenzuquetschen.

Ich schau mal, vielleicht kann beim Tomcat diese Ausgaben irgendwie abstellen.

Gruss
Mox


----------

