Servlet 3.0规范的一个主要目标是无需手动修改应用程序web.xml文件,即可部署servlet,filter(过滤器)和listener(监听器)等。新的特征包括:
Annotation(注释)在filter和servlet中的使用,让部署它们时可以不用在web.xml中声明相关条目。
支持“web片段(fragment)”,由开发人员提供配置信息,无需手动编辑web.xml文件。XML片段放置于/META-INF/web-fragments.xml文件中,它包含大部分与web.xml描述符相同的元素。容器将在部署时处理这些XML片段,并配置最终的描述符。
源于ServletContextListeners的对filter和servlet的编程式配置,这些配置会被放在jar包中的/META-INF/*.tld文件里。
在早期草案审阅阶段,这些特征引起过一些争论。一些专家组成员担心会有严重的安全风险,诸如部署了非预期的filter和servlet,无论这是偶然的或是故意混淆的结果。专家组成员Greg Wilkins在他言辞激烈的博文中将这一规范描述为“糟糕的文档以及缺陷流程下工作不和谐的专家组的成果”。最终建议草案中讨论了大部分以上被关注的问题,包括指定多个jar文件的绝对顺序,以及允许排除个别jar文件。它以如下方式工作:借助META-INF/web-fragment.xml文件中的元素,WEB-INF/lib中的每个jar文件被赋予一个对应的名字。Web应用的WEB-INF/web.xml将包含元素,并以应用的顺序列出以上的片段名,同时它还有一个可选的元素,用于标识是否以及何时包含(include)那些未被命名的jar文件。部署者可以选择只部署那些列表中可信的jar文件,以防止意外部署的问题。此外,在找到web-fragment.xml文件之前,顺序的特性可以排除(exclude)那些不需要扫描的jar文件,因此加速了应用的部署。
除了支持片段以及使用注释,专家组所设定的另一个需求是可以插入框架共享副本,包括JAX-WS,JAX-RS和JSF等构建在Web容器之上的框架。公开评阅草稿中加入的ServletContainerInitializer正是用于处理这个用例。ServletContainerInitializers通过jar服务API被发现,另外它指定它所能处理的一系列类型。任何包含在WEB-INF/lib下jar文件里的的这些类型的类(Class),在发现后会被传递给ServletContainerInitializer,它能够使用与ServletContextListeners相同的编程式来配置APIs。尽管这点广受欢迎,但ServletContainerInitializer也的确引出了另一个新的问题,正如Wilkins在后续的博文中所强调的那样,目前仍不清晰的是使用绝对的顺序机制能否排除ServletContainerInitializer。他给出了一些自己的建议,以澄清这一点:
如果web.xml具有一个不包含元素的,那么只有在顺序中列出的包含片段的jar文件才可以通过注释和可插拔(Pluggability)特征实例化Filter、Listener和Servlet等。具体来说:
被排除的jar文件的web-fragment.xml不会被处理;
对于注释的servlet,filter或listener,被排除的jar文件不会被扫描。但是,如果一个源于被排除的jar的servlet,filter或者listener被列在了web.xml或者非排除性的web-fragment.xml中,除非它被metadata-complete所排除,那么这些注释将被采用。
在被排除的jar文件的TLD文件中所发现的ServletContextListeners将不能够通过编程式APIs配置filter和servlet。任何这样的尝试将导致IllegalStateException异常。
如果从被排除的jar文件中装载一个发现的ServletContainerInitializer,它将会被忽略。
在ServerletContainerInitializers处理类时,将不会扫描被排除的jar文件。
除了这些易于使用的特征,JSR-315还添加了对异步请求的支持,它允许线程提前返回容器并执行其他任务。这个特征备受争议,专家组试图利用已有的RequestDispatcher处理异步的重分发。讨论的结果是,新规范添加了20个方法和3个新的接口。由于其复杂性,在公开审阅阶段被广泛批评。最终建议草案定义了一个明确的分发类型:AsyncContext.dispatch,它被用于执行异步请求,并包含相当简化了的API。@WebServlet和@WebFilter注释具有一个boolean型的属性:asyncSupported,缺省为false。当它被设为true时,应用程序可以通过调用startAsync启动另一个分离的线程进行异步处理,同时传递给它到request(请求)和response(响应)对象的引用,之后从容器里的原线程退出。这意味着response将沿着与进来相同的路径反序遍历这些过滤器(或过滤器链)。当异步处理从request开始时,另一个线程或者回调(callback)也可以产生response并调用complete方法,或者通过AsyncContext.dispatch方法将request分发出去,以便它在容器的上下文环境中运行。
查看英文原文:Java Servlet 3.0 Specification Reaches Proposed Final Draft
分享到:
相关推荐
Servlet 3.0是Java服务器页面(JSP)和Servlet技术的一个重要版本更新,它引入了许多新特性,提升了Web应用程序的开发效率和灵活性。在JSR-315(JavaTM Servlet 3.0 API Specification)中,专家小组对这项规范进行...
Servlet3.0是Java Web开发中的一个重要里程碑,它在Servlet2.5的基础上引入了许多新特性,极大地提高了开发效率和灵活性。这份"Servlet3.0参考手册"无疑为开发者提供了全面的API参考和实用指南。 首先,Servlet3.0...
Servlet 3.0规范的发布标志着Servlet技术的一次重大进步,它不仅提升了Web应用的性能和可扩展性,还简化了开发流程,增强了安全性,为Java Web开发者提供了更为强大和灵活的工具集。对于希望构建高性能、高可用性的...
个人整理的JavaServlet 3.0的API,按Java6 API的风格整理
Servlet 3.0是Java Servlet规范的一个重要版本,它带来了许多新特性和改进,极大地提升了Web应用程序的开发效率和灵活性。这个"javax.servlet-api-3.0.1.jar"文件是Servlet 3.0规范的API实现,包含了开发人员编写...
Servlet 3.0是Java Servlet规范的一个重大更新,它在2010年由Oracle America, Inc.发布,作为JSR-000315的一部分。这个版本引入了许多新特性和改进,旨在提升Web应用程序的开发效率和灵活性。以下是Servlet 3.0规范...
Servlet 3.0是Java Web开发中的一个关键规范,它极大地扩展了Servlet API的功能,并引入了许多新特性,使得Web应用程序的开发更为灵活和高效。在这个规范中,Java Servlet技术进行了许多改进,旨在提升性能,简化...
下载的`servlet3.0jar综合`压缩包包含了实现这些特性的关键库,对于进行Java EE 3.0开发的程序员来说是必不可少的工具。在实际开发中,结合相关的框架(如Spring MVC)和其他Java EE组件,可以构建出功能强大、易...
Servlet 3.0是Java Servlet规范的一个重要...总的来说,“servlet3.0.zip”包含的资源为开发者提供了使用Servlet 3.0规范进行Web开发的基础,通过学习和实践,开发者可以构建高效、灵活且易于维护的Java Web应用程序。
3. **Pluggable Servlet Container**:Servlet 3.0规范允许开发者创建自己的Servlet容器,而无需依赖特定的容器实现。这提高了可移植性,并鼓励创新的容器实现。 4. **微容器**:Servlet 3.0引入了微容器的概念,...
【标题】"Jsp/Servlet3.0 ppt和代码"涉及的是Java服务器页面(JSP)和Servlet 3.0版本的关键技术。JSP是一种动态网页技术,它允许开发者将HTML代码与Java代码混合编写,从而实现服务器端的动态内容生成。而Servlet是...
Servlet 3.0 源码文件,可以在myeclipse中查看servlet的代码,方便编程
Servlet 3.0是Java EE 6规范的一部分,它带来了许多增强的功能,使得Web应用程序的开发更为便捷和灵活。在这个名为“servlet3.0-demo”的项目中,我们重点探讨的是如何利用Servlet 3.0的新特性进行文件上传操作,...
首先,Servlet 3.0是Java Servlet规范的一个重要版本,它引入了许多新特性,如注解驱动的Web应用、异步处理能力、过滤器链的改进等。与之前的版本相比,Servlet 3.0简化了Web应用的部署和配置,开发者可以不再依赖...
Servlet 3.0 版本是 Java EE 6 的一部分,它在原有基础上增加了一些重要的新特性,旨在进一步简化 Web 应用的开发和部署过程。本文将详细介绍 Servlet 3.0 的关键新特性,包括异步处理、新增的注解支持以及可插性...
Servlet3.0是Java Servlet API的一个重要版本更新,它引入了许多新特性,极大地提升了Web开发的效率和灵活性。在这个主题中,我们将深入探讨Servlet3.0的三大关键特性:监听器(Listeners)、过滤器(Filters)的新...
这个教程旨在帮助开发者了解和掌握如何有效地利用Maven构建Java Web项目,并利用Servlet 3.0特性。 【描述】"maven servlet 3.0 eclipse config video" 涵盖了两个关键主题:Maven的配置和Servlet 3.0的集成。Maven...
Servlet 3.0作为Servlet规范的一个重要版本,引入了许多新特性,其中最引人注目的就是异步处理和支持Web插座(WebSocket),这使得实时通信如聊天室的实现变得更加便捷。本文将深入探讨如何利用Servlet 3.0的异步...
Servlet3.0是Java Web开发中的一个重要里程碑,它在Servlet API上引入了多项重大改进,极大地提升了开发效率和灵活性。这个压缩包包含了servlet3.0的jar包和对应的doc文档,非常适合开发者学习和使用。 首先,我们...
Servlet3.0是Java Web开发中的一个重要里程碑,它在Servlet2.5的基础上引入了许多新特性,极大地提高了开发效率和灵活性。在这个"Servlet3.0相关的包"中,包含了以下几个关键组件: 1. **Servlet**: 这是Java ...