我创建了一个Web应用程序项目。它包含一个servlet类和一个HTML表单。如何从HTML表单中调用servlet类?
答案 0 :(得分:25)
只需创建一个扩展HttpServlet
的类,并使用@WebServlet
对某个网址模式进行注释。
@WebServlet("/login")
public class LoginServlet extends HttpServlet {}
或者当你仍然使用Servlet 2.5或更早版本时(注释是自Servlet 3.0以来的新版本),然后在<servlet>
中将servlet注册为web.xml
并通过{将其映射到某个URL模式{1}}。
<servlet-mapping>
然后,只需让HTML链接或表单操作指向与servlet的<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>
匹配的URL。
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>
而非type="submit"
。有关type="button"
部分的说明,请参阅此相关问题和答案:How to use servlet URL pattern in HTML form action without getting HTTP 404 error。
与${pageContext.request.contextPath}
的链接和表单将调用servlet的method="get"
方法。您通常使用此方法预处理“在页面加载时”的请求。
doGet()
带@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// ...
}
的表单将调用servlet的method="post"
方法。您通常使用此方法对用户提交的表单数据进行后处理(收集请求参数,转换并验证它们,更新模型,调用业务操作并最终呈现响应)。
doPost()
要了解有关servlet的更多信息并找到更具体的示例,请前往our Servlets wiki page。值得注意的是,您也可以使用JSP文件而不是纯HTML文件。 JSP允许您在生成HTML输出时通过EL表达式与后端进行交互,并使用JSTL等标记库来控制流。另请参阅our JSP wiki page。
答案 1 :(得分:0)
例如,我创建了一个类似
的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。