2016-05-06 3 views
1
public void doGet(HttpServletRequest req, HttpServletResponse resp) 
      throws IOException{ 
     resp.setContentType("text/plain"); 

     List<String>result = new ArrayList<String>(); 
      result.add("Zara"); 
      result.add("Mahnaz"); 
      result.add("Ayan"); 

      PrintWriter out = resp.getWriter(); 

      Iterator it = result.iterator(); 
      while(it.hasNext()) { 
       out.println(it.next()); 
      } 


      req.setAttribute("styles", result); 
      RequestDispatcher view = req.getRequestDispatcher("index.jsp"); 
      try {  
       view.forward(req, resp); 

      } catch (ServletException e) { 
       e.printStackTrace(); 
      } 
} 

上記はjspを制御するためのJavaクラスです。以下は私のjspファイルです。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> 

以下は私の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> 

である私は私ができるすべてを試してみましたが、まだエラーを取得しています。 enter image description here

私はそれがマッピングの問題であることを知っています。しかし、私はそれを修正する方法を知らない。私を助けてください。前もって感謝します。

+0

'' result.jsp'にindex.jsp'の名前を変更し、 'のRequestDispatcherビュー= req.getRequestDispatcher( "はresult.jsp")を行うためのサーブレットを変更;'これはただ一つの解決策です。問題は、サーブレットへのサーブレット転送によって発生し、その結果、無限ループになります。 –

+0

私が言ったように、複数の可能なソリューションがあります。私が提案した解決策では、web.xmlを変更する必要はありません。 –

+0

あなたは私のためにもう少し説明してもらえますか?このサーブレット・サーブレットはどのように行われますか?私が名前を変更した後、ウェルカムファイルとは何ですか? –

答えて

0

根本的な原因は:ので、設定ミスのいくつかの場所でいくつかの設定ミスがあり

stackoverflowの例外が発生し、無限ループであることを起こります。

どのように無限ループが起こります

  1. - >歓迎 - [ファイル] - > [フォワードURLに:
  2. URL /index.jsp:/index.jspはJSPTest servlet-へのURLパターンに一致する>ので、サーブレットが実行中 - >
  3. JSPTestサーブレットがindex.jspへのリクエストを転送しています。 RequestDispatcher view = req.getRequestDispatcher("index.jsp");
  4. view.forward(); // which to forward to url:/index.jsp。
  5. その後、ステップ2からステップ4が何度も繰り返し実行されます。無限ループが発生し、スタックオーバーフロー例外が発生します。あなたは無限ループを避けるために必要

    :どのように修正する

。だから、あなたはさまざまな方法でそれをやることができます。 2つの異なるJSPが必要です.1つはウェルカムファイル用、もう1つはサーブレット転送ビュー用です。

溶液#1:

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

これは最終的にループを中断します。

http://localhost:8080/AppTest/JSPTestに電話する必要があります。

http://localhost:8080/AppTest/に電話する必要があります。 これは、サーブレットに行くことなく直接index.jspページに移動します。

溶液#2:表示するnext.jsp は前と同じweb.xmlを維持するには、別のJSPを使用することができます。あなたはhttp://localhost:8080/AppTest/を呼び出すその後 RequestDispatcher view = req.getRequestDispatcher("next.jsp");

に設定することもできJSP 。

+0

あなたは私がview.forward()メソッドを使用する必要はありません解決策2を持っていますし、私は唯一の.jspファイルを作成する必要がありますか? 'next.jsp'にあなたが(view.forward使用する必要が –

+0

おかげで) – CrawlingKid