Работа с HTTP-запросами: GET и POST
Last updated: 9 мая 2025 г.Для начала рассмотрим GET-запрос.
GET
-запросы позволяют клиенту передавать параметры через адресную строку браузера. Эти параметры затем можно легко извлечь из объекта HttpServletRequest
в сервлете.
Представьте, что клиент вводит в адресной строке следующее:
localhost:8080\helloservlet\getpostservlet\?param1=Hello¶m2=World
Здесь param1
имеет значение “Hello”, а param2
— “World”.
С помощью различных методов эти параметры можно перехватывать, например, с помощью метода getParameter
получим значения параметров и запишем в строки.
Пример программы:
1import java.io.IOException;
2import java.io.PrintWriter;
3
4import javax.servlet.ServletException;
5import javax.servlet.http.HttpServlet;
6import javax.servlet.http.HttpServletRequest;
7import javax.servlet.http.HttpServletResponse;
8import javax.servlet.annotation.*;
9
10@WebServlet("/getpostservlet")
11public class MyServlet extends HttpServlet{
12 protected void doGet(HttpServletRequest req,
13 HttpServletResponse resp)
14 throws ServletException, IOException {
15 //С помощью различных методов эти параметры
16 //можно перехватывать например с помощью
17 //метода getParameter получим значения
18 //параметров и запишем в строки.
19 String par1 = req.getParameter("param1");
20 String par2 = req.getParameter("param2");
21 PrintWriter pw = resp.getWriter();
22 //На странице клиента выведутся
23 //значения параметров.
24 pw.println(par1);
25 pw.println(par2);
26 //Также есть другие методы для удобства работы
27 //с параметрами например getParameterValues,
28 //getParameterNames ….
29 //Также мы можем получить некоторую информацию
30 //о запросе клиента с помощью методов ниже.
31 //например полный URL.
32 pw.println(req.getRequestURL());
33 //или получим IP хоста
34 pw.println(req.getRemoteHost());
35 }
36}
Скомпилируем файл и в адресной строке передадим параметры сервлету по адресу /getpostservlet
. Он должен отправить их обратно клиенту в браузер.

Как видим, сервлет успешно вернул клиенту параметры. Также сервлет отправил клиенту адрес и ip хоста, как видим.
Get запрос с помощью формы
Пусть сервлет отправляет форму с двумя полями и кнопкой отправки пользователю в браузер.
Если он в нее что-то введет то данные отправятся в наш сервлет по методу GET
(в форме ниже можно увидеть method=’get’).
И таким образом когда пользователь введет данные в форму и нажмет кнопку для отправки данных формы, то в адресной строке появиться идентичная строка той, что была в предыдущем примере когда мы вводили параметры в ссылку вручную, только значения параметров в адресной строке будут взяты из текстовых полей формы:
localhost:8080\helloservlet\getpostservlet\?param1=(то, что ввел в текстовое поле пользователь)¶m2=(то, что ввел в текстовое поле пользователь)
Пример программы:
1import java.io.IOException;
2import java.io.PrintWriter;
3
4import javax.servlet.ServletException;
5import javax.servlet.http.HttpServlet;
6import javax.servlet.http.HttpServletRequest;
7import javax.servlet.http.HttpServletResponse;
8import javax.servlet.annotation.*;
9
10@WebServlet("/getpostservlet")
11public class MyServlet extends HttpServlet{
12 protected void doGet(HttpServletRequest req,
13 HttpServletResponse resp)
14 throws ServletException, IOException {
15 String par1 = req.getParameter("param1");
16 String par2 = req.getParameter("param2");
17 PrintWriter pw = resp.getWriter();
18 //Отправляем клиенту, который обращается
19 //к этому сервлету форму чтобы он мог ввести
20 //туда параметры в адресной строке.
21 pw.println("<html>" +
22 "<head></head>" +
23 "<body>" +
24 "<form action='getpostservlet' method='get'>" +
25 "<input type='text' name='param1'/>" +
26 "<input type='text' name='param2'/>" +
27 "<input type='submit' name='submit'/>" +
28 "</form>" +
29 "</body>" +
30 "</html>");
31 //Отправим присланные параметры обратно клиенту
32 pw.println(par1);
33 pw.println(par2);
34 }
35}
Скомпилируем файл сервлета, перейдем по адресу /getpostservlet
. Как видим, сервлет отправил клиенту форму и он теперь может вводить в поля параметры param1
и param2
.

Когда пользователь нажимает кнопку, введенные им значения параметров param1
и param2
отправляются в сервлет.

Как видим, в адресной строке URL идентичен тому, что мы вводили руками в предидущем примере, только здесь мы использовали форму для отправки параметров.
Также видим Hello World. То есть сервлет вернул клиенту параметры, которые клиент отправил в сервлет через форму.
Post запрос с помощью формы
Но часто на безопасно передавать параметры методом get
, так как, как мы видели, они выводятся в адресной строке.
Чтобы они не выводились в адресной строке следует передавать параметры из формы методом POST.
Пример программы:
1import java.io.IOException;
2import java.io.PrintWriter;
3
4import javax.servlet.ServletException;
5import javax.servlet.http.HttpServlet;
6import javax.servlet.http.HttpServletRequest;
7import javax.servlet.http.HttpServletResponse;
8import javax.servlet.annotation.*;
9
10@WebServlet("/getpostservlet")
11public class MyServlet extends HttpServlet {
12 // Когда пользователь обращается к сервлету по адресу
13 // http://localhost:8080/helloservlet/getpostservlet
14 // он совершает GET-запрос. Поэтому отправлять форму
15 // клиенту будем в doGet.
16
17 protected void doGet(HttpServletRequest req,
18 HttpServletResponse resp)
19 throws ServletException, IOException {
20 PrintWriter pw = resp.getWriter();
21 // Отправляем клиенту, который обращается
22 // к этому сервлету, форму, чтобы он мог ввести
23 // нужные параметры в адресной строке.
24 // Но в этот раз эта форма отправляет POST-запрос.
25
26 pw.println("<html>" +
27 "<head></head>" +
28 "<body>" +
29 "<form action='getpostservlet' method='post'>" +
30 "<input type='text' name='param1'/>" +
31 "<input type='text' name='param2'/>" +
32 "<input type='submit' name='submit'/>" +
33 "</form>" +
34 "</body>" +
35 "</html>");
36 }
37
38 // А форма, как можно увидеть выше, отправляет POST-запрос,
39 // поэтому принимать параметры и отправлять их обратно
40 // клиенту будем в doPost.
41
42 protected void doPost(HttpServletRequest req,
43 HttpServletResponse resp)
44 throws ServletException, IOException {
45 String par1 = req.getParameter("param1");
46 String par2 = req.getParameter("param2");
47 PrintWriter pw = resp.getWriter();
48 // На странице клиента выведутся значения
49 // параметров, при этом у клиента в адресной
50 // строке ничего не будет.
51
52 pw.println(par1);
53 pw.println(par2);
54 }
55}
Скомпилируем файл сервлета, перейдем по адресу /getpostservlet
. Как видим, сервлет отправил клиенту форму и он теперь может вводить в поля параметры param1
и param2
.

Когда пользователь нажимает кнопку, введенные им значения параметров param1
и param2
отправляются в сервлет.

Видим, что сервлет вернул клиенту параметры, которые он отправлял в сервлет.
Также видим самое главное, что параметров в адресной строке нет, они скрыты благодаря методу Post
.
Дополнительные материалы
Следующие уроки
Redirect, forward, include в сервлетах
20
мин.
Работа с Cookies в Java
14
мин.
Работа с сессиями (Session) в Java
14
мин.