servlet-3.0 基础摘要

2017-10-10  本文已影响58人  春天里的布谷鸟

servlet3.0 的新特性

使用心得

  1. web.xml 真的能删掉吗?
    可以,但是如果你使用maven构建工程的话在打包的时候就会遇到问题,因为默认情况下maven-war-plugin在打包的时候回去检查web.xml,如果不存在就立即报错,因此你的项目无法打包。解决方法是

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>

配置上 failOnMissingWebXml

  1. 动态新增servlet、filter、listener的能力,是如何做到的?
    在servlet-3.0中增强了ServletContext的功能,增加了几个方法可以用来新增servlet、filter、listener,api如下:

简单的说,只要我们能拿到ServletContext对象,就可以随时随地的新增servlet、filter、listener,那么哪些地方可以得到ServletContext对象呢?
1、servletContextListener 启动的时候可以得到该对象,这个很简单。
2、servlet 3.0 新增了一个新的接口:ServletContainerInitializer ,这个接口是在容器启动的时候会扫描claspath下所有实现该接口的实现类,然后调用onStartup方法,在这个类中传入了ServletContext对象,因此也可以动态新增。但这个地方有个问题,我实现了这个接口,servlet容器如何知道呢?他怎么扫描到这个实现类呢?在META-INF/service中增加配置,这个其实就是使用了spi原理来做服务的发现。

  1. servlet3.0和springmvc结合
    在springmvc环境中我们使用spring提供的WebApplicationInitializer来动态新增servlet、filter、listener。原理就是利用ServletContainerInitializer来实现的,大家可以看下spring-web.jar这个jar包的spi实现。

  2. 基于plugin模式的开发模式 ?
    简单说,我准备一个jar包,里面包含了一个servlet的配置。然后引入这个jar到其他任何一个servlet3的工程里,不需要写一行代码,新工程就可以马上访问这个servlet了。
    原理是在利用了servlet3提供的web-fragment.xml来实现的,顾名思义web-fragment是web的一个片段,将这个片段放到WEB-INF/下即可

image.png

内容是:


image.png

除了标记头和web.xml不一样,其他都一样。

上一篇下一篇

猜你喜欢

热点阅读