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

servlet3.0特性分析(翻译)

阅读更多

决定翻译这篇servlet3.0的文章,一是因为tomcat7全面支持servlet3.0,并且马上要推出(新闻里看到的),二是感觉作为javaer要有奉献精神,这篇文章是自己少数看得懂的e文

JSR 315 (Servlet 3.0)是对已经存在的Servlet 2.5的一个升级规范. Servlet 3.0 旨在增加扩展性和实现可插拔框架插件,并且和J2EE6规范对应,使之更容易的支持最新的语言特性. Servlet3.0已经在 GlassFish v3 被完好的实现. 这篇文章包括以下servlet3.0内容:

  • 可插入性
  • 更易使用
  • 异步支持
  • 安全性增强
  • 多方面的改变

在这篇文章,我们会让你更快的了解到新的sevlet3.0规范有什么新的惊喜,并且告诉你更多的细节。注意: 这篇文章符合现在的sevlet3.0规范,但是sevlet3.0规范将有可能些许改变

专家组

来自Sun公司的Rajiv Mordani 是这个规范的引领者,同时还有一个有有许多java社区相当有名的公司的专家组成的专家组。

  • Adobe Systems Inc.
  • Apache Software Foundation
  • BEA Systems
  • Ericsson AB
  • Google Inc.
  • Hunter, Jason
  • IBM
  • Icesoft Technologies Inc
  • NCsoft Corporation
  • Oracle
  • Pramati Technologies
  • Prasanna, Dhanji R.
  • SAP AG
  • Ship, Howard M. Lewis
  • Suleiman, Hani
  • Sun Microsystems, Inc.
  • Tmax Soft, Inc.
  • Walker, Joe
  • Wilkins, Gregory John

可插拔性

由于有这么多受欢迎的web框架, Servlet 3.0 会让配置这些开发者选择的框架变得更加简单。因此增加一个Struts,或者Spring Web Flow将会非常容易。

 

 添加SevletFilter的方法
如果ServletContextListener已经注册,并且你想添加一个新的Servlet或者一个Filter,你可以实时增加一个Listener或者Servlet到环境中(就是支持新增加servlet类的热部署了不知道有没有理解错,原文是then at the time of context initialization the event that is fired to the Listener can add Servlets and Filters to the context)。方法是addServletaddFilter,更多的细节请查看java社区网站的javadoc http://jcp.org/aboutJava/communityprocess/pr/jsr315/index.html.

 

·         Web 分段
原先开发者要声明sevlets,filter或者其他框架的配置在web.xml。不用再被庞大臃肿的web.xml文件烦恼,现在框架的配置文件可以单独声明在一个类似web-fragment.xml的文件中。

一个web-fragment.xml其实是和web.xml一样,并且可以包含被框架META-INF和框架jar包所需要的所有配置。这样容器将会使用那些为该应用定义的描述,该应用将不会用到那些为框架而配置的描述。Web分段有个规范用来解决配置冲突,比如重写配置或者使某些配置片段失去功能.同时也可以使用annotations,这样强制开发者和框架设计者可以自己使用自己所需要的web.xml配置,互不干扰.


最大的好处是jar包的提供者可以提供自己的web.xml在自己的应用中

有一些新的annotations被定义用于使servlet3.0 开发更加方便。允许你写一个不需要任何配置文件的servlet.这些annotations存在于javax.servlet.annotation包中.感谢这些新的annotations,现在你可以定义一个Servlet,Filter或者ServletContextLIstener 而摆脱web.xml配置文件

这是一个很重要的创建让web.xml 可选,而不是集中了一堆又一堆的配置在web.xml中。可以通过annotations写元数据,来实现web.xml以前实现的功能。

通过专家组和社区的讨论,决定方法级别的annotations还是不会加入,因此你要使用doGet,doPost方法还是得集成HttpServlet类。让我们通过一段代码来更进一步来了解Servlet3.0annotations新规范吧。

Servlet Annotation

Servlet 3.0, servlet 元数据 可以通过 @WebServlet定义

看一看源代码

1.@WebServlet(name="mytest"
2.urlPatterns={"/myurl"}, 
3.initParams={ @InitParam(name="n1", value="v1"), @InitParam(name="n2", value="v2") }) 
4.public class TestServlet extends javax.servlet.http.HttpServlet { 
5..... 
6.}

TestServlet 继承自HttpServlet, annotation和t web.xml配置的对照关系见下表:

Parameter

Annotation Parameter

web.xml

Servlet name

name=

<servlet><servlet-name>

URL Pattern

urlPatterns={ }

<servlet-mapping>

Initialization parameters

InitParams={ @InitParam{name=””, value=””}

<servlet>

<init-param>

<param-name>.. </param-name>

<param-value>.. </param-value>

<init-param>

 

Servlet Filter Annotation

ServletFilter 元数据通过 @ServletFilter annotation定义配置

1.public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { 
2..... 
3.
4.  
5.public void destroy() { 
6..... 
7.
8.}

Parameter

Annotation Parameter

web.xml

URL Pattern

urlPatterns={ }

<servlet-mapping>

Initialization parameters

InitParams={ @InitParam{name=””, value=””}

<servlet>

<init-param>

<param-name>.. </param-name>

<param-value>.. </param-value>

<init-param>

 

Servlet Context Listener Annotation

现在ServletContextListener可以很简单的加上一个@WebServletContextListener ,而完全不用在web.xml中配置它,怎么样这个功能方便把。

 

01.@WebServletContextListener 
02.public class TestServletContextListener implements javax.servlet.ServletContextListener { 
03..... 
04.public void contextInitialized(ServletContextEvent sce) { 
05..... 
06.
07.  
08.public void contextDestroyed(ServletContextEvent sce) { 
09..... 
10.
11.}

· 异步支持

规范中最大的改变就是增加了异步处理功能。主要覆盖的情况如下:

·         等待一个资源成为可能,比如在jdbc或者调用一个webService

·         响应的异步生成.

·         利用现有框架,在所有处理完成之后,再生成一个异步响应.

最早的讨论被搁置后又继续了,最近的规范在ServletRequest stratAsync()方法中y有两个变种,

一个是(startAsync() )不携带任何参数并且用原始的requestresponse初始化一个AsynContext . 另外一个把 ( startAsync() )requestresponse当成方法的参数去初始化AsyncContext(这两个有点懵原文在下面e文好的同学可以自己看One (startAsync() ) takes no parameters and initialises an AsyncContext with the original request and response. The ( startAsync() ) other takes a request and response as a parameter to initialise the AsyncContext with.)

Servlets (@WebServlet) Filters (@ServletFilter)

如果要支持异步处理的话需要用supportAsync 属性集的注释.如果你的Servlet或者Filter不支持异步处理的话,那么在一次请求request传递链(包括其中有支持异步处理的Servlet)将会是非法的。

同时有一个异步的Listener可以监听通知request的异步处理超时或者已经完毕. 如果这些被requestresponse使用的时候被wrapped,

这个监听器可以用来清除资源,

 

 

安全性增强

当一个ServletRequest 被强迫被登录的时候,HTTPServletRequest将会被增强通过允许程序级别的登录和注销。注销方法允许应用程序重设request验证状态和不需要绑定验证到HTTPSession中.

结论

这个规范刚刚被Glassfish v3实现,这个规范要求整合J2EE6.因此以后所有特性描述都适用于J2EE6兼容的容器中.

以上所有的特性也将会使得开发Java Web程序更加的容易.

感谢Rajiv Mordani 写了这篇文章,同时也感谢 Shing Wai 和 Jan Luehe 提供了code样例

6
1
分享到:
评论
1 楼 J-catTeam 2010-08-21  
要跨入servlet3.0 还有很长一段时间呀~

相关推荐

    Servlet3.0特性详解

    非常好的学习Servlet3.0资料。特此共享。

    Servlet3.0新特性解析

    Servlet3.0新特性解析_03_Servlet3.0监听器、过滤器实现方式详解及Servlet的动态注册剖析

    Servlet3.0参考手册

    servlet3.0使用手册,这里面有详细的api参考,使用很方便

    servlet3.0新特性源代码

    * @project servlet3.0 * servlet3.0的文件上传 * @date:2012-5-21 *在创建项目的时候首先添加Tomcat7.x的支持,然后把apache-tomcat-7.0.27\conf\web.xml拷贝到项目WEB-INF目录下 *把之前的web.xml覆盖.. 配置...

    servlet 3.0新增功能详解

    Servlet 是 Java EE 规范体系的重要组成部分,也是 Java 开发人员必须具备的基础...本文主要介绍了 Servlet 3.0 引入的若干重要新特性,包括异步处理、新增的注解支持、可插性支持等等,为读者顺利向新版本过渡扫清障碍

    servlet3.0.jar下载

    servlet3.0jar下载,非常好用的控制器工具类包,servlet3.0jar下载,非常好用的控制器工具类包,

    Servlet3.0

    Servlet3.0新特性解析_02_Servlet3.0的异步支持与反向Ajax深入详解Servlet3.0新特性解析_02_Servlet3.0的异步支持与反向Ajax深入详解

    北京动力节点-专题08-Servlet3.0特性.pdf

    北京动力节点-专题08-Servlet3.0特性

    Servlet3.0 新特性

    需要在tomcat下运行 博文链接:https://inotgaoshou.iteye.com/blog/975116

    servlet3.0推送聊天室

    用servlet3.0异步技术,实现推送信息至客户端的聊天室

    Servlet3.0新特性

    Servlet3.0新特性解析_04_使用Servlet3.0实现文件上传及Part接口与MultiConfig注解深度解析

    基于servlet3.0手写springmvc

    基于servlet3.0手写springmvc,实现了IOC和处理器映射器以及处理器映射器功能。

    servlet 3.0 jar 包综合下载

    servlet 3,jar 包综合;用于javaEE servlet 3.0 开发使用。

    servlet3.0.zip

    servlet3.0.zip

    JavaServlet 3.0 API

    个人整理的JavaServlet 3.0的API,按Java6 API的风格整理

    Servlet3.0新特性解析01

    Servlet3.0新特性解析_01_Servlet3.0新特性深度解析、Servlet注解详解

    servlet3.0-demo

    servlet3.0-demo, 上传文件demo,基于注解开发

    Servlet 3.0 源码文件

    Servlet 3.0 源码文件,可以在myeclipse中查看servlet的代码,方便编程

    servlet3.0相关的包

    servlet3.0相关的包 包含 sevlet servlet-api jstl jstl-impl相关版本的包

    servlet3.0文件上传 01.zip

    本工程用于借助Servlet3.0实现文件上传 本工程编码方式:UTF-8 注意: 1、在上传文件前请在计算机C盘新建一个名为“upload”的文件夹,否则会出现如下异常:java.io.IOException: The temporary upload location [C...

Global site tag (gtag.js) - Google Analytics