初识Servrt3.0,简单认识

在讲Spring之前,我们先来了解下Servelt3.0简单特性,方便后期理解Springmvc、SpringBoot等框架的初始化实现。
对应Servlet3.0的介绍,只做一些简单的介绍,如果需要详细的Servlet3.0的内容,可以查看大神 张开涛的博客–servlet3.0章节内容

servlet3.0特性

  1. 异步支持

  2. 注解支持

  3. 可插拔支持(可以拆分为web.xml 和 web-fragment.xml ),定义不同的servlet,使用web-fragment.xml

  4. 插件增强ServletContext ,可以该对象支持在运行时动态部署 Servlet、过滤器、监听器,以及为 Servlet 和过滤器增加 URL 映射等。

Servlet 三大组件

Servlet 、 Listener、Filter

注解支持
注解说明web.xml对比
@WebServlet定义Servlet
@WebListener定义listener ListenerClass
@WebInitParam与Servlet、Listener、Filter配合使用,定义初始化参数
@WebFilter定义拦截器
@MultipartConfig该注解主要是为了辅助 Servlet 3.0 中 HttpServletRequest 提供的对上传文件的支持。该注解标注在 Servlet 上面,以表示该 Servlet 希望处理的请求的 MIME 类型是 multipart/form-data。另外,它还提供了若干属性用于简化对上传文件的处理
@WebServlet
属性类型是否必须说明
asyncSupportedboolean指定Servlet是否支持异步操作模式
displayNameString指定Servlet显示名称
initParamsWebInitParam[]配置初始化参数
loadOnStartupint标记容器是否在应用启动时就加载这个Servlet
nameString指定Servlet名称
urlPatterns/valueString[]这两个属性作用相同,指定Servlet处理的url
@WebListener
属性类型是否必须说明
valueString知道listener 对应的class
@WebFilter
属性类型是否必需说明
asyncSupportedboolean指定Filter是否支持异步模式
dispatcherTypesDispatcherType[]指定Filter对哪种方式的请求进行过滤。 支持的属性:ASYNC、ERROR、FORWARD、INCLUDE、REQUEST; 默认过滤所有方式的请求
filterNameStringFilter名称
initParamsWebInitParam[]配置参数
displayNameStringFilter显示名
servletNamesString[]指定对哪些Servlet进行过滤
urlPatterns/valueString[]两个属性作用相同,指定拦截的路径
增强ServletContext插件

​ 在servlet3.0中,运行在容器运行中,动态添加Servlet、过滤器、监听器。称为编程式添加和配置

ServletContext插件原理

这里写图片描述

Demo


//HandlesTypes 可以指定所有类型的的实现类,这些实现类会被注入到onStartup 的第一个参数 set中
@HandlesTypes(value = MyService.class)
public class MyServletContainerInitializer implements ServletContainerInitializer{

    /**
     * tomcat启动时加载应用的时候,会运行onStartup方法;
     * 
     * Set<Class<?>> arg0:感兴趣的类型的所有子类型(对实现了JamesService接口相关的);
     * ServletContext arg1:代表当前Web应用的ServletContext;一个Web应用一个ServletContext;
     * 
     * 1)、使用ServletContext注册Web组件(Servlet、Filter、Listener)
     * 2)、使用编码的方式,在项目启动的时候给ServletContext里面添加组件;
     *      必须在项目启动的时候来添加;
     *      1)、ServletContainerInitializer得到的ServletContext;
     *      2)、ServletContextListener得到的ServletContext;
     */
  @Override
  public void onStartup(Set<Class<?>> set, ServletContext servletContext) throws ServletException {
     for (Class s : set){
         //会打印出所有的实现类,包括抽象类
      System.out.println(s);//当传进来后,可以根据自己需要利用反射来创建对象等操作
    }
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值