【问题标题】:Java servlets :HTTP method POST is not supported by this URL while accessing JSP pagesJava servlet:访问 JSP 页面时,此 URL 不支持 HTTP 方法 POST
【发布时间】:2016-11-23 16:39:42
【问题描述】:

我有一个 login.html 、 LoginServlet 和 home.jsp。但是在重定向到 home.jsp 时,我得到这个 URL 不支持 HTTP 方法 POST 。当我尝试定向到 html 页面时,它工作正常。问题只是在引导jsp页面。请指教。

登录.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>

【问题讨论】:

  • 你在哪里映射了 URL? web.xml 或 @Webservlet ?你能添加它的代码吗?
  • @javaguy 我已经添加了 web.xml 文件。
  • 我试过你的核心代码。有用。这是重新发布、同步、部署的所有内容吗?你确定你转发到正确的文件吗?您可以尝试更改 login.html 以使用 get?那么前锋工作了吗?在 if(status) 块之前是否有任何其他重定向(在未显示的代码中)?只尝试 doPost 中的行:request.getRequestDispatcher("home.jsp").forward(request, response);
  • @code_angel 我试过了,但它不起作用。如果我尝试创建其他 testapp 并遇到相同的问题。

标签: jsp servlets


【解决方案1】:

代替

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

你可以使用

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

在您的 LoginServlet if(status) 块中。

编辑:

RequestDispatcher.forwards 仅是请求和响应对象。
会话和上下文可独立访问。

在 Servlet 中设置了会话属性“名称”,因此它在任何其他后续请求中都可用。在会话到期之前,会话 cookie 被删除或属性被移除。

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

HttpSession 由 servlet 容器管理。
如果 Session 出现问题,可以检查:

  • 如果设置了会话cookie JSESSIONID,
  • 如果以下请求中的 JSESSIONID 相同。

【讨论】:

  • sendRedirect 不会保留会话属性。
猜你喜欢
  • 2020-09-17
  • 2014-01-16
  • 1970-01-01
  • 2011-05-16
  • 1970-01-01
  • 2020-08-31
  • 2016-07-02
  • 2014-08-05
  • 1970-01-01
相关资源
最近更新 更多