Java EE 7 SDK

Samples Main Page

# The Absolute Ordering of Web Fragments Servlet Sample Application

This is a simple Servlet application that uses web fragments with absolute ordering.

## Description

Servlet

The servlet reads the initial parameter, a request attribute, a context attribute, and provides the result.

    @WebServlet("/")
    public class TestServlet extends HttpServlet {
        public void service(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {
            String message = "filterMessage=" + req.getAttribute("filterMessage");
            res.getWriter().println(message);
        }
    }

`@javax.servlet.annotation.WebServlet` is an annotation that specifies metadata for a servlet. In this case, it specifies the URL pattern. You need to extend `javax.servlet.http.HttpServlet`.

Web Fragments

In this sample, there are three web fragment `jar`s. Each `jar` has a filter. The information of the web fragments is summarized in the following table:

jar name | web-fragment.xml | filter class | @WebFilter | filter action
--- | --- | --- | --- | ---
`webfragment1.jar` |  | `Wf1TestFilter.java` | present | append "1" to the `filterMessage` request attribute
`webfragment2.jar` | with name A and meta-data for filters | `Wf2TestFilter.java` | no | append "2" to the `filterMessage` request attribute
`webfragment3.jar` | with name B | `Wf3TestFilter.java` | present | append "3" to the `filterMessage` request attribute

The implementations of the filters are all similar. For instance, `Wf1TestFilter.java` is implemented as follows:

    @WebFilter(urlPatterns={"/"}, dispatcherTypes= { DispatcherType.REQUEST })
    public class Wf1TestFilter implements Filter {
        public void init(FilterConfig filterConfig) throws ServletException {
        }

        public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
    	                     throws IOException, ServletException {
            String filterMessage = (String)req.getAttribute("filterMessage");
            if (filterMessage == null) {
                filterMessage = "";
            }
            filterMessage += "1";
            req.setAttribute("filterMessage", filterMessage);
            chain.doFilter(req, res);
        }

        public void destroy() {
        }
    }

`@javax.servlet.annotation.WebFilter` is an annotation that specifies meta-data for a filter. In this case, it specifies the URL pattern and dispatcher types. You need to extend `javax.servlet.Filter`.

Deployment Descriptor

The deployment descriptor specifies the ordering of the web fragment being processed as follows:

    <web-app xmlns="http://java.sun.com/xml/ns/javaee"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.0"
                xsi:schemaLocation="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
        <absolute-ordering>
            <name>A<name>
            <others/>
            <name>B<name>
        </absolute-ordering>
    </web-app>

With this absolute ordering, the web fragment `jar`s are processed in the following order: `webfragment2.jar`, `webfragment1.jar`, `webfragment3.jar`.

Sun GlassFish Enterprise Server Specific Deployment Configuration

There is no need to define any Sun GlassFish Enterprise Server-specific deployment descriptor (`sun-web.xml`) for this example.

## Key Features

This sample application demonstrates the following key features:

- Customizing web fragments
- Specifying the absolute ordering of web fragments in the deployment descriptor

## Building, Deploying, and Running the Application

Follow these instructions for building, deploying, and running this 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/absolute-ordering-web-fragments`.
3. Change directory to `app_dir`.
4. Build, deploy, the sample application using the `mvn` target:

   To build the project, you can use the command line below, which compiles three fragment `jar` files and builds the `war` file with those fragment `jar` files under `app_dir/absolute-ordering-web-fragments-war/target`:

   `mvn install`

   To deploy the project, go to `app_dir/absolute-ordering-web-fragments-war/` and use the command below (you may need to start the server before deploying):

   `app_dir/absolute-ordering-web-fragments-war/>
   asadmin deploy ./target/absolute-ordering-web-fragments-war.war`

   You have to modify the `dependency` element in `app_dir/absolute-ordering-web-fragments-war/pom.xml` if you want to compile the fragment `jar` files manually and build the `war` file seperately.

5. You can run the test as follows:

   Use the browser to access
   `http://<javaee.server.name>:<javaee.server.port>/absolute-ordering-web-fragments-war`

   The expected message in the browser is as follows:

   `filterMessage=213`

6. Use the glassfish command line to undeploy the application.

   `app_dir> asadmin undeploy` <app_name>

7. 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/absolute-ordering-web-fragments` directory, select `absolute-ordering-web-fragments-war`, select Open Required Projects, and click Open Project.
3. In the Projects tab, right click `absolute-ordering-web-fragments-war` and select Run to build, deploy, and run the project.

Note: You may have to import the fragments jar files into `WEB-INF/lib`

## Troubleshooting

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

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