这是我的代码:
的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服务器。
答案 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
本身没有回复任何请求,它只是支持方法,当且仅当它是从doGet
或doPost
调用时才会根据请求执行响应请求,如果您希望两个方法执行相同的代码,只需从processRequest
和doPost
调用doGet
,更多here
答案 3 :(得分:0)
您尚未显示web.xml的内容。但是从问题的描述来看,听起来你的容器无法找到任何映射到像/listEmployees.jsp
这样的url模式的servlet。不,getEmployees
不是将被调用的servlet,因为它不会覆盖doGet
或doPost
方法。您有一个名为processRequest
的方法。但容器不知道该方法是什么。它只知道doPost
或doGet
或service
方法,这些方法都不会被您的getEmployees
servlet覆盖。看起来(没有看到你的web.xml
),容器只是因为web.xml中的设置而将请求分派给JSP。做以下事情来解决您的问题:
web.xml
中的设置,将网址格式/listEmployees.jsp
映射到servlet类为getEmployees
的servlet。doGet
servlet中的getEmployees
方法,并从中调用processRequest
方法。