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 jars. Each jar has a filter. The information of the web fragments is summarized in the following table:

jar nameweb-fragment.xmlfilter class@WebFilterfilter 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 jars 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:

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.