所有资料打包下载:有需要的可以下载
http://download.csdn.net/download/xiaozhegaa/9907441
一:SpringMvc的框架原理
1 、用户发送请求至前端控制器DispatcherServlet
2 、DispatcherServlet收到请求调用HandlerMapping处理器映射器。
3 、处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
4 、DispatcherServlet通过HandlerAdapter处理器适配器调用处理器
5 、执行处理器(Controller,也叫后端控制器)。
6 、Controller执行完成返回ModelAndView
7 、HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
8 、DispatcherServlet将ModelAndView传给ViewReslover视图解析器
9 、ViewReslover解析后返回具体View
10、DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)。
11、DispatcherServlet响应用户
【总结:】在上述的十一步骤中,需要用户开发的组件有handler、view。即是写处理器handler跟写视图view。其他的只需要配置一下就好了。个人建议上述十一个步骤结合图可以记忆一下。有助于理解使用Spring。当有人问到Spring是如何运行的?结合上述的东西大概就可以回答了。
【总结:】下面的知识点会比较枯燥,难懂。也可以不看。记住以下以下几句话就可以。在web.xml配置的DispatcherServlet执行的时候,会默认执行几个初始化的函数,例如适配器初始化函数,映射器初始化的函数。Spring首先从配置文件中,查找对应名称的Bean值,如果有就实例化了用户定义的类,不去实例化系统默认的类。如果找不到就去实例化系统默认提供的类。这也就能解释说:为什么适配器,映射器自己配置也可以,不配置也可以。
二:详细讲一下DispatcherServlet
1 如果你想要自己配置DispatcherServlet,如何知道dispatcherServlet的全路径呢?,这里教大家一个快捷键”Ctrl+Shift+T”。搜索DispatcherServlet(大小写不分)
2. 分析DispatcherServlet源码,了解前端控制器截获请求之后做了什么工作?又是如何进行分派的?【这个可以当作了解,这个算着重底层东西了】
//DispatcherServlet.class类文件中
//初始化的防范
protected void initStrategies(ApplicationContext context) {
//初始化上传文件解析器
initMultipartResolver(context);
//初始化本地化解析器
initLocaleResolver(context);
//初始化主题解析器
initThemeResolver(context);
//初始化处理器映射器,将请求映射到处理器
initHandlerMappings(context);
//初始化处理器适配器
initHandlerAdapters(context);
//初始化异常解析器,如果遇到异常就交给HandlerExceptionResolvers
initHandlerExceptionResolvers(context);
//初始化请求到视图的解析器
initRequestToViewNameTranslator(context);
//初始化视图解析器,通过ViewResolvers解析逻辑视图名到具体视图
initViewResolvers(context);
//初始化flash映射管理
initFlashMapManager(context);
}
//注释自己写的,源码无注释
2. 1 以第一个初始化方法为例子,查看它都到底是怎么运行的!
【分析:】首先initStrategies方法在WebApplicationContext初始化之后自动执行,自动扫描上下文的Bean。根据特定的名称找到自定义的组件。例如名为:multipartResolver的Bean。若是找不到的话。则会在默认的org.springframework.web.servler路径下面的DispatcherServlet.properties配置文件找,该配置文件指定了DispatcherServlet所使用的默认组件
三:看一下DispatcherServlet.properties文件中的默认组件
/*注释全部写在里面*/
# Default implementation classes for DispatcherServlet's strategy interfaces.
# Used as fallback when no matching beans are found in the DispatcherServlet context.
# Not meant to be customized by application developers.
/*本地化解析器
*/
org.springframework.web.servlet.LocaleResolver=org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver
/*主题解析器
*/
org.springframework.web.servlet.ThemeResolver=org.springframework.web.servlet.theme.FixedThemeResolver
/*处理器映射器(共2个)
*/
org.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,\
org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping
/*处理器适配器(共3个)
*/
org.springframework.web.servlet.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,\
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,\
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter
/*异常处理器(共3个)
*/
org.springframework.web.servlet.HandlerExceptionResolver=org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver,\
org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver,\
org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver
/*视图名称解析器
*/
org.springframework.web.servlet.RequestToViewNameTranslator=org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator
/*视图解析器
*/
org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver
/*flash映射管理器
*/
org.springframework.web.servlet.FlashMapManager=org.springframework.web.servlet.support.SessionFlashMapManager
/*如果开发者希望使用用户自定义类型的组件,则只需要在Spring配置文件中配置自定义的Bean组件即可。
如果DispatcherServlet发现上下文中有用户自定义的组件,则不会使用默认组件
*/
四:组件说明,对一些名词的解释
总结:说明:在springmvc的各个组件中,处理器映射器、处理器适配器、视图解析器称为springmvc的三大组件。
需要用户开发的组件有handler、view