SpringMVC实现解析之开篇

#启动流程 SpringMVC通过javaweb的web.xml配置来初始化Spring容器,启动web项目后,web容器首先回去找web.xml文件,读取这个文件,web.xml配置执行顺序为:context-param -> listener-> filter -> servlet。

context-param是参数配置如SpringMVC中Spring的xml路径配置

	
		contextConfigLocation
		classpath*:applicationcontext-*.xml
	

listener是web容器的监听器配置如SpringMVC中Spring容器加载器的配置

	
		org.springframework.web.context.ContextLoaderListener
	

filter是web容器的过滤器配置如SpringMVC中字符集过滤器的配置

	
		encodingFilter
		org.springframework.web.filter.CharacterEncodingFilter
		
			encoding
			UTF-8
		
		
			forceEncoding
			true
		
	
	
		encodingFilter
		/*
	

servlet是web容器的请求收集器配置如SpringMVC中请求调度器的配置

	
		springmvc
		org.springframework.web.servlet.DispatcherServlet
		
			contextConfigLocation
			classpath*:springmvc-context.xml
		
		1
	
	
		springmvc
		/
	

SpringMVC中初始化Spring容器的主要有org.springframework.web.context.ContextLoaderListener和org.springframework.web.servlet.DispatcherServlet。web启动时会调用ContextLoaderListener#contextInitialized方法其功能主要是初始化Spring的xml的配置,接着调用DispatcherServlet#init方法其功能主要是初始化SpringMVC的xml的配置。

ContextLoaderListener#contextInitialized方法先会创建org.springframework.web.context.support.XmlWebApplicationContext类型的WebApplicationContext然后获取web.xml中param-name为contextConfigLocation的xml的配置,并将xml的配置的路径设置到XmlWebApplicationContext中并调用XmlWebApplicationContext#refresh方法初始化容器。最后将初始化好的XmlWebApplicationContext设置到servlet的上下文对象中供后续使用。

DispatcherServlet#init方法同样先会创建org.springframework.web.context.support.XmlWebApplicationContext类型的WebApplicationContext,然后获取/中param-name为contextConfigLocation的xml的配置,并将xml的配置的路径设置到XmlWebApplicationContext中并调用XmlWebApplicationContext#refresh方法初始化容器,最后将之前在ContextLoaderListener#contextInitialized方法中初始化好的XmlWebApplicationContext设置到当前XmlWebApplicationContext的parent对象中。这时会有父子2个XmlWebApplicationContext,在使用时会优先获取找子对象如果找不到才会取查找父中的对象。初始化XmlWebApplicationContext后需要从Spring容器中获取供SpringMVC使用的组件,SpringMVC中主要组件如下:

1.MultipartResolver:文件上传解析器

系统带文件上传功能需要配置此解析器,可以将HttpServletRequest包装成MultipartHttpServletRequest来处理上传文件。

2.LocaleResolver:i18n国际化解析器

先获取用户配置的LocaleResolver,如果未配置使用AcceptHeaderLocaleResolver。其功能是使前端页面显示国际化可以使不同的地区显示不同的页面。

3.HandlerMapping:url映射器

Spring启动时会根据Controller初始化HandlerMapping,在请求时根据url获取HandlerMapping。

4.HandlerAdapter:Handler适配器

HandlerMapping中的Handler的类型Object,所以需要找到一个适配Handler执行的适配器。

5.HandlerExceptionResolver:异常处理器

当在执行过程中出现异常,会将其捕获交给异常处理器处理。

6.RequestToViewNameTranslator:默认视图转化器

先获取用户配置的RequestToViewNameTranslator,未配置使用DefaultRequestToViewNameTranslator,当请求的Controller没有设置视图时,会调用视图转化器取默认视图资源。

7.ViewResolver:视图解析器

先获取用户配置的ViewResolver(如velocity),未配置使用InternalResourceViewResolver,ViewResolver的主要作用是把一个逻辑上的视图名称解析为一个真

正的视图View,由View渲染视图。

8.FlashMapManager:闪存

先获取用户配置的FlashMapManager,未配置使用SessionFlashMapManager,重定向(Redirect)时如果设置了FlashMap会进行存储且存储带过期时间,可以将想要的数据带到重定向的Controller。

9.ThemeResolver:主题风格解析器

主要是前端页面使用,前端可以使用spring:theme 标签配置前端不同的样式

请求流程图

SpringMVC实现解析之开篇_第1张图片

转载于:https://my.oschina.net/u/945573/blog/3061442

你可能感兴趣的:(java,前端,web.xml)