Кто съел мое исключение? (jsp dispatcher.include)

#jsp #websphere

#jsp #websphere

Вопрос:

Я внедряю стороннее приложение J2EE с Websphere в качестве сервера приложений. У меня есть следующий код в одном из JSP (callingPage)

 try {
  RequestDispatcher dispatcher = request.getRequestDispatcher(includePage);
  dispatcher.include(request,response);
} catch (Exception Ex) {
  // process the excpetion 
  // and create appropriate response object with body as XML string
}
 

includePage также является страницей JSP, и ожидается, что ответ будет иметь тело XML, если исключений нет. В определенном сценарии includePage выдает допустимое (пользовательское) исключение. Но элемент управления не переходит в блок catch в callingPage.

При проверке ответа я обнаружил, что тело ответа содержит строку <HTTP ResponseCode><CustomExceptionType><CustomException.getMessage()> с кодом ответа как 500. Поскольку тело ответа не является строкой XML, мы получаем исключение синтаксического анализа ниже по потоку.

Я проверил приложения web.xml и нет никакой пользовательской страницы ошибок, указанной для кода 500. Я обсудил это с администратором Websphere, и он не смог оказать большой помощи (он утверждает, что не сделал ничего конкретного с instance). Команда поддержки поставщика приложений протестировала его в своем экземпляре Websphere и подтвердила, что он работает. Согласно им, это должна быть конфигурация Websphere.

Мои знания о J2EE framework или Websphere ограничены. Я попытался выполнить поиск по существующим запросам, но не смог выяснить возможную причину.

Ответ №1:

Вероятно, вы уже решили эту проблему, но на всякий случай:

Согласно http://docs.oracle.com/javaee/6/api/javax/servlet/RequestDispatcher.html

Включенный сервлет не может изменить код состояния ответа или установить заголовки; любая попытка внести изменения игнорируется.

Я подозреваю (но я не уверен), что именно поэтому ваше исключение теряется.

Комментарии:

1. Проблема была решена путем установки пользовательского свойства для Websphere we container com.ibm.ws.webcontainer.dispatcherRethrowSER и установки для него значения false. Подробности здесь pic.dhe.ibm.com/infocenter/wasinfo/v7r0 /…

Ответ №2:

Проблема была решена путем установки пользовательского свойства для Websphere web container com.ibm.ws.webcontainer.dispatcherRethrowSER. Подробности здесь http://pic.dhe.ibm.com/infocenter/wasinfo/v7r0/index.jsp?topic=/com.ibm.websphere.express.doc/info/exp/ae/rweb_custom_props.html

Ответ №3:

Обычно для обработки исключений мы включаем директиву страницы ошибок в JSP. Эта ошибка JSP — это та, в которой управление будет перенаправлено, если возникнет исключение. Не уверен, что это сработает в вашем случае, но может попробовать: http://www.roseindia.net/jsp/simple-jsp-example/exception-handling-in-jsp.shtml

Дайте нам знать, если это сработает.

-NG