Как вызвать класс сервлета из HTML-формы

Я создал один проект веб-приложения. Он содержит класс сервлета и HTML-форму. Как вызвать класс сервлета из формы HTML?

Ответ 1

Просто создайте класс, расширяющий HttpServlet и аннотируйте его @WebServlet по определенному шаблону URL.

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

Или когда вы все еще на Servlet 2.5 или старше (аннотация была новой с сервлета 3.0), затем зарегистрируйте сервлет как <servlet> в web.xml и сопоставьте его по определенному шаблону URL через <servlet-mapping>.

<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 или форму action на 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". Объяснение в части ${pageContext.request.contextPath} можно найти в этом смежном вопросе и ответе: Как использовать шаблон URL сервлета в действии HTML-формы без получения HTTP-ошибки 404.

Связи и формы с помощью method="get" вызывают метод doGet() сервлета. Обычно этот метод используется для предварительной обработки запроса "на загрузке страницы".

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

Формы с method="post" будут вызывать метод doPost() сервлета. Обычно вы используете этот метод для постпроцесса запроса с данными, представленными пользователем (собирать параметры запроса, конвертировать и проверять их, обновлять модель, вызывать бизнес-действие и, наконец, отображать ответ).

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

Чтобы узнать больше о сервлетах и ​​найти более конкретные примеры, перейдите в нашу страницу виджета Servlets. Следует отметить, что вы также можете использовать JSP файл вместо обычного HTML файла. JSP позволяет вам взаимодействовать с бэкэнд посредством EL-выражений при выводе HTML-вывода и использовать taglib, такие как JSTL, для управления потоком. См. Также нашу страницу вики JSP.

Ответ 2

Например, я создаю 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> 

Между тегами я вызываю LoginServlet, определяя метод как "post".