如何从HTML表单调用servlet类

时间:2010-03-07 05:06:00

标签: html forms servlets

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

2 个答案:

答案 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。