включить страницу JSP с ошибками перенаправления из сервлета - PullRequest
4 голосов
/ 07 января 2011

Я пытаюсь включить страницу jsp из сервлета:

  RequestDispatcher rd = ctx.getRequestDispatcher( jspPage );
  rd.include( req, wrapper );   

Но я получаю следующее исключение:

java.lang.IllegalStateException: Cannot forward after response has been committed

Проблема связана со страницей JSP, которая задает свою собственную страницу ошибок по умолчанию через тег ошибки JSP. Страница ошибок JSP также может выдать исключение, которое будет отображаться на странице ошибок уровня приложения, указанной в web.xml. Поэтому, когда страница jsp, которую я пытаюсь включить, выдает исключение, а страница ошибки также выдает исключение, происходит сбой включения.

Я должен уладить этот случай изящно, потому что я включаю написанные пользователем модули на странице, а ошибочный модуль должен отображать исключение для пользователя, а не бомбу с IllegalStateException. Есть идеи?

Ответы [ 2 ]

0 голосов
/ 07 января 2011

Как уже указывалось в комментарии в вашем предыдущем вопросе , просто слишком поздно , чтобы изменить ответ.После X байтов в ответе заголовки ответа будут переданы клиенту, и это точка возврата.Вам нужно переписать свой JSP.Они должны содержать только логику разметки и представления, а не какую-либо бизнес-логику, которая может генерировать исключения.

Если вы действительно не можете преобразовать ошибочный бизнес-код в вашем JSP в полноценные сервлетные / бизнес-классы там, где они принадлежат,тогда лучше всего увеличить размер буфера ответов HTTP в конфигурации сервера и молиться, чтобы нигде не вызывалось flush() до , исключение возникает в JSP, и вы не получаете OutOfMemoryError сбоевкогда он загружается в вашем веб-приложении.

Вопросы, связанные с данной:

0 голосов
/ 07 января 2011

Вы можете попробовать перенаправить браузер пользователя на страницу с ошибкой?Вам может потребоваться сохранить любую информацию об ошибке, которую вы хотите отобразить, пользователю в сеансе, чтобы страница ошибки могла отобразить ее.

Единственная проблема заключается в том, что запись сообщения о перенаправлении может быть неудачной, поскольку контент уже доставлен изнеисправная «страница».Не уверен, что он очень пуленепробиваемый:)

Возможно, увеличение размера буфера может заставить его работать на большем количестве страниц.

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