2016-05-06 10 views
1

Das obige ist meine Java-Klasse, um die JSP zu steuern. Das Folgende ist meine JSP-Datei.GAE JSP INTERNAL_SERVER_ERROR

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1" import="java.util.*"%> 

<!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"> 
<title>JSPTest</title> 
</head> 
<body> 
<p> 

<% 
    List styles = (List) request.getAttribute("styles"); 
    Iterator it = styles.iterator(); 
    while(it.hasNext()) { 
    out.print("<br>try: " + it.next()); 
    } 
%> 

</p> 
</body> 
</html> 

Die unten ist meine web.xml

<servlet> 
     <servlet-name>JSPTest</servlet-name> 
     <servlet-class>com.nexwah.JSPTestServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>JSPTest</servlet-name> 
     <url-pattern>/index.jsp</url-pattern> 
    </servlet-mapping> 
    <welcome-file-list> 
     <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list> 
</web-app> 

Ich habe versucht alles, was ich kann und immer noch den Fehler. enter image description here

Ich weiß, es wäre das Mapping-Problem. Aber ich weiß nicht, wie ich das beheben soll. Bitte hilf mir. Danke im Voraus.

+0

Benennen Sie 'index.jsp' in' result.jsp' um und ändern Sie Ihr Servlet in 'RequestDispatcher view = req.getRequestDispatcher (" result.jsp ");' Dies ist nur eine Lösung. Das Problem wird durch die Servlet-Weiterleitung an Ihr Servlet verursacht, die zu einer Endlosschleife führt. –

+0

Wie gesagt, es gibt mehrere mögliche Lösungen. Die von mir vorgeschlagene Lösung sollte nicht erfordern, dass Sie die web.xml ändern. –

+0

Können Sie mir ein wenig mehr erklären? Wie erfolgt dieses Servlet-Forwarding-Servlet? Nachdem ich den Namen geändert habe, was ist dann die Willkommens-Datei? –

Antwort

0

Root Cause:

Es gibt einige falsche Konfiguration an mehreren Stellen ist wegen der Fehlkonfiguration kommt es zu einer Endlosschleife sein, die in Stackoverflow Ausnahme führt.

Wie Endlosschleife passiert:

  1. -> Welcome-File-> Weiter zum url: /index.jsp
  2. url: /index.jsp Spiele URL-Muster zu JSPTest servlet> so Servlet wird ausgeführt->
  3. JSPTest Servlet leitet die Anforderung an index.jsp weiter. RequestDispatcher view = req.getRequestDispatcher("index.jsp");.
  4. view.forward(); // welche weiterleiten an url: /index.jsp.
  5. dann passiert Schritt 2 bis Schritt 4 immer und immer wieder.Daher macht es eine Endlosschleife und verursacht einen Stapelüberlauf Ausnahmen.

Wie zu beheben:

Sie brauchen machen Endlosschleife zu vermeiden. Also, Sie können es auf viele Arten tun. Sie benötigen zwei verschiedene JSPs, eine für Begrüßungsdatei und eine andere für Servlet-Weiterleitungsansicht, um die Schleife zu unterbrechen.

Lösung # 1:

<servlet-mapping> 
     <servlet-name>JSPTest</servlet-name> 
     <url-pattern>/JSPTest</url-pattern> 
</servlet-mapping> 

Dies wird schließlich das Looping brechen.

Und Sie müssen anrufen http://localhost:8080/AppTest/JSPTest.

Und Sie müssen anrufen http://localhost:8080/AppTest/. Damit gelangen Sie direkt zur Seite index.jsp, ohne das Servlet zu durchlaufen.

Lösung # 2: web.xml Keeping gleiche wie zuvor, Sie einen anderen jsp verwenden: next.jsp angezeigt werden soll. Das jsp Sie in RequestDispatcher view = req.getRequestDispatcher("next.jsp");

Dann rufen Sie http://localhost:8080/AppTest/ konfigurieren können.

+0

Haben Sie eine Lösung 2, die ich nicht brauche, um die Methode view.forward() zu verwenden, und ich muss nur eine .jsp-Datei erstellen? Dank –

+0

müssen Sie view.forward() bis 'next.jsp' verwenden – CrawlingKid