[摘]Servlet 2.4 的新功能

Servlet 2.4 版本更新于 J2EE 1.4 规范发布时,主要改进包括 web.xml 文件采用 XML Schema 定义结构,增强了元素顺序灵活性及验证能力。同时新增 Filter 的配置选项及 RequestListener 和 RequestAttributeListener 监听器。
Servlet 2.4 的新功能


2003 年11 月底,J2EE 1.4 规范正式发布,Servlet也从原本的2.3版升级至2.4版。其中主要
新增的功能有以下三点:
(1) web.xml DTD 改用XML Schema;
(2) 新增Filter 四种设定;
(3) 新增Request Listener、Event 和Request Attribute Listener、Event。

一、web.xml 改用XML Schema

Servlet 在2.4 版之前,web.xml 都是使用DTD(Document Type Definition)来定义XML 文件内
容结构的,因此,Servlet 2.3 版 web.xml 一开始的声明如下:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
…………
</web-app>


到了Servlet 2.4 版之后,web.xml 改为使用XML Schema,此时web.xml 的声明如下:
<?xml version="1.0" encoding="ISO-8859-1"?>
<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">
…………
</web-app>

由DTD 改为Schema,主要加强两项功能:
(1) 元素可不依照顺序设定;
(2) 更强大的验证机制。
下面的范例,在Servlet 2.3 版是不合规则的web.xml 文件:

<web-app>
...
<servlet>
<servlet-name>ServletA</servlet-name>
<servlet-class>tw.com.javaworld.servlet.ServletA</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletA</servlet-name>
<url-pattern>/ServletA/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>ServletB</servlet-name>

<servlet-class> tw.com.javaworld.servlet.ServletB</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletB</servlet-name>
<url-pattern>/ServletB /*</url-pattern>
</servlet-mapping>
...
</web-app>

因为<servlet-mapping>元素必须在<servlet>元素之后,因此,上述的范例要改为:

<web-app>
...
<servlet>
<servlet-name>ServletA</servlet-name>
<servlet-class>tw.com.javaworld.servlet.ServletA</servlet-class>
</servlet>
<servlet>
<servlet-name>ServletB</servlet-name>
<servlet-class> tw.com.javaworld.servlet.ServletB</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>ServletA</servlet-name>
<url-pattern>/ServletA/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ServletB</servlet-name>
<url-pattern>/ServletB /*</url-pattern>
</servlet-mapping>
...
</web-app>

不过在Servlet 2.4版之后,原来的范例也算是一个合法的web.xml文件,不再须注意元素的顺序。
除此之外,Servlet 2.4 版web.xml 的Schema 更能提供强大的验证机制,例如:
(1) 可检查元素的值是否为合法的值。例如:<filter-mapping>的<dispatcher>元素,其值只
能为REQUEST、FORWARD、INCLUDE 和ERROR,如下所示:
<filter-mapping>
<filter-name>Hello</filter-name>
<url-pattern>/CH11/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
若<dispatcher>元素的值不为上述四种时,此web.xml 将会发生错误。
(2) 可检查如Servlet、Filter 或EJB-ref 等等元素的名称是否惟一。例如:

<servlet>
<servlet-name>ServletA</servlet-name>
<servlet-class>tw.com.javaworld.servlet.ServletA</servlet-class>
</servlet>
<servlet>
<servlet-name>ServletA</servlet-name>
<servlet-class>tw.com.javaworld.servlet.ServletB</servlet-class>
</servlet>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值