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

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

2 ответа

Просто создайте расширение класса HttpServlet и аннотировать его @WebServlet на определенный шаблон URL.

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

Или, если вы все еще используете Servlet 2.5 или старше (аннотация была новой после Servlet 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-ссылке или действию формы указать 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 и использовать теги вроде JSTL для управления потоком. Смотрите также нашу вики-страницу JSP.

  1. Чтобы отправить данные формы сервлету, используйте атрибуты action и method тега form. Атрибут action представляет путь вашего сервлета, в то время как атрибут метода может быть GET или POST.
  2. Чтобы прочитать отправленные данные формы из сервлета, используйте:* getParameter (), getParameterValues ​​() или getParamterNames() * методы HttpServletRequest.

Проверьте это: передайте данные из html в сервлет для подробного объяснения с примерами.

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

Другие вопросы по тегам