>>分享Java Web开发技术,并且对孙卫琴的《Tomcat与Java Web开发技术详解》提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 32616 个阅读者 刷新本主题
 * 贴子主题:  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开发-->继承
  JSP与Hibernate开发-->使用Session(Ⅱ)
  Java网络编程-->Servlet技术详解(Ⅰ)
  精通Spring-->
  Vue3开发-->Spring、JPA与Hibernate的整合
  在Java Web应用中获取绝对路径和相对路径
  Java二维码生成-谷歌(Google.zxing)开源二维码生成的范例及...
  HTML5 WebSocket的用法
  JSP 日期处理
  JSP 指令
  Json格式实现数据传输
  详解在Linux系统中安装Tomcat
  用信鸽来解释HTTPS协议
  用@WebFilter配置过滤器
  关于GBK,GB2312,UTF-8字符编码的区别
  JSP2和Servlet3的一些新特性
  在Tomcat9中配置HTTP/2
  我是如何成为一个Java Web开发者的
  Servlet 4的核心技术
  JavaEE的发展趋势
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


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