2016-11-23 88 views
0

我有一个login.html,LoginServlet和home.jsp。但是,当重定向到home.jsp时,我得到HTTP方法POST不受此URL支持。当我尝试导向到html页面时,它工作正常。问题只在于指导jsp页面。请咨询。Java servlets:HTTP方法POST在访问JSP页面时不受此URL支持

的login.html

<form action="./LoginServlet" method="post"> 
<div class ="login"> 

    <label><b>User Name</b></label> 
    <input type="text"name="name"placeholder="UserName" onclick=""required><br/> 

    <label><b>Password</b></label> 
    <input type="password" placeholder="Enter Password" name="password" required> 

    <button type="submit">Login</button> 

    <input type="checkbox"checked="checked">Remember me 
</div> 
</form> 

下面是我的LoginServlet

public class LoginServlet extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    public LoginServlet() { 


    } 
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

    //Initial setting 

    response.setContentType("text/html"); 
    PrintWriter out = response.getWriter(); 

    //Gather data 
    String name= request.getParameter("name"); 
    String password = request.getParameter("password"); 

    try { 
     boolean status =LoginDao.validateUser(name, password); 
     if(status){ 


      HttpSession session = request.getSession(); 
      session.setAttribute("name", name); 
      //response.sendRedirect("home.jsp"); 
      RequestDispatcher rd=request.getRequestDispatcher("home.jsp"); 
      rd.forward(request,response); 
     } 
     else{ 
      out.println("<head>"); 
      out.println("<body>"); 
      out.println("<h1>Sorry username or password error</h1>"); 
      RequestDispatcher rd=request.getRequestDispatcher("login.html"); 
      rd.include(request,response); 
      out.println("</body>"); 
      out.println("</head>"); 
     } 
    } catch (ClassNotFoundException e) { 
     e.printStackTrace(); 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 

} 

} 

下面是针对home.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Welcome To UTS</title> 
</head> 
<body> 
<div class="header"> 
<header><b>Welcome to UTS</b></header> 
    <nav> 
    <ul> 
    <li><a href="home.jsp">Home</a></li> 
    <li><a href="linux.jsp">Linux</a></li> 
    <li><a href="risc.jsp">Risc</a> 
    </ul> 
</nav> 
</div> 

web.xml文件

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> 
<display-name>UTS</display-name> 
    <welcome-file-list> 
    <welcome-file>login.html</welcome-file> 
    <welcome-file>index.htm</welcome-file> 
    </welcome-file-list> 
    <servlet> 
    <description></description> 
    <display-name>LoginServlet</display-name> 
    <servlet-name>LoginServlet</servlet-name> 
    <servlet-class>com.fidelity.LoginServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>LoginServlet</servlet-name> 
    <url-pattern>/LoginServlet</url-pattern> 
    </servlet-mapping> 
    <servlet> 
    <description></description> 
    <display-name>SignupServlet</display-name> 
    <servlet-name>SignupServlet</servlet-name> 
    <servlet-class>com.fidelity.SignupServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>SignupServlet</servlet-name> 
    <url-pattern>/SignupServlet</url-pattern> 
    </servlet-mapping> 
</web-app> 
+0

你在哪里映射URL? web.xml或@Webservlet?你可以为它添加代码吗? – developer

+0

@javaguy我已经添加了web.xml文件。 – shankar

+0

我试过你的代码的核心。有用。这是一切重新发布,同步,部署?你确定你转发到正确的文件?您可以尝试更改login.html以使用get?那么这是前瞻性的工作吗? if(状态)块之前是否有其他重定向(未显示代码)?试试你的doPost中的行:request.getRequestDispatcher(“home.jsp”)。forward(request,response); –

回答

0

而不是

RequestDispatcher rd=request.getRequestDispatcher("home.jsp"); 
rd.forward(request, response); 

您可以在LoginServlet如果(状态)块使用

response.sendRedirect("home.jsp"); 
return; 

编辑:

RequestDispatcher.forward唯一的请求和响应对象。
会话和上下文是独立可访问的。

在Servlet中,会话属性“name”已被设置,所以它可用于任何其他请求。在会话过期之前,会话cookie被删除或者属性被删除。

在JSP中,您可以使用${sessionScope.name}来显示它。

HttpSession由servlet容器管理。
如果出现与会议的问题,您可以检查:

  • 如果会话cookie JSESSIONID设置,
  • 如果JSESSIONID是以下请求相同。
+0

sendRedirect不会保留seession属性。 – shankar