В каком-то унаследованном коде у нас был процесс, который захватывает наши «базовые» JSP-файлы и наклеивает верхний и нижний колонтитулы и т. Д. И все, что мы хотели на всех JSP-файлы в приложении. Одна вещь, которую этот процесс добавила ко всем JSP, - это блок try-catch вокруг всего JSP в сценариях. Так, в конце концов, все наши JSPs будет выглядеть примерно так:Каков правильный способ поймать исключение в JSTL
<%
try
{
%>
.... all the rest of the JSP .....
<%
}
catch(Exception e)
{
Log.error(e);
}
%>
Мы недавно избавилась от этого процесса и перенесли наше JSP, над использовать JSTL и не имеют каких-либо скриптлетов. Мы создали тег, который мы в основном обернуть вокруг каждого JSP сделать в заголовке, колонтитул и т.д. Так что теперь наши JSPs выглядеть примерно так:
<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>
тега в обоих случаях, но только на самом деле увидеть «ERROR!» в источнике, когда тег <c:catch>
находится непосредственно вокруг <jsp:doBody/>
Любая информация об этом была бы принята с благодарностью.
* «Страница просто прекращает рендеринг в точке, в которую было выбрано исключение». * Это может иметь иную причину. Попробуйте установить размер буфера ответа на тот же размер, что и вывод HTML на вашей самой большой странице. Например. 50 КБ или что-то в этом роде. Кстати, правильным способом было бы поместить весь этот Java-код в сервлет вместо JSP и использовать JSP для генерации HTML только для того, чтобы вся исключительная бизнес-логика не выполнялась в JSP. – BalusC