Servlet 3.0特性详解之可扩展性支持
2010-10-16 19:46
447 查看
如果说3.0版本新增的注解支持是为了简化Servlet/过滤器/监听器的声明,从而使得web.xml变为可选配置,那么新增的可插性
(pluggability)支持则将Servlet配置的灵活性提升到了新的高度。熟悉Struts2的开发者都知道,Struts2通过插件的形式提
供了对包括Spring在内的各种开发框架的支持,开发者甚至可以自己为Struts2开发插件,而Servlet的可插性支持正是基于这样的理念而产生
的。使用该特性,现在我们可以在不修改已有Web应用的前提下,只需将按照一定格式打成的JAR包放到WEB-INF/lib目录下,即可实现新功能的扩
充,不需要额外的配置。
Servlet
3.0引入了称之为“Web模块部署描述符片段”的web-fragment.xml部署描述文件,该文件必须存放在JAR文件的META-INF目录
下,该部署描述文件可以包含一切可以在web.xml中定义的内容。JAR包通常放在WEB-INF/lib目录下,除此之外,所有该模块使用的资源,包
括class文件、配置文件等,只需要能够被容器的类加载器链加载的路径上,比如classes目录等。
现在,为一个Web应用增加一个Servlet配置有如下三种方式(过滤器、监听器与Servlet三者的配置都是等价的,故在此以Servlet配置为例进行讲述,过滤器和监听器具有与之非常类似的特性):
1.编写一个类继承自HttpServlet,将该类放在classes目录下的对应包结构中,修改web.xml,在其中增加一个Servlet声明。这是最原始的方式;
2.编写一个类继承自HttpServlet,并且在该类上使用@WebServlet注解将该类声明为Servlet,将该类放在classes目录下的对应包结构中,无需修改web.xml文件。
3.编写一个类继承自HttpServlet,将该类打成JAR包,并且在JAR包的META-INF目录下放置一个web-fragment.xml文件,该文件中声明了相应的Servlet配置。web-fragment.xml文件示例如下:
从上面的示例可以看出,web-fragment.xml与web.xml除了在头部声明的XSD引用不同之外,其主体配置与web.xml是完全
一致的。由于一个Web应用中可以出现多个web-fragment.xml声明文件,加上一个web.xml文件,加载顺序问题便成了不得不面对的问
题。Servlet规范的专家组在设计的时候已经考虑到了这个问题,并定义了加载顺序的规则。
web-fragment.xml包含了两个可选的顶层标签,<name>和<ordering>,如果希望为当前的文件
指定明确的加载顺序,通常需要使用这两个标签,<name>主要用于标识当前的文件,而<ordering>则用于指定先后顺
序。一个简单的示例如下:
如上所示,<name>标签的取值通常是被其它web-fragment.xml文件在定义先后顺序时引用的,在当前文件中一般用不
着,它起着标识当前文件的作用。在<ordering>标签内部,我们可以定义当前web-fragment.xml文件与其他文件的相对位
置关系,这主要通过<ordering>的<after>和<before>子标签来实现的。在这两个子标签内部可
以通过<name>标签来指定相对应的文件。比如:
以上片段则表示当前文件必须在FragmentB和FragmentC之后解析。<before>的使用于此相同,它所表示的是当前文
件必须早于<before>标签里所列出的web-fragment.xml文件。除了将所比较的文件通过<name>
在<after>和<begin>中列出之外,Servlet还提供了一个简化的标签<others/>。它表示除
了当前文件之外的其他所有的web-fragment.xml文件。该标签的优先级要低于使用<name>明确指定的相对位置关系。
(pluggability)支持则将Servlet配置的灵活性提升到了新的高度。熟悉Struts2的开发者都知道,Struts2通过插件的形式提
供了对包括Spring在内的各种开发框架的支持,开发者甚至可以自己为Struts2开发插件,而Servlet的可插性支持正是基于这样的理念而产生
的。使用该特性,现在我们可以在不修改已有Web应用的前提下,只需将按照一定格式打成的JAR包放到WEB-INF/lib目录下,即可实现新功能的扩
充,不需要额外的配置。
Servlet
3.0引入了称之为“Web模块部署描述符片段”的web-fragment.xml部署描述文件,该文件必须存放在JAR文件的META-INF目录
下,该部署描述文件可以包含一切可以在web.xml中定义的内容。JAR包通常放在WEB-INF/lib目录下,除此之外,所有该模块使用的资源,包
括class文件、配置文件等,只需要能够被容器的类加载器链加载的路径上,比如classes目录等。
现在,为一个Web应用增加一个Servlet配置有如下三种方式(过滤器、监听器与Servlet三者的配置都是等价的,故在此以Servlet配置为例进行讲述,过滤器和监听器具有与之非常类似的特性):
1.编写一个类继承自HttpServlet,将该类放在classes目录下的对应包结构中,修改web.xml,在其中增加一个Servlet声明。这是最原始的方式;
2.编写一个类继承自HttpServlet,并且在该类上使用@WebServlet注解将该类声明为Servlet,将该类放在classes目录下的对应包结构中,无需修改web.xml文件。
3.编写一个类继承自HttpServlet,将该类打成JAR包,并且在JAR包的META-INF目录下放置一个web-fragment.xml文件,该文件中声明了相应的Servlet配置。web-fragment.xml文件示例如下:
<?xmlversionxmlversion="1.0"encoding="UTF-8"?> <web-fragment 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 http://java.sun.com/xml/ns/javaee/web-fragment_3_0.xsd" metadata-complete="true"> <servlet> <servlet-name>fragment</servlet-name> <servlet-class>footmark.servlet.FragmentServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>fragment</servlet-name> <url-pattern>/fragment</url-pattern> </servlet-mapping> </web-fragment>
从上面的示例可以看出,web-fragment.xml与web.xml除了在头部声明的XSD引用不同之外,其主体配置与web.xml是完全
一致的。由于一个Web应用中可以出现多个web-fragment.xml声明文件,加上一个web.xml文件,加载顺序问题便成了不得不面对的问
题。Servlet规范的专家组在设计的时候已经考虑到了这个问题,并定义了加载顺序的规则。
web-fragment.xml包含了两个可选的顶层标签,<name>和<ordering>,如果希望为当前的文件
指定明确的加载顺序,通常需要使用这两个标签,<name>主要用于标识当前的文件,而<ordering>则用于指定先后顺
序。一个简单的示例如下:
<web-fragment...> <name>FragmentA</name> <ordering> <after> <name>FragmentB</name> <name>FragmentC</name> </after> <before> <others/> </before> </ordering> ... </web-fragment>
如上所示,<name>标签的取值通常是被其它web-fragment.xml文件在定义先后顺序时引用的,在当前文件中一般用不
着,它起着标识当前文件的作用。在<ordering>标签内部,我们可以定义当前web-fragment.xml文件与其他文件的相对位
置关系,这主要通过<ordering>的<after>和<before>子标签来实现的。在这两个子标签内部可
以通过<name>标签来指定相对应的文件。比如:
<after> <name>FragmentB</name> <name>FragmentC</name> </after>
以上片段则表示当前文件必须在FragmentB和FragmentC之后解析。<before>的使用于此相同,它所表示的是当前文
件必须早于<before>标签里所列出的web-fragment.xml文件。除了将所比较的文件通过<name>
在<after>和<begin>中列出之外,Servlet还提供了一个简化的标签<others/>。它表示除
了当前文件之外的其他所有的web-fragment.xml文件。该标签的优先级要低于使用<name>明确指定的相对位置关系。
相关文章推荐
- Servlet 3.0特性详解之异步处理支持
- Servlet 3.0特性详解之注解支持
- Servlet 3.0 新特性详解(二)异步处理支持
- Servlet 3.0 新特性详解(三)注解支持
- Servlet 3.0 新特性详解(四)可插性支持
- Servlet 3.0 新特性详解(五)ServletContext 的性能增强及HttpServletRequest 对文件上传的支持
- Servlet 3.0新特性详解
- Servlet 3.0特性详解
- Servlet 3.0特性详解
- Servlet 3.0 新特性详解
- Servlet 3.0特性详解
- servlet3.0新特性——注解支持
- Servlet 3.0 新特性详解
- Servlet 3.0 新特性详解
- Servlet 3.0 新特性详解
- Servlet 3.0 新特性详解
- 【Servlet3.0新特性】第01节_Servlet注解及异步支持
- Servlet 3.0 新特性详解
- Servlet 3.0 新特性详解
- Servlet 3.0 新特性详解