Работа с HTTP-запросами в Java-cервлетах: GET и POST

Для начала рассмотрим GET-запрос.

GET-запросы позволяют клиенту передавать параметры через адресную строку браузера. Эти параметры затем можно легко извлечь из объекта HttpServletRequest в сервлете.

Представьте, что клиент вводит в адресной строке следующее:

localhost:8080\helloservlet\getpostservlet\?param1=Hello&param2=World

Здесь param1 имеет значение “Hello”, а param2“World”.

С помощью различных методов эти параметры можно перехватывать, например, с помощью метода getParameter получим значения параметров и запишем в строки.    

Пример программы:

import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.annotation.*; @WebServlet(“/getpostservlet”) public class MyServlet extends HttpServlet{ protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //С помощью различных методов эти параметры //можно перехватывать например с помощью //метода getParameter получим значения //параметров и запишем в строки. String par1 = req.getParameter(“param1”); String par2 = req.getParameter(“param2”); PrintWriter pw = resp.getWriter(); //На странице клиента выведутся //значения параметров. pw.println(par1); pw.println(par2); //Также есть другие методы для удобства работы //с параметрами например getParameterValues, //getParameterNames …. //Также мы можем получить некоторую информацию //о запросе клиента с помощью методов ниже. //например полный URL. pw.println(req.getRequestURL()); //или получим IP хоста pw.println(req.getRemoteHost()); } }

Скомпилируем файл и в адресной строке передадим параметры сервлету по адресу /getpostservlet. Он должен отправить их обратно клиенту в браузер.

Как видим, сервлет успешно вернул клиенту параметры. Также сервлет отправил клиенту адрес и ip хоста, как видим.


Get запрос с помощью формы

Пусть сервлет отправляет форму с двумя полями и кнопкой отправки пользователю в браузер.

Если он в нее что-то введет то данные отправятся в наш сервлет по методу GET (в форме ниже можно увидеть method=’get’).

И таким образом когда пользователь введет данные в форму и нажмет кнопку для отправки данных формы, то в адресной строке появиться идентичная строка той, что была в предыдущем примере когда мы вводили параметры в ссылку вручную, только значения параметров в адресной строке будут взяты из текстовых полей формы:

localhost:8080\helloservlet\getpostservlet\?param1=(то, что ввел в текстовое поле пользователь)&param2=(то, что ввел в текстовое поле пользователь)  

Пример программы:

import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.annotation.*; @WebServlet(“/getpostservlet”) public class MyServlet extends HttpServlet{ protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String par1 = req.getParameter(“param1”); String par2 = req.getParameter(“param2”); PrintWriter pw = resp.getWriter(); //Отправляем клиенту, который обращается //к этому сервлету форму чтобы он мог ввести //туда параметры в адресной строке. pw.println(“” + “” + “” + “
” + “” + “” + “” + “
” + “” + ““); //Отправим присланные параметры обратно клиенту pw.println(par1); pw.println(par2); } }

Скомпилируем файл сервлета, перейдем по адресу /getpostservlet. Как видим, сервлет отправил клиенту форму и он теперь может вводить в поля параметры param1 и param2.

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

Как видим, в адресной строке URL идентичен тому, что мы вводили руками в предидущем примере, только здесь мы использовали форму для отправки параметров.

Также видим Hello World. То есть сервлет вернул клиенту параметры, которые клиент отправил в сервлет через форму.


Post запрос с помощью формы

Но часто на безопасно передавать параметры методом get, так как, как мы видели, они выводятся в адресной строке.

Чтобы они не выводились в адресной строке следует передавать параметры из формы методом POST.

Пример программы:

import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.annotation.*; @WebServlet(“/getpostservlet”) public class MyServlet extends HttpServlet { // Когда пользователь обращается к сервлету по адресу // http://localhost:8080/helloservlet/getpostservlet // он совершает GET-запрос. Поэтому отправлять форму // клиенту будем в doGet. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { PrintWriter pw = resp.getWriter(); // Отправляем клиенту, который обращается // к этому сервлету, форму, чтобы он мог ввести // нужные параметры в адресной строке. // Но в этот раз эта форма отправляет POST-запрос. pw.println(“” + “” + “” + “
” + “” + “” + “” + “
” + “” + ““); } // А форма, как можно увидеть выше, отправляет POST-запрос, // поэтому принимать параметры и отправлять их обратно // клиенту будем в doPost. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String par1 = req.getParameter(“param1”); String par2 = req.getParameter(“param2”); PrintWriter pw = resp.getWriter(); // На странице клиента выведутся значения // параметров, при этом у клиента в адресной // строке ничего не будет. pw.println(par1); pw.println(par2); } }

Скомпилируем файл сервлета, перейдем по адресу /getpostservlet. Как видим, сервлет отправил клиенту форму и он теперь может вводить в поля параметры param1 и param2.

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

Видим, что сервлет вернул клиенту параметры, которые он отправлял в сервлет.

Также видим самое главное, что параметров в адресной строке нет, они скрыты благодаря методу Post.

Redirect, forward, include в сервлетах

Изучите методы redirect, forward и include в Java-сервлетах. Узнайте, как sendRedirect() перенаправляет клиента, а forward() и include() работают на сервере. Примеры кода и различия.

Time to read: 20

Работа с Cookies в Java

Cookies в Java: как сервер хранит данные в браузере клиента. Пример создания, отправки и чтения куков. Авторизация без повторного ввода логина и пароля. Методы getCookies, setPath.

Time to read: 14

Работа с сессиями (Session) в Java

Session в Java: как использовать сессии для хранения данных клиента. Пример работы с HttpSession, атрибутами и их применением в корзине интернет-магазина. Уникальный SESSIONID для каждого пользователя.

Time to read: 14