首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Servlet3.0新特性施用详解

2012-12-16 
Servlet3.0新特性使用详解在infoq上有关于servlet3.0的新特性说明,个人觉得比较全面可插拔的Web框架几乎所

Servlet3.0新特性使用详解

在infoq上有关于servlet3.0的新特性说明,个人觉得比较全面

    可插拔的Web框架几乎所有基于Java的web框架都建立在servlet之上。现今大多数web框架要么通过servlet、要么通过Web.xml插入。利用标注(Annotation)来定义servlet、listener、filter将使之(可插拔)成为可能。程序访问web.xml和动态改变web应用配置是所期望的特性。该JSR将致力于提供把不同web框架无缝地插入到web应用的能力。EOD标注——利用标注来作为编程的声明风格。web应用零配置是EoD努力方向之一。部署描述符将被用来覆盖配置。范型(generic)——在API中尽可能利用范型。使用其它语言增强可能需要改善API可用性的地方。支持异步和Comet非阻塞输入——从客户端接收数据,即使数据到达缓慢也不会发生阻塞。非阻塞输出——发送数据到客户端,即使客户端或网络很慢也不会发生阻塞。延迟请求处理——Ajax web应用的Comet风格,可以要求一个请求处理被延迟,直到超时或一个事件发生。延迟请求处理对以下情况也很有用:如果远程的/迟缓的资源必须在为该请求服务之前被获得;或者如果访问一个特殊资源,其需要扼杀一些请求以防止太多的并发访问。延迟响应关闭——Ajax web应用的Comet风格,可以要求响应保持打开,以允许当异步事件产生时发送额外的数据。阻塞/非阻塞通知——通知阻塞或非阻塞事件。频道概念——订阅一个频道,以及从该频道获取异步事件的能力。这意味着可以创建、订阅、退订,以及应用一些诸如谁能加入、谁不能加入的安全限制。安全login/logout能力。自注册。结合结合/需求,来自REST JST JSR(JSR 311 )。结合/需求,来自JSF 2.0 JSR(JSR 134 )。其它支持更好的欢迎文件(welcome file)。ServletContextListener排序。容器范围内定义init参数。文件上载——过程侦听——存储中间或最终文件。澄清线程安全问题。

    我们下面就看看其中几个特性:

    1.可插拔的Web框架,其实就是web.xml中可以又多个子模块的配置文件组成,而各个子模块的配置文件可以放在各个jar包的META-INFO中,这样就实现web应用的模块化。

     类似,可以按照配置的顺序指定了web片段的顺序。通过absolute-ordering进行绝对顺序配置,通过每个fragment的order的after和before标签进行相对顺序配置。

    @WebServlet支持的参数有

    Servlet3.0新特性施用详解
     

    Servlet3.0新特性施用详解


    3. servlet3.0的异步支持

    很多时候Servlet要和其他的资源进行互动,例如访问数据库,调用web service。在和这些资源互动的时候,Servlet不得不等待数据返回,然后才能够继续执行。这使得Servlet调用这些资源的时候阻塞。Servlet3.0通过引入异步处理解决了这个问题。异步处理允许线程调用资源的时候不被阻塞,而是直接返回。AsyncContext负责管理从资源来的回应。AsyncContext决定该回应是应该被原来的线程处理还是应该分发给容器中其他的资源。AsyncContext有一些方法如start,dispatch和complete来执行异步处理。 
    要想使用Servlet3.0的异步处理,我们需要设置@Webservlet和@WebFilter注解的asyncSupport属性。这个属性是布尔值,缺省值是false。

    所以,可以在servlet阻塞处理网络,数据库查询等时,可以暂时释放线程资源,处理更多请求,当请求处理完之后重新唤醒线程继续处理原来的请求,达到NIO的效果。

    我们看下一个示例

    AsyncContext 可以添加监听器作为异步处理过程中状态的跟踪等

    HttpServletRequest To support the multipart/form-data MIME type, the following methods have been added to the HttpServletRequest interface: 为了支持multipart/form-data MIME类型,在HttpServletRequest接口中添加了项目的方法:     * Iterable<Part> getParts()     * Part getPart(String name) Cookies 为了避免一些跨站点攻击,Servlet3.0支持HttpOnly的cookie。HttpOnly cookie不想客户端暴露script代码。Servlet3.0在Cookie类中添加了如下的方法来支持HttpOnly cookie:     * void setHttpOnly(boolean isHttpOnly)     * boolean isHttpOnly() ServletContext 通过在ServletContext中添加下面的方法,Servlet3.0允许Servlet或filter被编程的加入到context中:     * addServlet(String servletName, String className)     * addServlet(String servletName, Servlet servlet)     * addServlet(String servletName, Class<? extends Servlet> servletClass)     * addFilter(String filterName, String className)     * addFilter(String filterName, Filter filter)     * addFilter(String filterName, Class<? extends Filter>filterClass)     * setInitParameter (String name, String Value)

    下面这篇文章还是比较全面的解析

    http://www.ibm.com/developerworks/cn/java/j-lo-servlet30/index.html

    http://www.infoq.com/cn/news/2007/06/servlet3

热点排行