`
frank1998819
  • 浏览: 764372 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类

servlet3.x新特性示例(转)

 
阅读更多

源:http://www.iteye.com/news/28269-servlet-3-1-examples#comments

参考示例github地址

《servlet3.1规范》下载

serlvet3.1在线版javadoc

 

servlet3.x新特性示例:

  • 最近JavaEE 7也发布了,其包含Servlet3.1规范,目前glassfish4已经实现了该规范,所以写了一个参考示例方便参考学习。建议学习之前,请先阅读Servlet3规范,效果更佳。

1、更加便利的注解支持

  • 提供了@WebServlet、@WebFilter、@WebListener、@WebInitParam等注解的支持

2、可插性设计

2.1、web模块化
  • 可以将一个项目分成N个模块,然后通过扫描模块下的META-INF/web-fragment.xml进行装配
2.2、容器启动时可插拔
  • 使用ServletContainerInitializer实现,可以在容器启动时自动回调其onStartup方法,插入一些功能
2.3、零XML化SpringMVC
  • 使用ServletContainerInitializer即SpringMVC注解配置实现无XML化的SpringMVC配置

3、异步处理支持

3.1、servlet的异步支持
  • 通过Servlet提供的异步支持完成了comet:streaming(长连接)和ajax长轮询
  • 使用Servlet提供的AsyncListener进行状态回调
  • 最后通过ajax长轮询实现了一个聊天室功能
3.2、SpringMVC对Servlet的异步支持
  • 使用SpringMVC框架提供的异步支持实现comet:streaming(长连接)和ajax长轮询
  • 使用SpringMVC框架提供的Callable实现异步计算
  • 使用SpringMVC框架提供的DeferredResult实现延迟结果(实现ajax长轮询)
  • Spring框架没有提供长连接实现,具体还得使用原生支持
  • 最后通过ajax长轮询实现了一个聊天室功能

4、其他

4.1、API改进
  • 比如提供HttpOnly支持、HttpServletRequest#getRequestedSessionId直接获取请求时的会话ID、HttpServletResponse#getStatus等直接获取响应状态码、响应头等信息
  • 比如Servlet3.1的request/response#getContentLengthLong得到long型内容长度、ServletContext#getVirtualServerName得到虚拟主机名
  • 比如Servlet3.1的通过HttpServletRequest#changeSessionId()直接更改会话ID,并可以通过HttpSessionIdListener监听
  • 其他的请参考源代码
4.2、获取静态资源
  • 可以直接获取Jar包里的/META-INF/resources下的资源(包括jsp)
4.3、全新的文件上传支持
  • 使用HttpServletRequest#getPart/#getParts得到请求的Part(如文件/参数)等
4.4、servlet 3.1的非阻塞I/O支持
  • 提供WriteListener、ReadListener实现非阻塞I/O支持
4.5、servlet 3.1的协议升级支持
  • 使用HttpServletRequest.upgrade和HttpUpgradeHandler实现HTTP/1.1协议升级,如升级到Websocket等等
  • 示例实现了一个直接与socket通信的回显和时间功能

5、pjax与bigpipe

  • 使用pjax(ajax + pushState) 无刷新ajax(并能记录ajax加载的历史记录)加载内容
  • 使用bigpipe并发加载页面片段,并使用springmvc抽象bigpipe,简化bigpipe开发,可以基于此完善的更易使用

具体请参考源代码,欢迎一起探讨学习。有问题请回复。

几点说明

  • 本系列使用Maven构建,需要Maven基础;
  • 本系列并没有写学习指南,作者认为直接看代码即可,如有不懂的可参考如《Servlet 3.1规范》和javadoc
  • servlet3.1目前仅glassfish支持,在运行servlet3.1的程序时,请使用glassfish maven插件运行。

 

分享到:
评论

相关推荐

    Servlet3.0新特性解析

    Servlet3.0是Java Servlet API的一个重要版本更新,它引入了许多新特性,极大地提升了Web开发的效率和灵活性。在这个主题中,我们将深入探讨Servlet3.0的三大关键特性:监听器(Listeners)、过滤器(Filters)的新...

    servlet各个版本的区别

    文档中给出的示例展示了如何在servlet配置文件中定义servlet以及servlet-mapping。每个servlet由servlet-name和servlet-class定义,分别指定了servlet的名称和实现该servlet的Java类的路径。servlet-mapping则定义了...

    springboot1.x版本所创建的demo1.zip

    这个"demo1.zip"压缩包文件是一个使用 SpringBoot 1.x 创建的示例项目,旨在展示如何在 TongWeb 应用容器中部署和运行 SpringBoot 应用。下面我们将详细探讨 SpringBoot 1.x 的核心特性以及如何与 TongWeb 容器进行...

    struts1.x入门

    2. **创建 Web 项目**:使用 IDE(如 Eclipse 或 IntelliJ IDEA)创建一个新的 Web 项目,命名为 `myStruts1.x`。 3. **导入 JAR 文件**:将解压后的 Struts 库文件(位于 `lib` 目录下)导入到项目中。可以通过...

    undertow-servlet-1.0.0.Beta26.zip

    3. **RxJava适配器**:通过"mod-rxvertx",开发者可以将vert.x的异步操作转换为RxJava的Observables,从而利用RxJava的特性如map、filter、concatMap等,实现更优雅的代码结构。 4. **开源文化**:开源软件的开放源...

    SpringBoot2.x入门到项目实战

    ### 二、SpringBoot2.x新特性 1. **Spring Boot 2.0兼容Spring Framework 5**:带来了反应式编程的支持,增强了HTTP/2和WebSocket的支持。 2. **Java 9兼容性**:SpringBoot2.x对Java 9进行了全面支持,可以充分...

    Servlet3.1规范(最终版)- 只要2个积分

    最近JavaEE 7也发布了,其包含的Servlet 3.1规范也发布了最终版,之前翻译的早期预览版本《Servlet3.1...另外,目前正在整理一份servlet3.x示例,包含了servlet3.0及servlet3.1 新特性的演示代码,可以前往github学习。

    Hibernate中文3.X讲义

    ### Hibernate 3.X 讲义知识点详解 #### 一、JDBC与Hibernate的对比 **JDBC的缺点:** 1. **SQL语法不统一:** JDBC定义了数据库的访问标准,但不同数据库的SQL语法存在差异,这导致了在跨数据库操作时需要编写...

    chapter3-springmvc

    ##servlet3.x新特性示例: 最近JavaEE 7也发布了,其包含Servlet3.1规范,目前glassfish4已经实现了该规范,所以写了一个参考示例方便参考学习。建议学习之前,请先阅读Servlet3规范,效果更佳。 ###1、更加便利的...

    官方原版apache-tomcat-8.5.31

    这个版本8.5.x系列的主要目标是对之前的8.0.x版本进行增强和改进,同时引入了一些与Tomcat 9.0.x兼容的新特性,以确保用户在升级过程中可以平滑过渡。 首先,Apache Tomcat 8.5.x 支持Java EE 7规范,这意味着它...

    springboot参考指南

    23.6.3. Multi-profile YAML文档 iv. 23.6.4. YAML缺点 vii. 23.7. 类型安全的配置属性 i. 23.7.1. 第三方配置 ii. 23.7.2. 松散的绑定(Relaxed binding) iii. 23.7.3. @ConfigurationProperties校验 iii. 24. ...

    Jetty的简单使用示例

    Jetty是一款轻量级、高性能的Java Web服务器和Servlet容器,它被广泛用于开发、测试和部署Web应用程序。本示例将带你了解如何简单地使用Jetty,通过一个Maven项目来实现。以下是对该主题的详细解释: 1. **Jetty...

    Spring+jsp老项目转Springboot的示例Demo

    本示例Demo主要展示了如何将一个基于Spring+jsp的传统项目转换为使用Spring Boot的新架构。Spring Boot以其简洁的配置、快速的启动和一站式的解决方案,成为了现代Java应用开发的首选框架。以下将详细介绍这个转换...

    Activiti5.15 示例war包

    在"标签"中,"Activiti5.15 示例war包"进一步强调了这是与Activiti 5.15版本相关的示例,表明这些示例反映了该版本的特性和改进。 文件名称列表中的"wars"表明压缩包内包含的是多个WAR文件。每个WAR文件可能对应一...

    菜鸟快速入门 struts 1.X (简单的登陆)第一篇

    这个简单的登录示例是学习Struts 1.X的基础,它让你理解了框架如何处理用户请求、验证输入以及控制流程。随着对框架的深入学习,你还可以掌握更多的高级特性,如国际化、异常处理、动态方法调用等。

    spring-boot中文文档1.4.X.pdf

    ### Spring Boot 中文文档1.4.X 知识点概览 #### 一、Spring Boot 文档概述 **1. 关于本文档** - 本文档旨在为开发者提供全面的Spring Boot 1.4.x版本的技术指导。 - 包括了Spring Boot的核心概念、安装教程、...

    struts 1.x学习笔记

    - **开发示例**:创建一个简单的登录示例,了解Struts的基本使用。 4. **Struts 详解**: - **ActionForm 类**:用来封装用户输入的数据,通常继承自`ActionForm`类。 - **Validation**:利用Struts自带的验证...

    mvc3.rar_mvc3

    **Struts 1.x的关键特性** - **ActionServlet**:作为核心控制器,Struts的ActionServlet接收HTTP请求,根据配置文件(struts-config.xml)将请求转发给相应的Action。 - **ActionForm**:负责收集和验证来自用户...

    Jfinal相关jar包及配置详情

    5. `commons-lang3-x.x.x.jar`:Apache Commons Lang库,提供了许多有用的Java工具类。 6. `commons-fileupload-x.x.x.jar`和`commons-io-x.x.x.jar`:用于文件上传功能。 **Jfinal配置** 1. **项目结构**:通常...

    springboot学习.zip

    在SpringBoot2.x中,引入了一些新特性和改进,例如: 1. **WebFlux**:这是一个响应式编程模型,用于构建非阻塞式的Web应用。相比传统的Servlet,WebFlux可以提供更高的并发性能,并支持异步处理。 2. **Spring ...

Global site tag (gtag.js) - Google Analytics