Исключения

При вызове исключения сервлетом, веб-контейнер начинает в файле 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

В результате получим следующую страницу:

results matching ""

    No results matching ""