Перенаправление запроса
Как только Вы получаете объект RequestDispatcher, Вы можете дать возможность ассоциированному с ним ресурсу отвечать на запрос клиента. Перенаправление очень полезно, например, когда сервлет производит запрос, и ответ носит общий характер, так что он может быть передан другому ресурсу. Сервлет может, например, заведовать информацией кредитных карт, когда пользователь размещает заказ, и потом отправлять запрос клиента к заказу, который возвращает страницу "Спасибо за заказ". В примере Duke's Bookstore, сервлет BookStoreServlet получает сессию пользователя, а потом request dispatcher возвращает стартовую страницу магазина Duke's Bookstore:
public class BookStoreServlet extends HttpServlet {
public void service (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ... // Получить или начать новую сессию пользователя
HttpSession session = request.getSession(); // Открыть пользователю стартовую страницу
dispatcher.forward(request, response);
... } }
Запомните, что метод forward должен быть использован тогда, когда необходимо отдать другому ресурсу возможность отвечать пользователю. Если Вы уже получили доступ к объектам ServletOutputStream или PrintWriter, Вы не можете использовать этот метод; он вызовет исключение IllegalStateException.
Если Вы уже начали отвечать пользователю, используя объекты PrintWriter или ServletOutputStream, Вам необходимо использовать метод .