Почему это только печатать «Вы увидите цель?»? - PullRequest
0 голосов
/ 13 июня 2019

Сервлет вызывающего абонента:

public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
    res.setContentType("text/html");
    PrintWriter out = res.getWriter();
    out.println("<HTML>");
    out.println("<BODY>Will you see the source?");
    out.println("</BODY></HTML>");
    RequestDispatcher disp=req.getRequestDispatcher("/Test");
    disp.forward(req, res);
    out.close();
}

("/Test"):
protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    out.println("<HTML><TITLE>The Test</TITLE>");
    out.println("<BODY>Will you see the target?");
    out.println("</BODY></HTML>");
    out.close();
}

Почему это выдает только «Вы увидите цель?»?Разве это не должно печатать "Вы увидите источник?"тоже, так как PrintWriter находится перед форвардом?

Ответы [ 2 ]

1 голос
/ 13 июня 2019

Прочитайте документацию , то есть Javadoc forward:

forward следует вызывать до того, как ответ будет передан клиенту (до того, как вывод тела ответа будет сброшен). Если ответ уже был зафиксирован, этот метод выдает IllegalStateException. Неподтвержденный вывод в буфере ответа автоматически очищается перед пересылкой .

0 голосов
/ 13 июня 2019

Это на самом деле печатает "Вы увидите источник?" text.But после печати RequestDispatcher инициализируется и вызывается forward () для «/ Test». При этом запрос перенаправляется на URL «/ Test», таким образом загружая новую страницу.

...