Download FAQ History |  | API Search Feedback

> ## Servlet Life Cycle

> The life cycle of a servlet is controlled by the container in which the servlet has been deployed. When a request is mapped to a servlet, the container performs the following steps.

> 1. If an instance of the servlet does not exist, the Web container
> 1. Loads the servlet class.
> 2. Creates an instance of the servlet class.
> 3. Initializes the servlet instance by calling the `init` method. Initialization is covered in Initializing a Servlet.
> 2. Invokes the `service` method, passing a request and response object. Service methods are discussed in Writing Service Methods.

> If the container needs to remove the servlet, it finalizes the servlet by calling the servlet's `destroy` method. Finalization is discussed in Finalizing a Servlet.

> ### Handling Servlet Life Cycle Events

> You can monitor and react to events in a servlet's life cycle by defining listener objects whose methods get invoked when life cycle events occur. To use these listener objects you must define the listener class and specify the listener class.

> #### Defining The Listener Class

> You define a listener class as an implementation of a listener interface. Servlet Life Cycle Events lists the events that can be monitored and the corresponding interface that must be implemented. When a listener method is invoked, it is passed an event that contains information appropriate to the event. For example, the methods in the `HttpSessionListener` interface are passed an `HttpSessionEvent`, which contains an `HttpSession`.

> Table 15-2 Servlet Life Cycle Events
> Object | Event | Listener Interface and Event Class
> --- | --- | ---
> Web context (See Accessing the Web Context) | Initialization and destruction | `javax.servlet. ServletContextListener` and `ServletContextEvent`
> Attribute added, removed, or replaced | `javax.servlet. ServletContextAttributeListener` and `ServletContextAttributeEvent`
> Session (See Maintaining Client State) | Creation, invalidation, activation, passivation, and timeout | `javax.servlet.http. HttpSessionListener`, `javax.servlet.http. HttpSessionActivationListener``,``` and `HttpSessionEvent`
> Attribute added, removed, or replaced | `javax.servlet.http. HttpSessionAttributeListener` and `HttpSessionBindingEvent`
> Request | A servlet request has started being processed by Web components | `javax.servlet. ServletRequestListener` and `ServletRequestEvent`
> Attribute added, removed, or replaced | `javax.servlet. ServletRequestAttributeListener` and `ServletRequestAttributeEvent`

> The `listeners.ContextListener` class creates and removes the database helper and counter objects used in the Duke's Bookstore application. The methods retrieve the Web context object from `ServletContextEvent` and then store (and remove) the objects as servlet context attributes.

>     import database.BookDB;
>     import javax.servlet.*;
>     import util.Counter;

>     public final class ContextListener
>       implements ServletContextListener {
>       private ServletContext context = null;
>       public void contextInitialized(ServletContextEvent event) {
>         context = event.getServletContext();
>         try {
>           BookDB bookDB = new BookDB();
>           context.setAttribute("bookDB", bookDB);
>         } catch (Exception ex) {
>           System.out.println(
>             "Couldn't create database: " + ex.getMessage());
>         }
>         Counter counter = new Counter();
>         context.setAttribute("hitCounter", counter);
>         counter = new Counter();
>         context.setAttribute("orderCounter", counter);
>       }

>       public void contextDestroyed(ServletContextEvent event) {
>         context = event.getServletContext();
>         BookDB bookDB = context.getAttribute(
>           "bookDB");
>         bookDB.remove();
>         context.removeAttribute("bookDB");
>         context.removeAttribute("hitCounter");
>         context.removeAttribute("orderCounter");
>       }
>     }

> #### Specifying Event Listener Classes

> To specify an event listener class, you add a `listener` element to the Web application deployment descriptor. Here is the `listener` element for the Duke's Bookstore application:

>     <listener>
>       <listener-class>listeners.ContextListener</listener-class>
>     </listener>

> ### Handling Errors

> Any number of exceptions can occur when a servlet is executed. The Web container will generate a default page containing the message `A Servlet Exception Has Occurred` when an exception occurs, but you can also specify that the container should return a specific error page for a given exception.To specify such a page, you add an `error-page` element to the Web application deployment descriptor. These elements map the exceptions returned by the Duke's Bookstore application to `errorpage.html`:

>     <error-page>
>       <exception-type>
>         exception.BookNotFoundException
>       </exception-type>
>       <location>/errorpage.html</location>
>     </error-page>
>     <error-page>
>       <exception-type>
>         exception.BooksNotFoundException
>       </exception-type>
>       <location>/errorpage.html</location>
>     </error-page>
>     <error-page>
>       <exception-type>exception.OrderException</exception-type>
>       <location>/errorpage.html</location>
>     </error-page>

Download FAQ History |  | API Search Feedback

All of the material in The Java(TM) Web Services Tutorial is copyright-protected and may not be published in other works without express written permission from Sun Microsystems.