Java 为什么这个URL不支持HTTP GET方法,而我没有在代码中的任何地方使用它
我正在开发登录servlet应用程序我的代码如下: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
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);
}
}
}