我正在开发登录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
方法,你可以看到,但为什么我会收到这种类型的错误???
答案 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