Почему API сервлета создает исключение IllegalStateException при пересылке запроса после записи в ответ? - PullRequest
1 голос
/ 03 января 2011

Каково обоснование для этого исключения при пересылке запроса. Причина исключения в response.redirect заключается в том, что 30-кратный заголовок ответа на перенаправление не может быть выдан после того, как часть тела ответа была сброшена в выходной поток. Но я не вижу причины сделать это на внутреннем форварде.

Вариант использования, который я имею в виду, заключается в раннем удалении html-контента из фильтров, чтобы браузер мог получить преимущество (каламбур) на верхнем CSS и JavaScript, пока сервлет выполняет свою серверную работу перед передачей на презентацию JSP. Получив первый байт раньше, я надеюсь увидеть улучшение производительности на стороне клиента.

Struts и другие структуры зависят от отправки вперед. Именно из-за этих переадресаций мы не можем сбрасывать содержимое ответа раньше, в соответствии с API.

http://download.oracle.com/javaee/6/api/javax/servlet/RequestDispatcher.html#forward(javax.servlet.ServletRequest, javax.servlet.ServletResponse)

1 Ответ

1 голос
/ 03 января 2011

Потому что, представьте себе случай, когда вы отправляете некоторые определения <head> в браузер, а затем перенаправляете на страницу, которая совершенно другая.Результатом будет какая-то испорченная страница.С (возможно) двумя <head> разделами, один из которых не имеет значения.

Вы можете использовать requestDispatcher.include(..) для включения результата другой страницы, а не пересылки на нее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...