2017-02-21 10 views
0

が私のコードです:サーブレットが.jspに転送されないのはなぜですか?ここで

Index.htmlと

<html> 
    <head> 
     <title>Web App Assignment 5</title> 
     <meta charset="UTF-8"> 
     <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    </head> 
    <body> 
     <div> 
      <a href="listEmployees.jsp">View Employees</a> 
     </div> 
    </body> 
</html> 

Employees.java

class Employees { 

     private String name; 
     private int id; 

     public Employees() { 

     } 
     public Employees(String name, int id){ 
      setName(name); 
      setID(id); 
     } 

     public String getName(){ 
      return name; 
     } 

     public int getID(){ 
      return id; 
     } 

     public void setName(String name){ 
      this.name = name; 
     } 

     public void setID(int id) { 
      this.id = id; 
     } 
    } 

getEmployees.java

import java.io.IOException; 
    import java.io.PrintWriter; 
    import java.util.ArrayList; 
    import java.util.List; 
    import javax.servlet.RequestDispatcher; 
    import javax.servlet.ServletException; 
    import javax.servlet.http.HttpServlet; 
    import javax.servlet.http.HttpServletRequest; 
    import javax.servlet.http.HttpServletResponse; 
    import javax.servlet.http.HttpSession; 

    public class getEmployees extends HttpServlet { 

     protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
       throws ServletException, IOException { 
      response.setContentType("text/html;charset=UTF-8"); 

      try (PrintWriter out = response.getWriter()) { 

      Employees emp1 = new Employees("Jim", 002); 
      Employees emp2 = new Employees("Pam", 043); 
      Employees emp3 = new Employees("Dwight", 013); 
      Employees emp4 = new Employees("Kevin", 123); 
      Employees emp5 = new Employees("Michael", 001); 
      Employees emp6 = new Employees("Oscar", 033); 

      List<Employees> employees = new ArrayList<Employees>(); 
      employees.add(emp1); 
      employees.add(emp2); 
      employees.add(emp3); 
      employees.add(emp4); 
      employees.add(emp5); 
      employees.add(emp6); 

      HttpSession session = request.getSession(); 
      session.setAttribute("empl", employees); 

      RequestDispatcher dispatcher = request.getRequestDispatcher("listEmployees.jsp"); 
      dispatcher.forward(request, response); 
       } 
      } 
    } 

listEmployees.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
    <%@page contentType="text/html" pageEncoding="UTF-8"%> 

<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>List of Employees </title> 
    </head> 
    <body> 
     <h1><u> List of Employees </u> </h1> 
     <table> 
      <thead> 
       <tr> 

       <td>Employee Name</td> 
       <td></td> 
       <td>Employee ID</td> 
     </tr> 
    </thead> 
    <c:forEach items="${empl}" var="current"> 
     <tr> 
      <td><c:out value="${empl}" /><td> 
     </tr> 
     </c:forEach> 
</table> 
</body> 
</html> 

私は、JSPに従業員のリストを転送し、従業員のリストを表示するようになっているのGetEmployeesサーブレットに転送するには、インデックスページを取得しようとしています。サーブレットがjspに転送されない理由が不明です。どんな助けでも大歓迎です。 Glassfishサーバーを使用しています。

+2

コードを、それが属するファイル名を持つコードブロックに分けることができますか? – niceman

+0

タイトルから「netbeans」を削除するここで質問に関連するIDEは表示されません(GlassFishのようなアプリケーションサーバーが関係していると思います) – niceman

+0

実際に何が起こりますか? –

答えて

0

processRequestはどんなリクエスト自身に答えていない、それだけでメソッドをサポートしている、それがあれば、要求に応じて実行され、それがdoGetまたはdoPostから呼び出された場合にのみ、実際の要求に応答している、あなたはどちらの方法にしたい場合に実行同じコード、ちょうどあなたがforeachの中に印刷されている変数を変更する必要がありますdoPostからprocessRequestdoGet、よりhere

1

ことを呼び出す:

<c:forEach items="${empl}" var="current"> 
    <tr> 
     <td><c:out value="${current.name}" /><td> 
     <td><td> 
     <td><c:out value="${current.id}" /><td> 
    </tr> 
</c:forEach> 
+0

これが勝ちました彼の問題を解決しない –

+0

変数を変更しないでどちらか –

+0

彼の言葉によればあなたは正しいです、そして、質問のタイトルは明らかに間違っています –

1

HttpServletはトンを持っていますクライアントの要求処理するための重要な方法ヲ:今

1. doPost: in general handles requests coming from forms with HTTP POST method

2. doGet: handled requests coming from get method.

を、あなたのprocessRequest方法は、バインドされていないだけで、あなたのコードである(を上書き)を何かに変換します。

コードを複雑にしないように、上記の方法から簡単に呼び出すことができます。したがって、要求はその中で処理されます。

processRequestを使用してご依頼を処理するには、という2つの方法のいずれかから実際にとする必要があります。

ちょうどあなたのサーブレットにリクエストを取るしようとしているそれらのメソッドを追加し、関係なく、要求タイプが、彼らはあなたがあなたの内容を示していないprocessRequest

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException { 
    processRequest(request, response); 
} 

protected void doPost(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException { 
    processRequest(request, response); 
} 
0

を実行しますweb.xml。しかし、問題の説明から、コンテナが/listEmployees.jspのようなURLパターンにマップされているサーブレットを見つけることができないように思えます。いいえ、getEmployeesは、doGetまたはdoPostメソッドをオーバーライドしないため、呼び出されるサーブレットではありません。 processRequestという1つの方法があります。しかし、コンテナはその方法が何であるかを知らない。あなたのgetEmployeesサーブレットではdoPostまたはdoGetまたはserviceのいずれのメソッドもオーバーライドされません。 (web.xmlは表示されません)、コンテナはweb.xmlの設定のためにリクエストをJSPに送信しています。あなたの問題を解決するには、次のことを行う:正しい

  1. 設定をごweb.xmlgetEmployeesのサーブレットクラスとサーブレットへのURLパターン/listEmployees.jspをマッピングします。
  2. getEmployeesサーブレットでdoGetメソッドをオーバーライドし、processRequestメソッドを呼び出します。
関連する問題