>>分享Java Web开发技术,并且对孙卫琴的《Tomcat与Java Web开发技术详解》提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 23836 个阅读者 刷新本主题
 * 贴子主题:  Servlet4新特性介绍 回复文章 点赞(0)  收藏  
作者:sunshine    发表时间:2018-07-03 05:22:04     消息  查看  搜索  好友  邮件  复制  引用

2017年JavaEE8正式发布了,这是自 2013 年 6 月以来 Java 企业平台的首次发布,是分成两部分的发布中的前半部分(后一部分是 Java EE 9)。Oracle 对 Java EE 进行了战略性重新定位,重点关注一些支持云计算、微服务和反应式编程的技术。反应式编程现在正融入到许多 Java EE API 的架构中,而 JSON 交换格式为核心平台提供了支撑。Java EE 8 中提供的主要特性重点包括 API 更新和引入、对 HTTP/2 的新支持、反应式编程,以及 JSON等。今天我们主要介绍一下JavaEE8中Servlet4.0 API所提供的一些新的特性以便大家有所了解。
    Servlet从3.1到4.0是对Servlet的一次比较大的改动,而改动的关键之处在于对HTTP2的支持。HTTP2是继上世纪末HTTP1.1协议规范化以来首个HTTP协议新版本,相对于HTTP1.1,HTTP2将带来许多的增强。这些新特性如下:
1.请求/响应复用(Request/Response multiplexing)
2.流的优先级(Stream Prioritization)
3.服务器推送(Server Push)
4.HTTP1.1升级(Upgrade from HTTP 1.1)
(关于HTTP1.1和HTTP2.0协议的区别以及新特性的介绍,具体请参考附带资料。)
Java EE 8 中对 Servlet 进行了重大修订,主要是为了适应 HTTP2.0 的性能增强特性。服务器推送目前是这一领域的首要特,
另外新增了HttpServletMapping 接口,提供了对HTTP Trailer 的支持,还有新的 GenericFilter 和 HttpFilter 类简化了过滤器的编写,实现了对 Java SE 8 的一般性改进。下面我们一起来看一下。
1,服务器推送
服务器推送通过将客户端资源推送到浏览器的缓存中来预先满足对这些资源的需求. 客户端发送请求并收到服务器响应时,所需的资源已在缓存中。
在 Servlet 4.0 中,服务器推送是通过一个 PushBuilder 实例公开的。示例1展示了一个从 HttpServletResponse 实例获取的 PushBuilder 实例,该实例被传递到一个请求处理方法。
示例1:
点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

在示例1 中,my.css 的路径是通过path() 方法在 PushBuilder 实例上设置的,并通过调用 push() 推送到客户端。

2, HttpServletMapping 接口

Servlet 4.0 提供了一个新的 API,用它来实现 URL 映射的运行时发现。HttpServletMapping 接口的用途是让确定导致 servlet 激活的映射变得更容易。

在该 API 内,会从一个HttpServletRequest 实例获得 servlet 映射,该实例包含 4 个方法:
点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

getMappingMatch() 返回匹配的类型。

getPattern() 返回激活 servlet 请求的 URL 模式。

getMatchValue() 返回匹配的 String

getServletName() 返回通过该请求激活的 servlet 类的完全限定名称。

HttpServletMapping mapping = request.getHttpServletMapping();

String name = mapping.getMappingMatch().name();

String value = mapping.getMatchValue();

String pattern = mapping.getPattern();

String servletName = mapping.getServletName();



HttpServletMapping mapping = request.getHttpServletMapping();

String name = mapping.getMappingMatch().name();

String value = mapping.getMatchValue();

String pattern = mapping.getPattern();

String servletName = mapping.getServletName();

HttpServletMapping 接口上的所有 4 个方法

Servlet4.0发布的新特性介绍
请求/ServletMappingTest路径时

运行结果:

name:EXACT

value:ServletMappingTest

pattern:/ServletMappingTest

servletName:servletMap

运行在项目:/Servlet4Demo



请求/servlet/dd 路径时

运行结果:

name:PATH
value:dd
pattern:/servlet/*
servletName:servletMap
运行在项目:/Servlet4Demo


示例2的运行结果如下:

请求/ServletMappingTest路径时

运行结果:

name:EXACT

value:ServletMappingTest

pattern:/ServletMappingTest

servletName:servletMap

运行在项目:/Servlet4Demo
点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小


请求/servlet/dd 路径时

运行结果:

name:PATH
value:dd
pattern:/servlet/*
servletName:servletMap


运行在项目:/Servlet4Demo
Servlet4.0发布的新特性介绍
3, HTTP Trailer 的支持

首先要了解http协议中的trailer这个东东,这个header有关,根据http1.1协议,当response的Transfer-Encoding为chunked时,允许在消息体后面附加其它的Header, 这个附加的Header就叫Trailers。我们知道一般的http请求回应时,先是发送Headers(消息头), 再是发送body(消息体)。 但是有些情况下,消息头需要与消息体有关联,比如需要在header里附上消息体的Hash签名, 但是消息体并不总是预先就存在的,在动态产生消息体的情况下,如果在消息体产生完后再签好名,发送Headers和Body, 性能肯定会受影响。比较好的做法是,Server获得请求后,开始发送可以发送的Headers, 同时设置Transfer-Encoding: chunked, Trailer: XXXX。 然后对动态产生的消息体一个chunk,一个chunk的发完以后,再附加上Hash头.

在新版的Servlet4.0 API中提供了对trailer处理的支持。


程序猿的技术大观园:www.javathinker.net
  Java面向对象编程-->按面向对象开发的基础范例
  JavaWeb开发-->使用Session(Ⅱ)
  JSP与Hibernate开发-->第一个helloapp应用
  Java网络编程-->用Spring整合CXF发布Web服务
  精通Spring-->绑定CSS样式
  Vue3开发-->Vue CLI脚手架工具
  HTTP 响应头信息
  Servlet 类的包名,存放路径和打包
  海量数据如何分页
  Apache网页与安全优化——网页压缩及缓存(理论实践相结合!...
  30分钟学会使用Spring Web Services基础开发
  《Tomcat与Java Web》新版即将出炉,业界大咖们力荐
  通过URLConnection类访问网上URL资源
  连接MySQL数据库时 JDBC URL中参数的说明
  SOAP协议介绍
  Tomcat的工作模式和运行模式
  Servlet 容器 Jetty 9.4.10 发布,大量错误修复和改进
  观看视频:孙卫琴讲解的Web应用运作基本原理,生动直观!
  Tomcat容器管理安全的几种验证方式
  Java Web前端到后台常用框架介绍
  如何修改request的parameter的几种方式
  更多...
 IPIP: 已设置保密
树形列表:   
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。