![](/img/trans.png)
[英]Why I am getting 'HTTP method GET is not supported by this URL' error?
[英]Why I am getting error HTTP GET method not supported by this URL, while I am not using it anywhere in my code
我正在開發登錄servlet應用程序,我的代碼如下:
登錄頁面,用於顯示兩個文本框和一個登錄按鈕。 用戶在其中輸入用戶名和密碼並提交數據。
public class LoginPage extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String contextPath = request.getContextPath();
out.println("<form method='post' action='LoginCheck'>");
out.println("Username: <input type='text' name='username'>");
out.println("<br>");
out.println("Password: <input type='password' name='password'>");
out.println("<br>");
out.println("<input type='submit' value='login'>");
out.println("<br>");
out.println("</form>");
}
}
LoginCheck頁面此頁面用於檢查用戶名和密碼。檢查用戶名和密碼是否正確后,將重定向到歡迎頁面,或者如果不正確,則將重定向到Error頁面,每個頁面的代碼如下:
public class LoginCheck extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
String username = request.getParameter("username");
String password = request.getParameter("password");
if(username.equals("abs") && password.equals("abs")){
response.sendRedirect("Welcome");
}else{
response.sendRedirect("Error");
}
}
}
歡迎如果用戶名和密碼正確。
public class Welcome extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println("<h3>Welcome user</h3>");
}
}
錯誤如果用戶名或密碼不正確。
public class ErrorPage extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println("<h3>ERROR !!!</h3>");
out.println("<h3>Username or Password you entered is wrong.</h3>");
}
}
好 !!! 但是在輸入用戶名和密碼進入登錄頁面后,它將進入checklogin,並且當進入歡迎頁面或錯誤頁面時,它將給出錯誤!
HTTP狀態405-此URL不支持HTTP方法GET
如您所見,我在上面的代碼中的任何地方都沒有使用GET
方法,但是為什么會出現這種錯誤?
之所以收到HTTP 405,是因為HttpServletResponse.sendRedirect是這樣指定的:
使用指定的重定向位置URL向客戶端發送臨時重定向響應。
因此,如果您執行response.sendRedirect("Welcome");
,您“告訴”客戶端瀏覽器轉到相對網址“ Welcome”。 巧合的是,這映射到了您的Welcome
-servlet(我想)。 HTTP僅支持GET重定向,因此客戶端瀏覽器會發出GET請求,但是Welcome
-servlet僅支持POST。
如果您以這種方式更改“ Welcome
對象”,那么它應該可以工作:
public class Welcome extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println("<h3>Welcome user</h3>");
}
}
記住也要更改ErrorPage
-servlet。
但是請注意以下內容!
您不應該這樣使用客戶端重定向,而應該使用服務器端轉發:
public class LoginCheck extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
String username = request.getParameter("username");
String password = request.getParameter("password");
if(username.equals("abs") && password.equals("abs")){
RequestDispatcher rd = request.getRequestDispatcher("Welcome");
rd.forward(request, response);
}else{
RequestDispatcher rd = request.getRequestDispatcher("Error");
rd.forward(request, response);
}
}
}
更改
protected void doPost(HttpServletRequest request, HttpServletResponse response)
至
protected void doGet(HttpServletRequest request, HttpServletResponse response)
在您的歡迎和錯誤方法。 感謝Andrew Mairose在評論中指出這一點。
參考-http: //www.wellho.net/resources/ex.php4?item= j601/ demolet.java
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.