2011年11月18日星期五

JavaEE_009:JavaEE6 新特性之三:Servlet3.0(1)

与Servlet2.5相比,Servlet3.0增加了若干新特性,以下逐一介绍。

特性一:新增了一些元注释,用于简化 Web应用的开发和部署。

1. metadata-complete
(1)web.xml中的根元素<web-app>属性metadata-complete=true
表示忽略代码中的所有元注释,忽略所有web-fragment.xml,即禁用可插入性,只读取部署描述文件。
(2)web.xml中的根元素<web-app>属性metadata-complete=false
表示启用代码中的所有元注释,启用所有web-fragment.xml,即支持可插入性。

2. @WebServlet
@WebServlet 用于将一个类声明为 Servlet,该元注释的属性如下:
(1)name String 指定 Servlet 的 name 属性,等价于 。如果没有显式指定,则该 Servlet 的取值即为类的全限定名。
(2)value String[] 该属性等价于 urlPatterns 属性。两个属性不能同时使用。
(3)urlPatterns String[] 指定一组 Servlet 的 URL 匹配模式。等价于 标签。
(4)loadOnStartup int 指定 Servlet 的加载顺序,等价于 标签。
(4)initParams WebInitParam[] 指定一组 Servlet 初始化参数,等价于 标签。
(5)asyncSupported boolean 声明 Servlet 是否支持异步操作模式,等价于 标签。
(6)description String 该 Servlet 的描述信息,等价于 标签。
(7)displayName String 该 Servlet 的显示名,通常配合工具使用,等价于 标签。

使用@WebServlet的例子
@WebServlet(urlPatterns = {"/simple"}, asyncSupported = true,
loadOnStartup = -1, name = "SimpleServlet", displayName = "ss",
initParams = {@WebInitParam(name = "username", value = "tom")}
)
public class SimpleServlet extends HttpServlet{ … }

这样在代码中配置元注释后,等价于在web.xml中做了如下配置:
<servlet>
<display-name>ss</display-name>
<servlet-name>SimpleServlet</servlet-name>
<servlet-class>footmark.servlet.SimpleServlet</servlet-class>
<load-on-startup>-1</load-on-startup>
<async-supported>true</async-supported>
<init-param>
<param-name>username</param-name>
<param-value>tom</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>SimpleServlet</servlet-name>
<url-pattern>/simple</url-pattern>
</servlet-mapping>

2. @WebFilter
@WebFilter 用于将一个类声明为Filter,该元注释的属性如下:
(1)filterName String 指定过滤器的 name 属性,等价于 <filter-name>
(2)value String[] 该属性等价于 urlPatterns 属性。但是两者不应该同时使用。
(3)urlPatterns String[] 指定一组过滤器的 URL 匹配模式。等价于 <url-pattern> 标签。
(4)servletNames String[] 指定过滤器将应用于哪些 Servlet。取值是 @WebServlet 中的 name 属性的取值,或者是 web.xml 中 <servlet-name> 的取值。
(5)dispatcherTypes DispatcherType 指定过滤器的转发模式。具体取值包括:
(6)ASYNC、ERROR、FORWARD、INCLUDE、REQUEST。
(7)initParams WebInitParam[] 指定一组过滤器初始化参数,等价于 <init-param> 标签。
(8)asyncSupported boolean 声明过滤器是否支持异步操作模式,等价于 <async-supported> 标签。
(9)description String 该过滤器的描述信息,等价于 <description> 标签。
(10)displayName String 该过滤器的显示名,通常配合工具使用,等价于 <display-name> 标签。

使用@WebFilter的例子
@WebFilter(servletNames = {"SimpleServlet"},filterName="SimpleFilter")
public class LessThanSixFilter implements Filter{...}

这样在代码中配置元注释后,等价于在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>

3. @WebListener
@WebListener 用于将类声明为监听器,该类需要实现的接口如下(至少实现一个):
(1)ServletContextListener
(2)ServletContextAttributeListener
(3)ServletRequestListener
(4)ServletRequestAttributeListener
(5)HttpSessionListener
(6)HttpSessionAttributeListener

@WebListener的属性只有一个:value。

使用@WebListener的例子:
@WebListener("This is only a demo listener")
public class SimpleListener implements ServletContextListener{...}

这样在代码中配置元注释后,等价于在web.xml中做了如下配置:
<listener>
<listener-class>footmark.servlet.SimpleListener</listener-class>
</listener>

4. @MultipartConfig
@MultipartConfig用于支持对上传文件功能,表示Servlet处理的MIME类型是 multipart/form-data。
@MultipartConfig属性如下:
(1)fileSizeThreshold int 是 当数据量大于该值时,内容将被写入文件。
(2)location String 是 存放生成的文件地址。
(3)maxFileSize long 是 允许上传的文件最大值。默认值为 -1,表示没有限制。
(4)maxRequestSize long 是 针对该 multipart/form-data 请求的最大数量,默认值为 -1,表示没有限制。

参考文献:
1. http://www.ibm.com/developerworks/cn/java/j-lo-servlet30/index.html?ca=drs-cn-0423

没有评论: