Javax servlet error message

Когда сервлет генерирует исключение, веб-контейнер выполняет поиск конфигураций в файле web.xml , в которых используется элемент типа исключения, для

Когда сервлет генерирует исключение, веб-контейнер выполняет поиск конфигураций в файле web.xml , в которых используется элемент типа исключения, для поиска соответствия с выброшенным типом исключения.

Вам придется использовать элемент error-page в web.xml, чтобы указать вызов сервлетов в ответ на определенные исключения или коды состояния HTTP.

Конфигурация web.xml

Учтите, у вас есть сервлет ErrorHandler, который будет вызываться всякий раз, когда есть какое-либо определенное исключение или ошибка. Ниже будет запись, созданная в web.xml.

<!-- servlet definition -->
<servlet>
   <servlet-name>ErrorHandler</servlet-name>
   <servlet-class>ErrorHandler</servlet-class>
</servlet>

<!-- servlet mappings -->
<servlet-mapping>
   <servlet-name>ErrorHandler</servlet-name>
   <url-pattern>/ErrorHandler</url-pattern>
</servlet-mapping>

<!-- error-code related error pages -->
<error-page>
   <error-code>404</error-code>
   <location>/ErrorHandler</location>
</error-page>

<error-page>
   <error-code>403</error-code>
   <location>/ErrorHandler</location>
</error-page>

<!-- exception-type related error pages -->
<error-page>
   <exception-type>
      javax.servlet.ServletException
   </exception-type >
   <location>/ErrorHandler</location>
</error-page>

<error-page>
   <exception-type>java.io.IOException</exception-type >
   <location>/ErrorHandler</location>
</error-page>

Если вы хотите иметь универсальный обработчик ошибок для всех исключений, вам следует определить следующую страницу ошибок вместо определения отдельных элементов страницы ошибок для каждого исключения –

<error-page>
   <exception-type>java.lang.Throwable</exception-type >
   <location>/ErrorHandler</location>
</error-page>

Ниже приведены замечания, которые необходимо отметить в отношении вышеупомянутого web.xml для обработки исключений.

  • Сервлет ErrorHandler обычно определяется как любой другой сервлет и настраивается в web.xml.

  • Если есть ошибка с кодом состояния 404 (не найдено) или 403 (запрещено), будет вызван сервлет ErrorHandler.

  • Если веб-приложение выдает исключение ServletException или IOException, тогда веб-контейнер вызывает сервлет / ErrorHandler.

  • Вы можете определить разные обработчики ошибок для обработки различных типов ошибок или исключений. Приведенный выше пример очень общий и надеюсь, что он послужит цели, чтобы объяснить вам основную концепцию.

Сервлет ErrorHandler обычно определяется как любой другой сервлет и настраивается в web.xml.

Если есть ошибка с кодом состояния 404 (не найдено) или 403 (запрещено), будет вызван сервлет ErrorHandler.

Если веб-приложение выдает исключение ServletException или IOException, тогда веб-контейнер вызывает сервлет / ErrorHandler.

Вы можете определить разные обработчики ошибок для обработки различных типов ошибок или исключений. Приведенный выше пример очень общий и надеюсь, что он послужит цели, чтобы объяснить вам основную концепцию.

Атрибуты запроса – ошибки / исключения

Ниже приведен список атрибутов запроса, к которым сервлет обработки ошибок может получить доступ для анализа природы ошибки / исключения.

Sr.No. Атрибут и описание
1

javax.servlet.error.status_code

Этот атрибут дает код состояния, который можно сохранить и проанализировать после сохранения в типе данных java.lang.Integer.

2

javax.servlet.error.exception_type

Этот атрибут предоставляет информацию о типе исключения, который можно сохранить и проанализировать после сохранения в типе данных java.lang.Class.

3

javax.servlet.error.message

Этот атрибут дает информацию о точном сообщении об ошибке, которое может быть сохранено и проанализировано после сохранения в типе данных java.lang.String.

4

javax.servlet.error.request_uri

Этот атрибут дает информацию об URL, вызывающем сервлет, и его можно сохранить и проанализировать после сохранения в типе данных java.lang.String.

5

javax.servlet.error.exception

Этот атрибут дает информацию о возникшем исключении, которая может быть сохранена и проанализирована.

6

javax.servlet.error.servlet_name

Этот атрибут дает имя сервлета, которое можно сохранить и проанализировать после сохранения в типе данных java.lang.String.

javax.servlet.error.status_code

Этот атрибут дает код состояния, который можно сохранить и проанализировать после сохранения в типе данных java.lang.Integer.

javax.servlet.error.exception_type

Этот атрибут предоставляет информацию о типе исключения, который можно сохранить и проанализировать после сохранения в типе данных java.lang.Class.

javax.servlet.error.message

Этот атрибут дает информацию о точном сообщении об ошибке, которое может быть сохранено и проанализировано после сохранения в типе данных java.lang.String.

javax.servlet.error.request_uri

Этот атрибут дает информацию об URL, вызывающем сервлет, и его можно сохранить и проанализировать после сохранения в типе данных java.lang.String.

javax.servlet.error.exception

Этот атрибут дает информацию о возникшем исключении, которая может быть сохранена и проанализирована.

javax.servlet.error.servlet_name

Этот атрибут дает имя сервлета, которое можно сохранить и проанализировать после сохранения в типе данных java.lang.String.

Пример сервлета обработчика ошибок

Этот пример даст вам базовое понимание обработки исключений в сервлете, но вы можете написать более сложные приложения-фильтры, используя ту же концепцию –

Этот пример даст вам базовое представление об обработке исключений в сервлете, но вы можете написать более сложные приложения-фильтры, используя ту же концепцию:

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;

// Extend HttpServlet class
public class ErrorHandler extends HttpServlet {
 
   // Method to handle GET method request.
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
         
      // Analyze the servlet exception       
      Throwable throwable = (Throwable)
      request.getAttribute("javax.servlet.error.exception");
      Integer statusCode = (Integer)
      request.getAttribute("javax.servlet.error.status_code");
      String servletName = (String)
      request.getAttribute("javax.servlet.error.servlet_name");
         
      if (servletName == null) {
         servletName = "Unknown";
      }
      String requestUri = (String)
      request.getAttribute("javax.servlet.error.request_uri");
      
      if (requestUri == null) {
         requestUri = "Unknown";
      }

      // Set response content type
      response.setContentType("text/html");

      PrintWriter out = response.getWriter();
      String title = "Error/Exception Information";
      String docType =
         "<!doctype html public "-//w3c//dtd html 4.0 " +
         "transitional//en">n";
         
      out.println(docType +
         "<html>n" +
         "<head><title>" + title + "</title></head>n" +
         "<body bgcolor = "#f0f0f0">n");

      if (throwable == null && statusCode == null) {
         out.println("<h2>Error information is missing</h2>");
         out.println("Please return to the <a href="" + 
            response.encodeURL("http://localhost:8080/") + 
            "">Home Page</a>.");
      } else if (statusCode != null) {
         out.println("The status code : " + statusCode);
      } else {
         out.println("<h2>Error information</h2>");
         out.println("Servlet Name : " + servletName + "</br></br>");
         out.println("Exception Type : " + throwable.getClass( ).getName( ) + "</br></br>");
         out.println("The request URI: " + requestUri + "<br><br>");
         out.println("The exception message: " + throwable.getMessage( ));
      }
      out.println("</body>");
      out.println("</html>");
   }
   
   // Method to handle POST method request.
   public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      doGet(request, response);
   }
}

Скомпилируйте ErrorHandler.java обычным способом и поместите ваш файл класса в / WebApps / ROOT / WEB-INF / классы.

Давайте добавим следующую конфигурацию в web.xml для обработки исключений:

<servlet>
   <servlet-name>ErrorHandler</servlet-name>
   <servlet-class>ErrorHandler</servlet-class>
</servlet>

<!-- servlet mappings -->
<servlet-mapping>
   <servlet-name>ErrorHandler</servlet-name>
   <url-pattern>/ErrorHandler</url-pattern>
</servlet-mapping>

<error-page>
   <error-code>404</error-code>
   <location>/ErrorHandler</location>
</error-page>

<error-page>
   <exception-type>java.lang.Throwable</exception-type >
   <location>/ErrorHandler</location>
</error-page>

Теперь попробуйте использовать сервлет, который вызывает любое исключение или вводит неправильный URL-адрес, это приведет к тому, что Web-контейнер вызовет сервлет ErrorHandler и отобразит соответствующее сообщение, как запрограммировано. Например, если вы введете неправильный URL-адрес, будет показан следующий результат:

The status code : 404

Приведенный выше код может не работать с некоторыми веб-браузерами. Так что попробуйте с Mozilla и Safari, и это должно работать.

Содержание

  1. Servlet – Exception Handling
  2. Important Points
  3. Сервлеты – обработка исключений
  4. Конфигурация web.xml
  5. Атрибуты запроса – ошибки / исключения
  6. Пример сервлета обработчика ошибок
  7. Servlet — Error Handling
  8. Request attributes related to error information
  9. Types of error a Servlet/Filter can throw
  10. Servlets — Exception Handling
  11. Learn Complete Java — Core Java, JSP & Servlets
  12. Servlets and JSP Tutorial For Beginners!
  13. JSP and Servlets — The Complete Course
  14. web.xml Configuration
  15. Request Attributes − Errors/Exceptions
  16. Error Handler Servlet Example
  17. Учебное пособие по исключениям и обработке ошибок сервлета
  18. Сервлет Исключение
  19. Ошибка сервлета
  20. Исключение сервлета и обработка ошибок

Servlet – Exception Handling

When a servlet throws an exception, the web container looks for a match with the thrown exception type in web.xml configurations that employ the exception-type element. To define the invocation of servlets in response to particular errors or HTTP status codes, you’d have to utilize the error-page element in web.xml.

Exception Handling is the process of transforming system error messages into user-friendly error messages.

  1. Programmatically exception handling technique: This method of managing exceptions in Java programming by using try and catch blocks are known as a programmatic exception handling mechanism.
  2. A mechanism for managing declarative exceptions: Declarative exception handling technique refers to the method of managing exceptions using XML elements in the web.xml file. If an error occurs in more than one servlet application, this method is handy.

Important Points

  • If the web application throws a ServletException or an IOException, the web container calls the /ErrorHandler servlet.
  • Different Error Handlers can be defined to handle different sorts of errors or exceptions.
  • The ErrorHandler servlet is specified in the web.xml file and is defined in the same way as any other servlet.
  • If an error with the status code 404INot Found) or 403 is encountered, the ErrorHandler servlet is invoked (Forbidden)

Request Attributes – Errors/Exception

Источник

Сервлеты – обработка исключений

Когда сервлет генерирует исключение, веб-контейнер выполняет поиск конфигураций в файле web.xml , в которых используется элемент типа исключения, для поиска соответствия с выброшенным типом исключения.

Вам придется использовать элемент error-page в web.xml, чтобы указать вызов сервлетов в ответ на определенные исключения или коды состояния HTTP.

Конфигурация web.xml

Учтите, у вас есть сервлет ErrorHandler, который будет вызываться всякий раз, когда есть какое-либо определенное исключение или ошибка. Ниже будет запись, созданная в web.xml.

Если вы хотите иметь универсальный обработчик ошибок для всех исключений, вам следует определить следующую страницу ошибок вместо определения отдельных элементов страницы ошибок для каждого исключения –

Ниже приведены замечания, которые необходимо отметить в отношении вышеупомянутого web.xml для обработки исключений.

Сервлет ErrorHandler обычно определяется как любой другой сервлет и настраивается в web.xml.

Если есть ошибка с кодом состояния 404 (не найдено) или 403 (запрещено), будет вызван сервлет ErrorHandler.

Если веб-приложение выдает исключение ServletException или IOException, тогда веб-контейнер вызывает сервлет / ErrorHandler.

Вы можете определить разные обработчики ошибок для обработки различных типов ошибок или исключений. Приведенный выше пример очень общий и надеюсь, что он послужит цели, чтобы объяснить вам основную концепцию.

Сервлет ErrorHandler обычно определяется как любой другой сервлет и настраивается в web.xml.

Если есть ошибка с кодом состояния 404 (не найдено) или 403 (запрещено), будет вызван сервлет ErrorHandler.

Если веб-приложение выдает исключение ServletException или IOException, тогда веб-контейнер вызывает сервлет / ErrorHandler.

Вы можете определить разные обработчики ошибок для обработки различных типов ошибок или исключений. Приведенный выше пример очень общий и надеюсь, что он послужит цели, чтобы объяснить вам основную концепцию.

Атрибуты запроса – ошибки / исключения

Ниже приведен список атрибутов запроса, к которым сервлет обработки ошибок может получить доступ для анализа природы ошибки / исключения.

Этот атрибут дает код состояния, который можно сохранить и проанализировать после сохранения в типе данных java.lang.Integer.

Этот атрибут предоставляет информацию о типе исключения, который можно сохранить и проанализировать после сохранения в типе данных java.lang.Class.

Этот атрибут дает информацию о точном сообщении об ошибке, которое может быть сохранено и проанализировано после сохранения в типе данных java.lang.String.

Этот атрибут дает информацию об URL, вызывающем сервлет, и его можно сохранить и проанализировать после сохранения в типе данных java.lang.String.

Этот атрибут дает информацию о возникшем исключении, которая может быть сохранена и проанализирована.

Этот атрибут дает имя сервлета, которое можно сохранить и проанализировать после сохранения в типе данных java.lang.String.

Этот атрибут дает код состояния, который можно сохранить и проанализировать после сохранения в типе данных java.lang.Integer.

Этот атрибут предоставляет информацию о типе исключения, который можно сохранить и проанализировать после сохранения в типе данных java.lang.Class.

Этот атрибут дает информацию о точном сообщении об ошибке, которое может быть сохранено и проанализировано после сохранения в типе данных java.lang.String.

Этот атрибут дает информацию об URL, вызывающем сервлет, и его можно сохранить и проанализировать после сохранения в типе данных java.lang.String.

Этот атрибут дает информацию о возникшем исключении, которая может быть сохранена и проанализирована.

Этот атрибут дает имя сервлета, которое можно сохранить и проанализировать после сохранения в типе данных java.lang.String.

Пример сервлета обработчика ошибок

Этот пример даст вам базовое понимание обработки исключений в сервлете, но вы можете написать более сложные приложения-фильтры, используя ту же концепцию –

Этот пример даст вам базовое представление об обработке исключений в сервлете, но вы можете написать более сложные приложения-фильтры, используя ту же концепцию:

Скомпилируйте ErrorHandler.java обычным способом и поместите ваш файл класса в / WebApps / ROOT / WEB-INF / классы.

Давайте добавим следующую конфигурацию в web.xml для обработки исключений:

Теперь попробуйте использовать сервлет, который вызывает любое исключение или вводит неправильный URL-адрес, это приведет к тому, что Web-контейнер вызовет сервлет ErrorHandler и отобразит соответствующее сообщение, как запрограммировано. Например, если вы введете неправильный URL-адрес, будет показан следующий результат:

Приведенный выше код может не работать с некоторыми веб-браузерами. Так что попробуйте с Mozilla и Safari, и это должно работать.

Источник

Servlet — Error Handling

A customized content can be returned to a Web client when a servlet generates an error. We can do that by adding elements in web.xml

The following table describes the elements we can use within an element.

Sr.No. Атрибут и описание
1

A fully-qualified class name of a Java exception type, for example, java.lang.RuntimeException

The location of the resource to display in response to the error. For example, /myErrorPage.html . The location can be a Servlet or a JSP page as well.

When an error occurs, and are matched against the current error. On finding a match the request is redirected to the destination defined by .

If the destination is a servlet or a JSP page:

The original request and response objects are passed to the destination.

The request path and attributes are set as if a RequestDispatcher.forward to the error resource had been performed.

The request attributes are set with the followings.

Element Required/
Optional
Description
Optional A valid HTTP error code, for example, 500
Optional
Request Attributes Type
javax.servlet.error.status_code java.lang.Integer
javax.servlet.error.exception_type java.lang.Class
javax.servlet.error.message java.lang.String
javax.servlet.error.exception java.lang.Throwable
javax.servlet.error.request_uri java.lang.String
javax.servlet.error.servlet_name java.lang.String

Types of error a Servlet/Filter can throw

A servlet or filter may throw the following exceptions during processing of a request:

  • Unchecked exceptions i.e. RuntimeException, Error and subclasses
  • ServletException or subclasses
  • IOExceptions or subclasses

All other exception should be wrapped in ServletException

Источник

Servlets — Exception Handling

Learn Complete Java — Core Java, JSP & Servlets

240 Lectures 30 hours

Servlets and JSP Tutorial For Beginners!

41 Lectures 4.5 hours

JSP and Servlets — The Complete Course

42 Lectures 5.5 hours

When a servlet throws an exception, the web container searches the configurations in web.xml that use the exception-type element for a match with the thrown exception type.

You would have to use the error-page element in web.xml to specify the invocation of servlets in response to certain exceptions or HTTP status codes.

web.xml Configuration

Consider, you have an ErrorHandler servlet which would be called whenever there is any defined exception or error. Following would be the entry created in web.xml.

If you want to have a generic Error Handler for all the exceptions then you should define following error-page instead of defining separate error-page elements for every exception −

Following are the points to be noted about above web.xml for Exception Handling −

The servlet ErrorHandler is defined in usual way as any other servlet and configured in web.xml.

If there is any error with status code either 404 (Not Found) or 403 (Forbidden ), then ErrorHandler servlet would be called.

If the web application throws either ServletException or IOException, then the web container invokes the /ErrorHandler servlet.

You can define different Error Handlers to handle different type of errors or exceptions. Above example is very much generic and hope it serve the purpose to explain you the basic concept.

Request Attributes − Errors/Exceptions

Following is the list of request attributes that an error-handling servlet can access to analyze the nature of error/exception.

This attribute give status code which can be stored and analyzed after storing in a java.lang.Integer data type.

This attribute gives information about exception type which can be stored and analysed after storing in a java.lang.Class data type.

This attribute gives information exact error message which can be stored and analyzed after storing in a java.lang.String data type.

This attribute gives information about URL calling the servlet and it can be stored and analysed after storing in a java.lang.String data type.

This attribute gives information about the exception raised, which can be stored and analysed.

This attribute gives servlet name which can be stored and analyzed after storing in a java.lang.String data type.

Error Handler Servlet Example

This example would give you basic understanding of Exception Handling in Servlet, but you can write more sophisticated filter applications using the same concept −

Compile ErrorHandler.java in usual way and put your class file in /webapps/ROOT/WEB-INF/classes.

Let us add the following configuration in web.xml to handle exceptions −

Now try to use a servlet which raise any exception or type a wrong URL, this would trigger Web Container to call ErrorHandler servlet and display an appropriate message as programmed. For example, if you type a wrong URL then it would display the following result −

The above code may not work with some web browsers. So try with Mozilla and Safari and it should work.

Источник

Учебное пособие по исключениям и обработке ошибок сервлета

Некоторое время назад я написал пост об обработке исключений в Java, но когда дело доходит до веб-приложения, нам нужно больше, чем обычная обработка исключений в Java.

Сервлет Исключение

Если вы заметили, что методы doGet () и doPost () ServletException и IOException , давайте посмотрим, что произойдет, когда мы выбросим эти исключения из нашего приложения. Я напишу простой сервлет, который выдаст исключение ServletException.

MyExceptionServlet.java

Теперь, когда мы вызываем этот сервлет через браузер методом GET, мы получаем ответ, как на картинке ниже.

Поскольку браузер понимает только HTML, когда наше приложение генерирует исключение, контейнер сервлета обрабатывает исключение и генерирует HTML-ответ. Эта логика специфична для контейнера сервлетов, я использую tomcat и получаю эту страницу с ошибкой, но если вы будете использовать некоторые другие серверы, такие как JBoss или Glassfish, вы можете получить другой HTML-ответ об ошибке.

Проблема с этим ответом заключается в том, что он не имеет значения для пользователя. Кроме того, он показывает пользователям наши классы приложений и информацию о сервере, что не имеет смысла для пользователя и не очень хорошо с точки зрения безопасности.

Ошибка сервлета

Я уверен, что вы, должно быть, увидели ошибку 404, когда пытались найти URL, который не существует. Давайте посмотрим, как наш контейнер сервлетов отвечает на ошибку 404. Если мы отправим запрос на неверный URL, мы получим ответ HTML, как показано на рисунке ниже.

Опять же, это общий HTML-код, сгенерированный сервером от нашего имени и не имеющий никакой ценности для пользователя.

Исключение сервлета и обработка ошибок

Servlet API обеспечивает поддержку настраиваемых сервлетов Exception и Error Handler, которые мы можем настроить в дескрипторе развертывания. Целью этих сервлетов является обработка Exception или Error, возникающих в приложении, и отправка HTML-ответа, который будет полезен для пользователя. Мы можем предоставить ссылку на домашнюю страницу приложения или некоторые детали, чтобы сообщить пользователю, что пошло не так.

Поэтому прежде всего нам нужно создать собственный сервлет Exception and Error Handler. У нас может быть несколько сервлетов обработки исключений и ошибок для приложения, но для простоты я создам один сервлет и использую его как для исключений, так и для ошибок.

Источник

Adblock
detector

Sr.No. Attribute & Description
1

As of now, we have discussed Filter in Servlet. In this article, we will discuss an Exception in Servlet. As we know, Exception is an unwanted event that arises during the execution of a program, therefore these need to be handled in the program. So, In this article, we will discuss How Exception is handled in Servlet.

What is Exception in Servlet?

The Exception in Servlet is an abnormal condition that arises during the execution of a program that interrupts the normal flow of execution.

  • Servlet provides support for Exception that is configured in the web.xml file of the application.
  • The whole purpose of these is to handle the Exception and send a useful response to the user.
  • Following is the web.xml file configuration for Exception Handling.
<!--Servlet-->
<servlet>
  <servlet-name>ErrorHandle</servlet-name>
  <servlet-class>ErrorHandle</servlet-class>
<servlet> 
<servlet-mapping>
  <servlet-name>ErrorHandle</servlet-name>
  <url-pattern>/ErrorHandle</url-pattern>
</servlet-mapping>
<!--Error code-->
<error-page>
  <error-code>403</error-code>
  <location>/ErrorHandle</location>
</error-page>
<!--Exception type--->
<error-page>
  <exception-type>javax.servlet.ServletException</exception-type>
  <location>/ErrorHandle</location>
</error-page>

For generic Exception, We should define the following error-page instead of defining separate error-page elements.

<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>ErrorHandle</location>
</error-page>

Request Attributes for Exception

  • javax.servlet.error.status_code: This attribute gives us the status code.
  • javax.servlet.error.exception_type: This attribute gives us the type of exception that occurred. As in the above web.xml file, the ServletException type is used.
  • javax.servlet.error.message: This attribute gives us the exact error message.
  • javax.servlet.error.request_uri: This attribute gives us the information on the URL calling the servlet.
  • javax.servlet.error.exception: This attribute gives us the information of Exception raised.
  • javax.servlet.error.servlet_name: This attribute gives us the servlet-name.

Let’s see the Example for Exception Handling in Servlet

In this example first, we will create a single servlet and web.xml file that will give you an understanding of attributes in Exception Handling.

Demo.java

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class Demo
 */
@WebServlet("/Demo")
public class Demo extends HttpServlet {
  private static final long serialVersionUID = 1L;

  /**
   * @see HttpServlet#HttpServlet()
   */
  public Demo() {
    super();
    // TODO Auto-generated constructor stub
  }

  protected void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    Throwable throwable = (Throwable) request.getAttribute("javax.servlet.error.exception");
    Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code");
    String servletName = (String) request.getAttribute("javax.servlet.error.servlet_name");
    if (servletName == null) {
      servletName = "Unknown";
    }
    String requestUri = (String) request.getAttribute("javax.servlet.error.request_uri");
    if (requestUri == null) {
      requestUri = "Unknown";
    }
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    String title = "Error/Exception Information";
    String docType = "<!doctype html public "-//w3c//dtd html 4.0 " + "transitional//en">n";
    out.println(docType + "<html>n" + "<head><title>" + title + "</title></head>n"
        + "<body bgcolor = "#f0f0f0">n");

    if (throwable == null && statusCode == null) {
      out.println("<h2>Error info is missing</h2>");
      out.println("Please return to the <a href="" + response.encodeURL("http://localhost:8088/")
          + "">Home Page</a>.");
    } else if (statusCode != null) {
      out.println("The status code : " + statusCode);
    } else {
      out.println("<h2>Error information</h2>");
      out.println("Servlet Name : " + servletName + "</br></br>");
      out.println("Exception Type : " + throwable.getClass().getName() + "</br></br>");
      out.println("The request URI: " + requestUri + "<br><br>");
      out.println("The exception message: " + throwable.getMessage());
    }
    out.println("</body>");
    out.println("</html>");
  }
}

Web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns="http://java.sun.com/xml/ns/javaee"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  id="WebApp_ID" version="3.0">
  <display-name>ExceptionHandlerDemo</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>Demo</servlet-name>
    <servlet-class>Demo</servlet-class>
  </servlet>

  <!-- servlet mappings -->
  <servlet-mapping>
    <servlet-name>Demo</servlet-name>
    <url-pattern>/Demo</url-pattern>
  </servlet-mapping>

  <error-page>
    <error-code>404</error-code>
    <location>/Demo</location>
  </error-page>

  <error-page>
    <exception-type>java.lang.Throwable</exception-type>
    <location>/Demo</location>
  </error-page>
</web-app>

Output

In this, if you type the wrong URL. You will get the following output which means we have handled the Error 404 page.

Thus we have seen How to Handle Exception in Servlet. Let us see How to handle cookies in servlet in detail in the next article.


When a servlet throws an exception, the web container searches the configurations in web.xml that use the exception-type element for a match with the thrown exception type.

You would have to use the error-page element in web.xml to specify the invocation of servlets in response to certain exceptions or HTTP status codes.

web.xml Configuration

Consider, you have an ErrorHandler servlet which would be called whenever there is any defined exception or error. Following would be the entry created in web.xml.

<!-- servlet definition -->
<servlet>
   <servlet-name>ErrorHandler</servlet-name>
   <servlet-class>ErrorHandler</servlet-class>
</servlet>

<!-- servlet mappings -->
<servlet-mapping>
   <servlet-name>ErrorHandler</servlet-name>
   <url-pattern>/ErrorHandler</url-pattern>
</servlet-mapping>

<!-- error-code related error pages -->
<error-page>
   <error-code>404</error-code>
   <location>/ErrorHandler</location>
</error-page>

<error-page>
   <error-code>403</error-code>
   <location>/ErrorHandler</location>
</error-page>

<!-- exception-type related error pages -->
<error-page>
   <exception-type>
      javax.servlet.ServletException
   </exception-type >
   <location>/ErrorHandler</location>
</error-page>

<error-page>
   <exception-type>java.io.IOException</exception-type >
   <location>/ErrorHandler</location>
</error-page>

If you want to have a generic Error Handler for all the exceptions then you should define following error-page instead of defining separate error-page elements for every exception −

<error-page>
   <exception-type>java.lang.Throwable</exception-type >
   <location>/ErrorHandler</location>
</error-page>

Following are the points to be noted about above web.xml for Exception Handling −

  • The servlet ErrorHandler is defined in usual way as any other servlet and configured in web.xml.

  • If there is any error with status code either 404 (Not Found) or 403 (Forbidden ), then ErrorHandler servlet would be called.

  • If the web application throws either ServletException or IOException, then the web container invokes the /ErrorHandler servlet.

  • You can define different Error Handlers to handle different type of errors or exceptions. Above example is very much generic and hope it serve the purpose to explain you the basic concept.

Request Attributes − Errors/Exceptions

Following is the list of request attributes that an error-handling servlet can access to analyze the nature of error/exception.

Sr.No. Attribute & Description
1

javax.servlet.error.status_code

This attribute give status code which can be stored and analyzed after storing in a java.lang.Integer data type.

2

javax.servlet.error.exception_type

This attribute gives information about exception type which can be stored and analysed after storing in a java.lang.Class data type.

3

javax.servlet.error.message

This attribute gives information exact error message which can be stored and analyzed after storing in a java.lang.String data type.

4

javax.servlet.error.request_uri

This attribute gives information about URL calling the servlet and it can be stored and analysed after storing in a java.lang.String data type.

5

javax.servlet.error.exception

This attribute gives information about the exception raised, which can be stored and analysed.

6

javax.servlet.error.servlet_name

This attribute gives servlet name which can be stored and analyzed after storing in a java.lang.String data type.

Error Handler Servlet Example

This example would give you basic understanding of Exception Handling in Servlet, but you can write more sophisticated filter applications using the same concept −

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;

// Extend HttpServlet class
public class ErrorHandler extends HttpServlet {
 
   // Method to handle GET method request.
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
         
      // Analyze the servlet exception       
      Throwable throwable = (Throwable)
      request.getAttribute("javax.servlet.error.exception");
      Integer statusCode = (Integer)
      request.getAttribute("javax.servlet.error.status_code");
      String servletName = (String)
      request.getAttribute("javax.servlet.error.servlet_name");
         
      if (servletName == null) {
         servletName = "Unknown";
      }
      String requestUri = (String)
      request.getAttribute("javax.servlet.error.request_uri");
      
      if (requestUri == null) {
         requestUri = "Unknown";
      }

      // Set response content type
      response.setContentType("text/html");

      PrintWriter out = response.getWriter();
      String title = "Error/Exception Information";
      String docType =
         "<!doctype html public "-//w3c//dtd html 4.0 " +
         "transitional//en">n";
         
      out.println(docType +
         "<html>n" +
         "<head><title>" + title + "</title></head>n" +
         "<body bgcolor = "#f0f0f0">n");

      if (throwable == null && statusCode == null) {
         out.println("<h2>Error information is missing</h2>");
         out.println("Please return to the <a href="" + 
            response.encodeURL("http://localhost:8080/") + 
            "">Home Page</a>.");
      } else if (statusCode != null) {
         out.println("The status code : " + statusCode);
      } else {
         out.println("<h2>Error information</h2>");
         out.println("Servlet Name : " + servletName + "</br></br>");
         out.println("Exception Type : " + throwable.getClass( ).getName( ) + "</br></br>");
         out.println("The request URI: " + requestUri + "<br><br>");
         out.println("The exception message: " + throwable.getMessage( ));
      }
      out.println("</body>");
      out.println("</html>");
   }
   
   // Method to handle POST method request.
   public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      doGet(request, response);
   }
}

Compile ErrorHandler.java in usual way and put your class file in /webapps/ROOT/WEB-INF/classes.

Let us add the following configuration in web.xml to handle exceptions −

<servlet>
   <servlet-name>ErrorHandler</servlet-name>
   <servlet-class>ErrorHandler</servlet-class>
</servlet>

<!-- servlet mappings -->
<servlet-mapping>
   <servlet-name>ErrorHandler</servlet-name>
   <url-pattern>/ErrorHandler</url-pattern>
</servlet-mapping>

<error-page>
   <error-code>404</error-code>
   <location>/ErrorHandler</location>
</error-page>

<error-page>
   <exception-type>java.lang.Throwable</exception-type >
   <location>/ErrorHandler</location>
</error-page>

Now try to use a servlet which raise any exception or type a wrong URL, this would trigger Web Container to call ErrorHandler servlet and display an appropriate message as programmed. For example, if you type a wrong URL then it would display the following result −

The status code : 404

The above code may not work with some web browsers. So try with Mozilla and Safari and it should work.

import java.io.*;

import java.util.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class ExceptionHandler extends HttpServlet {

    public void doGet(HttpServletRequest request,

                      HttpServletResponse response)

        throws ServletException, IOException

    {

        Throwable throwable

            = (Throwable)request.getAttribute(

                "javax.servlet.error.exception");

        Integer statusCode = (Integer)request.getAttribute(

            "javax.servlet.error.status_code");

        String servletName = (String)request.getAttribute(

            "javax.servlet.error.servlet_name");

        if (servletName == null) {

            servletName = "Unknown";

        }

        String requestUri = (String)request.getAttribute(

            "javax.servlet.error.request_uri");

        if (requestUri == null) {

            requestUri = "Unknown";

        }

        response.setContentType("text/html");

        PrintWriter out = response.getWriter();

        String title = "Error/Exception Information";

        String docType

            = "<!doctype html public "-//w3c//dtd html 4.0 "

              + "transitional//en">n";

        out.println(docType + "<html>n"

                    + "<head><title>" + title

                    + "</title></head>n"

                    + "<body bgcolor = "#f0f0f0">n");

        if (throwable == null && statusCode == null) {

            out.println(

                "<h1>Error information not found</h1>");

            out.println("Let's go back to <a href=""

                        + response.encodeURL(

                        + "">Home Page</a>.");

        }

        else if (statusCode != null) {

            out.println("The status code of an error is : "

                        + statusCode);

        }

        else {

            out.println("<h2>Error information</h2>");

            out.println("Servlet Name : " + servletName

                        + "</br></br>");

            out.println("Exception Type : "

                        + throwable.getClass().getName()

                        + "</br></br>");

            out.println("The request URI: " + requestUri

                        + "<br><br>");

            out.println("The exception message: "

                        + throwable.getMessage());

        }

        out.println("</body>");

        out.println("</html>");

    }

    public void doPost(HttpServletRequest request,

                       HttpServletResponse response)

        throws ServletException, IOException

    {

        doGet(request, response);

    }

}

When a servlet generates an error developers can handle those exceptions in various ways, let’s say a user tries a URL that does not map to a servlet the user typically gets a 404 page. With the error listing in the deployment descriptor, we can handle those exceptions. In this tutorial, we will see how to tackle these exception handling in the Servlet.

1. Introduction

An exception is an event, which occurs during the execution of a program, which disrupts the normal flow of the program’s instructions. The process of converting the system error messages into user-friendly error messages is known as Exception Handling.

  • Programmatically exception handling mechanism: The approach to use try and catch block in the Java code to handle exceptions is known as programmatically exception handling mechanism
  • Declarative exception handling mechanism: The approach to use the XML tags in the web.xml file to handle the exception is known as declarative exception handling mechanism. This mechanism is useful if exception is common for more than one servlet program

1.1 Servlet-Error Handling

A customized content can be returned to a web-client when a servlet generates an error. Developers can do that by adding the <error-page /> elements in the web.xml. The following table describes the elements developers can define within an error-page element.

Element Required or Optional Description
<error-code> Optional A valid HTTP error code. For e.g. 500 etc.
<exception-type> Optional A fully-qualified class name of a Java exception type. For e.g. java.lang.RuntimeException etc.
<location> Required The location of the resource which is displayed to the user in case of an error. For e.g. /myErrorPage.jsp etc.

1.1.1 Request Attributes Related to Error Information

If the destination i.e. <location> is a servlet or a JSP page:

  • The original request and response objects are passed to the destination
  • The request path and the attributes are set as if a requestDispatcher.forward to the error resource had been performed
  • The request attributes are set to the following:
    Request Attributes Type
    javax.servlet.error.status_code java.lang.Integer
    javax.servlet.error.exception_type java.lang.Class
    javax.servlet.error.message java.lang.String
    javax.servlet.error.exception java.lang.Throwable
    javax.servlet.error.request_uri java.lang.String
    javax.servlet.error.servlet_name java.lang.String

1.1.2 Types of Error a Servlet/Filter can Throw

A servlet or filter may throw the following exceptions during the processing of a request:

  • Unchecked Exceptions i.e. java.lang.RuntimeException, Error, and subclasses
  • javax.servlet.ServletException or subclasses
  • java.io.IOException or subclasses

Note: All other exceptions should be wrapped in javax.servlet.ServletException.

2. Java Servlet Exception Handling Example

Here is a step-by-step guide for implementing the Servlet framework in Java.

2.1 Tools Used

We are using Eclipse Kepler SR2, JDK 8 and Maven. Having said that, we have tested the code against JDK 1.7 and it works well.

2.2 Project Structure

Firstly, let’s review the final project structure, in case you are confused about where you should create the corresponding files or folder later!

Fig. 1: Servlet Exception Handling Application Project Structure

Fig. 1: Application Project Structure

2.3 Project Creation

This section will demonstrate on how to create a Java-based Maven project with Eclipse. In Eclipse Ide, go to File -> New -> Maven Project.

Fig. 2: Create Maven Project

Fig. 2: Create Maven Project

In the New Maven Project window, it will ask you to select project location. By default, ‘Use default workspace location’ will be selected. Just click on next button to proceed.

Fig. 3: Project Details

Fig. 3: Project Details

Select the ‘Maven Web App’ Archetype from the list of options and click next.

Fig. 4: Archetype Selection

Fig. 4: Archetype Selection

It will ask you to ‘Enter the group and the artifact id for the project’. We will input the details as shown in the below image. The version number will be by default: 0.0.1-SNAPSHOT.

Fig. 5: Archetype Parameters

Fig. 5: Archetype Parameters

Click on Finish and the creation of a maven project is completed. If you observe, it has downloaded the maven dependencies and a pom.xml file will be created. It will have the following code:

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>JavaServletExceptionHandlingEx</groupId>
	<artifactId>JavaServletExceptionHandlingEx</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>
</project>

We can start adding the dependencies that developers want like Servlets, Junit etc. Let’s start building the application!

3. Application Building

Below are the steps involved in developing this application.

3.1 Maven Dependencies

Here, we specify the dependencies for the Servlet API. The rest dependencies will be automatically resolved by the Maven framework and the updated file will have the following code:

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>JavaServletExceptionHandlingEx</groupId>
	<artifactId>JavaServletExceptionHandlingEx</artifactId>
	<packaging>war</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<name>JavaServletExceptionHandlingEx Maven Webapp</name>
	<url>http://maven.apache.org</url>
	<dependencies>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>3.1.0</version>
		</dependency>
	</dependencies>
	<build>
		<finalName>${project.artifactId}</finalName>
	</build>
</project>

3.2 Java Class Creation

Let’s create the required Java files. Right-click on src/main/java folder, New -> Package.

Fig. 6: Java Package Creation

Fig. 6: Java Package Creation

A new pop window will open where we will enter the package name as: com.jcg.servlet.

Fig. 7: Java Package Name (com.jcg.servlet)

Fig. 7: Java Package Name (com.jcg.servlet)

Once the package is created in the application, we will need to create the 2 different controller classes. Right-click on the newly created package: New -> Class.

Fig. 8: Java Class Creation

Fig. 8: Java Class Creation

A new pop window will open and enter the file name as: MyExceptionServlet. The servlet controller class will be created inside the package: com.jcg.servlet.

Fig. 9: Java Class (MyExceptionServlet.java)

Fig. 9: Java Class (MyExceptionServlet.java)

Repeat the step (i.e. Fig. 8) and enter the filename as: ErrorHandler. The error handler class to read the cookies will be created inside the package: com.jcg.servlet.

Fig. 10: Java Class (ErrorHandler.java)

Fig. 10: Java Class (ErrorHandler.java)

3.2.1 Implementation of Servlet that Generates an Error

This servlet is used to throw an error to test the configuration. Let’s see the simple code snippet that follows this implementation.

MyExceptionServlet.java

package com.jcg.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/myExceptionServlet")
public class MyExceptionServlet extends HttpServlet {

	private static final long serialVersionUID = 1L;

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		throw new ServletException("HTTP GET Method Is Not Supported.");
	}
}

3.2.2 Implementation of Servlet Exception Handling

Developers will map this servlet in the servlet descriptor to handle all the exceptions. They can get the information about the exception that occurred from the request attributes. Let’s see the simple code snippet that follows this implementation.

ErrorHandler.java

package com.jcg.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/error")
public class ErrorHandler extends HttpServlet {

	private static final long serialVersionUID = 1L;

	/***** This Method Is Called By The Servlet Container To Process A 'GET' Request *****/
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
		handleRequest(request, response);
	}

	public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {

		/***** Analyze The Servlet Exception *****/    		
		Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code");
		String servletName = (String) request.getAttribute("javax.servlet.error.servlet_name");
		Throwable throwable = (Throwable) request.getAttribute("javax.servlet.error.exception");

		if (servletName == null) {
			servletName = "Unknown";
		}

		String requestUri = (String) request.getAttribute("javax.servlet.error.request_uri");
		if (requestUri == null) {
			requestUri = "Unknown";
		}

		/***** Set Response Content Type *****/
		response.setContentType("text/html");

		/***** Print The Response *****/
		PrintWriter out = response.getWriter();
		String title = "Error/Exception Information";		
		String docType = "<!DOCTYPE html>n";
		out.println(docType 
				+ "<html>n" + "<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>" + title + "</title></head>n" + "<body>");

		if (throwable == null && statusCode == null) {
			out.println("<h3>Error Information Is Missing</h3>");			
		} else if (statusCode != 500) {
			out.write("<h3>Error Details</h3>");
			out.write("<ul><li><strong>Status Code</strong>?= "+ statusCode + "</li>");
			out.write("<li><strong>Requested URI</strong>?= "+ requestUri + "</li></ul>");
		} else {
			out.println("<h3>Exception Details</h3>");
			out.println("<ul><li><strong>Servlet Name</strong>?= " + servletName + "</li>");
			out.println("<li><strong>Exception Name</strong>?= " + throwable.getClass( ).getName( ) + "</li>");
			out.println("<li><strong>Requested URI</strong>?= " + requestUri + "</li>");
			out.println("<li><strong>Exception Message</strong>?= " + throwable.getMessage( ) + "</li></ul>");
		}

		out.println("<div> </div>Click <a id="homeUrl" href="index.jsp">home</a>");
		out.println("</body>n</html>");
		out.close();
	}
}

3.3 Servlet Exception Handling in the Servlet Descriptor

Let’s see the simple code snippet to configure the exception handling in the servlet.

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee        http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
   <display-name>Error/Exception Information</display-name>
     
   <!-- Error Code Related Error Pages -->
   <error-page>
      <error-code>404</error-code>
      <location>/error</location>
   </error-page>
   <error-page>
      <error-code>403</error-code>
      <location>/error</location>
   </error-page>
   <!-- Exception Type Related Error Pages -->
   <error-page>
      <exception-type>javax.servlet.ServletException</exception-type>
      <location>/error</location>
   </error-page>
   <error-page>
      <exception-type>java.io.IOException</exception-type>
      <location>/error</location>
   </error-page>
</web-app>

4. Run the Application

As we are ready for all the changes, let us compile the project and deploy the application on the Tomcat7 server. To deploy the application on Tomat7, right-click on the project and navigate to Run as -> Run on Server.

Fig. 11: How to Deploy Application on Tomcat

Fig. 11: How to Deploy Application on Tomcat

Tomcat will deploy the application in its web-apps folder and shall start its execution to deploy the project so that we can go ahead and test it in the browser.

5. Project Demo

Open your favorite browser and hit the following URL. The output page will be displayed.

http://localhost:8085/JavaServletExceptionHandlingEx/myExceptionServlet

Server name (localhost) and port (8085) may vary as per your Tomcat configuration. Developers can debug the example and see what happens after every step. Enjoy!

Fig. 12: 500 – Servlet That Generates an Error

Fig. 12: 500 – Servlet That Generates an Error

If we will try to access an invalid URL that will result in 404 response, we will get a response like below image.

Fig. 13: 404 – Page Not Found

Fig. 13: 404 – Page Not Found

That’s all for this post. Happy Learning!!

6. Conclusion

In this section, developers learned how to tackle the Servlet 3.0 Exception Handling. Developers can download the sample application as an Eclipse project in the Downloads section. I hope this article served you with whatever developers were looking for.

7. Download the Eclipse Project

This was an example of Exception Handling in Servlets.

When a servlet generates an error developers can handle those exceptions in various ways. For example, when user tries a URL that does not map to a servlet the user typically gets a 404 page. With the error listing in the deployment descriptor, we can handle those exceptions. In this tutorial, we will handle these exceptions in the Servlet.

An exception is an event, which occurs during the execution of a program, which disrupts the normal flow of the program’s instructions. The process of converting the system error messages into user-friendly error messages is known as Exception Handling. There are two main mechanisms of exception handling in Java Web Application: 

  • Programmatically exception handling mechanism: When using try and catch block in the Java code (Servlet or Filter class) to handle exceptions.
  • Declarative exception handling mechanism: When using the XML tags in the web.xml deployment descriptor file for web application to handle the exception. This mechanism is useful if exception is common for more than one servlet program.

Declarative exception handling mechanism

A customized content can be returned to a user when a servlet generates an error. Developers can do that by adding the <error-page /> elements in the web.xml. The following table describes the elements developers can define within an error-page element.

Element

Required or Optional

Description

<error-code>

Optional

A valid HTTP error code. For e.g. 500 etc

<exception-type>

Optional

A fully-qualified class name of a Java exception type

<location>

Required

The location of the resource which is displayed to the user in case of an error. For e.g. /error.html , /error.jsp , /error

Request Attributes Related to Error Information

If the destination in the <location> is a servlet or a JSP page:

  • The original request and response objects are passed to the destination
  • The request path and the attributes are set as if a forward to the error resource had been performed
  • The following request attributes are set:
    • javax.servlet.error.status_code of type java.lang.Integer.
    • javax.servlet.error.exception_type of type java.lang.Class.
    • javax.servlet.error.message of type java.lang.String.
    • javax.servlet.error.exception of type java.lang.Throwable.
    • javax.servlet.error.request_uri of type java.lang.String.
    • javax.servlet.error.servlet_name of type java.lang.String.

Types of Error a Servlet/Filter can Throw

A servlet or filter may throw the following exceptions during the processing of a request:

  • Unchecked Exceptions i.e. lang.RuntimeException, Error, and subclasses
  • servlet.ServletException or subclasses
  • io.IOExceptionor subclasses

Note: All other exceptions should be wrapped in javax.servlet.ServletException.

Web.xml tags for declaring error handling

<web-app ...>
    ....
    <error-page>
        <exception-type>java.lang.ArithmeticException</exception-type>
        <location>/errorHandler</location>
    </error-page>
    ....    
</web-app>

Servlet Class for handling exception

@WebServlet(name = "errorHandlerServlet",
        urlPatterns = {"/errorHandler"},
        loadOnStartup = 1)
public class ErrorHandlerServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req,
            HttpServletResponse resp)
            throws ServletException, IOException {

        PrintWriter writer = resp.getWriter();
        Exception exception = (Exception) req.getAttribute(
                "javax.servlet.error.exception");
        writer.printf("exception: %s%n", exception);
        Class exceptionClass = (Class) req.getAttribute(
                "javax.servlet.error.exception_type");
        writer.printf("exception_type: %s%n", exceptionClass);
        Integer code = (Integer) req.getAttribute(
                "javax.servlet.error.status_code");
        writer.printf("status_code: %s%n", code);
        String errorMessage = (String) req.getAttribute(
                "javax.servlet.error.message");
        writer.printf("message: %s%n", errorMessage);
        String requestUri = (String) req.getAttribute(
                "javax.servlet.error.request_uri");
        resp.getWriter().printf("request_uri: %s%n",
                requestUri);
        String servletName = (String) req.getAttribute(
                "javax.servlet.error.servlet_name");
        writer.printf("servlet_name: %s%n", servletName);
    }
}

JSP page for handling exception

<%@page contentType="text/html" pageEncoding="UTF-8" errorPage="true"%>
<!doctype html>
<html>
    <head>
    ...
    </head>
    <body>
        <ul>
            <li>Exception: ${requestScope['javax.servlet.error.exception']}</li>
            <li>Exception type: ${requestScope['javax.servlet.error.exception_type']}</li>
            <li>Exception message: ${requestScope['javax.servlet.error.message']}</li>
            <li>Request URI: ${requestScope['javax.servlet.error.request_uri']}</li>
            <li>Servlet name: ${requestScope['javax.servlet.error.servlet_name']}</li>
            <li>Status code: ${requestScope['javax.servlet.error.status_code']}</li>
        </ul>
    </body>
</html>

Понравилась статья? Поделить с друзьями:
  • Javax persistence rollbackexception error while committing the transaction
  • Javax persistence persistenceexception error attempting to apply attributeconverter
  • Javascript обработка ошибок
  • Javascript как изменить цвет текста
  • Javascript как изменить цвет строки