Java EE 7 SDK

Samples Main Page

# The Servlet Container Initializer Sample Application

This sample application demonstrates how the servlet container initializer 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, `Initializer`, that implements `ServletContainerInitializer`. This class declares interest in any web application that has a class that uses the `@WebServlet` annotation. This class registers such interest by using the `@HandlesTypes` annotation. The action performed by this (dummy) library is to set an attibute `SHAREDLIB-1` in the `ServletContext` whenever an application is deployed in which at least one class uses `@WebServlet` annotation.

The main web application in this sample has a class that uses the `@WebServlet` annotation. 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 calls the `onStartUp` method which sets the `SHAREDLIB-1` attribute in the `ServletContext` of the application. The application reads and prints the attribute on the browser.

## Key Features

This sample application demonstrates how to use the servlet container initializer.

## Building, Deploying, and Running the Application

Perform the following steps to build, deploy, and run the sample 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/servlet/servlet-container-initializer`.
3. ````Change directory to `app_dir.
   `
4. Build the sample application using the `mvn` target:

Use the command below to compile the initializer library and build the main web application war file:

`app_dir> mvn install`

The initializer library is under `app_dir/servlet-container-initializer-lib/target/`. The main web application war file is under `app_dir/servlet-container-initializer-war/target/`

5. Copy `servlet-container-initializer-lib.jar` to `<glassfish4_dir>/glassfish/lib`.
6. Deploy the application:

Go to: `app_dir/servlet-container-initializer-war/target` to find the war file. Deploy the war file by using the command below: (you may have to start the server before deploying)

`servlet-container-initializer-war/> asadmin deploy ./target/servlet-container-initializer-war.war`

Note: You have to restart the server before running the application

7. Test the application as follows:
   - Use the browser to access
     `http://<javaee.server.name>:<javaee.server.port>/servlet-container-initializer-war`
     The following output is expected in the browser:
     `ServletContainerInitializer says : Attribute successfully set by SharedLibrary class which has expressed interest in @WebServlet`
8. Use the glassfish command line to undeploy the application.

   `app_dir> asadmin undeploy <app_name>`

9. Use the target `clean` to remove the temporary directories like /target.

   `app_dir> mvn 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 7 SDK.
2. In the NetBeans IDE, choose File → Open Project (Ctrl-Shift-O), navigate to the `samples_install_dir/servlet/` directory, select `servlet-container-initializer-war`, select Open Required Projects, and click Open Project.
3. In the Projects tab, right click `servlet-container-initializer-war` and select Run to build, deploy, and run the project.

Note: You may have to copy the servlet-container-initializer-lib.jar to $GLASSFISH_HOME/lib and restart the server before running the application

## Troubleshooting

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

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