Apache Tomcat 4.0的新特性

发表于:2008-02-21来源:作者:点击数: 标签:TomcatApacheapache
Tomcat 4.0包含三个主要的部分,包括: * Catalina - 一个符合Servlet API规范2.3的Servlet Container * Jasper - 一个符合JSP规范1.2的JSP编译器和运行环境 * Webapps - Tomcat中包含的一些例子和用于 测试 的web例程,以及相关文档。 Tomcat4.0的一个主要
Tomcat4.0包含三个主要的部分,包括:


    * Catalina - 一个符合Servlet API规范2.3的Servlet Container
    * Jasper - 一个符合JSP规范1.2的JSP编译器和运行环境
    * Webapps - Tomcat中包含的一些例子和用于测试的web例程,以及相关文档。

    Tomcat4.0的一个主要目的是支持目前正在处于测试版的Servlet2.3规范和JSP1.2规范的新特性。本文主要介绍Tomcat4.0实现的这些新特性以及这些新特性目前在tomcat中的实现情况。

    Servlet API 规范2.3

    应用程序中的事件:


    你可以在web.xml文件中注册相应的事件监听器,当这些事件发生时,在应用程序中可以收到相应的事件通知,这些事件包括:
    - 应用启动
    - 应用关闭
    - 应用的属性的增加、删除、被替换
    - Session创建
    - Session失效、超时
    - Session的属性的增加、删除、被替换

    事件监听器的功能被加入到Catalina,看来效果非常好。在Webapps中的web应用examples中就有两个监听器的例子用于通过ServerletContext.log()记录相应的事件。

    Servlet Fliter


    你能够在web.xml文件中注册类似与Catalina核心中Valves功能类似的的Filter。Filter主要具有以下特性:
    - Filter能够映射成相应的URL或特定的Servlet。
    - Filter能被用于对request,reponse对象进行预处理、或后处理。
    - Filter能封装request、response对象,比如可以对对象中的内容进行转换。
    - Filter能够对访问请求直接响应,然后返回给客户端,而不仅仅进行访问请求的传送,比如,你可以在应用级进行用户认证。

    与这些特性相关联,当servlet传递参数给RequestDispatcher时就可以做这种类型的封装。而在以前,你只能将初始的request对象传递给Servlet Container,并且从Servlet Container中得到返回的response对象。Servlet filter的功能目前已经加入到Catalina中,并通过了初步测试。在应用examples中有一个filter用于路径映射和向调用servlet的映射("/servlet/*"),其中存放了最终传递给执行Servlet的request对象属性。

    安装扩展库的依赖关系

    Web应用程序或WEB-INF/lib中的jar文件,现在可以声明对特定版本外部库的依赖关系,这些外部库是由Servlet Container作为共享扩展提供的。在Catalina中目前还没有完全实现这部分功能。

    国际化支持


    Catalina现在支持从Locale向字符集的映射,在ServletRequest中增加了一个新的方法setCharacterEncoding() ,在这一方面,还需要有个多的测试和功能增强。


    Web应用的类装载器


    Servlet规范草案中9.6.2节中定义了与Web应用中类装载器相关的需求和建议。这些需求在Catalina中被遵照执行。

    Servlet 2.3应用程序分发描述符的DTD


    在Catalina中包括一个非正式的用于解析web.xml文件的DTD(catalina/src/conf/web_23.dtd)
    它将被正式发布的DTD所替代。

 

    JSP规范1.2


    JSP 对Include flush="false"的支持
    这个变化通过在标准或定制的标记中嵌套使用<jsp:include>标记,允许利用内含的servlet进行缓存、处理,并产生的输出。这个变化取决于前述的对RequestDispatcher.include()的功能的增强功能。

    JSP页面的XML视图


    JSP1.2的实现要求输入不仅要符合JSP语法,而且要符合XML语法。目前正在将Jasper的parser进行转换,使得其能接受任何一种类型的输入。

    属性编辑器的利用


    假如一个应用对java类的一个特定属性注册了一个属性编辑器(PropertyEditor),那么这个属性编辑器的setAsText()方法将用于将文本格式的属性(比如request对象的一个参数)转换为该属性的内部表示。假如没有定义属性编辑器,那么就采用前述的缺省属性编辑器进行转换。

    定制标记库验证页面的合法性


    在定制标记库中增加了一个新的编译阶段用于检查页面的XML视图,如果检测到错误,就抛出一个转换时异常。在这当中,可用于验证:
    - 从语义上不能被TLD中定义的信息验证的嵌套定制标记
    - 误用或滥用JSP中定制标记特性。比如,你可以用一个验证子禁止JSP使用Java语句块。

    增强的迭代支持


    增强了的定制tag机制支持在不做内容嵌套的前提下进行迭代的能力。这将优化这类非常常见的例子的性能,比如通过迭代来表示一个表格的处理结果,而不用显式对表格中每一行进行处理。

    定制tag库能够声明应用监听器


    一个定制的tag库能够利用servlet2.3中的新特性,声明一个监听器,用于监听应用程序相关的事件。

    附加的TLD元素


    在许多简单的例子中,声明变量时,采用附加的TLD元素可不用书写TagExtraInfo类

    在Tag接口中增加resetCustomAttributes()方法


    通过由Servlet Container调用附加的方法,使得在循环调用一个tag的实例前调用该方法

原文转自:http://www.ltesting.net