java - 此 URL Java servlet 不支持 HTTP 方法 POST
问题描述
有人可以告诉我为什么我收到错误:HTTP Status 405 – Method Not Allowed 吗?我正在尝试在方法 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);
}
}
}
感谢您的任何提示。
解决方案
您的 doGet() 方法调用位于服务器 doPost() 代码中。您应该重定向响应,doGet 用于接收 GET 请求和任何查询字符串。
推荐阅读
- c# - 用于在 Build Pipeline VSTS 中添加 timeoutinminutes 的 Yaml 脚本
- ruby-on-rails - Rails 渲染 HTML 也会在相同的操作中下载 CSV 文件
- html - 保存/恢复会影响 HTML5 画布中的 clip() 吗?
- rxjs - RxJS 在属性中的对象数组上不同
- python - 从(之一)多列的开始自动完成
- c# - xunit - 如何在单元测试中获取 HttpContext.User.Identity
- oracle-apex - 用于根据 oracle Apex 中的其他文本字段向文本字段添加日期的 JavaScript 代码
- reporting-services - 运行报表时尝试允许参数中的多个值全选时发生错误
- flask - jinja2 中的嵌套循环和来自 sqlalchemy 的烧瓶
- django - 如何使用 REST API Django(没有模型)将从 POST 方法保存的数据传递给 GET 方法?