如何从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。