请选择 进入手机版 | 继续访问电脑版
本站特色:极好的技术研究氛围!所有技术发帖,必有回复! 做最受欢迎的Java论坛

疯狂Java联盟

 找回密码
 加入联盟
查看: 176|回复: 1

Servlet 4.x的新特性

[复制链接]
发表于 2018-3-11 11:00:44 | 显示全部楼层 |阅读模式
在Servlet 4.x中,首先我们可以看到,增加了如下的类/接口
GenericFilter、HttpFilterHttpServletMapping、MappingMatch、PushBuilder

这些新增的API能够实现什么的功能?有什么好处呢?

其中当我们看到GenericFilter、HttpFilter的时候,多少有点眼熟,对吗?
是的,很熟悉啊,因为以前我们有GenericServlet、HttpServlet!这个是基于【适配器模式】设计的API,其实里面的方法实现什么都没有!只是方便写具体的实现类的时候,能够通过适配器提供的方法,简化实现类。GenericFilter、HttpFilter可以说是GenericServlet、HttpServlet的翻版。用法也大同小异。

HttpServletMapping是一个在运行时动态发现HTTP的URL映射的接口。在Servlet之前的版本中,我们很难确定一个URL是通过什么样的规则匹配到Servlet中来执行的。通过request.getHttpServletMapping()方法,能够获取到为何把请求转发到此Servlet中。
在如下的一个映射的,我们之前能确定请求是通过哪个url-pattern映射进来的吗?
  • <servlet>
  •      <servlet-name>MyServlet</servlet-name>
  •      <servlet-class>MyServlet</servlet-class>
  • </servlet>
  • <servlet-mapping>
  •      <servlet-name>MyServlet</servlet-name>
  •      <url-pattern>/MyServlet</url-pattern>
  •      <url-pattern>""</url-pattern>
  •      <url-pattern>*.extension</url-pattern>
  •      <url-pattern>/path/*</url-pattern>
  • </servlet-mapping>


现在可以通过HttpServletMapping.getPattern()来确定了!还能根据HttpServletMapping.getMatchValue()得到*部分的值。

MappingMatch则是一个枚举,用于表示URL跟Servlet的匹配类型,可以通过HttpServletMapping.getMappingMatch()获取到。

PushBuilder是用于实现【服务器推】技术的接口,通过HttpServletRequest.newPushBuilder()方法来创建,属于HTTP 2.0的范畴。并定义在RFC 7540规范中的8.2节,能够主动把数据推送给客户端。这个更多的考虑HTTP 2.0协议的问题,这里暂时不作讨论,而是通过新帖子来进行详细说明。




发表于 2018-3-11 14:11:02 | 显示全部楼层
这个分享太有价值了。
您需要登录后才可以回帖 登录 | 加入联盟

本版积分规则

小黑屋|手机版|Archiver|疯狂Java联盟 ( 粤ICP备11063141号 )

GMT+8, 2018-6-26 03:26 , Processed in 0.270171 second(s), 6 queries , File On.

快速回复 返回顶部 返回列表