您的位置:首页 > 编程语言 > Java开发

SpringMvc入门到开发(二)之基本原理

2017-07-20 23:50 162 查看
所有资料打包下载:有需要的可以下载

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring mvc 框架