- 浏览: 138811 次
文章分类
- 全部博客 (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 481http://tomcat.apache.org/t ... -
Spring Data JPA 实例
2014-06-30 01:08 1910[url][/url] 1. Sping Data JPA 创 ... -
Spring 4.0.3+Hibernate4.3.5+Maven 配置文件
2014-06-21 09:43 2290<?xml version="1.0&qu ... -
JavaEE Filter和Listener 分析
2014-02-18 14:18 7691. Filter 使程序可以改变 ... -
Servlet 3.0 文件上传新特性
2014-02-15 21:55 504Servlet 3.0 实现了文件上传的功能,通过注解的方式指 ... -
ServletContext 与ServletConfig剖析
2014-02-15 20:44 6361. ServletContext 是一个全局的储存信息的空间 ... -
JavaMail Spring Mail支持
2014-02-15 15:54 7611. 普通的JavaMail 发送和接受邮件 public ... -
Jdbc 数据库连接池简易实现和JdbcUtils
2014-01-20 16:42 688public class MyDataSource { ... -
Java反射将Jdbc查询结果封装为对象
2014-01-19 10:24 1276public class ORMTest { pu ... -
Spring JdbcTemplate CRUD 操作
2014-01-11 12:12 924/** * Project Name:cjxy ... -
JavaEE 下载文件中文乱码兼容多浏览器
2013-12-11 11:02 499public static String encodeF ... -
Spring 3.2.* MVC通过Ajax获取JSON数据报406错误
2013-09-12 12:13 622Spring 3.2.* MVC通过Ajax获取JSON数据报 ... -
Spring SqlQuery 使用
2013-09-11 17:52 686/** * Project Name:webblog ... -
JavaEE pager-taglib 分页插件(2)
2013-08-12 17:56 420/** * Project Name:TestPag ... -
JavaEE pager-taglib 分页插件(1)
2013-08-12 16:47 1109pg:pager 这个标签用来 ... -
Web 安全与 过滤器
2013-06-03 16:51 7461. Servlet 安全的四大要 ... -
JSP学习笔记二
2013-06-03 15:36 7641. JSP 标准动作获取 Jav ... -
JSP学习笔记一
2013-05-24 16:26 7711. JSP 最终还是会变成一个完整的Servlet 在W ... -
Servlet学习笔记(二)
2013-05-23 17:30 6951. Servlet 的初始化参数 配置: < ... -
Servlet学习笔记(一)
2013-05-18 12:10 7761. MIME 类型是服务器对浏览器请求做出的反应类型。( ...
相关推荐
- `init(FilterConfig config)`: 初始化方法,当过滤器被加载时调用,可以在这里进行初始化设置。 - `doFilter(ServletRequest request, ServletResponse response, FilterChain chain)`: 执行过滤操作的方法,每...
1. **初始化(init())**:当服务器加载过滤器时,会调用filter.init(FilterConfig config)方法进行初始化,此时可以获取filter-config元素中的初始化参数。 2. **执行(doFilter())**:每次请求经过过滤器时,...
1. `init(ServletConfig config)`: 在Servlet实例化后,由Servlet容器调用,用于初始化Servlet对象,如设置配置、打开数据库连接等。`ServletConfig`对象提供了初始化参数和Servlet上下文信息。 2. `...
通过`ServletContainerInitializer`接口,可以实现自定义的初始化逻辑,动态添加或修改Web组件。 8. **资源注入**: Servlet 3.1支持JSR 330的依赖注入标准,允许将其他组件(如`@Inject`注解的字段或方法参数)...
在Servlet API中,`ServletContainerInitializer`接口允许自定义的初始化过程。通过实现这个接口并注册到JAR的META-INF/services目录下,可以在应用启动时执行特定的初始化逻辑。 六、Servlet 3.0及以上版本的新...
8. **ServletContainerInitializer接口**:Java EE 6引入的新特性,允许开发者自定义Servlet容器初始化过程。通过实现此接口,可以在Web应用启动时执行特定的初始化逻辑。 9. **Filter接口和FilterChain类**:...
3. ServletContainerInitializer:允许开发者定义自己的初始化处理器,以便在Web应用启动时执行特定的配置逻辑。 六、实战应用 Servlet广泛应用于各种Web应用中,如登录验证、数据处理、文件上传下载、RESTful API...
7. `ServletContainerInitializer`是Java EE 6引入的,它允许开发者在Web应用启动时执行自定义初始化代码,无需在web.xml中配置。 8. 在实际开发中,我们通常会继承`GenericServlet`或`HttpServlet`,前者实现了...
- **`ServletContainerInitializer`**:可以在Servlet容器启动时初始化资源。 - **异步请求处理**:通过`Callable`或`DeferredResult`等API实现异步处理。 通过上述知识点的介绍,可以看出Spring框架通过强大的注解...
9. **ServletContainerInitializer接口**:在Servlet 3.0及以上版本中引入,允许自定义初始化代码,当应用启动时自动执行。 使用这个压缩包,你可以直接查看Servlet API的源代码,理解其实现细节,这对于深入学习...
2. 初始化:Servlet被加载后,会调用init()方法进行初始化,通常用于设置Servlet的初始状态。 3. 服务:当接收到HTTP请求时,Servlet容器会调用service()方法处理请求。service()方法会根据请求类型(GET、POST等)...
例如,你可以研究`HttpServletRequest`和`HttpServletResponse`是如何处理HTTP请求和响应的,或者`ServletContainerInitializer`是如何进行自定义初始化的。 7. **版本兼容性**: 虽然这个jar包是Servlet 2.5版本...
7. **上下文感知的初始化参数**:在Servlet 3.1中,开发者可以通过`@WebInitParam`注解在Servlet类上定义初始化参数,这些参数可以针对特定的Servlet实例,而不是整个Web应用。 8. **动态注册**:在运行时,可以...
此外,`ServletContainerInitializer`接口和`javax.servlet.Servlet`类也值得研究,它们负责Servlet的加载和初始化过程。 6. **工具支持** 在实际开发中,通常使用IDE如Eclipse、IntelliJ IDEA等进行Servlet开发,...
此外,`ServletContainerInitializer`接口允许自定义初始化逻辑,以便在容器启动时执行特定的任务。 异步处理是Servlet 3.0的另一个重要特性,通过`AsyncContext`接口实现。它允许Servlet在不阻塞线程的情况下处理...
但是可以将它配置为随容器启动而初始化,在 DispatcherServlet 初始化过程中去读取 springMVC.xml 配置文件,完成 controller 映射、视图解析、参数解析等工作。 三、Servlet3 Servlet3 规定,如果在当前项目的 ...
7. **监听器(Listener)**:监听器用于监听Web应用中的特定事件,如session的创建、销毁,以及ServletContext的初始化和销毁。 8. **MVC模式**:虽然Servlet本身不强制遵循任何设计模式,但通常与Model-View-...
1. **初始化阶段**: - **引导加载器(Bootstrap ClassLoader)**:SpringBoot应用的启动是从`main`方法开始的,这个方法通常位于一个`SpringBootApplication`类型的类中。执行`SpringApplication.run()`会启动引导...
8. **ServletContextListener接口**和`ServletContainerInitializer`接口:允许监听Web应用的启动和停止事件,进行初始化和清理工作。 9. **ServletRegistration和ServletRegistration.Dynamic**:用于注册Servlet...
然后在`META-INF/services/javax.servlet.ServletContainerInitializer`文件中添加自定义初始化器的全限定类名,以便Servlet容器在启动时加载。 ### 注册Filter和Listener 注册Filter和Listener与注册Servlet类似...