传智播客旗下技术交流社区北京校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 原则至上 中级黑马   /  2019-1-14 17:02  /  70 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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 实例,该实例被传递到一个请求处理方法。

2.HttpServletMapping 接口

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

在该 API 内,会从一个HttpServletRequest 实例获得 servlet 映射,该实例包含 4 个方法:

     ---getMappingMatch() 返回匹配的类型。

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

     ---getMatchValue() 返回匹配的 String

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

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处理的支持。HttpServletRequest接口中提供了两个方法


分享至 : QQ空间
收藏

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马