spring in action 7.1 小结
0 AbstractAnnotationConfigDispatcherServletInitializer剖析,在Servlet 3.0环境中,容器会在类路径中查找实现ServletContainerInitializer接口的类,如果能发现的话,就用他来配置SErvlet容器。
Spring提供了这个接口的实现,名为SpringServletContainerInitializer,这个类会查找实现了WebApplicationInitializer接口的类,并将配置任务交给他们来完成。Spring 3.2引入了 便利的WebApplicationInitializer的实现类,就是AbstractAnnotationConfigDispatcherServletInitializer 。如果一个类继承了AbstractAnnotationConfigDispatcherServletInitializer 同时也就实现了WebApplicationInitializer 接口。当部署到Servlet 3.0容器中的时候,容器会自动发现他,并用来配置Servlet 上下文。
说明:支持Servlet3.0 服务器,如tomcat 7版本及以上
0.1 两个应用上下文,DispatcherServlet 和 ContextLoaderListener
DispatcherServlet 加载包含web组件的bean,如控制器、视图解析器以及处理器映射。
ContextLoaderListener 加载应用中其他的bean,通常是驱动应用后端的中间层和数据层组件。
DispatcherServlet 在启动的时候会加载重写的如下方法中的配置类中的bean。
protected Class<?>[] getServletConfigClasses() {
return new Class[];
}
0.2 自定义 DispatcherServlet 配置
AbstractAnnotationConfigDispatcherServletInitializer 将 DispatcherServlet 注册到Servlet 容器后,会调用 customizeRegistration(ServletRegistration.Dynamic registration) ,我们可以对该方法进行重载,从而实现额外的配置。
传进来的Dynamic 对象可以设置 setMultipartConfig() 对 muitipart 的支持,setInitParameter()设置初始化参数。
1 添加其他的Servlet和Filter,按照AbstractAnnotationConfigDispatcherServletInitializer的定义,它会创建DispatcherServlet和 ContextLoaderListener。如果你想注册其他的Servlet, Filter, Listener。只需创建一个新的初始化器即可。最简单的方式是实现 spring 的 WebApplicationInitializer 接口。
在方法中
1)注册Filter/Servlet/Listener
2)添加映射路径
public class MyServletInitializer implements WebApplicationInitializer {
public void onStartup(ServletContext servletContext) throws ServletException {
ServletRegistration.Dynamic myServlet = servletContext.addServlet("myServlet", MyServlet.class);
myServlet.addMapping("/custome/**");
}
}
例如:添加 characterEncodingFilter 使用如下方法
public class CharacterEncodingFilterInitializer implements WebApplicationInitializer {
public void onStartup(ServletContext servletContext) throws ServletException {
FilterRegistration.Dynamic characterEncodingFilter = servletContext.addFilter("CharacterEncodingFilter", CharacterEncodingFilter.class);
characterEncodingFilter.setInitParameter("encoding","utf-8");
characterEncodingFilter.addMappingForUrlPatterns(null, false,"/*");
}
}
2 如果将应用部署到支持Servlet 3.0的容器中,那么注册Filter/Servlet/Listener有更简单的方式。
比如要注册Filter,并且该Filter映射到DispatcherServlet,仅需要重载AbstractAnnotationConfigDispatcherServletInitializer的getServletFilters方法。该方法没有为filter配置映射路径,返回的所有Filter都会映射到DispatcherServlet
@Override
protected Filter[] getServletFilters() {
return new Filter[] {new MyFilter()};
}
spring in action 7.1 小结的更多相关文章
- spring in action 7.2 小结
1 对于二进制文件上传功能的实现.在spring中使用multipart来处理,处理方式有两种. CommonsMultipartResolver:使用Jakarta Commons FileUplo ...
- spring in action 5.1 小结 spring mvc起步
0 配置 DispatcherServlet 是 spring mvc的核心,常规配置方法可以查看之前博客.springMVC简单例子 在此使用servlet 3 规范和 spring3.1 功能增强 ...
- spring in action第一章小结1
1 spring基本理念是简化java开发. 使用以下4个策略简化java开发 1) 基于POJO的轻量级和最小侵入性编程 2)通过使用DI和AOP实现松耦合 3)基于切面和惯例进行声明式编程 4)通 ...
- 1、Spring In Action 4th笔记(1)
Spring In Action 4th笔记(1) 2016-12-28 1.Spring是一个框架,致力于减轻JEE的开发,它有4个特点: 1.1 基于POJO(Plain Ordinary Jav ...
- spring in action 4th --- quick start
读spring in action. 环境搭建 quick-start依赖注入 面向切面 1.环境搭建 jdk1.8 gradle 2.12 Intelij idea 2016.2.1 1.1创建一个 ...
- ssh整合随笔(注解方式,Spring 管理action)
Web.xml<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi=" ...
- Spring in action记录
最近一段时间重新学习了一遍SPRING,现在对这些笔记整理一下,一来算是对之前的学习有一个交代,二来当是重新学习一次,三来可以留下备份 这次学习中以SPRING IN ACTION 4这学习资料,整书 ...
- Spring in Action 4th 学习笔记 之 AOP
前提:本文中的AOP仅限于Spring AOP. 先说说为什么需要AOP 最简单的一个例子就是日志记录,如果想记录一些方法的执行情况,最笨的办法就是修改每一个需要记录的方法.但这,真的很笨... 好的 ...
- 学习spring in action 第一天
这段时间,开始学习java吧,因为C sharp 学习了java的大量语法格式,所以,留意下,就不会错了,java 有的c sharp也有,而且之前我也学习过java的桌面开发,但是一下子上来就要自己 ...
随机推荐
- ou have not concluded your merge (MERGE_HEAD exists)
今天获取git线上仓库代码报了这个错误: zhangzhi@moke:~/code/ktsg-api$ git pull You have not concluded your merge (MERG ...
- /etc/fstab格式的问题
[root@localhost etc]# cat fstab /dev/VolGroup00/LogVol00 / ext3 defaults ...
- 仿LOL项目开发第二天
仿LOL项目开发第二天 by草帽 接着上节来讲,上节更新还没开始写代码逻辑,今天我们补充完整. 我们找到VersionManager脚本里面的CheckVersion方法: 首先我们想到检测版本,需要 ...
- 用JavaScript修改Canvas图片的分辨率(DPI)
应用场景: 仓库每次发货需要打印标签, Canvas根据从数据库读取的产品信息可以生成标签JPG, 但是这个JPG图片的默认分辨率(DPI)是72 这个DPI太低, 导致打印出来的图片会很模糊. 修改 ...
- WPF性能调试系列 – 内存监测
WPF性能调试系列文章: WPF页面渲染优化:Application Timeline WPF页面业务加载优化:Ants Performance Profiler WPF内存优化:Ants M ...
- 【Hibernate步步为营】--hql查询小介
HQL 是指Hibernate Query Language,它是Hibernate的查询语言,拥有一套自己的查询机制,它的查询语句和SQL非常类似.在使用的时候可以非常快上手.HQL提供了基本上SQ ...
- 会话追踪(session tracking)
HTTP是一种无连接的协议,如果一个客户端只是单纯地请求一个文件(HTML或GIF),服务器端可以响应给客户端,并不需要知道一连串的请求是否来自于相同的客户端,而且也不需要担心客户端是否处在连接状态. ...
- [Grunt] Uglify
Grunt Uglify to compress your javascript for production deployment. Install npm install grunt-contri ...
- (LeetCode 49)Anagrams
Given an array of strings, return all groups of strings that are anagrams. Note: All inputs will be ...
- C++标准库简介
C++标准库的所有头文件都没有扩展名.C++标准库的内容总共在50个标准头文件中定义,其中18个提供了C库的功能. <cname>形式的标准头文件[ <complex>例外]其 ...