此 URL Java servlet 不支持 HTTP 方法 POST
Posted
技术标签:
【中文标题】此 URL Java servlet 不支持 HTTP 方法 POST【英文标题】:HTTP method POST is not supported by this URL Java servlet 【发布时间】:2020-09-17 22:13:28 【问题描述】:谁能告诉我为什么我收到错误:HTTP 状态 405 – 方法不允许? 我正在尝试在方法 doPost() 之后完成该操作,用户将被重定向到“/logout”控制器,其中会话无效。 这很有趣,因为方法被调用,做所有应该做的事情(更新数据库中的用户),但是在发送给用户错误 405 之后。我使用 doPost() 的另一个地方(例如:LoginController)运行良好,但是当我尝试主持人并找到错误,我没有看到任何:
<div class="container">
<div class="col-md-8 col-md-offset-2">
<form method="post" action="account">
<div class="form-group">
<label for="email">Email address</label>
<input name="email" type="email" class="form-control" id="email"
value="$sessionScope.loggedUser.email" required aria-describedby="emailHelp"
placeholder="Enter email">
</div>
<div class="form-group">
<label for="password">Password</label>
<input name="password" type="password" minlength="5" maxlength="40" required class="form-control"
id="password" placeholder="Password">
</div>
<div class="form-group">
<label for="repeatPassword">Repeat Password</label>
<input name="repeatPassword" type="password" minlength="5" maxlength="40" required class="form-control"
id="repeatPassword" placeholder="Password">
</div>
<input class="btn btn-lg btn-primary btn-block" type="submit" value="Save changes"/>
</form>
</div>
</div>
@WebServlet("/account")
public class AccountController extends HttpServlet
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
String email = req.getParameter("email");
String password = req.getParameter("password");
String repeatPassword = req.getParameter("repeatPassword");
if (email == null || password == null || repeatPassword == null)
doGet(req, resp);
return;
if (password.equals(repeatPassword))
HttpSession session = req.getSession();
User user = (User) session.getAttribute("loggedUser");
user.setEmail(email);
String sha1hexPassword = DigestUtils.sha1Hex(password);
user.setPassword(sha1hexPassword);
UserService service = new UserService();
try
service.update(user);
catch (UpdateObjectException e)
e.printStackTrace();
req.getRequestDispatcher("/logout").forward(req, resp);
else
req.setAttribute("errorMessage", "Passwords not the same");
req.setAttribute("fragment", "account");
req.getRequestDispatcher("WEB-INF/index.jsp").forward(req, resp);
感谢任何提示。
【问题讨论】:
【参考方案1】:问题解决了。这里:
req.getRequestDispatcher("/logout").forward(req, resp);
我应该这样做
resp.sendRedirect(req.getContextPath()+"/logout");
因为在“/logout”中我只有 doGet() 方法,如果我使用“getRequestDispatcher()”,它会尝试查找 doPost() 方法。
【讨论】:
【参考方案2】:您的 doGet() 方法调用位于服务器 doPost() 代码中。您应该重定向响应,doGet 用于接收 GET 请求和任何查询字符串。
【讨论】:
我在这个 servlet 中有方法 doGet()。它只重定向到页面 *.jsp,我有这个 html 代码供客户端更新用户。我无法重定向,因为当我这样做时,请求将发送 do 目的地并希望进入 doPost() 方法。但是,如果我的 doGet() 方法很好地将我发送到这一页,如果任何参数为空,为什么我应该这样做。总而言之,即使我的代码块 (if(....)doGet()) 没有t 执行,或者我只是对此发表评论,服务器仍然发送 cient 405 错误,因为“protocol.endsWith("1.1")”。我不明白为什么。以上是关于此 URL Java servlet 不支持 HTTP 方法 POST的主要内容,如果未能解决你的问题,请参考以下文章
此 URL 不支持带有简单 servlet 的 HTTP 方法 GET
简单 Servlet HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET [重复]
Servlet 错误:HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET [重复]
是啥导致我的 servlet 在运行时出现“此驱动程序不支持 Java 运行时环境 (JRE) 1.7 版...”? [复制]