阅读更多

13顶
0踩

企业架构

原创新闻 Servlet 3.1 新特性示例

2013-09-09 09:51 by 正式记者 jinnianshilongnian 评论(21) 有46597人浏览

 

参考示例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插件运行。

 

参考示例github地址

《servlet3.1规范》下载

serlvet3.1在线版javadoc

13
0
评论 共 21 条 请登录后发表评论
1 楼 white_crucifix 2013-09-09 10:30
支持异步和非阻塞是亮点啊

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 解决360浏览器兼容模式的页面显示问题

    以360的几款浏览器为例,我们优先通过Webkit内核渲染主流的网站,只有小量的网站通过IE内核渲染,以保证页面兼容。在过去很长一段时间里,我们主要的控制手段是一个几百k大小网址库,一个通过长期人工运营收集的网址...

  • acrobat页面显示问题

    最近对着电脑的时间比以前多太多了,每天都用Acrobat看pdf(千万别告诉我你用Adobe Reader),为了保护眼睛,需要更改下页面显示。   一、背景颜色  经常对着电脑看文档的人,需要修改下背景颜色。  通常默认...

  • 对于solrcloud节点删除后,依然在页面显示问题

    因为在创建solrcloud的节点后,配置文件会传入Zookeeper中进行统一的配置,但是在配置文件中手动删除节点后,重启后虽然节点显示不能用,但是在页面依然显示, 这是因为没有在Zookeeper的配置中进行处理,这里...

  • 在cmd命令行使用sqlplus时的页面显示问题

    1、问题描述:页面显示不全 解决方式: ----set linesize 设置一行显示的字符数 ----set pagesize 设置一页显示的行数 可以使用show linesize;查看当前设置的格式,或者show all; 我这里设置 set ...

  • freemarker 页面显示html标签问题

    在页面显示富文本的内容时,会自动将内容加上双引号,导致页面展示时连同标签一起展示,想了好多种办法都不行,最后终于想到了一个办法,总结如下: 1、将后台内容用一个隐藏域在页面上存储下来 <div id=&...

  • swagger页面不显示_swagger页面打开问题

    项目B,在局域网上那台linux机器运行,swagger没问题,但是在本地IDEA上运行,swagger页面打开状况如下:A和B用的2.9.2,都是springboot项目,配置都是一样的@Configuration@EnableSwagger2public class ...

  • vue2 vue-router 不显示页面问题

    最后发现是vue-router版本的问题,最新的版本是4.x.x , 使用cnpm install vue-router -S, 时默认安装了最新。我的项目的问题是,版本不兼容,环境配置不对。在项目配置的时候,默认 npm 包导出的是运行时构建,即 ...

  • 解决WordPress文章页面无法显示的问题

    解决方法 3.1 手动解决 在Word Press文章编辑页面中进行手动修改链接为纯英文可以解决这个问题。 缺点:使用该方法解决问题,每一篇发布的文章都需要进行手动修改连接,这太不方便了。 3.2 插件解决 在WordPress中...

  • 微信小程序页面不显示数据问题

    今天调试一个下拉框代码,我的代码是从我项目其他页面原模原样copy过来的,但是发现数据还是不能跟之前一样正常显示在页面上,最终发现原来代码需要添加如下的代码才能显示在页面上,就因为这个问题我寻找了一个下午...

  • 解决浏览器缩放导致页面显示不全问题

    问题 pc端web页面开发时,发现windows系统经常推荐用户使用125%、150%比例的缩放窗口,这样导致web页面被进行缩放,除此之外还有人为的按钮缩放。故此,在页面devicePixelRatio(设备像素比例)变化后,通过计算页面...

  • 北京银行网银页面显示问题

    最近使用北京银行的网银发现页面显示问题很大,后来凑巧发现是The World3.3浏览器启用IE高级渲染引起的(工具-》启用IE高级渲染)。大家在使用北京银行网银时,把它关掉就可以了。

  • 前端Vue页面跳转后不显示问题

    前端Vue页面跳转后不显示问题 1、index.js里面的代码 2、点击页面的代码 这样写完后发现页面跳转了,但是跳转页面没有显示 3、解决问题 这个一定要添加,我已经忘记好几次了

  • 解决中国教育考试网中小学教师资格考试报名系统的页面显示问题

    小师妹在中国教育考试网(http://ntce.neea.edu.cn/)进行中小学教师资格考试报名遇到了页面无法正常显示的问题,截图如下:

  • druid监控页面SQL不显示问题

    druid监控页面SQL不显示问题 如果可以正常访问界面,系统与数据库有交互,但是druid页面SQL监控却没数据 第一步查看【数据源】 检查filter是否没数据 第二步若没有数据,则查看自己的配置类 可以程序编写...

  • html页面中文显示乱码问题解决方法

    页面的显示编码和存储编码不一致 解决方案:修改显示编码和存储编码为一致。 步骤: 修改页面的显示编码 修改页面的存储编码 修改页面的显示编码 页面的显示编码就是浏览器用来解析页面的编码,常用的是utf-8编码。...

  • eclipse中jsp页面图片不显示问题

    在给一个web项目里的jsp页面添加一个背景图片,使用background:url的方式获取图片路径,但是一直不显示,最后发现还是根本路径的问题。 解决: 使用java代码获取项目根路径,通过绝对路径方式引入图片 在jsp文件的...

  • iframe 嵌入页面后无法显示的问题

    X-Frame-Options可用于指示是否应该允许浏览器呈现在一个页面<FRAME> 或 <IFRAME>中. 以确保网站内容是不是嵌入到其它网站. <head> <meta http-equiv="Content-Type" content="text/html; ...

  • spring boot 项目页面显示不出来

    在网上看见一种关于springboot的项目结构,并模仿着写了一下,导致无法访问页面,在网上查阅了相关问题及解决办法,特此留下记录。 Whitelabel Error Page This application has no explicit mapping for /error, ...

  • vue页面显示小数位数问题处理

    前几天,写了个数据占比的echarts的图,本来写的也没有问题,快上线了,突然被告知,数据小数位数展示的不合理啊,如下图所示: 接口返回数据如上图所示,我一看这简单啊,使用parseFloat(value).toFixed(3),这个公式不就...

  • vue切换页面echarts图表不显示的问题

    在vue项目中切换tab页面或者在后台管理框架中切换面包屑echarts图表会不显示,初次进入的时候能够正常显示,本地运行也没有问题,这个问题只在线上部署的时候出现。目前找到了两个解决方案,做下记录。echarts挂载的...

Global site tag (gtag.js) - Google Analytics