Sevelt3.0新特性总结

背景:

最近在给领导部署演示环境的时候发生了很恶心的问题。资源和jar包好之后,服务器总是起不来,一直包各种错误,然后切换JDK,使用各种版本的Spring Jar包都不可以,而且每次报的错误都不一样。最后发现是服务器上有一个项目使用了Servlet 3.0并且没有声明metadata-complete属性造成的。今天特地记录下Servlet 3.0的新特性。

具体的排查步骤和报错就不记录了,因为公司的Server是自己包装过的,里面各种服务模块,N多个部门的项目都在里面,还有很多依赖,我们可以认为这个Home是一个Tomcat的定制版。具体为什么是Servelt 3.0的新特性引发的错误,一直没找到和分析出原因来,如果有知道的大神,烦请告知。

Servlet 3.0

Servelt 3.0是Sun(应该叫甲骨文了,纪念下sun吧)在Java EE6规范体系中发布的,该版本在前一版本基础上提供了若干新特性用于简化Web应用的开发和部署。请参考下面的Blog:

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

PS:神级人物写的文章就是深入浅出,文笔不凡,难以望其项背。

1.异步处理(AsyncServlet):

Servlet线程可以不需要阻塞,启动一个异步线程,等业务处理完成后在输出了。Servlet的这种处理有点类似Android中的异步任务和H5中的WebWoker,我们都知道很多UI程序开发的时候为了防止UI线程被阻塞,都会使用异步线程去处理耗时操作,然后提供一种线程通信机制,如Android的Looper。

PS:我认为异步处理是一种趋势,可以极大的提升用户体验,比如大量数据查询处理的时候,可以不再使用Ajax,直接跳转到一个页面,可以先返回一个处理中……的字样,然后再返回处理结果。又或者下载的时候,可以先返回下载中……的字样,然后再返回下载数据。

还有就是上面Blog中下面有个问题是:Servlet是单例多线程的,2.5中为什么还会等待。我想这个问题,提问者可能是糊涂了,单例多线程和线程等待貌似没有关系吧。单力多线程,是每个用户访问的时候被分配一个线程,然后这个线程单独为这个用户的这次访问服务,但是在某个方法需要耗时操作的时候,线程还是需要等待方法完成的。

2.新增注解:

自从JDK 1.5推出注解之后,越来越多的配置和声明工作都被注解替代了,尤其是Spring,Spring的配置文件虽然能很好的解耦对象依赖,但是当配置文件太长了之后,修改配置就是一个烦人的工作了,使用注解也成了一种趋势。Servlet 3.0中也可以用JDK提供的注解来替代Web.xml中的描述了。Servlet 3.0提供了Web.xml里面标签对应的注解用来简化Web.xml的开发,比如@WebSevelt/@WebFileter/@WebInitParam/@WebListener/@MultipartConfig

3.可插性支持

可插性支持,我一度将它当成一个高大山的东西,所以望文生畏。但是上面的文章说可插性支持的理念是基于Struts2的插件理念产生的,从开发角度我看就是可以不修改文件,直接加入/删除Jar包就可以加入新的Servlet。以往我们如果想加入新的Servlet那么就需要在Web.xml加入新的Servelt标签,现在通过web-fragment.xml把一个应用的web.xml拆分到N多个地方,这样容器启动的时候会自动扫描所有的web-fragement.xml形成完整的配置,这样我们修改一个片段不会影响其他的,就这么简单。

当然可插性支持也可以通过注解方式使用,这样web-fragement.xml文件都省下了。但是可插性支持的深度实现是很复杂的,比如加载顺序,这设计到jar包的加载顺序,等等一些列问题。Servelt3.0默认是开启可插性支持和注解的,可以通过webapp标签的metadata-complete属性关闭这个功能。在Spring 3.1.X中如果出现jar包加载的奇怪问题,可以尝试关闭这两个功能,有可能解决这个问题。

4.ServletContext功能增强

增强的SerlvetContext包括运行时部署Serlvet、filter,自定义ServletContainerInitializer来处理Jar服务。(中间件级别可能用到)

5.直接支持文件上传

现在Servlet可以直接支持解析上传的文件了,不在需要第三方Jar的支持,非常方便。

总结:

Sevlet3.0的新特性还是很赞的,个人比较感兴趣的是异步处理和文件上传,是个很实用的技术。想知道自己项目中现在实用的Servlet的版本,可以查看Web.xml的web-app标签里面的version的版本,也可以修改这个来启用新版本特性。不过Servlet3.0的可插特性和注解,因为扫包等原因,可能会和一些第三方库出现问题。Servlet的版本更新并不连续,它出现的很早,1.0/2.0/2.1/2.4/2.5/3.0。现在大部分的应该都是2.4和2.5版本的Servlet吧。

时间: 2024-10-19 23:36:49

Sevelt3.0新特性总结的相关文章

Day07 jdk5.0新特性&Junit&反射

day07总结 今日内容 MyEclipse安装与使用 JUnit使用 泛型 1.5新特性 自动装箱拆箱 增强for 静态导入 可变参数方法 枚举 反射 MyEclipse安装与使用(yes) 安装MyEclipse 先安装了JDK ? MyEclipse介绍 ? MyEclipse是Eclipse的一个插件: MyEclipse是需要花钱的: MyEclipse官网不在欢迎中国人登录: ? MyEclipse使用 ? 1 创建项目 选择工作空间: 工作空间路径不能有空格和中文: 工作空间以班名

Atitit. C#.net clr 2.0  4.0新特性

Atitit. C#.net clr 2.0  4.0新特性 1. CLR内部结构1 2. CLR 版本发展史3 3. CLR 2.0 3 4. CLR 4 新特性 概览4 4.1.1.  托管与本地代码的互操作5 4.1.2.    垃圾回收6 4.1.3.    代码约定6 4.1.4.    Corrupted state exception6 4.1.5.     新的安全模型7 4.1.6.     同一个进程,多个CLR7 4.1.7.     基本类库7 5. CLR最新发展8 6

day07 MyEclipse 安装 jdk5.0 新特性

1.myeclipse的安装和使用 * eclipse:是一个免费的开发工具    * myeclipse:是一个收费的插件,破解myeclipse,        ** 安装目录的要求: 不能有中文和空格        ** 安装完成之后,选择一个工作空间 ,这个工作空间不能有中文和空格    * 破解myeclipse        ** 运行run.bat文件,但是运行之前,必须要安装jdk,通过配置环境变量 * myeclipse的使用        * 创建一个工程          

AFNetworking 2.0 新特性讲解之AFHTTPSessionManager

AFNetworking 2.0 新特性讲解之AFHTTPSessionManager (2014-02-17 11:56:24) 转载▼     AFNetworking 2.0 相比1.0 API 接口改动还是很大的. 其中一个便是 AFURLSessionManager,当然如果你不太熟悉,或者为了兼容低版本,你依然可以选择AFHTTPRequestOperationManager,AFURLSessionManager是基于 NSURLSessionConfiguration(IOS 7

Servlet 3.0 新特性详解

转自:https://www.ibm.com/developerworks/cn/java/j-lo-servlet30/ Servlet 3.0 新特性详解 张 建平2010 年 4 月 23 日发布 WeiboGoogle+用电子邮件发送本页面 6 Servlet 3.0 新特性概述 Servlet 3.0 作为 Java EE 6 规范体系中一员,随着 Java EE 6 规范一起发布.该版本在前一版本(Servlet 2.5)的基础上提供了若干新特性用于简化 Web 应用的开发和部署.其

android 7.0 新特性 和对开发者的影响

android 7.0新特性 - jiabailong的专栏 - 博客频道 - CSDN.NEThttp://blog.csdn.net/jiabailong/article/details/52411300 android 7.0对开发者会有哪些影响 - jiabailong的专栏 - 博客频道 - CSDN.NEThttp://blog.csdn.net/jiabailong/article/details/52411353 android 7.0 多窗口及新特性demo - jiabail

C#6.0新特性

C#6.0新特性怎么用 系列文章 Visual Studio 2015速递(1)——C#6.0新特性怎么用 前文提到过一个神器叫Resharper,功能强大,编码效率和代码质量那是蹭蹭的涨,但是神器的最大问题是太耗费资源了,每次系统提示内存不足的时候,那叫一个纠结啊.因此每次新的VS发布的时候都情不自禁的查看是否增强编辑功能,情不自禁的讨论一番,这次VS2015也不例外. 去年微软放出Roslyn的时候,微软就曾经放出过一个“尝鲜”版的VS编辑增强功能,恰恰就是重构(reflector),话说这

ASP.NET MVC—1、前期知识储备(C#3.0新特性)

在学习ASP.NET MVC之前,有必要先了解一下C#3.0所带来的新的语法特性,这一点尤为重要,因为在MVC项目中我们利用C#3.0的新特性将会大大的提高我们的开发效率,同时,在MVC项目中你将到处可以看到C#3.0新特性的身影. C#3.0新特性 自动属性 隐式类型 var 对象初始化器与集合初始化器 匿名类 扩展方法 Lambda表达式 自动属性 这个概念很简单,其简化了我们在.NET的时候手写一堆私有成员+属性的编程方式,我们只需要使用如下方式声明一个属性,编译器会自动生成所需的成员变量

Spark1.0.0新特性

Spark1.0.0 release于2014-05-30日正式公布,标志Spark正式进入1.X的时代.Spark1.0.0带来了各种新的特性,并提供了更好的API支持:Spark1.0.0添加了Spark SQL这一个新的重要组件,用于载入和操作Spark的结构化数据:Spark1.0.0增强了现有的标准库(ML,streaming,GraphX),同一时候还增强了Java和Python语言的支持:最后,Spark1.0.0在运维上做了非常大的改进,包含支持Hadoop/YARN安全机制.使