为什么我收到此URL不支持HTTP GET方法的错误,而我在代码中的任何地方都没有使用它

时间:2015-09-02 14:09:46

标签: java servlets

我正在开发登录servlet app我的代码如下:

登录页面,用于显示两个文本框和一个登录按钮。用户输入用户名和密码并提交数据。

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页面此页面用于检查用户的用户名和密码。检查用户名和密码是否正确后,将其重定向到欢迎页面,如果是不正确然后重定向到错误页面每个页面的代码如下:

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方法,你可以看到,但为什么我会收到这种类型的错误???

2 个答案:

答案 0 :(得分:3)

您获得HTTP 405的原因是HttpServletResponse.sendRedirect的指定如下:

  

使用指定的方法向客户端发送临时重定向响应   重定向位置网址。

所以,如果你做response.sendRedirect("Welcome");,你就会告诉&#34;客户端浏览器转到相关URL&#34;欢迎&#34;代替。这巧合映射到你的Welcome - servlet(我推测)。 HTTP仅支持GET重定向,因此客户端浏览器发出GET请求,但您的Welcome - servlet仅支持POST。

如果你改变你的Welcome - servlert,它应该可以工作:

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);            
        }
    }
}

答案 1 :(得分:0)

更改

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