Топ-100encodeURL и encodeRedirectURL в Java сервлетах - CodOrbits
LogoCodOrbits

Раздел: Servlets

Познакомьтесь с сервлетами Java: создание динамических веб-страниц и работа с HTTP-запросами и ответами.

Все разделы
Иконка Servlets

encodeURL и encodeRedirectURL в Java сервлетах

Last updated: 10 мая 2025 г.

Часто так бывает, что клиент отключил cookies в браузере, а id сессии храниться в cookies, а как-то поддерживать сессию надо.

Выход есть. Для этого нужно закодировать URL-адрес с добавлением идентификатора сессии и прикрепленный к адресу id будет тем же самым, как если бы он хранился в cookies, только здесь в ссылке. То есть теперь клиент будет отправлять JSESIONID не из Cookies, а в ссылке при обращении к серверу.

Для этого применяется метод encodeURL. Он перекодирует адрес добавляя в него JSESSIONID. Используется в ссылках в самом сервлете.

encodeRedirectURL делает то же самое, только применяется при перенаправлении.

Как пример использования encodeURL, создадим программу, в которой при каждом нажатии на ссылку в аттрибут сессии будет добавляться строка.

В программе ниже используем в ссылке в сервлете метод encodeURL.

Если бы в приведённой ниже программе не использовался encodeURL, то при нажатии на ссылку EncUrlServlet к адресу http://localhost:8080/helloservlet добавлялся бы EncUrlServlet, и происходил бы переход на http://localhost:8080/helloservlet/EncUrlServlet.

Благодаря encodeURL в этот адрес еще будет добавляться и JSESSIONID.

Вот так:

http://localhost:8080/helloservlet/EncUrlServlet;jsessionid=83A1405652DB65133B5EFE68FFBB30F5

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

1import java.util.*;
2import java.io.IOException;
3import java.io.PrintWriter;
4
5import javax.servlet.ServletException;
6import javax.servlet.http.HttpServlet;
7import javax.servlet.http.HttpServletRequest;
8import javax.servlet.http.HttpServletResponse;
9import javax.servlet.http.HttpSession;
10import javax.servlet.annotation.*;
11
12@WebServlet("/EncUrlServlet")
13public class MyServlet extends HttpServlet {
14    protected void doGet(HttpServletRequest request,
15                         HttpServletResponse response)
16        throws ServletException, IOException {
17        PrintWriter pw = response.getWriter();
18        HttpSession sess = request.getSession();
19        //Извлекаем аттрибут someattr из сессии.
20        //Далее будем добавлять к нему строку.
21        String someattr = (String) sess.getAttribute("someattr");
22        //По нажатию на ссылку обновляем аттрибут someattr.
23        //К старому содержимому аттрибута someattr будет
24        //добавляться _sessionIsWorking! что значит что сессия
25        //работает.
26        request.getSession().setAttribute("someattr",someattr+"_sessionIsWorking!");
27        //Используем в ссылке в сервлете метод encodeURL
28        //чтобы в адрес добавлялся JSESSIONID
29        pw.println("<body>someattr="+someattr
30                   +"<br><a href='"+response.encodeURL("EncUrlServlet")
31                   +"'>EncUrlServlet</a></body>");
32    }
33}

Проверка работы сервлета с encodeURL

Для начала отключим куки в браузере, так как нам нужно проверить будет ли работать сессия с отключенными куками. После этого куда-то отправляться или откуда-то приниматься кукам будет запрещено.

Скомпилируем файл сервлета и в адресной строке перейдем по адресу /EncUrlServlet.

Теперь нажмем на ссылку и посмотрим добавиться ли к адресу http://localhost:8080/helloservlet/EncUrlServlet хранящийся в куках JSESSIONID.

Видим, что в адрес добавился JSESSIONID.

Также видим, что к аттрибуту добавилась строка _sessionIsWorking!. Что значит, что сессия работает и в нее можно добавлять и извлекать из нее аттрибуты.

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

Если бы мы убрали метод encodeURL, то ничего бы не происходило, так как сервер не смог бы получить JSESSIONID клиента.

Для примера также можем еще понажимать на ссылку и в адресе всё еще будет добавлен JSESSIONID, а к строке продолжит добавляться строка _sessionIsWorking!. То есть сессия всё еще работает.


Следующие уроки

Синхронизация в Java сервлете

12
мин.

Similar Articles Icon
Divider

Что такое Filter в Java сервлетах

14
мин.

Similar Articles Icon
Divider

Слушатели (Listeners) в Java сервлетах

15
мин.

Similar Articles Icon