- 浏览: 132546 次
文章分类
- 全部博客 (149)
- Java (41)
- 设计模式 (23)
- php (2)
- C++ (2)
- Linux (6)
- C (1)
- JavaEE (27)
- javascript (2)
- uplodify (1)
- Mybatis (2)
- Maven (4)
- Lucene (3)
- commons (1)
- Spring (7)
- SQL (3)
- mahout (1)
- MySQL (2)
- extjs4.2.1 (2)
- ubuntu (1)
- hadoop (1)
- hibernate (1)
- Spring JPA (2)
- JPA 2.0 (1)
- express (1)
- redis (2)
- angularjs (1)
- git (1)
- Python (1)
- logging (2)
最新评论
-
xlaohe1:
controller返回的是一个POJO对象,然后用@Resp ...
Spring MVC 4.X ResponseBody 日期类型Json 处理 -
TRAMP_ZZY:
能帮到你,我也很高兴。
Spring MVC 4.X ResponseBody 日期类型Json 处理 -
jobzjc:
第一段有帮到我。如果是非对象,Object方式传递的时候,第一 ...
Spring MVC 4.X ResponseBody 日期类型Json 处理 -
TRAMP_ZZY:
dingran 写道为什么,我怎么就没找到System > ...
Ubuntu 12.04 设置 IBus 开机启动 -
dingran:
为什么,我怎么就没找到System >> Pref ...
Ubuntu 12.04 设置 IBus 开机启动
概述
为了实现不通过web.xml 启动JavaEE项目,容器提供了javax.servlet.ServletContainerInitializer。第三方的应用需要基于SPI机制,来实现javax.servlet.ServletContainerInitializer 接口。也就是需要在对应的jar包的META-INF/services 目录创建一个名为javax.servlet.ServletContainerInitializer的文件,文件内容指定具体的ServletContainerInitializer实现类,那么,当web容器启动时就会运行这个初始化器做一些组件内的初始化工作。
一般伴随着ServletContainerInitializer一起使用的还有HandlesTypes注解,通过HandlesTypes可以将感兴趣的一些类注入到ServletContainerInitializerde的onStartup方法作为参数传入。
自定义实现
1. 自定义SpringServletContainerInitializer 类
2. 在MEAT-INF中添加实现类信息。
Spring 中的实现
1. 定义实现ServletContainerInitializer的类
2. META-INF 中添加
总结
Spring 提供的SpringServletContainerInitializer 是ServletContainerInitializer 接口真正的实现类,但是Spring另外定义了WebApplicationInitializer 接口作为真正的启动接口,Spring 对该接口的实现都是抽象类,因此在上面方法中过滤时,都被丢弃。
引用
为了实现不通过web.xml 启动JavaEE项目,容器提供了javax.servlet.ServletContainerInitializer。第三方的应用需要基于SPI机制,来实现javax.servlet.ServletContainerInitializer 接口。也就是需要在对应的jar包的META-INF/services 目录创建一个名为javax.servlet.ServletContainerInitializer的文件,文件内容指定具体的ServletContainerInitializer实现类,那么,当web容器启动时就会运行这个初始化器做一些组件内的初始化工作。
一般伴随着ServletContainerInitializer一起使用的还有HandlesTypes注解,通过HandlesTypes可以将感兴趣的一些类注入到ServletContainerInitializerde的onStartup方法作为参数传入。
自定义实现
1. 自定义SpringServletContainerInitializer 类
@HandlesTypes(WebApplicationInitializer.class) public class SpringServletContainerInitializer implements ServletContainerInitializer { @Override public void onStartup(Set<Class<?>> webAppInitializerClasses, ServletContext ctx) throws ServletException { List<WebApplicationInitializer> initializers = new LinkedList<>(); if (webAppInitializerClasses != null) { for (Class<?> waiClass : webAppInitializerClasses) { // TODO } } } }
2. 在MEAT-INF中添加实现类信息。
Spring 中的实现
1. 定义实现ServletContainerInitializer的类
@HandlesTypes(WebApplicationInitializer.class) public class SpringServletContainerInitializer implements ServletContainerInitializer { /** * Delegate the {@code ServletContext} to any {@link WebApplicationInitializer} * implementations present on the application classpath. * * <p>Because this class declares @{@code HandlesTypes(WebApplicationInitializer.class)}, * Servlet 3.0+ containers will automatically scan the classpath for implementations * of Spring's {@code WebApplicationInitializer} interface and provide the set of all * such types to the {@code webAppInitializerClasses} parameter of this method. * * <p>If no {@code WebApplicationInitializer} implementations are found on the * classpath, this method is effectively a no-op. An INFO-level log message will be * issued notifying the user that the {@code ServletContainerInitializer} has indeed * been invoked but that no {@code WebApplicationInitializer} implementations were * found. * * <p>Assuming that one or more {@code WebApplicationInitializer} types are detected, * they will be instantiated (and <em>sorted</em> if the @{@link * org.springframework.core.annotation.Order @Order} annotation is present or * the {@link org.springframework.core.Ordered Ordered} interface has been * implemented). Then the {@link WebApplicationInitializer#onStartup(ServletContext)} * method will be invoked on each instance, delegating the {@code ServletContext} such * that each instance may register and configure servlets such as Spring's * {@code DispatcherServlet}, listeners such as Spring's {@code ContextLoaderListener}, * or any other Servlet API componentry such as filters. * * @param webAppInitializerClasses all implementations of * {@link WebApplicationInitializer} found on the application classpath * @param servletContext the servlet context to be initialized * @see WebApplicationInitializer#onStartup(ServletContext) * @see AnnotationAwareOrderComparator */ @Override public void onStartup(Set<Class<?>> webAppInitializerClasses, ServletContext servletContext) throws ServletException { List<WebApplicationInitializer> initializers = new LinkedList<WebApplicationInitializer>(); if (webAppInitializerClasses != null) { for (Class<?> waiClass : webAppInitializerClasses) { // Be defensive: Some servlet containers provide us with invalid classes, // no matter what @HandlesTypes says... if (!waiClass.isInterface() && !Modifier.isAbstract(waiClass.getModifiers()) && WebApplicationInitializer.class.isAssignableFrom(waiClass)) { try { initializers.add((WebApplicationInitializer) waiClass.newInstance()); } catch (Throwable ex) { throw new ServletException("Failed to instantiate WebApplicationInitializer class", ex); } } } } if (initializers.isEmpty()) { servletContext.log("No Spring WebApplicationInitializer types detected on classpath"); return; } AnnotationAwareOrderComparator.sort(initializers); servletContext.log("Spring WebApplicationInitializers detected on classpath: " + initializers); for (WebApplicationInitializer initializer : initializers) { initializer.onStartup(servletContext); } } }
2. META-INF 中添加
总结
Spring 提供的SpringServletContainerInitializer 是ServletContainerInitializer 接口真正的实现类,但是Spring另外定义了WebApplicationInitializer 接口作为真正的启动接口,Spring 对该接口的实现都是抽象类,因此在上面方法中过滤时,都被丢弃。
引用
- http://blog.csdn.net/wangyangzhizhou/article/details/52013779
发表评论
-
Tomcat 7.X 配置https
2014-11-10 11:47 450http://tomcat.apache.org/t ... -
Spring Data JPA 实例
2014-06-30 01:08 1867[url][/url] 1. Sping Data JPA 创 ... -
Spring 4.0.3+Hibernate4.3.5+Maven 配置文件
2014-06-21 09:43 2251<?xml version="1.0&qu ... -
JavaEE Filter和Listener 分析
2014-02-18 14:18 7411. Filter 使程序可以改变 ... -
Servlet 3.0 文件上传新特性
2014-02-15 21:55 461Servlet 3.0 实现了文件上传的功能,通过注解的方式指 ... -
ServletContext 与ServletConfig剖析
2014-02-15 20:44 5971. ServletContext 是一个全局的储存信息的空间 ... -
JavaMail Spring Mail支持
2014-02-15 15:54 6971. 普通的JavaMail 发送和接受邮件 public ... -
Jdbc 数据库连接池简易实现和JdbcUtils
2014-01-20 16:42 633public class MyDataSource { ... -
Java反射将Jdbc查询结果封装为对象
2014-01-19 10:24 1249public class ORMTest { pu ... -
Spring JdbcTemplate CRUD 操作
2014-01-11 12:12 879/** * Project Name:cjxy ... -
JavaEE 下载文件中文乱码兼容多浏览器
2013-12-11 11:02 471public static String encodeF ... -
Spring 3.2.* MVC通过Ajax获取JSON数据报406错误
2013-09-12 12:13 589Spring 3.2.* MVC通过Ajax获取JSON数据报 ... -
Spring SqlQuery 使用
2013-09-11 17:52 649/** * Project Name:webblog ... -
JavaEE pager-taglib 分页插件(2)
2013-08-12 17:56 376/** * Project Name:TestPag ... -
JavaEE pager-taglib 分页插件(1)
2013-08-12 16:47 1069pg:pager 这个标签用来 ... -
Web 安全与 过滤器
2013-06-03 16:51 6921. Servlet 安全的四大要 ... -
JSP学习笔记二
2013-06-03 15:36 7361. JSP 标准动作获取 Jav ... -
JSP学习笔记一
2013-05-24 16:26 7221. JSP 最终还是会变成一个完整的Servlet 在W ... -
Servlet学习笔记(二)
2013-05-23 17:30 6651. Servlet 的初始化参数 配置: < ... -
Servlet学习笔记(一)
2013-05-18 12:10 7501. MIME 类型是服务器对浏览器请求做出的反应类型。( ...
相关推荐
对象初始化器_1对象初始化器_1对象初始化器_1对象初始化器_1
混沌映射sin映射初始化种群,与标准pso求解sphere函数,精度更好
比赛工程2,初始化上行至10层;电梯PLC;好像是六部十层;;比赛工程2,初始化上行至10层;电梯PLC;好像是六部十层;;比赛工程2,初始化上行至10层;电梯PLC;好像是六部十层;;比赛工程2,初始化上行至10层;电梯PLC...
注意:本文所说的全局变量指的是 variables with static storage,措词来自 c++ 的语言标准文档。 什么时候初始化 ... static initialization: 静态初始化指的是用常量来对变量进行初始化,主要包括 zero init
Revit外部工具无法初始化附加模块的解决方法 大家在安装完Revit或者卸载后重装Revit时是否遇到外部工具无法初始化附加模块的问题,每次打开不停的弹出对话框,烦得要死。 无法初始化附加模块“CollaborateDB”,...
主要介绍了C#中结构(struct)的部分初始化和完全初始化,通过实例分析了结构初始化中常见的错误及技巧,有助于加深对C#结构(struct)的认识,需要的朋友可以参考下
vue初始化模板vue初始化模板vue初始化模板vue初始化模板vue初始化模板vue初始化模板vue初始化模板vue初始化模板vue初始化模板vue初始化模板vue初始化模板vue初始化模板vue初始化模板vue初始化模板vue初始化模板vue...
板初始化程序板初始化程序板初始化程序板初始化程序板初始化程序板初始化程序板初始化程序板初始化程序板初始化程序板初始化程序板初始化程序板初始化程序板初始化程序
matlab初始化数组
C++中,全局变量只能声明、初始化,而不能赋值 也就是说,下面这样是不被允许的: #include using namespace std; int a; a = 2; int main() { return 0; } 错误提示是: C++ requires a type specifier for all...
delegate 委托 匿名方法 自动属性 集合初始化器 类初始化器 委托方法
解决数码视讯Q5使用USB_Burning_Tool刷机时 提示 初始化DDR/读取初始化结果/USB错误
解决三菱触摸屏编程软件GT Designer2.79装在64位系统下,不能启动,不能初始化字体管理器问题。本人亲测Win7 64位可用。
关于lsdyna应力初始化方法的一些介绍
ST7796S 通用初始化代码,需根据平台不同进行细微调整
Nacos 2.1.2 数据库初始化脚本
8251 端口初始化 包含定义13个输入端口和9个输出端口
初始化和清理.ppt初始化和清理.ppt初始化和清理.ppt初始化和清理.ppt初始化和清理.ppt初始化和清理.ppt
typedef struct 与 struct 的区别及初始化 typedef struct 与 struct 的区别及初始化 typedef struct 与 struct 的区别及初始化 typedef struct 与 struct 的区别及初始化 typedef struct 与 struct 的区别及初始化
AURIX TC27X系列启动和初始化,详细介绍了TC27X系列上电BMI配置,初始化步骤,TC27xC TriCore™ AURIX™ 微控器初始化过程, 包括以下步骤: ⇒ 初始化 CPU0 的 C 运行环境( Cstart 程序), AURIX 复位后, CPU0 ...