`
yuanyong
  • 浏览: 247803 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Servlet 3.0特性详解(3)

    博客分类:
  • Java
阅读更多
属性名类型描述

1.filterNameString指定过滤器的name属性,等价于<filter-name>。

2.valueString[]该属性等价于urlPatterns属性。但是两者不应该同时使用。

3.urlPatternsString[]指定一组过滤器的URL匹配模式。等价于<url-pattern>标签。

4.servletNamesString[]指定过滤器将应用于哪些Servlet。取值是@WebServlet中的name属性的取值,或者是web.xml中<servlet-name>的取值。

5.dispatcherTypesDispatcherType指定过滤器的转发模式。具体取值包括:

◆ASYNC、ERROR、FORWARD、INCLUDE、REQUEST。

◆initParamsWebInitParam[]指定一组过滤器初始化参数,等价于<init-param>标签。

◆asyncSupportedboolean声明过滤器是否支持异步操作模式,等价于<async-supported>标签。

◆descriptionString该过滤器的描述信息,等价于<description>标签。

◆displayNameString该过滤器的显示名,通常配合工具使用,等价于<display-name>标签。

下面是一个简单的示例:
@WebFilter(servletNames={"SimpleServlet"},filterName="SimpleFilter")  publicclassLessThanSixFilterimplementsFilter{...} 

如此配置之后,就可以不必在web.xml中配置相应的<filter>和<filter-mapping>元素了,容器会在部署时根据指定的属性将该类发布为过滤器。它等价的web.xml中的配置形式为:
<filter> 
        <filter-name>SimpleFilter</filter-name> 
        <filter-class>xxx</filter-class>
</filter> 
<filter-mapping> 
         <filter-name>SimpleFilter</filter-name> 
         <servlet-name>SimpleServlet</servlet-name> 
</filter-mapping> 


@WebListener

该注解用于将类声明为监听器,被@WebListener标注的类必须实现以下至少一个接口:

ServletContextListener  
ServletContextAttributeListener  
ServletRequestListener  
ServletRequestAttributeListener  
HttpSessionListener  
HttpSessionAttributeListener 


该注解使用非常简单,其属性如下:

属性名类型是否可选描述

valueString是该监听器的描述信息。

一个简单示例如下:
@WebListener("Thisisonlyademolistener")  publicclassSimpleListenerimplementsServletContextListener{...} 

如此,则不需要在web.xml中配置<listener>标签了。它等价的web.xml中的配置形式如下:
<listener> 
    <listener-class>footmark.servlet.SimpleListener</listener-class> </listener> 


@MultipartConfig

该注解主要是为了辅助Servlet 3.0中HttpServletRequest提供的对上传文件的支持。该注解标注在Servlet上面,以表示该Servlet希望处理的请求的MIME类型是multipart/form-data。另外,它还提供了若干属性用于简化对上传文件的处理。具体如下:

属性名类型是否可选描述

◆fileSizeThresholdint是当数据量大于该值时,内容将被写入文件。

◆locationString是存放生成的文件地址。

◆maxFileSizelong是允许上传的文件最大值。默认值为-1,表示没有限制。

◆maxRequestSizelong是针对该multipart/form-data请求的最大数量,默认值为-1,表示没有限制。

可插性支持

如果说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文件示例如下:

<?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>明确指定的相对位置关系。


分享到:
评论

相关推荐

    Servlet3.0特性详解

    Servlet3.0是Java EE平台中的一个重要组成部分,它在Servlet2.5的基础上引入了许多新特性,极大地提高了开发效率和灵活性。以下是对Servlet3.0主要特性的详细解释: 1. **注解配置**: 在Servlet3.0中,我们可以...

    servlet 3.0新增功能详解

    ### Servlet 3.0 新增功能详解 #### 引言 Servlet 技术自问世以来一直是 Java Web 开发的核心组成部分之一。随着技术的发展,Servlet 规范也在不断更新以适应新的需求和技术趋势。Servlet 3.0 版本是 Java EE 6 的...

    基于Servlet3.0+IBatis+BootStrip技术构建简单会议管理系统

    第03课 servlet3.0新特性之@WebServlet_@WebInitParam详解 第04课 servlet3.0新特性之@WebFilter_@WebListener 第05课 JQuery AJAX 注册验证+二级菜单(JSON) 第06课 mybatis 框架搭建 第07课 mybatis 增删改查 第...

    Java Web开发详解:XML+DTD+XML Schema+XSLT+Servlet3.0+JSP2.2深入剖析与实例应用/孙鑫编著

    《Java Web开发详解——XML+DTD+XML Schema+XSLT+Servlet3.0+JSP2.2深入剖析与实例应用》内容全面,涵盖了从事Java Web开发所应掌握的所有知识,同时还讲解了最新的Servlet 3.0和JSP 2.2规范新增的特性。在知识的...

    详解Servlet3.0新特性(从注解配置到websocket编程)

    Servlet 3.0 新特性详解 Servlet 3.0 的出现标志着 Servlet 历史上最大的变革,其中的许多新特性大大简化了 Web 应用开发,为广大劳苦的程序员减轻了压力,提高了 Web 开发效率。下面,我们将详细解释 Servlet 3.0 ...

    Servlet3.0微框架

    这篇详解将深入剖析Servlet3.0的特性,以及如何利用这些特性构建微框架。 1. **注解驱动的配置** Servlet3.0引入了注解来替代传统的XML配置,大大简化了部署描述符web.xml的编写。例如,可以使用`@WebServlet`直接...

    Servlet3.0使用注解标注过滤器(Filter)

    #### 一、Servlet 3.0概述与新特性 Servlet 3.0 是 Java EE 6 的一部分,它引入了许多新的特性和改进,使得开发者能够更方便地开发 Web 应用程序。其中一个重要特性就是支持使用注解来配置过滤器(Filter),这大大...

    sevlet-api-3.0

    这个压缩包包含了两个关键资源,一个是"Servlet 3.0 新特性详解 .doc",这可能是一个详细的文档,涵盖了Servlet 3.0的所有新功能和技术亮点;另一个是"servlet-api-3.0.jar",这是Servlet 3.0 API的实现库,用于在...

    jsp3.0技术详解.rar

    **JSP 3.0 技术详解** JavaServer Pages(JSP)是Java平台上的一个标准技术,用于创建动态web应用程序。JSP 3.0是其最新的版本,引入了多项改进和新特性,旨在提升开发效率和代码可维护性。本教程将深入解析JSP 3.0...

    test-servlet3-without-webxml.rar

    综上所述,`test-servlet3-without-webxml.rar`文件提供了关于Servlet 3.0无web.xml配置的实践案例,通过学习和分析这个项目,开发者可以深入理解Servlet 3.0的新特性和优势,提升Java Web开发技能。

    Servlet注解详解.docx

    Servlet注解是Java EE中Servlet 3.0版本引入的一项重要特性,极大地简化了Servlet的配置和管理。在Servlet 2.5及之前版本中,Servlet、Filter和Listener的配置通常需要在`web.xml`文件中手动编写XML元素,而Servlet ...

    详解Servlet 3.0/3.1 中的异步处理

    xt.complete(); // 结束异步上下文 } catch (IllegalStateException e) { ...为了充分利用这些特性,你需要确保你的应用服务器支持Servlet 3.0或3.1规范,同时在编写Servlet时适配这些新特性,以实现高效的异步处理。

    annotaction

    ### Servlet 3.0 新特性详解 #### 一、异步处理支持 Servlet 3.0 最引人注目的新特性之一就是异步处理支持。在此之前,Servlet 的生命周期模型是同步阻塞式的,即Servlet 接收客户端请求后,会执行一系列业务逻辑...

    崔希凡JavaWeb笔记day28(JavaWeb完毕)

    - **MyEclipse10.0或以上版本**:为了确保能够使用Servlet3.0的新特性,开发环境至少需要是MyEclipse10.0或更高版本。 - **Tomcat7.0或以上版本**:部署Servlet3.0的应用程序时,服务器环境也需支持新特性,因此...

    BookStore.zip

    1. **Servlet3.0特性**: - 自动扫描:Servlet3.0引入了自动扫描容器,无需在web.xml中配置Servlet,只需在类上添加`@WebServlet`注解即可。 - 异步处理:Servlet3.0支持异步处理,提高了服务器对高并发请求的响应...

    servlet详解

    此外,Servlet3.0引入了注解配置,允许在Servlet类上直接声明: ```java @WebServlet("/MyServlet") public class MyServlet extends HttpServlet { // ... } ``` 在Servlet中处理请求和响应主要通过重写`doGet()...

    Java Servlet的注解配置与生命周期详解.docx

    最后,Servlet 3.0还引入了一些其他特性,比如支持异步处理、过滤器和监听器的注解配置,以及更灵活的部署选项。这些改进进一步简化了Servlet的开发和管理,增强了其功能。 总结来说,Java Servlet通过XML配置或...

    Servlet帮助中文文档.rar

    8. **Servlet 3.0新特性**:从Servlet 3.0版本开始,支持注解驱动的Servlet配置,无需web.xml,可以直接在Servlet类上使用`@WebServlet`注解。同时,还引入了异步Servlet处理和WebSocket协议支持。 9. **安全性**:...

    SpringMVC3.0_Demo

    在"SpringMVC3.0_Demo"中,"spring3"目录可能包含了Spring的核心配置文件(如`applicationContext.xml`)、SpringMVC的配置文件(如`dispatcher-servlet.xml`)、以及Spring相关的bean定义。"jpa"目录则可能包含JPA...

    chiansofti_servlet.zip

    7. **Servlet 3.0及以上版本的新特性**:Servlet 3.0引入了注解配置,无需在web.xml中配置Servlet,可以直接在类上使用`@WebServlet`注解。此外,还支持异步处理,使Servlet能更高效地处理长时间运行的任务。 8. **...

Global site tag (gtag.js) - Google Analytics