В данной статье мы рассмотрим исключения при работе с сервлетами.
При вызове исключения сервлетом, веб-контейнер начинает в файле web.xml поиск элементов исключений (error-page и exception-type).
Мы можем использовать, как уже имеющиеся исключения, так и создавать новые.
При работе с исключениями в сервлетах, имеет смысл помнить о следующих моментах:
- Если есть ошибка со статусом 403 или 404, либо брошено ServletException или IOException, то должен быть вызван сервлет ErrorHandler.
- Сервлет ErrorHandler определяется так же, как и другие сервлеты и конфигурируются в файле web.xml
Ниже приведен список атрибутов запросов, которые могут помочь нам определить причину исключения:
№ | Атрибут и его описание |
---|---|
1 | javax.servlet.error.message
Информация о сообщении, которое передаётся в исключении. |
2 | javax.servlet.error.status_code
Код статуса исключения |
3 | javax.servlet.error.exception_type
Тип исключения. |
4 | javax.servlet.error.request_uri
URL запроса, который вызвал ошибку. |
5 | javax.servlet.error.servlet_name
Имя сервлета, который обрабатывает исключение. |
6 | javax.servlet.error.exception
Информация о самом исключении. |
Для понимания того, как это работает на практике, рассмотрим простой пример.
За основу возьмём данное приложение.
Класс ErrorDemo
package net.proselyte.servletstutorial;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/**
* Simple servlet that demonstrates Error handling.
*
* @author Eugene Suleimanov
*/
public class ErrorDemo extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Integer code = (Integer) request.getAttribute("javax.servlet.error.status_code");
response.setContentType("text/html");
PrintWriter writer = response.getWriter();
String title = "Error Handling";
String docType = "<!DOCTYPE html>";
writer.println(docType + "<html>" +
"<head>" +
"<title>" + title + "</title>" +
"</head>" +
"<body>");
writer.println("<h1>Error information</h1>");
writer.println("Code: " + code);
writer.println("</body>");
writer.println("</html>");
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
Файл web.xml
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Servlets Tutorial</display-name>
<servlet>
<servlet-name>SimpleServlet</servlet-name>
<servlet-class>net.proselyte.servletstutorial.SimpleServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>ErrorDemo</servlet-name>
<servlet-class>net.proselyte.servletstutorial.ErrorDemo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SimpleServlet</servlet-name>
<url-pattern>/SimpleServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ErrorDemo</servlet-name>
<url-pattern>/ErrorDemo</url-pattern>
</servlet-mapping>
<error-page>
<error-code>404</error-code>
<location>/ErrorDemo</location>
</error-page>
<error-page>
<exception-type>java.lang.Error</exception-type>
<location>/ErrorDemo</location>
</error-page>
</web-app>
После этого выполним в консоли команду:
mvn tomcat7:run
И перейдём по ссылке
http://localhost:8088/blabla
В результате мы получим следующую страницу:
На этом мы заканчиваем изучение обработки исключений при работе с сервлетами.
В следующей статье мы рассмотрим работу с фильтрами.