Redirect, forward, include в сервлетах
Last updated: 9 мая 2025 г.Рассмотрим переход на другую страницу с помощью sendRedirect()
sendRedirect() – перенаправляет на любой указанный аргументом адрес.
Адрес в адресной строке браузера клиента меняется на тот, что указан аргументом у метода, так как сервер указывает клиенту, что нужно перейти по этому адресу и браузер переходит по нему.
Пример программы:
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("/redirservlet")
11public class MyServlet extends HttpServlet{
12 protected void doGet(HttpServletRequest req,
13 HttpServletResponse resp)
14 throws ServletException, IOException{
15 //сервер указывает браузеру клиента перейти по ссылке
16 resp.sendRedirect("https://google.com");
17 }
18}
Скомпилируем файл и в адресной строке перейдем по адрусу /redirservlet
.

Как видим сервлет сказал браузеру клиента перейти по ссылке https://google.com и он перешел.
Переход на другую страницу с помощью forward()
forward()
– вызывает любой другой ресурс (другой сервлет, jsp) на этом же сервере.
Адресная строка браузера клиента при таком переходе не меняется. У клиента может поменяться страница, но клиент понятия не имеет куда его перенаправило в плане адреса, так как перенаправление произошло на сервере.
Также этот метод полезен тем, что аргументами ему передаются req
и resp
ресурса, из которого происходит перенаправление forward(req, resp)
.
То есть между сервлетами сервера можно передавать одни и те же req
и resp
.
Также forward
понятное дело быстрее чем sendRedirect
, так как он не передает никаких адресов клиенту чтобы он по ним переходил.
Все переходы происходят на сервере.
Давайте создадим еще один простенький сервлет MyServlet1.java, к которому будет происходить переход.
Этот сервлет выглядит так:
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.RequestDispatcher;
9import javax.servlet.annotation.*;
10
11@WebServlet("/forwardservlet")
12public class MyServlet extends HttpServlet{
13 protected void doGet(HttpServletRequest req,
14 HttpServletResponse resp)
15 throws ServletException, IOException{
16 //В getRequestDispatcher передаем адрес сервлета
17 //на этом сервере куда будет происходить переход
18 //из текущего сервлета.
19 RequestDispatcher rd = req.getRequestDispatcher("/myservlet");
20 //передаем в сервлет myservlet req и resp
21 //текущего сервлета и вызываем его.
22 rd.forward(req, resp);
23 }
24}
Сервлет же, из которого будет совершаться переход, выглядит так:
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("/myservlet")
11public class MyServlet1 extends HttpServlet{
12 protected void doGet(HttpServletRequest req,
13 HttpServletResponse resp)
14 throws ServletException, IOException{
15 PrintWriter pw = resp.getWriter();
16 pw.write("Hello World!!!");
17 }
18}
Скомпилируем файлы сервлетов и в адресной строке перейдем по адрусу /forwardservlet
.

Как видим, клиенту был отправлен текст Hello World!!!. И передал его клиенту очевидно сервлет MyServlet1.
Браузер клиента при этом не знает, что его куда-то перенаправили и даже адресная строка, как уже было сказано, не меняется (forwardservlet не измениться на myservlet).
Включение другой страницы в текущую с помощью include()
include
– буквально просто включение кода другого сервлета на сервере в текущий сервлет с передачей req
и resp
текущего сервлета во включаемый сервлет.
Код сервлета MyServlet, в который будет включаться MyServlet1:
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.RequestDispatcher;
9import javax.servlet.annotation.*;
10
11@WebServlet("/includeservlet")
12public class MyServlet extends HttpServlet {
13 protected void doGet(HttpServletRequest req,
14 HttpServletResponse resp)
15 throws ServletException, IOException {
16 PrintWriter pw = resp.getWriter();
17 pw.println("<html>" +
18 "<head></head>" +
19 "<body>" +
20 "<h1>Hello world form includeservlet</h1>" +
21 "</body>" +
22 "</html>");
23 RequestDispatcher rd = req.getRequestDispatcher("/myservlet");
24 //передаем в сервлет myservlet req и resp
25 //текущего сервлета и вставляем его в текущий сервлет
26 rd.include(req, resp);
27 }
28}
Скомпилируем файлы сервлетов и в адресной строке перейдем по адресу /includeservlet
.

На странице можно увидеть и “Hello world form includeservlet” из текущего сервлета и “Hello World!!!” из MyServlet1.
Следующие уроки
Работа с Cookies в Java
14
мин.
Работа с сессиями (Session) в Java
14
мин.
Интерфейс ServletContext
15
мин.