2017-02-21 36 views
0

这里是我的代码:为什么我的servlet不能转发到我的.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> 

我试图让索引页转发给装getEmployees的servlet,然后应该转发员工到JSP的列表,并显示员工列表。我不确定为什么servlet没有转发到jsp。任何帮助将非常感激。使用Glassfish服务器。

+2

你可以把代码分成代码块,每个代码块都有它所属的文件名吗? – niceman

+0

并从标题中删除“netbeans”因为我没有在这里看到与这个问题相关的IDE(我认为与应用服务器相关的是GlassFish) – niceman

+0

究竟发生了什么? –

回答

0

processRequest不回答任何请求自己,它只是支持的方法,将根据要求执行,当且仅当它是从doGetdoPost,这实际上是响应请求,如果你想这两种方法执行所谓的相同的代码,只需调用processRequestdoPostdoGet,更here

1

您必须更改您在foreach打印变量:

<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

This won 't解决他的问题 –

+0

不改变变量 –

+0

根据他的话说你是对的,那么问题标题显然是错误的 –

1

HttpServlet中具有T WO处理客户端的请求重要的方法:

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

2. doGet: handled requests coming from get method.

现在,您processRequest方法,只是你的代码没有被绑定(覆盖)任何东西。

你可以很容易地从上面的方法调用它,以便不会使其中的代码复杂化,从而处理请求中的请求。

因此,要使用processRequest来处理您的请求,您必须从实际上称之为这两种方法之一。

只需添加到您的Servlet那些将要采取的请求的方法和不管请求类型,他们将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模式的任何servlet。不,getEmployees不是将被调用的servlet,因为它不覆盖doGetdoPost方法。你有一种叫做processRequest的方法。但容器不知道这个方法是什么。它只知道doPostdoGetservice方法,其中任何一个都不会被您的getEmployees servlet覆盖。它看起来像(没有看到你的web.xml),容器只是简单地将请求发送到JSP,因为你的web.xml中的设置。做下列事情解决您的问题:

  1. 正确设置你的web.xml的URL模式/listEmployees.jsp到一个servlet有servlet类的getEmployees映射。
  2. 在您的getEmployees servlet中重写doGet方法并从中调用processRequest方法。
相关问题