2013-03-20 159 views
0

我正尝试使用.jsp和servlet创建简单的登录页面。点击LogIn.jsp表单中的按钮后,我似乎无法触发doPost方法。我的代码如下所示:单击提交后无法访问doPost

的login.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%> 

<html> 
    <head><title>LogIn JSP Page</title></head> 
    <body bgcolor="white"> 
     <h1>LogIn JSP Page</h1> 
     <form action="CheckLogIn" method="POST"> 
      <table> 
       <tr> 
        <td align="right">Member ID:</td> 
        <td align="left"><input type="text" name="memId" length="30"/> 
        </td> 
       </tr> 
       <tr> 
        <td align="right">Password:</td> 
        <td align="left"><input type="text" name="pw" length="30"/> 
        </td> 
       </tr> 
      </table> 
      <p><input type="submit" value="Log In"/></p> 
     </form> 
    </body> 
</html> 

CheckLogIn.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%> 

<html> 
    <head> 
     <title>CheckLogIn JSP Page</title> 
    </head> 
    <body> 
     <h1>Check LogIn</h1> 
     <% 
      String data=(String)request.getAttribute("data"); 
     %> 
     <table> 
      <tr> 
       <td align="left"><%=(String)data%></td> 
      </tr> 
     </table> 
    </body> 
</html> 

LibrarySystemServlet.java

public class LibrarySystemServlet extends HttpServlet { 
    @EJB 
    private MemberManagerRemote mm; 

    private String success=null; 

    public void init(){ 
     System.out.println("LibrarySystemServlet: init()"); 
    } 

    protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException { 
     System.out.println("LibrarySystemServlet: processRequest()"); 
     try { 
      RequestDispatcher dispatcher; 
      ServletContext servletContext=getServletContext(); 

      String page=request.getPathInfo(); 
      page=page.substring(1); 

      if("CheckLogIn".equals(page)){ 
       success=logIn(request); 
       request.setAttribute("data", success); 
      } 
      else{ 
       page="Error"; 
      } 
      dispatcher=servletContext.getNamedDispatcher(page); 
      if(dispatcher==null){ 
       dispatcher=servletContext.getNamedDispatcher("Error"); 
      } 
      dispatcher.forward(request, response); 
     } catch(Exception ex) { 
      log("Exception in LibraySystemServlet.processRequest()"); 
     } 
    } 

    private String logIn(HttpServletRequest request){ 
     String s; 
     String memberId=request.getParameter("memId"); 
     String pw=request.getParameter("pw"); 
     if(pw.equals(mm.getMemberPw(memberId))){ 
      s="Success"; 
     } 
     else{ 
      s="Failed"; 
     } 
     return s; 
    } 

    @Override 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException { 
     System.out.println("LibrarySystemServlet: doGet()"); 
     processRequest(request, response); 
    } 

    @Override 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException { 
     System.out.print("LibrarySystemServlet: doPost()"); 
     processRequest(request, response); 
    } 

    public void destroy(){ 
     System.out.println("LibrarySystemServlet: destroy()"); 
    } 
} 

的web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.5" 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_2_5.xsd"> 
    <servlet> 
     <servlet-name>LibrarySystemServlet</servlet-name> 
     <servlet-class>servlets.LibrarySystemServlet</servlet-class> 
    </servlet> 
    <servlet> 
     <servlet-name>CheckLogIn</servlet-name> 
     <jsp-file>/CheckLogIn.jsp</jsp-file> 
    </servlet> 
    <servlet> 
     <servlet-name>Error</servlet-name> 
     <jsp-file>/Error.jsp</jsp-file> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>CheckLogIn</servlet-name> 
     <url-pattern>/CheckLogIn</url-pattern> 
    </servlet-mapping> 
    <servlet-mapping> 
     <servlet-name>Error</servlet-name> 
     <url-pattern>/Error</url-pattern> 
    </servlet-mapping> 
    <servlet-mapping> 
     <servlet-name>LibrarySystemServlet</servlet-name> 
     <url-pattern>/librarySystemServlet/*</url-pattern> 
    </servlet-mapping> 
    <session-config> 
     <session-timeout> 
      30 
     </session-timeout> 
    </session-config> 
    <welcome-file-list> 
     <welcome-file>LogIn.jsp</welcome-file> 
     </welcome-file-list> 
    </web-app> 

任何帮助将不胜感激!

+0

请求往哪里去 – PSR 2013-03-20 14:31:17

+0

请出示您的网络的servlet的配置。 XML。您是否将URL映射到servlet? – jalynn2 2013-03-20 14:34:22

+0

嗨,已经reedited qn来显示web.xml。是。 – user1097856 2013-03-20 14:37:38

回答

0

在web.xml文件中,你需要映射CheckLogIn到servlets.LibrarySystemServlet类而不是CheckLogIn.jsp

<servlet> 
     <servlet-name>CheckLogIn</servlet-name> 
     <servlet-class>servlets.LibrarySystemServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
     <servlet-name>CheckLogIn</servlet-name> 
     <url-pattern>/CheckLogIn</url-pattern> 
</servlet-mapping> 
+0

嗨,非常感谢。 doPost方法现在被触发。但是,CheckLogIn页面是空白的。我的日志文件显示抛出异常。你知道为什么吗? – user1097856 2013-03-20 15:01:08

+0

因为调度程序找不到成功/失败消息转发请求的路径。就像错误被映射到/Error.jsp成功/失败也应该映射到CheckLogIn.jsp在你的情况。 – Mohsin 2013-03-20 15:14:57

+0

我看到...但我的Success/Failed是一个字符串,那么我如何将它映射到CheckLogIn.jsp? – user1097856 2013-03-20 16:04:54