[英]HTTP Status 405 - HTTP method POST is not supported by this URL java servlet
[英]HTTP method POST is not supported by this URL Java servlet
有人可以告訴我為什么我收到錯誤:HTTP 狀態 405 – 方法不允許? 我正在嘗試實現在方法 doPost() 之后,用戶將被重定向到“/logout”controller,其中 session 無效。 這很有趣,因為調用了方法,做所有應該做的事情(更新數據庫中的用戶),但是在發送給用戶錯誤 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 請求和任何查詢字符串。
問題解決了。 這里:
req.getRequestDispatcher("/logout").forward(req, resp);
我應該做
resp.sendRedirect(req.getContextPath()+"/logout");
因為在“/logout”中我只有doGet()方法,如果我使用“getRequestDispatcher()”,它會嘗試找到doPost()方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.