簡體   English   中英

為什么我在此代碼中的任何地方都沒有使用此URL不支持的錯誤HTTP GET方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM