在web容器启动时为提供给第三方组件机会做一些初始化的工作,例如注册servlet或者filtes等,servlet规范中通过ServletContainerInitializer实现此功能。
每个框架要使用ServletContainerInitializer就必须在对应的jar包的META-INF/services 目录创建一个名为javax.servlet.ServletContainerInitializer的文件,文件内容指定具体的ServletContainerInitializer实现类。

一般伴随着ServletContainerInitializer一起使用的还有HandlesTypes注解,通过HandlesTypes可以将感兴趣的一些类注入到ServletContainerInitializerde的onStartup方法作为参数传入。

@HandlesTypes(value = {TestService.class})  //容器启动的时候会将@HandlesTypes指定的这个类型下面的子类(实现类,子接口等)传递过来
public class TestServletContainerInitializer implements ServletContainerInitializer {
//set 父类感兴趣的子类类
@Override
public void onStartup(Set<Class<?>> set, ServletContext servletContext) throws ServletException {
System.out.println("感兴趣的类型");
for(Class<?> classs:set){
System.out.println(classs);
}
}
}

tomcat容器启动时会扫描 service下的 ServletContainerInitializer

手动注册三大组件

  public void onStartup(Set<Class<?>> set, ServletContext servletContext) throws ServletException {
System.out.println("感兴趣的类型");
for(Class<?> classs:set){
System.out.println(classs);
} //注册三大组件
//servlet
ServletRegistration.Dynamic testServlet = servletContext.addServlet("testServlet", new TestServlet());
testServlet.addMapping("/testServlet");
//listener
servletContext.addListener(TestListener.class);
//filter
FilterRegistration.Dynamic testFilter = servletContext.addFilter("testFilter", TestFilter.class);
//注册filter的映射信息,可以指定专门来拦截哪个servlet
testFilter.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST),true,"/*"); }

spring mvc 在容器启动时也是这样

ServletContainerInitializer的更多相关文章

  1. Caused by: java.lang.ClassCastException: org.springframework.web.SpringServletContainerInitializer cannot be cast to javax.servlet.ServletContainerInitializer错误解决办法

    严重: Failed to initialize end point associated with ProtocolHandler ["http-bio-8080"] java. ...

  2. ServletContainerInitializer初始化器

    在web容器启动时为提供给第三方组件机会做一些初始化的工作,例如注册servlet或者filtes等,servlet规范中通过ServletContainerInitializer实现此功能.每个框架 ...

  3. Caused by: java.lang.ClassCastException: org.springframework.web.SpringServletContainerInitializer cannot be cast to javax.servlet.ServletContainerInitializer

    A child container failed during startjava.util.concurrent.ExecutionException: org.apache.catalina.Li ...

  4. web项目继承ServletContainerInitializer进行访问HttpServlet(WebServlet)

    java使用web项目不需要加web.xml 配置javax.servlet.ServletContainerInitializer 1.在src目录创建META-INF,META-INF目录下创建s ...

  5. 使用ServletContainerInitializer动态注册组件

    1.背景 在web容器(例如tomcat)启动时为提供给第三方组件机会做一些初始化的工作,例如注册servlet或者filtes等.对此servlet规范提供了ServletContainerInit ...

  6. 聊聊、Spring ServletContainerInitializer

    我们平时用 Java 注解很多,例如 @Configuration.@Component.@Service,我们习惯于通过 XML 方式来实现 Web,而用 Java 注解方式来实现 Web 却很少. ...

  7. servlet中ServletContainerInitializer的简单说明

    根据官方文档到的说明 public interface ServletContainerInitializer Interface which allows a library/runtime to ...

  8. Java EE javax.servlet ServletContainerInitializer接口

    ServletContainerInitializer接口 public interface ServletContainerInitializer 一.介绍 该接口,允许在 web 应用程序的启动阶 ...

  9. Caused by: java.lang.ClassCastException: org.springframework.web.SpringServletContainerInitializer cannot be cast to javax.servlet.ServletContainerInitializer。。。。。检查一下servlet-api是否冲突了?

    原因:jar包发生冲突.在我的pom.xml文件中 <dependency>      <groupId>javax.servlet</groupId>       ...

随机推荐

  1. 把task加入websocket服务端程序

    服务端代码 <?php //task任务要实现两个方法onfinish ontask //还要设置worker_num date_default_timezone_set("PRC&q ...

  2. Python设置浏览器宽高

    # 发起请求,设置浏览器宽高 # 代码中引入selenium版本为:3.4.3 # 通过Chrom浏览器访问发起请求 # Chrom版本:59 ,chromdriver:2.3 # 需要对应版本的Ch ...

  3. Luogu P3804 【模板】后缀自动机

    注意空间开两倍 #include <bits/stdc++.h> using namespace std; typedef long long LL; template<class ...

  4. 3 监控项、触发器、web监控、nginx监控

    1.自定义监控项 Item 参数文档 https://www.zabbix.com/documentation/3.0/manual/config/items/itemtypes/zabbix_age ...

  5. hdu 6046 hash

    题: OwO http://acm.hdu.edu.cn/showproblem.php?pid=6046 (2017 Multi-University Training Contest - Team ...

  6. jquery fadeIn()方法 语法

    jquery fadeIn()方法 语法 作用:fadeIn() 方法使用淡入效果来显示被选元素,假如该元素是隐藏的.大理石平台检定规程 语法:$(selector).fadeIn(speed,cal ...

  7. 原生Js_简易图片轮播模板

    功能:图片自动循环轮播,通过点击“上一张”,“下一张”按钮来控制图片的切换 <!DOCTYPE html> <html> <head> <meta chars ...

  8. Oracle-sql*plus

    连接命令 (1)conn[ect] 用法: conn 用户名/密码@网络服务名 [as sysdba/sysoper] 当用特权用户身份连接时,必须带上 as sysdba 或是 as sysoper ...

  9. 「UVA12293」 Box Game

    题目链接 戳我 \(Solution\) 这道题第一眼看样例,猜了个结论偶数\(Alice\)赢,否则\(Bob\)赢,打了一发,交了上去果不其然的\(wa\)了,第二次猜\(2\)的幂次方\(Ali ...

  10. shiro 自定义filter

    1.自定义登录filter package com.creatunion.callcenter.filter; import com.alibaba.fastjson.JSONObject; impo ...