Java EE 6 SDK

Samples Main Page

# The Servlet 3.0 ServletContainerInitializer Sample Application

This sample application demonstrates how the ServletContainerInitializer feature can be used by libraries to register interest in certain types of applications and take whatever action as the library sees fit.

## Description

This sample application has a (dummy) library with a class, `web.servlet.servletcontainerinitializer_lib.SharedLibrary`, that implements `javax.servlet.ServletContainerInitializer`. This class declares interest in any web application that has a class that uses the `@javax.servlet.annotation.WebServlet` annotation. This class registers such interest by using the `@javax.servlet.annotation.HandlesTypes` annotation. The action performed by this (dummy) library is to set an attibute `SHAREDLIB-1` in the `ServletContext` whenever an application, in which at least one class uses `@WebServlet` annotation, is getting deployed.

The main web application in this sample has a class that uses `@WebServlet` annotation and this class checks if the attribute `SHAREDLIB-1` is indeed set in the `ServletContext` for this application.

When started, this sample, stops GlassFish server (if it is already running), creates the (dummy) library and places this library JAR file in the `$GLASSFISH_HOME/lib` directory before restarting GlassFish server. During server start, the web container scans the libraries and registers the `ServletContainerInitializer` implementations and their respective interest. When the sample application (which uses `@WebServlet`) is deployed, the web container recognizes that the `ServletContainerInitializer` implementation in the (dummy) library will be interested in this application. Hence the web container will call the `onStartUp` method which will set `SHAREDLIB-1` attribute in the `ServletContext` of the application which is read and printed by the sample application on the browser.

## Building, Deploying, and Running the Application

Perform the following steps to build, deploy, and run the application:

1. Set up your build environment and configure the application server with which the build system has to work by following the common build instructions.
2. `app_dir` is the sample application base directory: `samples_install_dir/javaee6/web/servlet/servletcontainerinitializer-war`.
3. ````Change directory to `app_dir.
   `
4. Build, deploy and run the sample application using the `all` target``

`app_dir>` `ant all
`

You can replace the `ant all` command with the following set of commands:
``

`app_dir> ant default` compiles and packages the application

`app_dir> ant deploy` deploys it to application server

`app_dir> ant run` runs the test

5. Note: You can run the test in one of the following ways:
   - Use the browser to access http:<javaee.server.name>:<javaee.server.port>//servletcontainerinitializer-war/SampleServlet
     The following output is expected in the browser:
     `ServletContainerInitializer says : Attribute successfully set by SharedLibrary class which has expressed interest in @WebServlet`
   - `app_dir> ant run`
6. Use the target `undeploy` to undeploy the application.

   `app_dir> ant undeploy`

7. Use the target `clean` to remove the temporary directories like build and dist.

   `app_dir> ant clean`

## Building, Deploying, and Running the Application in NetBeans IDE

Perform the following steps to build, deploy, and run the application using NetBeans IDE:

1. Refer to the common build instructions for setting up NetBeans IDE and Java EE 6 SDK.
2. In the NetBeans IDE, choose File → Open Project (Ctrl-Shift-O), navigate to the `samples_install_dir/javaee6/web/servlet/` directory, select `servletcontainerinitializer-war`, select Open Required Projects, and click Open Project.
3. In the Projects tab, right click `servletcontainerinitializer-war` and select Run to build, deploy, and run the project.

## Troubleshooting

If you have problems when running the application, refer the troubleshooting document.

Copyright © 1997-2010 Oracle and/or its affiliates. All rights reserved.