servlet规范作为J2EE中最重要的规范之一,其各版本的差异也是稍有不同的。
目前servlet规范已经最新为3.0版本了。
Servlet 2.4 对比 2.3 的改变
2003年11月底,J2EE 1.4规范正式发布,Servlet也从原本的 2.3版升级至 2.4版。
其中主要新增的功能有以下三点:
(1) web.xml DTD 改用XML Schema;
(2) 新增 Filter四种设定; REQUEST,FORWARD,INCLUDE,EXCEPTION
注意:从Servlet2.4开始,servlet容器将不对容器内转发的请求进行filter过滤了,若需过滤需要在filter中设置dispather子元素,并设置值为上述四种类型中的一种,如需同时过滤,可同时添加几个dispather子元素.
(3) 新增 Request Listener、Event 和 Request Attribute Listener、Event。
1,web.xml DTD 改用XML Schema
Servlet 2.3版的web.xml 都是使用 DTD(Document Type Definition)来定义 XML 文件内容结构的。
web.xml一开始的声明如下:
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
Servlet 2.4版的web.xml改为使用 XML Schema
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
由DTD改为Schema,主要加强两项功能:
(1) 元素可不依照顺序设定;
(2) 更强大的验证机制。
2,新增Filter四种设定
Servlet 2.4 版新增的Filter四种设定为:REQUEST、FORWARD、INCLUDE 和 ERROR。
3,新增 Request Listener、Event 和 Request Attribute Listener、Event
4, 取消SingleThreadModel接口。
当Servlet实现 SingleThreadModel接口时,它能确保同时间内,只能有一个thread 执行此Servlet。
5,<welcome-file-list>可以为Servlet。
<welcome-file-list>
<welcome-file>Index</welcome-file>
</welcome-file-list>
6,ServletRequest 接口新增一些方法。
public String getLocalName( );
public String getLocalAddr( );
public int getLocalPort( );
public int getRemotePort( );
Tomcat 各版本支持的Servlet规范
Servlet/JSP Spec | Apache Tomcat version |
2.5/2.1 | 6.0.18 |
2.4/2.0 | 5.5.27 |
2.3/1.2 | 4.1.37 |
2.2/1.1 | 3.3.2 (archived) |
Servlet2.5新特性
根据Servlet的标准的重大变化决定了版本号从2.4 跳跃到了2.5。
在这个发行的标准中, 有四个详细的阐明, 二个对其它文档的改变, 增加了六个主要变化。
很多大的改变是通过使用JDK1.5的新特性带来的。
一个很大的问题就是,为什么JSR为Servlet的 init() 添加了annotations ,带来了init() (@PostConstruct), destroy() (@PreDestroy)等新方法。JCP Executive Committee 的成员Hani Suleiman 在他的blog上,描述了他本来希望看到的新特性,但是事实却未能通过。有意思的是,Hani Suleiman 可是JCP Executive Committee 的成员,JCP Executive Committee 对专家组提交的方案是有最终决定权的。为何Hani Suleiman未能让本来应有的一些变化添加到Servlet标准里呢?
新的特性包括:
Clarification on Session scope for when pages contain more then one session context
the ability to apply a single filter to many requests and many filters to a single request
the ability to create multiple mappings to the same Servlet
Allow the use of alternative HTTP methods with authorization constraints
Support the use of annotations to inject resources into a servlet
Removal of the restriction on not being able to call setStatus() in error handling