Java 为什么这个URL不支持HTTP GET方法,而我没有在代码中的任何地方使用它

Java 为什么这个URL不支持HTTP GET方法,而我没有在代码中的任何地方使用它,java,servlets,Java,Servlets,我正在开发登录servlet应用程序我的代码如下: public class LoginCheck extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); S

我正在开发登录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")){
            response.sendRedirect("Welcome");
        }else{
            response.sendRedirect("Error");
        }
    }
}
登录页面用于显示两个文本框和一个登录按钮。其中用户输入用户名和密码并提交数据

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>");
    }
}
如果用户名和密码正确,欢迎使用

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>");
    }
}
公共类欢迎扩展HttpServlet{
受保护的void doPost(HttpServletRequest请求、HttpServletResponse响应)引发ServletException、IOException{
PrintWriter out=response.getWriter();
out.println(“欢迎用户”);
}
}
错误如果用户名或密码不正确

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>");
    }
}
public类ErrorPage扩展了HttpServlet{
受保护的void doPost(HttpServletRequest请求、HttpServletResponse响应)引发ServletException、IOException{
PrintWriter out=response.getWriter();
out.println(“错误!!!”;
println(“您输入的用户名或密码错误。”);
}
}
好的!!!但在登录页面输入用户名和密码后,它会进入checklogin,当它进入欢迎页面或错误页面时,它会给出错误

HTTP状态405-此URL不支持HTTP方法GET

正如您所看到的,我没有在上述代码中的任何地方使用
GET
方法,但为什么我会出现这种类型的错误??

更改

protected void doPost(HttpServletRequest request, HttpServletResponse response)

在你欢迎和错误的方法。 感谢您在评论中指出这一点


参考-

获取HTTP 405的原因如下:

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);            
        }
    }
}
使用指定的 重定向位置URL

因此,如果您执行
response.sendRedirect(“欢迎”),您“告诉”客户端浏览器转到相对URL“欢迎”。这碰巧映射到了您的
欢迎
-servlet(我猜)。HTTP只支持GET重定向,因此GET请求由客户端浏览器发出,但您的
欢迎
-servlet只支持POST

如果您像这样更改您的
欢迎
-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>");
    }
}

你的意思不是相反吗?@AbhijitKumbhar请看我的评论。当然,您确实使用了
GET
。但是如果我想使用
post
sendRedirect方法是URL重定向,这意味着URL上的GET方法。为什么要使用
post
?如果未将任何数据发布到servlet,则不应使用
POST
。您发送重定向-这会指示浏览器页面已移动(HTTP 302)。然后,浏览器使用
GET
获取新页面。但是您的
错误
欢迎
页面都支持
获取
。那么我现在可以做些什么来解决这个问题呢?支持获取您的servlet。或者。那么他们有没有选择重定向?在打扰他们之前,请先阅读他们给你的链接。在使用`RequestDispatcher rd=request.getRequestDispatcher(“欢迎”);转发(请求、响应);`那就行了。:)但是你能解释一下为什么会发生这种情况吗?@AbhijitKumbhar你读过我给你的链接了吗,还是你仍然无视它?请不要再要求别人用勺子舀东西了,读点书吧。如果你不能阅读简单的文档,你将永远无法成为一名熟练的程序员。抱歉@BoristheSpider我没有认出你的链接,但现在我读了,我明白了,谢谢你。
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);            
        }
    }
}