2017-02-21 49 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> 

Я пытаюсь получить индексную страницу, чтобы направить в сервлет GetEmployees, который затем предполагается направить список сотрудников в JSP и отображать список сотрудников. Я не уверен, почему сервлет не пересылает jsp. Любая помощь приветствуется. Использование сервера Glassfish.

+2

Вы можете отделить код от кодовых блоков, каждый из которых принадлежит к имени файла? – niceman

+0

и удалите «netbeans» из заголовка. Как я не вижу IDE, относящуюся к вопросу здесь (что, на мой взгляд, имеет отношение к серверу приложений, например GlassFish) – niceman

+0

Что на самом деле происходит? –

ответ

0

processRequest не отвечает на любые запросы, сам он просто поддерживает метод, то он будет выполнен по требованию, если и только если она была вызвана из doGet или doPost, которые на самом деле отвечая на запросы, если вы хотите, чтобы оба метода выполнения тот же самый код, просто позвонить, что processRequest от doPost и doGet, более 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

. Это выиграло 't решить свою проблему –

+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 для обработки вашего запроса, вы должны на самом деле назвать его одним из этих двух методов.

Просто добавьте в 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.Но из описания проблемы кажется, что ваш контейнер не может найти сервлет, который сопоставляется с шаблоном url, например /listEmployees.jsp. Нет, getEmployees - это не сервлет, который будет вызываться, потому что он не отменяет метод doGet или doPost. У вас есть один метод под названием processRequest. Но контейнер не знает, что это за метод. Он знает только doPost или doGet или метод service, ни один из которых не переопределяется вашим серфингом getEmployees. Похоже, что (не видя своего web.xml), контейнер просто отправляет запрос в JSP из-за настроек в вашем web.xml. Выполните следующие действия, чтобы исправить вашу проблему:

  1. исправьте настройки в вашем web.xml, чтобы отобразить шаблон URL-адрес /listEmployees.jsp в сервлет с сервлет класса getEmployees.
  2. Переопределить метод doGet в вашем сервом getEmployees и вызвать метод processRequest.