Автор оригинала: Pankaj Kumar.
Обработка исключений в JSP выполняется страницами исключений JSP.
Обработка исключений в JSP
Некоторое время назад я написал пост об обработке исключений сервлетов и о том, зачем нам это нужно. То же объяснение применимо и к страницам JSP, и именно поэтому Java EE обеспечивает четкий подход к обработке исключений в JSP с использованием страниц ошибок JSP.
Для обработки исключений, создаваемых страницей JSP, все, что нам нужно, – это страница ошибок и определение страницы ошибок в JSP с помощью директивы страницы jsp .
Страница ошибки JSP
Чтобы создать страницу ошибки JSP, нам нужно установить атрибут директивы страницы isErrorPage значение true, затем мы можем получить доступ к исключению неявному объекту jsp в JSP и использовать его для отправки клиенту настроенного сообщения об ошибке.
Конфигурация страницы ошибок JSP
Нам нужно задать директиву страницы ErrorPage атрибут, чтобы определить JSP, который будет обрабатывать любое исключение, создаваемое методом службы JSP. Когда страница ошибки JSP преобразуется в код сервлета, она расширяет org.apache.jasper.runtime.HttpJspBase в Tomcat.
Конфигурация дескриптора развертывания Страницы Ошибок
В большинстве случаев у нас есть общая страница ошибок, которую мы хотим использовать для всех JSP, поэтому вместо того, чтобы настраивать ее во всех JSP по отдельности, мы можем определить страницу ошибок в web.xml с ошибка-страница элемент. Мы можем настроить страницу ошибок JSP для обработки других кодов ошибок, таких как 404.
Давайте посмотрим, как все это сочетается в веб-приложении.
Мы создадим простое веб-приложение для обработки исключений JSP, структура проекта которого будет выглядеть следующим образом.
Точкой входа в приложение является index.jsp , код которого приведен ниже.
<%@ page language="java" contentType="text/html; charset=US-ASCII"
pageEncoding="US-ASCII"%>
Login Page
Когда мы отправим форму, запрос будет отправлен на login.jsp , код, как показано ниже.
<%@ page language="java" contentType="text/html; charset=US-ASCII"
pageEncoding="US-ASCII" errorPage="error.jsp"%>
User Home Page
<%
String user = request.getParameter("id");
String pwd = request.getParameter("password");
if(user == null || "".equals(user) || pwd == null || "".equals(pwd)){
throw new ServletException("Mandatory Parameter missing");
}
%>
<%-- do some DB processing, not doing anything for simplicity --%>
Hi <%=user %>
Обратите внимание, что если входные параметры равны нулю или пусты, его исключение ServletException с соответствующим сообщением и страницей ошибок определяется как error.jsp код которого, как показано ниже.
<%@ page language="java" contentType="text/html; charset=US-ASCII"
pageEncoding="US-ASCII" isErrorPage="true"%>
Error Page
<% if(response.getStatus() == 500){ %>
Error: <%=exception.getMessage() %>
<%-- include login page --%>
<%@ include file="index.jsp"%>
<%}else {%>
Hi There, error code is <%=response.getStatus() %>
Please go to home page
<%} %>
Обратите внимание, что значение атрибута isErrorPage директивы страницы равно true . Когда ресурсы приложения выдают исключения, код ошибки равен 500, код написан для обработки как исключений уровня приложения, так и ошибок, таких как 404 – страница не найдена.
Также обратите внимание на использование директивы include для предоставления пользователю страницы входа в систему в случае каких-либо исключений.
Вот это web.xml где мы определяем страницу ошибок для приложения.
JSPExceptionHandling index.jsp 404 /error.jsp java.lang.Throwable /error.jsp
Теперь, когда мы запускаем вышеуказанное приложение, в качестве ответа мы получаем следующие страницы.
Страница входа в систему
Страница ошибки JSP для исключения
Страница ошибки JSP для кода ошибки 404
Это все для обработки исключений на страницах JSP, ее очень легко реализовать, и мы должны использовать ее, чтобы убедиться, что мы обрабатываем все исключения и коды ошибок и отправляем полезный ответ клиенту, а не на страницу ошибок по умолчанию контейнера.