Вопрос:
Я пытаюсь выполнить пример входа в систему с помощью сервлетов, используя RequestDispatcher, но получая этот статус HTTP 404 -, у меня есть жестко закодированная ошибка пароля в самом коде, но несколько раз HTTP-статус 500 – Ошибка создания класса сервлета Login web.xml
<web-app> <servlet> <servlet-name>Login</servlet-name> <servlet-class>Login</servlet-class> </servlet> <servlet> <servlet-name>WelcomeServlet</servlet-name> <servlet-class>WelcomeServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Login</servlet-name> <url-pattern>/Login</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>WelcomeServlet</servlet-name> <url-pattern>/WelcomeServlet</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list> </web-app>
index.html
<!DOCTYPE html> <html> <head> <meta charset=»ISO-8859-1″> <title>Insert title here</title> </head> <body> <form action=»servlet1″ method=»post»> Name:<input type=»text» name=»userName»/><br/> Password:<input type=»password» name=»userPass»/><br/> <input type=»submit» value=»login»/> </form> </body> </html>
Login.java
package com.emma.saurabh; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.*; import javax.servlet.http.*; public class Login extends HttpServlet { /** * */ private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType(«text/html»); PrintWriter out = response.getWriter(); String p=request.getParameter(«userPass»); if(p.equals(«saurabh»)){ RequestDispatcher rd=request.getRequestDispatcher(«servlet2»); rd.forward(request, response); } else{ out.print(«Sorry username or password error!»); RequestDispatcher rd=request.getRequestDispatcher(«/index.html»); rd.include(request, response); } } } **WelcomeServlet.java** package com.emma.saurabh; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class WelcomeServlet extends HttpServlet { /** * */ private static final long serialVersionUID = 1L; public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType(«text/html»); PrintWriter out = response.getWriter(); String n=request.getParameter(«userName»); out.print(«Welcome «+n); } } Лучший ответ:
Действие формы должно указывать на сервлет, которому вы хотите отправить форму. Я думаю, вы хотите отправить его в действие Login, поэтому форма будет выглядеть следующим образом.
<form action=»Login» method=»post»> Name:<input type=»text» name=»userName»/><br/> Password:<input type=»password» name=»userPass»/><br/> <input type=»submit» value=»login»/> </form>
редактировать
Добавление того, что предлагала птица @fly.
<servlet> <servlet-name>Login</servlet-name> <servlet-class>com.emma.saurabh.Login</servlet-class> </servlet> <servlet> <servlet-name>WelcomeServlet</servlet-name> <servlet-class>com.emma.saurabh.WelcomeServlet</servlet-class> </servlet>
doPost вместо doGet в ваш сервлет
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{….}
Вы также можете изменить method=»post» на method=»get» в форме. Я предлагаю вам сделать doPost потому что изменение метода покажет параметры в URL.
Ответ №1
Ваш код написан методом doGet, тогда как данные передаются через POSt. Вы должны написать в методе doPost. Это приведет к удалению ошибки HTTP 405