В некотором устаревшем коде, который у нас был, у нас был процесс, который захватывал наши «базовые» файлы JSP и прикреплял заголовок, нижний колонтитул и т. Д. И все остальное, что мы хотели, ко всем файлам JSP во всем приложении. Одна вещь, которую этот процесс добавил ко всем JSP, был блок try-catch вокруг всего JSP в скриптлетах. Итак, в конце концов, все наши JSP будут выглядеть примерно так:
<%
try
{
%>
.... all the rest of the JSP .....
<%
}
catch(Exception e)
{
Log.error(e);
}
%>
Мы недавно избавились от этого процесса и перенесли наши JSP на использование JSTL и не имели никаких скриптлетов. Мы создали тег, который мы в основном обертываем вокруг каждого JSP, делаем заголовок, нижний колонтитул и т. Д. Итак, теперь наши JSP выглядят примерно так:
<foo:page>
.... all the rest of the JSP .....
</foo:page>
При этом переключении мы потеряли возможность перехватывать любые исключения, возникающие при загрузке страницы. Я немного осмотрелся и нашел тег <c:catch>
. Я пытался вставить это в наш тег страницы, но я не могу заставить его работать так, как мы хотим. Я обнаружил, что если поместить тег <c:catch>
рядом с тегом <jsp:doBody/>
в теге страницы, он поймает исключение, и я смогу что-то с ним сделать. Однако, это не поймает никаких исключений, которые выбрасываются в других частях этого тега внешней страницы В идеале я бы заключил весь наш тег страницы в тег <c:catch>
, но когда я это сделал, он, похоже, не уловил исключения. Страница просто перестает отображаться в тот момент, когда сгенерировано исключение.
У меня такой же
<c:if test="${!(empty pageException)}">
ERROR!
</c:if>
после тега <c:catch>
в обоих случаях, но на самом деле я вижу только "ОШИБКА!" в источнике, когда тег <c:catch>
находится сразу вокруг <jsp:doBody/>
Любая информация об этом будет принята с благодарностью.