SpringMVC工作流程

web服务器在启动时加载和解析web.xml找到SpringMVC的前段总控制器DispatcherServlet

通过DispatcherServlet加载相关的配置文件(默认是mvc-dispatcher-servlet.xml)并创建表现层的IOC容器(也就是子容器)

通过DispatchServelet 进行分发请求,调用处理器映射器HandlerMapping返回一个HandlerExecutionChain对象(一个执行链,这个对象中包含了Handler对象和HandlerIntercepter处理器拦截器)返回给DispatchServlet。

通过处理器适配器HandlerAdapter来找到与HandlerExcutionChain中的Handler处理器对象相同类型的Handler并返回一个ModelAndView(不论是否有异常都会返回ModelAndView)。

DispatcherServlet通过配置文件选择对应的视图解析器(ViewResolver)进行视图解析返回一个View对象

DispatcherServlet通过view对象进行渲染视图(渲染视图的含义:通过解析视图中的el表达式,特定标签,特定转换等,产生html页面/片段或者JSON字符串甚至是图片、pdf文档等不同的媒体形式的过程)

最后服务器将视图结果反馈给浏览器。

关键解析:

1.配置对象(在配置文件中注册的对象)

1.1 DispatcherServlet

   SpringMVC框架中的总控制器,主要是创建表现层的IOC容器,并将请求分发给具体的控制器的Handler,又被称为请求分发器

1.2 InternalResourceViewResolver

   内部资源解析器 用来匹配jsp页面(当然还有其他的这就不列举了)

   InternalResourceViewResolver介绍

   它是URLBasedViewResolver的子类,所以URLBasedViewResolver支持的特性它都支持。在实际应用中                                       InternalResourceViewResolver也是使用的最广泛的一个视图解析器。

   那么InternalResourceViewResolver有什么自己独有的特性呢?

      单从字面意思来看,我们可以把InternalResourceViewResolver解释为内部资源视图解析器,

      这就是InternalResourceViewResolver的一个特性。InternalResourceViewResolver会把返回的视图名称都解析为InternalResourceView对象,InternalResourceView会把Controller处理器方法返回的模型属性都存放到对应的request属性中,

      然后通过RequestDispatcher在服务器端把请求forword或重定向到目标URL。比如在InternalResourceViewResolver中定义了prefix=/WEB-INF/,suffix=.jsp,然后请求的Controller处理器方法返回的视图名称为test,

      那么这个时候InternalResourceViewResolver就会把test解析为一个InternalResourceView对象,先把返回的模型属性都存放到对应的HttpServletRequest属性中,然后利用RequestDispatcher在服务器端把请求forword到/WEB-INF/test.jsp。

这就是InternalResourceViewResolver一个非常重要的特性,我们都知道存放在/WEB-INF/下面的内容是不能直接通过request请求的方式请求到的,为了安全性考虑,我们通常会把jsp文件放在WEB-INF目录下,而InternalResourceView在服务器端跳转的方式可以很好的解决这个问题。

下面是一个InternalResourceViewResolver的定义,根据该定义当返回的逻辑视图名称是test的时候,InternalResourceViewResolver会给它加上定义好的前缀和后缀,组成“/WEB-INF/test.jsp”的形式,然后把它当做一个InternalResourceView的url新建一个InternalResourceView对象返回。

2.内置对象(SpringMVC框架内部对象)

 2.1 HandlerMapping(处理器映射器)

      2.1.1 SimpleUrlHandlerMapping对象:主要用来匹配静态请求(url)

      2.1.2 RequestMappingHandlerMapping对象:主要用来匹配注解请求(url)

 2.2 HandlerAdapter类型(处理器适配器)

      2.2.1 HttpRequestHandlerAdapter匹配ResourceHttpRequestHandler对象,处理静态资源请求;

      2.2.2 RequestMappingHandlerAdapter匹配具体的Handler对象,处理注解请求

HandlerMapping:请求到处理器的映射,如果映射成功返回一个HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象、多个HandlerInterceptor拦截器)对象;如BeanNameUrlHandlerMapping将URL与Bean名字映射,映射成功的Bean就是此处的处理器;

HandlerAdapter:HandlerAdapter将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器;如SimpleControllerHandlerAdapter将对实现了Controller接口的Bean进行适配,并且调处理器的handleRequest方法进行功能处理

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章