Как вызвать класс сервлета из формы 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.
- Чтобы отправить данные формы сервлету, используйте атрибуты action и method тега form. Атрибут action представляет путь вашего сервлета, в то время как атрибут метода может быть GET или POST.
- Чтобы прочитать отправленные данные формы из сервлета, используйте:* 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".