Servlet-模块化开发web fragment

本文介绍了如何在不影响web.xml的前提下,通过web fragment进行模块化开发,提高代码复用性和降低耦合。详细讲解了开发web fragment project的步骤,包括配置web-fragment.xml、开发servlet,并给出了监听器和过滤器的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Servlet-模块化开发web fragment

sf2gis@163.com

2015年9月17日

 

1 目标:在不影响web.xml整体结构的情况下,独立开发web模块,提高复用性、降低耦合。

2 原理:容器识别web-fragment.xml配置文件,将其与整体应用合并。

3 流程:在web.xml中启用模块化(与注记相同)。开发web fragment project。打包。应用到目webapp。

注意:web-fragment.xml会自动生成display-name标签,则标签要删除,否则无法使用多个模块。

catalina.log中的错误提示:Thedisplay name was defined in multiple fragments with different values

参考:http://chainhou.iteye.com/blog/1986090

4 方法:

5 开发web fragment project:

5.1 新建webfragment project应用。

注意:如果指定了目标应用程序,则Eclipse会自动打包、应用。

5.2 配置web-fragment.xml。

删除display-name标签。

增加相关的标签。(也可以使用注记)。

模块名称:<name>

模块加载顺序:<ordering><before><after>

5.3 开发相应的servlet。

开发模块化的功能类。

6 打包:export 为jar。

7 应用:将jar复制到web-inf的lib目录。

8 示例:创建两个独立的监听器和一个过滤器

//第一个监听模块:TF1的web-fragment.xml

<?xmlversion="1.0" encoding="UTF-8"?>

<web-fragmentxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:webfragment="http://java.sun.com/xml/ns/javaee/web-fragment_3_0.xsd"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaeehttp://xmlns.jcp.org/xml/ns/javaee/web-fragment_3_1.xsd"id="WebFragment_ID" version="3.1">

  <name>TF1</name>

  <listener>

   <listener-class>lee.TF1</listener-class>

  </listener>

  <ordering>

    <before>

      <others/>

    </before>

  </ordering>

</web-fragment>

//第一个监听模块的处理类:TF1.java

 

package lee;

 

importjavax.servlet.ServletRequestEvent;

import javax.servlet.ServletRequestListener;

importjavax.servlet.annotation.WebListener;

 

/**

 * Application Lifecycle Listenerimplementation class TF1

 *

 */

@WebListener

public class TF1 implementsServletRequestListener {

 

    /**

     * Default constructor.

     */

    public TF1() {

        // TODO Auto-generated constructor stub

    }

 

      /**

     * @seeServletRequestListener#requestDestroyed(ServletRequestEvent)

     */

    public voidrequestDestroyed(ServletRequestEvent arg0) {

         // TODO Auto-generated method stub

      System.out.println("1.1");

    }

 

      /**

     * @seeServletRequestListener#requestInitialized(ServletRequestEvent)

     */

    public voidrequestInitialized(ServletRequestEvent arg0) {

         // TODO Auto-generated method stub

      System.out.println("1.0");

    }

     

}

//第二个监听模块:TF2的web-fragment.xml

<?xmlversion="1.0" encoding="UTF-8"?>

<web-fragmentxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:webfragment="http://java.sun.com/xml/ns/javaee/web-fragment_3_0.xsd"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaeehttp://xmlns.jcp.org/xml/ns/javaee/web-fragment_3_1.xsd"id="WebFragment_ID" version="3.1">

  <name>TF2222222222</name>

  <listener>

   <listener-class>lee.TF2</listener-class>

  </listener>

  <ordering>

    <after>

     <name>TF1</name>

    </after>

  </ordering>

</web-fragment>

package lee;

//第二个监听模块处理类:TF2.java

importjavax.servlet.ServletRequestEvent;

import javax.servlet.ServletRequestListener;

importjavax.servlet.annotation.WebListener;

 

/**

 * Application Lifecycle Listenerimplementation class TF2

 *

 */

@WebListener

public class TF2 implementsServletRequestListener {

 

    /**

     * Default constructor.

     */

    public TF2() {

        // TODO Auto-generated constructor stub

    }

 

      /**

     * @seeServletRequestListener#requestDestroyed(ServletRequestEvent)

     */

    public voidrequestDestroyed(ServletRequestEvent arg0) {

         // TODO Auto-generated method stub

      System.out.println("2.1");

    }

 

      /**

     * @seeServletRequestListener#requestInitialized(ServletRequestEvent)

     */

    public voidrequestInitialized(ServletRequestEvent arg0) {

         // TODO Auto-generated method stub

      System.out.println("2.0");

    }

     

}

//第三个监听模块:TF3的web-fragment.xml

 

<?xmlversion="1.0" encoding="UTF-8"?>

<web-fragmentxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:webfragment="http://java.sun.com/xml/ns/javaee/web-fragment_3_0.xsd"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaeehttp://xmlns.jcp.org/xml/ns/javaee/web-fragment_3_1.xsd"id="WebFragment_ID" version="3.1">

  <name>TF3</name>

</web-fragment>

//第三个监听模块处理类:TF3.java

 

package lee;

 

import java.io.IOException;

import javax.servlet.Filter;

importjavax.servlet.FilterChain;

importjavax.servlet.FilterConfig;

importjavax.servlet.ServletException;

importjavax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

importjavax.servlet.annotation.WebFilter;

 

/**

 * Servlet Filter implementation class TF3

 */

@WebFilter("/*")

public class TF3 implementsFilter {

 

    /**

     * Default constructor.

     */

    public TF3() {

        // TODO Auto-generated constructor stub

    }

 

      /**

       * @see Filter#destroy()

       */

      public void destroy() {

           // TODO Auto-generated method stub

           System.out.println("3.3");

      }

 

      /**

       * @seeFilter#doFilter(ServletRequest, ServletResponse, FilterChain)

       */

      public void doFilter(ServletRequest request, ServletResponseresponse, FilterChain chain) throws IOException, ServletException {

           // TODO Auto-generated method stub

           // place your code here

 

           // pass the request along the filter chain

           System.out.println("3.1");

           chain.doFilter(request, response);

           System.out.println("3.2");

      }

 

      /**

       * @seeFilter#init(FilterConfig)

       */

      public void init(FilterConfig fConfig) throws ServletException{

           // TODO Auto-generated method stub

           System.out.println("3.0");

      }

 

}

 

//结果:a.jsp请求

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

弗里曼的小伙伴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值