2013-04-22 112 views
1

我不知道为什么会出现404,但我的其他servlet在同一个包中工作得很好。我必须在这里错过简单的东西。如果您发现任何问题,请告诉我。我正在通过Murach java servlets书,并开始出现这个问题,我不知道我做了什么错误404未找到加载映射到web.xml中的servlet

当我尝试通过映射/ AE访问AddEmailListServlet时,出现404错误。如果我尝试访问/ Emailsss那个servlet加载得很好。不知道为什么?

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 
<servlet> 
    <servlet-name>AddEmailListServlet</servlet-name> 
    <servlet-class>email.AddEmailListServlet</servlet-class> 
</servlet> 
<servlet> 
    <servlet-name>EmailServlet</servlet-name> 
    <servlet-class>email.EmailServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>AddEmailListServlet</servlet-name> 
    <url-pattern>/AE</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
    <servlet-name>EmailServlet</servlet-name> 
    <url-pattern>/Emailsss</url-pattern> 
</servlet-mapping> 
<session-config> 
    <session-timeout> 
     30 
    </session-timeout> 
</session-config> 
<error-page> 
    <error-code>404</error-code> 
    <location>/error_404.jsp</location> 
</error-page> 
<error-page> 
    <exception-type>java.lang.Throwable</exception-type> 
    <location>/error_java.jsp</location> 
</error-page> 
</web-app> 

而AE映射不想工作到AddEmailListServlet。以下是servlet代码:

package email; 

import business.User; 
import data.UserIO; 
import java.io.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 

import java.util.Date; 
import java.util.ArrayList; 
import java.util.HashMap; 

public class AddEmailListServlet extends HttpServlet { 

/** 
* Processes requests for both HTTP 
* <code>GET</code> and 
* <code>POST</code> methods. 
* 
* @param request servlet request 
* @param response servlet response 
* @throws ServletException if a servlet-specific error occurs 
* @throws IOException if an I/O error occurs 
*/ 
protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    response.setContentType("text/html;charset=UTF-8"); 
    PrintWriter out = response.getWriter(); 
    try { 
     /* TODO output your page here. You may use following sample code. */ 
     out.println("<!DOCTYPE html>"); 
     out.println("<html>"); 
     out.println("<head>"); 
     out.println("<title>Servlet AddToEmailListServlet</title>");    
     out.println("</head>"); 
     out.println("<body>"); 
     out.println("<h1>Servlet AddToEmailListServlet at " + request.getContextPath() + "</h1>"); 
     out.println("</body>"); 
     out.println("</html>"); 
    } finally {    
     out.close(); 
    } 
} 

// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code."> 
/** 
* Handles the HTTP 
* <code>GET</code> method. 
* 
* @param request servlet request 
* @param response servlet response 
* @throws ServletException if a servlet-specific error occurs 
* @throws IOException if an I/O error occurs 
*/ 
@Override 
protected void doGet(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    this.doPost(request, response); 
    PrintWriter out = response.getWriter(); 
    out.println("Hello from AddEmailListServlet.java"); 
} 

/** 
* Handles the HTTP 
* <code>POST</code> method. 
* 
* @param request servlet request 
* @param response servlet response 
* @throws ServletException if a servlet-specific error occurs 
* @throws IOException if an I/O error occurs 
*/ 
@Override 
protected void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 

    String firstName = request.getParameter("firstName"); 
    String lastName = request.getParameter("lastName"); 
    String emailAddress = request.getParameter("emailAddress"); 

    ServletContext sc = request.getServletContext(); 
    String path = sc.getRealPath("/WEB-INF/EmailList.txt"); 

    User user = new User(firstName, lastName, emailAddress); 
    UserIO.add(user, path); 

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

    String url = "/ch09/dispay_email_entry.jsp"; 
    RequestDispatcher dispatcher = 
      request.getServletContext().getRequestDispatcher(url); 
    dispatcher.forward(request, response); 

    //processRequest(request, response); 
} 

/** 
* Returns a short description of the servlet. 
* 
* @return a String containing servlet description 
*/ 
@Override 
public String getServletInfo() { 
    return "Short description"; 
}// </editor-fold> 
} 
+0

开始缩小范围,我的映射很好,类文件中有其他错误。将继续挖掘 – JKK 2013-04-22 22:39:38

+0

如下所述,简直是缺少:@WebServlet(name =“AES”,urlPatterns = {“/ AES”}) – JKK 2013-04-24 21:44:36

回答

1

您的servlet不是servlet。它不会扩展HttpServlet。我甚至感到惊讶,因为这个错误,webapp部署没有错误。检查日志。

当您的意图是重写超类或接口方法时,总是使用@Override注释您的方法。如果你这样做了,编译器会产生一个错误,并警告你该方法没有覆盖任何东西。

+0

哦,呃,嗯,我知道这将是一件简单的事情。谢谢! – JKK 2013-04-22 21:58:09

+0

如JB所述做出更改但仍然不行,导航到AE仍返回404,但转到其他servlet正好 – JKK 2013-04-22 22:02:57

+0

检查日志。使用调试器来查看您的servlet是否被调用。从doGet()中移除对doPost()的调用,以检查问题是否与转发到JSP不同。 – 2013-04-22 22:05:05