`
jinnianshilongnian
  • 浏览: 21512493 次
  • 性别: Icon_minigender_1
博客专栏
5c8dac6a-21dc-3466-8abb-057664ab39c7
跟我学spring3
浏览量:2420257
D659df3e-4ad7-3b12-8b9a-1e94abd75ac3
Spring杂谈
浏览量:3010030
43989fe4-8b6b-3109-aaec-379d27dd4090
跟开涛学SpringMVC...
浏览量:5640445
1df97887-a9e1-3328-b6da-091f51f886a1
Servlet3.1规范翻...
浏览量:260206
4f347843-a078-36c1-977f-797c7fc123fc
springmvc杂谈
浏览量:1597846
22722232-95c1-34f2-b8e1-d059493d3d98
hibernate杂谈
浏览量:250359
45b32b6f-7468-3077-be40-00a5853c9a48
跟我学Shiro
浏览量:5860331
Group-logo
跟我学Nginx+Lua开...
浏览量:702797
5041f67a-12b2-30ba-814d-b55f466529d5
亿级流量网站架构核心技术
浏览量:785682
社区版块
存档分类
最新评论

Servlet3.1学习示例

 
阅读更多

 本系列是个人学习写的新特性的示例,喜欢的朋友可以一起学习,完善该示例。建议配合《Servlet3.1规范(最终版)中文版下载》一起学习。

 

github地址

 

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插件运行。
13
6
分享到:
评论
8 楼 夜魅不离 2016-05-13  
看了博主很多文章,有个问题想问问博主,我的项目之前是tomcat7+servlet2.5+JDK1.7, 后来部署的服务器改为tomcat8,同时开启了NIO模式,也就是在server.xml里面配置了相关的NIO模式的参数.后来我把项目升级为tomcat8+servlet3.1+JDK1.8,我们都知道servlet3.1新特性就是增加NIO模式,我想知道的是之前tomcat的配置是否对升级之后的项目有影响? 升级之前,servlet2.5版本ServletInputStream是不可重复读的,升级到3.1的时候这个抽象类类增加了三个方法(跟非阻塞IO有关),这个流是否可重复读了?
7 楼 tomatozq 2016-05-03  
chapter3-springmvc中替换<mvc:default-servlet-handler/>
的代码应该要加上SimpleUrlHandlerMapping,将/**映射给DefaultServletHttpRequestHandler处理。

@Bean
public  DefaultServletHttpRequestHandler createRequestHandler(){
DefaultServletHttpRequestHandler requestHandler = new DefaultServletHttpRequestHandler();
   
    return requestHandler;
}

@Bean
    public SimpleUrlHandlerMapping handlerMapping() {       
        Map<String, Object> urlMap = new HashMap<String, Object>(); 
               
        urlMap.put("/**",createRequestHandler()); 
     
        SimpleUrlHandlerMapping hm = new SimpleUrlHandlerMapping(); 
        hm.setUrlMap(urlMap);

        return hm; 
}
6 楼 xiaolong199111 2013-11-25  
不错,写的不错,最近想了解,楼主真是太给力了
5 楼 w156445045 2013-09-25  
博主啥时候出一出EJB的文章啊,呵呵,~
4 楼 jinnianshilongnian 2013-09-23  
zgmzyr 写道
楼主,请教下:
关于:
3.1、servlet的异步支持

通过Servlet提供的异步支持完成了comet:streaming(长连接)和ajax长轮询
使用Servlet提供的AsyncListener进行状态回调
最后通过ajax长轮询实现了一个聊天室功能
即对应的chapter3这个项目的入口url是?
不是chat.jsp这个页面吧?


/chat

com.sishuok.chapter3.web.servlet.chat.ChatServlet(去看这个上的@WebServlet注解)
3 楼 zgmzyr 2013-09-21  
楼主,请教下:
关于:
3.1、servlet的异步支持

通过Servlet提供的异步支持完成了comet:streaming(长连接)和ajax长轮询
使用Servlet提供的AsyncListener进行状态回调
最后通过ajax长轮询实现了一个聊天室功能
即对应的chapter3这个项目的入口url是?
不是chat.jsp这个页面吧?
2 楼 awuge 2013-08-29  
不错,来学习!
1 楼 rox 2013-08-29  
谢谢总结,一直都没时间研究它!

相关推荐

    基于servlet3.1,实现模块化扩展.zip

    本项目"基于servlet3.1,实现模块化扩展"旨在利用这些特性来构建一个可扩展、模块化的Web应用程序。 Servlet 3.1引入了以下几个关键知识点: 1. **异步处理**:Servlet 3.1引入了异步Servlet的概念,允许在服务...

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

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

    Servlet3.1规范(最终版) PDF

    Servlet3.1规范(最终版) JavaTM Servlet 规范 版本 3.1(最终版) Shing Wai Chan Rajiv Mordani [作者] 穆茂强 张开涛 [译者] 2012年6月翻译 2013年7月修订 目录 前言 ............................... 3 ...

    Servlet3.1规范(最终版)

    ### Java Servlet规范版本3.1概述 Java Servlet 3.1规范是Java Servlet API标准的一个版本,它为Java Servlets提供了一个完整和清晰的解释。该规范的目的是定义Java Servlets的API,包括其中的类、接口和方法签名,...

    servlet之Filter使用范例--登陆验证

    在压缩包文件"ServletLearningChapter2_2"中,可能包含了关于Servlet和Filter的更多学习材料,包括代码示例、练习项目等,这将有助于你更深入地理解和掌握这些概念。建议结合这些资源进行实践操作,以巩固理论知识。

    servlet示例模板.zip

    这个"Servlet示例模板.zip"文件包含了一些必要的库和资源,帮助我们理解并实践Servlet技术。让我们深入探讨这些元素: 1. **thymeleaf-3.0.7.RELEASE.jar**:Thymeleaf是一个现代的服务器端Java模板引擎,它可以...

    Servlet3 学习测试代码

    Servlet3.1引入了对WebSocket协议的支持,允许服务器与客户端之间建立持久连接,进行双向通信。通过`@ServerEndpoint`注解,可以定义WebSocket服务端点。例如: ```java @ServerEndpoint("/echo") public class ...

    jsp servlet 入门学习资料-新手一看就懂

    3.1 Tomcat的安装和直接使用 3.2 Tomcat和Apache的配合 3.3 Tomcat和IIS的配合 3.4 Tomcat的配置和常见问题 3.4.1 Tomcat的主配置文件:server.xml 3.4.2 Windows下代码保护的问题 3.4.3 Apache、IIS和Tomcat...

    servlet3.0.zip

    - **WebSocket支持**:虽然WebSocket在Servlet 3.1中被正式引入,但Servlet 3.0为WebSocket的早期实现奠定了基础。 - **微容器**:Servlet 3.0引入了微容器概念,使得Servlet可以在没有完整应用服务器的情况下运行...

    tomcat8.5 jsp servlet WebSocket等api文档

    Tomcat 8.5是其一个稳定版本,支持Java EE 7规范,包括Servlet 3.1、JSP 2.3和EL 3.0。在API文档中,开发者可以找到关于如何配置和管理Tomcat服务器,以及如何部署和运行Web应用的信息。 2. **JSP (JavaServer ...

    Java™ Servlet 规范.

    1.4 Servlet 与其他技术的比较 ........................................................................................................................14 1.5 与 Java 平台企业版的关系 ......................

    Web系统与技术--实验十.pdf

    - 不同版本的Servlet规范增加了新的API和功能,比如Servlet 3.1引入了异步处理、注解等。 8. Servlet技术在实际开发中的应用 - Servlet常用于处理HTTP请求和响应,是构建Web应用的基础。 - 通过实现Servlet接口...

    如何运行Servlet程序

    下面是一个简单的 Servlet 程序示例: ```java import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet....

    servletser

    3. **servlet-3_1-final.pdf** 和 **Servlet3.1规范(最终版).pdf**:这两个文件都是Servlet 3.1版本的最终规范文档,该版本引入了诸如异步处理、注解配置、过滤器链等功能增强。 4. **servlet-2_3-fcs-spec.pdf**...

    WebLogic平台下部署Servlet与Jsp

    本实验旨在让学习者掌握在WebLogic平台上部署Servlet与Jsp的方法和技术要点。通过实际操作,加深对Servlet与Jsp的理解,熟悉WebLogic服务器的基本配置及应用部署流程。 #### 实验环境 - 操作系统:Windows XP - ...

    EJB3.1深入浅出

    例如,下面的示例展示了如何在Servlet中使用No-Interface View: ```java @EJB private ByeEJB byeEJB; public String sayBye() { StringBuilder sb = new StringBuilder(); sb.append("&lt;html&gt;&lt;head&gt;"); sb....

    domino xpages servlet在xpages使用教程

    【标题】:Domino XPages Servlet在XPages中的应用指南 【内容】: 在IBM Lotus Domino开发环境中,XPages提供了一种...通过不断学习和实践,开发者可以更好地利用Domino XPages Servlet来提升应用的性能和用户体验。

    深入 Java Servlet 网络编程

    3.1 请求处理:当客户端发起一个HTTP请求,Servlet容器(如Tomcat)接收到请求后,通过映射配置找到对应的Servlet,调用其service()方法。 3.2 doGet()与doPost():Servlet通过重写doGet()和doPost()方法来处理GET...

    idea搭建一个简单的servlet

    在本文中,我们将详细介绍如何使用IntelliJ IDEA(简称Idea)从零开始搭建一个简单的Servlet项目,并实现一个名为"Helloservlet"的示例。Servlet是Java Web开发中的核心组件,它允许我们处理HTTP请求并返回响应。...

Global site tag (gtag.js) - Google Analytics