Включение ответа
Метод include интерфейса RequestDispatcher позволяет вызываемому сервлету отвечать клиенту, но использовать в качестве части ответа ресурс, ассоциированный с объектом RequestDispatcher.
Поскольку сервер вызывает метод RequestDispatcher.include подразумевается также, что он отвечет клиенту, сервлет будет использовать объекты PrintWriter и ServletOutputStream до или после вызова метода include. Вы должны запомнить, однако, что вызываемый ресурс не может устанавливать заголовки в ответе клиенту. Если ресурс попытается установить заголовки, нет гарантии, что они будут установлены.
Следующий пример показывает, как бы выглядел сервлет ReceiptServlet, если бы, вместо простого благодарственного ответа пользователю за оставленный заказ, он также включал его список. Например, благодарит за заказ и включает список заказанного, который Вы должны полагать является псевдокодом:
public class ReceiptServlet extends HttpServlet {
public void doPut(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { // Выполняем заказ клиента
... // Благодарим за заказ
res.setContentType("text/html"); PrintWriter toClient = res.getWriter(); ... toClient.println("Thank you for your order!");
// Получаем request-dispatcher, чтобы послать список заказанного клиентом
RequestDispatcher summary = getServletContext().getRequestDispatcher("/OrderSummary");
// Опускаем список заказанного в случае ошибки
if (summary != null) try { summary.include(req, res);
} catch (IOException e) {} catch (ServletException e) {}
toClient.println("Come back soon!"); toClient.println("</html>"); toClient.close(); }