Tomcat启动时加载Spring容器的过程

Tomcat(Servlet3.0规范的web容器)启动时,会查找ServletContainerInitializer接口实现类,这个实现类SpringServletContainerInitializer由Spring提供,然后Spring提供的实现类会加载WebApplicationInitializer这个接口的所有实现类通过*onStartup(ServletContext servletContext)*这个方法

WebApplicationInitializer这个接口的实现类结构图

在这里插入图片描述

自定义实现类主要方法的作用

customizeRegistration(Dynamic registration)

//定制注册对DispatcherServlet进行额外的配置
	//先加载springmvc中StandardServletMultipartResolver再执行customizeRegistration
	@Override
	protected void customizeRegistration(Dynamic registration) {
		
		//定义了Http服务上传文件存储位置、最大文件大小、最大请求的长度,只要上传文件就会经过这里
		MultipartConfigElement multipartConfigElement =
				//MultipartConfigElement(java.lang.String location, long maxFileSize, long maxRequestSize, int fileSizeThreshold)
				new MultipartConfigElement("c:/test/temp",1024*1024*2,1024*1024*4,2);
		
		registration.setMultipartConfig(multipartConfigElement);

		
		
		
		super.customizeRegistration(registration);
	}

== onStartup(ServletContext servletContext)==

	// 服务器启动时
	@Override
	public void onStartup(ServletContext servletContext) throws ServletException {
		// 添加过滤器
		// 1.创建过滤器
		CharacterEncodingFilter filter = new CharacterEncodingFilter();
		// 2.设置字符编码集
		filter.setEncoding("utf-8");
		// 3.添加至SerfvletContext
		servletContext.addFilter("CharacterEncodingFilter", filter) // 添加过滤器
					  .addMappingForUrlPatterns(
							  EnumSet.of(DispatcherType.REQUEST), 
							  false, 
							  "*.do"); // 设置Mapping映射
		
		
		// 添加监听器
		servletContext.addListener(CommonDataListener.class);

		// 注意:必须调用父类的onStartup()方法
		super.onStartup(servletContext);
	}

getRootConfigClasses()

	// 加载Spring容器:Root WebApplicationContext(Spring)
	@Override
	protected Class<?>[] getRootConfigClasses() {
		
		return new Class[] { AppRootConfig.class };
	}

getServletConfigClasses()

	// 加载Spring容器:Serlvet WebApplicationContext(Spring MVC)
	@Override
	protected Class<?>[] getServletConfigClasses() {
		
		return new Class[] { SpringMvcConfig.class };
	}

== getServletMappings()==

	// 设置DispatcherServlet映射路径为处理所有请求
	@Override
	protected String[] getServletMappings() {
		return new String[] { "/" };
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值