关闭

Servlet3.0模块化支持

标签: Servlet3.0模块化web-fragment.xml示例支持
3384人阅读 评论(0) 收藏 举报
分类:

Servlet3.0模块化支持

 

       Servlet3.0现在已经支持各Web组件的模块化了。也就是说现在我们可以把各Web组件单独拿出来进行开发,之后把它们打成对应的jar包放到主项目中就可以了,而不必像之前那样——所有的内容都必须在web.xml文件中进行定义。有了对模块化的支持后我们在实际应用中就可以把某些通用功能的Filter、Listener、Servlet作为一个单独的Web模块进行定义,在需要使用它们的项目中就把对应Web模块对应的jar包加进去就可以了。是不是很有用呢?接下来我们就来看一下这些Web组件究竟是怎样模块化的。

       Web模块打成的jar包的内容的文件结构要求是这个样子的:

|--META-INF

|     |--web-fragment.xml

|     |--resources

|     |     |--jsp、图片等,相当于web的根目录

|--class文件和类路径下的文件

 

       其中web-fragment.xml文件是必须要的。上述目录结构就相当于在我们的类路径下有一个META-INF目录,该目录下有web-fragment.xml文件及包含jsp、图片等资源的resources目录。针对于上述这样的目录结构,所以当我们在使用Maven构建项目的时候,我们的Maven项目的目录结构应该是这个样子的:



 
       web-fragment.xml文件的作用与Web应用下的web.xml文件的作用是相似的,在web.xml文件可以配置的信息都可以在web-fragment.xml文件中进行配置。此外,它们的文档结构也非常的相似。所不同的是web-fragment.xml文件的根元素是web-fragment,所使用的schema也是web-fragment相应的schema。

Xml代码  收藏代码
  1. <web-fragment version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"  
  2.    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  3.    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-fragment_3_0.xsd">  
  4.     
  5. </web-fragment>  

 

       另外,在web-fragment.xml文件中我们可以通过<name>元素来指定当前模块的名称,用<ordering>元素来指定当前模块相对的加载顺序。<ordering>元素下面可以指定<before>或<after>元素,而<before>和<after>元素下又可以指定<name>和<others>元素。我们来看几个指定ordering的示例。

在其他模块之前加载

Xml代码  收藏代码
  1. <ordering>  
  2.    <!-- 在其它模块之前加载 -->  
  3.    <before>  
  4.       <others/>  
  5.    </before>  
  6. </ordering>  

  

在指定模块之后加载

Xml代码  收藏代码
  1. <ordering>  
  2.    <!-- 在指定模块之后加载 -->  
  3.    <after>  
  4.       <name>模块名称</name>  
  5.    </after>  
  6. </ordering>  

  

       除了可以在web-fragment.xml文件里面通过<ordering>元素定义当前模块的加载顺序外,我们还可以在web.xml文件中通过<absolute-ordering>元素指定各模块的 加载顺序。而且web.xml文件中指定的加载顺序比web-fragment.xml文件中指定的加载顺序具有更高的优先级。如:

Xml代码  收藏代码
  1. <absolute-ordering>  
  2.    <name>module1</name>  
  3.    <name>module2</name>  
  4.    <name>module3</name>  
  5.    <others/>  
  6. </absolute-ordering>  

  

       接下来我们来展示一个创建web模块的例子。假设我们要创建一个叫做module1的模块,其中含有一个Module1Servlet,其代码如下所示:

Java代码  收藏代码
  1. public class Module1Servlet extends HttpServlet {  
  2.    
  3.    private static final long serialVersionUID = 1L;  
  4.    
  5.    @Override  
  6.    protected void doGet(HttpServletRequest req, HttpServletResponse resp)  
  7.          throws ServletException, IOException {  
  8.       this.doPost(req, resp);  
  9.    }  
  10.    
  11.    @Override  
  12.    protected void doPost(HttpServletRequest req, HttpServletResponse resp)  
  13.          throws ServletException, IOException {  
  14.       req.getRequestDispatcher("/module1.jsp").forward(req, resp);  
  15.    }  
  16.    
  17. }  

  

       接着我们在类路径下创建一个META-INF文件夹,在该文件夹下创建一个resources目录,在resources目录下创建一个module1.jsp文件。接着在META-INF目录下创建一个web-fragment.xml文件,其内容如下:

Xml代码  收藏代码
  1. <web-fragment version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"  
  2.    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  3.    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-fragment_3_0.xsd">  
  4.     
  5.    <!-- 指定模块名称 -->  
  6.    <name>module1</name>  
  7.    <!-- 加载顺序 -->  
  8.    <ordering>  
  9.       <!-- 在其它模块之前加载 -->  
  10.       <before>  
  11.          <others/>  
  12.       </before>  
  13.    </ordering>  
  14.     
  15.    <servlet>  
  16.       <servlet-name>module1Servlet</servlet-name>  
  17.       <servlet-class>com.xxx.Module1Servlet</servlet-class>  
  18.    </servlet>  
  19.     
  20.    <servlet-mapping>  
  21.       <servlet-name>module1Servlet</servlet-name>  
  22.       <url-pattern>/servlet/module1</url-pattern>  
  23.    </servlet-mapping>  
  24.     
  25. </web-fragment>  

 

       之后我们把该项目打成一个jar包就可以把它作为一个jar加到其它Web应用中,在其它Web应用中使用了。放到其它Web应用中后,我们通过访问/servlet/module1就可以访问到我们module1模块中定义的Module1Servlet了。

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Servlet3.0模块化支持

Servlet3.0模块化支持          Servlet3.0现在已经支持各Web组件的模块化了。也就是说现在我们可以把各Web组件单独拿出来进行开发,之后把它们打成对应的jar包放到主项...
  • zylzb
  • zylzb
  • 2014-10-27 17:38
  • 815

Servlet3.0模块化支持

Servlet3.0现在已经支持各Web组件的模块化了。也就是说现在我们可以把各Web组件单独拿出来进行开发,之后把它们打成对应的jar包放到主项目中就可以了,而不必像之前那样——所有的内容都必须在w...
  • bobo_93
  • bobo_93
  • 2016-06-10 15:11
  • 104

Servlet3.0特性-模块化

Servlet3.0模块化解决方案(以Maven构建为例)模块化通俗的讲就是可以将一个包含多个子模块的web项目,可以拆分为一个web项目+多个java项目。每个java项目对应一个web子模块。每个...
  • changcongying
  • changcongying
  • 2016-11-03 09:47
  • 529

Servlet3.0 新特性之模块化实践

Web模块支持为模块化开发、框架使用提供了巨大的方便,例如需要在Web应用中使用Web框架,这就只要将该框架的JAR包复制到Web应用中即可。因为这个Jar包的META—INF目录下可以通过web-f...
  • chunxiaqiudong5
  • chunxiaqiudong5
  • 2016-10-17 17:13
  • 804

支持注解的Servlet3.0监听器

支持注解的Servlet3.0监听器          Servlet3.0中的监听器跟之前2.5的差别不大,唯一的区别就是增加了对注解的支持。在3.0以前我们的监听器配置都是需要配置在web.x...
  • zylzb
  • zylzb
  • 2014-10-27 17:38
  • 772

Servlet3.0异步支持

Servlet3.0中异步支持。
  • pseudonym_
  • pseudonym_
  • 2017-06-09 01:14
  • 79

支持注解的Servlet3.0监听器

支持注解的Servlet3.0监听器        Servlet3.0中的监听器跟之前2.5的差别不大,唯一的区别就是增加了对注解的支持。在3.0以前我们的监听器配置都是需要配置在web.xml文件...
  • elim168
  • elim168
  • 2017-06-26 17:05
  • 4260

Servlet3.0新特性全解

tomcat 7以上的版本都支持Servlet 3.0Servlet 3.0 新增特性 注解支持;Servlet、Filter、Listener无需在web.xml中进行配置,可以通过对应注解进行配置...
  • zcl_love_wx
  • zcl_love_wx
  • 2016-07-30 22:10
  • 1143

使用Servlet3.0上传文件

Servlet3.0支持HttpServletRequest对文件的上传,提供了两个方法: 1.Part getPart(String name):根据名称获取文件的上传域。 2.Collection...
  • Leafage_M
  • Leafage_M
  • 2017-01-15 14:08
  • 862

精简Servlet3.0进行图片上传

图片上传
  • yanlzhl
  • yanlzhl
  • 2016-08-05 21:54
  • 305
    个人资料
    • 访问:1142237次
    • 积分:13327
    • 等级:
    • 排名:第1152名
    • 原创:195篇
    • 转载:0篇
    • 译文:0篇
    • 评论:69条
    博客专栏
    文章分类