为什么我的servlet转发到我的.jsp?

时间:2017-02-21 14:46:55

标签: java jsp servlets

这是我的代码:

的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,然后该servlet将员工列表转发给JSP并显示员工列表。我不确定为什么servlet没有转发到jsp。任何帮助将非常感激。使用Glassfish服务器。

4 个答案:

答案 0 :(得分: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>

答案 1 :(得分: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来处理您的请求,您必须从这两种方法之一实际上将其称为

只需向您的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);
}

答案 2 :(得分:0)

processRequest本身没有回复任何请求,它只是支持方法,当且仅当它是从doGetdoPost调用时才会根据请求执行响应请求,如果您希望两个方法执行相同的代码,只需从processRequestdoPost调用doGet,更多here

答案 3 :(得分:0)

您尚未显示web.xml的内容。但是从问题的描述来看,听起来你的容器无法找到任何映射到像/listEmployees.jsp这样的url模式的servlet。不,getEmployees不是将被调用的servlet,因为它不会覆盖doGetdoPost方法。您有一个名为processRequest的方法。但容器不知道该方法是什么。它只知道doPostdoGetservice方法,这些方法都不会被您的getEmployees servlet覆盖。看起来(没有看到你的web.xml),容器只是因为web.xml中的设置而将请求分派给JSP。做以下事情来解决您的问题:

  1. 更正web.xml中的设置,将网址格式/listEmployees.jsp映射到servlet类为getEmployees的servlet。
  2. 覆盖doGet servlet中的getEmployees方法,并从中调用processRequest方法。