Урок 38: Работа с формами и параметрами
Работа с формами и параметрами является важной частью разработки веб-приложений. Формы позволяют пользователям вводить данные, которые затем отправляются на сервер для обработки. В этом уроке мы рассмотрим, как создавать HTML-формы, обрабатывать параметры, отправленные с форм, и как использовать сервлеты и JSP для работы с этими данными.
Создание HTML-формы
HTML-форма используется для ввода данных пользователем. Пример простой формы:
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Input Form</title>
</head>
<body>
<h1>Input Form</h1>
<form action="submitForm" method="post">
<label for="name">Name:</label>
<input type="text" id="name" name="name"><br><br>
<label for="email">Email:</label>
<input type="email" id="email" name="email"><br><br>
<input type="submit" value="Submit">
</form>
</body>
</html>
Обработка параметров формы
Для обработки параметров формы в Java используется сервлет. Пример сервлета:
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/submitForm")
public class FormServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = request.getParameter("name");
String email = request.getParameter("email");
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<h1>Form Data</h1>");
out.println("<p>Name: " + name + "</p>");
out.println("<p>Email: " + email + "</p>");
}
}
Результат выполнения
Сервлет обрабатывает POST-запрос, извлекает параметры name
и email
, а затем отображает их на веб-странице.
Передача данных между сервлетами и JSP
Для передачи данных между сервлетами и JSP можно использовать атрибуты запроса. Пример сервлета, передающего данные на JSP-страницу:
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/submitForm")
public class FormServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = request.getParameter("name");
String email = request.getParameter("email");
request.setAttribute("name", name);
request.setAttribute("email", email);
request.getRequestDispatcher("/displayForm.jsp").forward(request, response);
}
}
Создание JSP-страницы для отображения данных формы
Пример JSP-страницы, отображающей данные формы:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Display Form</title>
</head>
<body>
<h1>Form Data</h1>
<p>Name: ${name}</p>
<p>Email: ${email}</p>
</body>
</html>
Результат выполнения
JSP-страница отображает данные, переданные сервлетом, используя JSP Expression Language (EL).
Упражнения
Упражнение 1: Создание формы для ввода данных пользователя
Создайте HTML-форму, которая позволяет пользователю ввести свое имя и возраст. Форма должна отправлять данные на сервлет методом POST.
Решение:
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>User Input Form</title>
</head>
<body>
<h1>User Input Form</h1>
<form action="submitUser" method="post">
<label for="name">Name:</label>
<input type="text" id="name" name="name"><br><br>
<label for="age">Age:</label>
<input type="number" id="age" name="age"><br><br>
<input type="submit" value="Submit">
</form>
</body>
</html>
Объяснение: HTML-форма отправляет данные на сервлет SubmitUserServlet
методом POST. Параметры формы включают имя и возраст пользователя.
Упражнение 2: Обработка данных формы и отображение результата
Используйте предыдущий пример формы и сервлета. Модифицируйте сервлет и создайте JSP-страницу для отображения имени пользователя и возраста.
Решение:
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/submitUser")
public class SubmitUserServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = request.getParameter("name");
int age = Integer.parseInt(request.getParameter("age"));
request.setAttribute("name", name);
request.setAttribute("age", age);
request.getRequestDispatcher("/displayUser.jsp").forward(request, response);
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Display User</title>
</head>
<body>
<h1>User Data</h1>
<p>Name: ${name}</p>
<p>Age: ${age}</p>
</body>
</html>
Объяснение: Сервлет обрабатывает POST-запрос, извлекает параметры name
и age
, а затем перенаправляет их на JSP-страницу displayUser.jsp
, которая отображает данные.