如何从HTML表单调用servlet类

我创build了一个Web应用程序项目。 它包含一个servlet类和一个HTML表单。 我如何从HTML表单调用servlet类?

只需创build一个扩展HttpServlet的类,并使用@WebServlet对特定的URL模式进行注释。

 @WebServlet("/login") public class LoginServlet extends HttpServlet {} 

或者当您仍然使用Servlet 2.5或更早的版本时(注释从Servlet 3.0开始是新的),然后在web.xml中将servlet注册为<servlet> ,并通过<servlet-mapping>到特定的URL模式。

 <servlet> <servlet-name>login</servlet-name> <servlet-class>com.example.LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>login</servlet-name> <url-pattern>/login</url-pattern> </servlet-mapping> 

然后,让HTML链接或表单操作指向一个与servlet的url-pattern匹配的url-pattern

 <a href="${pageContext.request.contextPath}/login">Login</a> 
 <form action="${pageContext.request.contextPath}/login" method="post"> <input type="text" name="username"> <input type="password" name="password"> <input type="submit"> </form> 

使用提交button时,请确保使用type="submit"而不是type="button" 。 有关${pageContext.request.contextPath}部分的解释可以在这个相关的问题和答案中find: 如何在HTML表单操作中使用servlet URL模式而不会发生HTTP 404错误 。

链接和forms与method="get"将调用servlet的doGet()方法。 您通常使用此方法在“页面加载”时预处理请求。

 @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // ... } 

使用method="post"表单将调用servlet的doPost()方法。 您通常使用此方法使用用户提交的表单数据(收集请求参数,转换和validation它们,更新模型,调用业务操作并最终呈现响应)后处理请求。

 @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // ... } 

要了解有关servlet的更多信息并查找更多具体示例,请前往我们的Servlets wiki页面 。 值得注意的是,您也可以使用JSP文件而不是纯HTML文件。 JSP允许您在生成HTML输出的同时通过ELexpression式与后端进行交互,并使用像JSTL这样的taglib来控制stream。 另请参阅我们的JSP wiki页面 。

比如我创build一个login.html

 <div class="container"> <form method = "post" class="form-signin" role="form" action="LoginServlet"> <h2 class="form-signin-heading">Please sign in</h2> <input type="text" class="form-control" name = "username" placeholder="User Name" required autofocus> <input type="password" class="form-control" name = "password" placeholder="Password" required> <div class="checkbox"> <label> <input type="checkbox" value="remember-me"> Remember me </label> </div> <input type="submit" class="btn btn-lg btn-primary btn-block" value="Sign in"> </form> </div> 

在标签之间,我通过将方法定义为“post”来调用LoginServlet。