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 小结的更多相关文章

  1. spring in action 7.2 小结

    1 对于二进制文件上传功能的实现.在spring中使用multipart来处理,处理方式有两种. CommonsMultipartResolver:使用Jakarta Commons FileUplo ...

  2. spring in action 5.1 小结 spring mvc起步

    0 配置 DispatcherServlet 是 spring mvc的核心,常规配置方法可以查看之前博客.springMVC简单例子 在此使用servlet 3 规范和 spring3.1 功能增强 ...

  3. spring in action第一章小结1

    1 spring基本理念是简化java开发. 使用以下4个策略简化java开发 1) 基于POJO的轻量级和最小侵入性编程 2)通过使用DI和AOP实现松耦合 3)基于切面和惯例进行声明式编程 4)通 ...

  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 ...

  5. spring in action 4th --- quick start

    读spring in action. 环境搭建 quick-start依赖注入 面向切面 1.环境搭建 jdk1.8 gradle 2.12 Intelij idea 2016.2.1 1.1创建一个 ...

  6. ssh整合随笔(注解方式,Spring 管理action)

    Web.xml<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi=" ...

  7. Spring in action记录

    最近一段时间重新学习了一遍SPRING,现在对这些笔记整理一下,一来算是对之前的学习有一个交代,二来当是重新学习一次,三来可以留下备份 这次学习中以SPRING IN ACTION 4这学习资料,整书 ...

  8. Spring in Action 4th 学习笔记 之 AOP

    前提:本文中的AOP仅限于Spring AOP. 先说说为什么需要AOP 最简单的一个例子就是日志记录,如果想记录一些方法的执行情况,最笨的办法就是修改每一个需要记录的方法.但这,真的很笨... 好的 ...

  9. 学习spring in action 第一天

    这段时间,开始学习java吧,因为C sharp 学习了java的大量语法格式,所以,留意下,就不会错了,java 有的c sharp也有,而且之前我也学习过java的桌面开发,但是一下子上来就要自己 ...

随机推荐

  1. 用css让一个容器水平垂直居中

    阅读目录 方法一:position加margin 方法二: diaplay:table-cell 方法三:position加 transform 方法四:flex;align-items: cente ...

  2. OpenCV亚像素级的角点检测

    亚像素级的角点检测 目标 在本教程中我们将涉及以下内容: 使用OpenCV函数 cornerSubPix 寻找更精确的角点位置 (不是整数类型的位置,而是更精确的浮点类型位置). 理论 代码 这个教程 ...

  3. Linux环境MySQL集群配置

    一.介绍 ======== 这篇文档旨在介绍如何安装配置基于2台服务器的MySQL集群.并且实现任意一台服务器出现问题或宕机时MySQL依然能够继续运行. 注意! 虽 然这是基于2台服务器的MySQL ...

  4. linux系统编程:守护进程详解及创建,daemon()使用

    一,守护进程概述 Linux Daemon(守护进程)是运行在后台的一种特殊进程.它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.它不需要用户输入就能运行而且提供某种服务,不是对整个 ...

  5. TextView文字横向自己主动滚动

              效果截图:                              watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjI4Nj ...

  6. java实现ssl单/双向认证通信[推荐]

    java实现ssl单/双向认证通信[推荐] 学习了:https://blog.csdn.net/zbuger/article/details/51695582 学习了:https://www.cnbl ...

  7. 配置文件格式用哪个?文件夹+纯文本文件,XML,SQLite

    稍具规模的软件都会须要一个配置文件来支持软件的执行.眼下常见的配置文件格式有纯文本.XML.SQLite.自己定义二进制格式,怎样进行选择呢? 1 纯文本--永远不会失效的文件格式 文本化是传统Uni ...

  8. 【python】下载网络文件到本地

    # 下载网络图片文件到本地 import urllib.request rsp=urllib.request.urlopen("http://n.sinaimg.cn/ent/transfo ...

  9. Dreamweaver如何设置自动换行,修改字体

    1 打开和关闭自动换行功能 查看-代码视图选项 2 调整字体大小和类别

  10. hdu 1035 Robot Motion(dfs)

    虽然做出来了,还是很失望的!!! 加油!!!还是慢慢来吧!!! >>>>>>>>>>>>>>>>> ...