如何从HTML表单中调用Servlet类

13

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

2个回答

28

创建一个继承自HttpServlet的类,并在特定的URL模式上用@WebServlet进行注释。

@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即可。

<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"。关于${pageContext.request.contextPath}的解释可以在这个相关问题和答案中找到:如何在HTML表单操作中使用Servlet URL模式,而不会收到HTTP 404错误

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

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

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

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

如果想要了解更多关于Servlets的资料,并且想要查找更多实际例子,可以前往我们的 Servlets 维基页面 (点击此处)。还需要注意的是,您也可以使用 JSP 文件代替纯 HTML 文件。JSP 允许您通过 EL 表达式与后端进行交互并生成 HTML 输出,还可以使用标签库(如JSTL)来控制流程。同样请参阅我们的JSP维基页面 (点击此处)


抛出了一个异常。阅读堆栈跟踪/日志并相应地修复代码。 - BalusC

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> 

在 <form> 标签中,我通过将方法定义为“post”来调用 LoginServlet。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接