В моем веб-приложении spring-mvc есть страница с ошибкой, содержащая элемент трассировки складного стека (очевидно, опция разработки / отладки).Раньше он работал нормально, и отображал правильную трассировку стека от контроллера (или иногда от механизма JSP).
Q : возможно ли, чтобы JSP был страницей ошибокили это должен быть статический HTML?
Q : Что я делаю не так?
Цепочка событий (я думаю) управляется обработчиком ошибок, определенным вмой web.xml:
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/view/errors/internalError.jsp</location>
</error-page>
Где-то по пути (переключился на систему сборки maven, обновленный мол и пружина 2.5 -> 3.0), я заметил, что эта страница с ошибками перестала работать так, как была,Он отображает то же самое с одной проблемой - отображаемая трассировка стека исключений NOT из исключения, выданного в контроллере, но из самой страницы ошибки!
javax.servlet.ServletException: javax.servlet.jsp.JspTagException:
500 /WEB-INF/jsp/admin/errors/internalError.jsp
at org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:862)
at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:791)
at org.apache.jsp.WEB_002dINF.jsp.admin.defaultParent_jsp._jspService(defaultParent_jsp.java:225)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
То, что кажетсяздесь происходит следующая цепочка событий:
- Контроллер Spring встречает неперехваченное исключение:
throw new RuntimeException("no bananas")
- Это исключение перехватывается базой данных MultiActionController из пружин (так как нет специального обработчика ошибокопределено для этой страницы) исключение перебрасывается: только для повторного отслеживания в DispatcherServlet Spring.
- Затем DispatcherServlet просматривает что-то (возможно, мой web.xml), чтобы найти правильную страницу ошибки для типа исключения:
- Spring затем разрешает этот URL-адрес в представление (и мою ошибку JSP).) и пытается его отрендерить.
- Теперь здесь что-то идет не так с родительским jsp по умолчанию (* см. ниже), вызывая исключение JSP, которое на этот раз перехватывается ServletHolder в Jetty.Это исключение теперь отображается (через web.xml) на страницу ошибки JSP.
- Здесь вы можете подумать, что это приведет к бесконечному циклу.Тем не менее, во второй раз все работает нормально, и это выдает ошибку JSP.
Кажется, что JSP-ядро умирает при рендеринге родительского JSP по умолчанию - похоже, он сталкивается с проблемами в: org.apache.taglibs.standard.tag.common.core.ImportSupport
.Я видел некоторые посты в Интернете, где люди говорят, что это связано с импортом из каталога WEB-INF.
// disallow inappropriate response codes per JSTL spec
if (irw.getStatus() < 200 || irw.getStatus() > 299) {
throw new JspTagException(irw.getStatus() + " " + stripSession(targetUrl));
}
Хотя здесь выглядит, как будто любая ошибка HTTP 500 сломает ее.Но разве это не та ошибка, которую должна иметь страница ?