为啥此 URL 不支持 HTTP 方法 POST [重复]
Posted
技术标签:
【中文标题】为啥此 URL 不支持 HTTP 方法 POST [重复]【英文标题】:why HTTP method POST is not supported by this URL [duplicate]为什么此 URL 不支持 HTTP 方法 POST [重复] 【发布时间】:2017-01-11 23:30:05 【问题描述】:我正在学习 Java EE 和 Maven,我正在尝试一个简单的 dopost。但我得到了(此 URL 不支持 HTTP 方法 POST)可能是什么问题 登录.jsp
<form action="/login" method="post" >
<div class="login-container less">
<div class="well-login">
<div class="control-group">
<div class="controls">
<div>
<input type="text" placeholder="Username or Email" class="login-input user-name">
</div>
</div>
</div>
<div class="control-group">
<div class="controls">
<div>
<input type="password" placeholder="Password" class="login-input user-pass">
</div>
</div>
</div>
<div class="clearfix">
<button class="btn btn-inverse login-btn" type="submit" value="submit">Login</button>
</div>
<div class="remember-me">
<input class="rem_me" type="checkbox" value=""> Remeber Me
</div>
</div>
</div>
</form>
登录小服务程序
package webapp;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(urlPatterns = "/login")
public class LoginServlet extends HttpServlet
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
request.getRequestDispatcher("/WEB-INF/views/login.jsp").forward(request, response);
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
super.doPost(request, response);
response.getWriter().println("success");
看不到错误来自哪里?从我这边看,一切都很好 求救
【问题讨论】:
【参考方案1】:删除这一行:
super.doPost(request, response);
HttpServlet
基类中的 doPost
方法被实现为无条件返回 HTTP 错误(HTTP 1.1 为 405,HTTP 1.0 为 400)。 doGet
、doPut
和 doDelete
都以相同的方式实现。
如果您希望您的 servlet 支持 POST 请求,请覆盖 doPost
但不要调用超类方法。
【讨论】:
你能解释一下关于覆盖 super.doPost(request, response); 的更多信息吗?抛出 Http 错误 405? @B'bekShakya:我不完全理解你的问题。如果问题是“为什么超类方法会抛出 HTTP 错误 405”,那么答案是因为它的实现者选择这样做。参见 Tomcat 的 HttpServlet 实现here。据我所知,HttpServlet javadoc 并没有说明基类方法应该做什么。 谢谢您,先生,我想了解一下底层的基类方法。就像你说的那样,文件并没有真正提供给我。【参考方案2】:当您的页面在web-inf
文件夹内时,需要保护不受Http访问的资源放在WEB-INF下,并在查看(jsp/html/.doc/.txt/xml)
时附加过滤器以防止直接访问。
所以在 doGet() 中使用getServletContext()
request.getServletContext().getRequestDispatcher("/WEB-INF/views/login.jsp").forward(request, response);
由于您不会使用doPost()
方法导航任何其他页面,因此请使用include()
方法
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
response.getWriter().println("<h1>success</h1> ");
request.getServletContext().getRequestDispatcher("/WEB-INF/views/login.jsp").include(request, response);
删除您在 dopost() 中覆盖 super.doPost(request, response);
以及 <form action="login" method="post" >
从登录中删除“/”
【讨论】:
以上是关于为啥此 URL 不支持 HTTP 方法 POST [重复]的主要内容,如果未能解决你的问题,请参考以下文章
部署到 jboss EAP 7.1 时,此 URL 不支持 HTTP Post 方法
此 URL Java servlet 不支持 HTTP 方法 POST
当 doPost 被覆盖时,此 URL 不支持 HTTP 方法 POST
HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET [重复]