💬 Спросят с вероятностью 6%
RequestDispatcher — это интерфейс, который используется для перенаправления запросов внутри веб-приложения. Он позволяет одному сервлету или JSP странице передавать управление другому ресурсу, такому как другой сервлет, JSP страница или статический файл (например, HTML или изображение).Основные задачи:
1️⃣ Перенаправление запросов (forward): Позволяет передать управление обработкой запроса другому ресурсу без возвращения управления обратно.
2️⃣ Включение содержания (include): Позволяет включить содержимое другого ресурса в ответ на текущий запрос.
Основные методы:
➕
void forward(ServletRequest request, ServletResponse response): Перенаправляет запрос от одного сервлета или JSP страницы к другому ресурсу на сервере. После вызова этого метода исходный сервлет или JSP страница не продолжают выполнение.➕
void include(ServletRequest request, ServletResponse response): Включает содержимое другого ресурса в ответ. В этом случае исходный сервлет или JSP страница продолжают выполнение после вызова метода.Получение RequestDispatcher
Для получения объекта
RequestDispatcher используются методы getRequestDispatcher и getNamedDispatcher интерфейса ServletRequest или ServletContext.➕
ServletRequest.getRequestDispatcher(String path): Возвращает RequestDispatcher для указанного пути. Путь может быть абсолютным (от корня контекста) или относительным (от текущего запроса).➕
ServletContext.getRequestDispatcher(String path): Возвращает RequestDispatcher для указанного абсолютного пути.➕
ServletContext.getNamedDispatcher(String name): Возвращает RequestDispatcher для сервлета, зарегистрированного под указанным именем.Примеры:
Перенаправление запроса (forward)
@WebServlet("/forwardExample")
public class ForwardExampleServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
RequestDispatcher dispatcher = request.getRequestDispatcher("/targetServlet");
dispatcher.forward(request, response);
}
}
@WebServlet("/targetServlet")
public class TargetServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().println("This is the target servlet.");
}
}Включение содержания (include)
@WebServlet("/includeExample")
public class IncludeExampleServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("<h2>Main Content</h2>");
RequestDispatcher dispatcher = request.getRequestDispatcher("/includedContent");
dispatcher.include(request, response);
out.println("<h2>End of Main Content</h2>");
out.println("</body></html>");
}
}
@WebServlet("/includedContent")
public class IncludedContentServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().println("<p>This content is included from another servlet.</p>");
}
}Важные моменты
➕ Перенаправление (forward): URL в адресной строке браузера не изменяется. Управление полностью передается новому ресурсу, и исходный ресурс не продолжает выполнение.
➕ Включение (include): URL в адресной строке браузера не изменяется. Исходный ресурс продолжает выполнение после включения содержимого.
RequestDispatcher позволяет сервлетам и JSP страницам передавать управление другому ресурсу или включать его содержимое в текущий ответ. Это полезно для организации обработки запросов и создания динамических веб-страниц, обеспечивая гибкость и повторное использование кода.🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых