Springmvc原理

 

1、 用户发送请求至前端控制器DispatcherServlet

2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器查找Handler。

3、 处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。

4、 DispatcherServlet通过HandlerAdapter处理器适配器调用处理器

5、 HandlerAdapter调用处理器Handler

6、 Handler执行完成返回ModelAndView

7、 HandlerAdapter将Handler执行结果ModelAndView返回给DispatcherServlet

8、 DispatcherServlet将ModelAndView传给ViewReslover视图解析器,ViewReslover根据逻辑视图名解析View

9、 ViewReslover返回View

10、 DispatcherServlet对View进行渲染视图(即将模型数据填充至request域)。

11、 DispatcherServlet响应用户

 

n DispatcherServlet前端控制器(springmvc框架提供)

作用:接收请求,响应结果

有了前端控制器减少各各组件之间的耦合性,前端控制器相关于中央调度器。
前端处理器:DispatcherServlet
 

n HandlerMapping 处理器映射器(springmvc框架提供)

作用:根据url查找Handler,比如:根据xml配置、注解方式查找Handler

   <!-- 非注解映射器-->BeanNameUrlHandlerMapping:使用BeanNameUrlHandlerMapping,表示将定义的Bean(Handler)名字作为请求的url

  simpleUrlHandlerMapping:是BeanNameUrlHandlerMapping的增强版本,它可以将url和处理器bean的id进行统一映射配置。

 

<!-- 注解处理器映射器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>

n HandlerAdapter处理器适配器(springmvc框架提供)

作用:执行Handler

不同类型的Handler有不同的HandlerAdapter,好处可以通过扩展HandlerAdapter支持更多类型的Handler
<!-- 非注解适配器 -->SimpleControllerHandlerAdapter:只要实现了Controller接口的bean,SimpleControllerHandlerAdapter都可以去执行

HttpRequestHandlerAdapter:只要实现了HttpRequestHandler接口的bean,HttpRequestHandlerAdapter都可以去执行

<!-- 注解处理器适配器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>

n Handler处理器(由程序员开发) 作用:业务处理 实现开发中又称为controller即后端控制器 Handler的开发按照HandlerAdapter的接口规则去开发。 Handler处理后的结果是ModelAndView,是springmvc的底层对象,包括 Model和view两个部分。 view中只包括一个逻辑视图名(为了方便开发起一个简单的视图名称)。 n ViewReslover视图解析(springmvc框架提供) 作用:根据逻辑视图名创建一个View对象(包括真实视图物理地址) 针对不同类型的view有不同类型的ViewReslover,常用的有jsp视图解析器即jstlView n View视图(由程序员开发jsp页面) 作用:将模型数据填充进来(将model数据填充到request域)显示给用户 view是一个接口,实现类包括:jstlView、freemarkerView,pdfView...

 

 

springmvc.xml中配置了
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd "> <!-- 商品信息第一个contorller,通过SimpleControllerHandlerAdapter适配器执行 --> <bean id="itemsController" name="/itemsList1.action" class="cn.itcast.springmvc.controller.ItemsController1"></bean> <!-- 处理器映射器,所有的映射器实现 HandlerMapping --> <!-- 根据bean的name进行查找Handler 将action的url配置在bean的name中 --> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" /> <!-- 另外一个处理器映射器,可以针对Handler集中配置url --> <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/itemsList1-1.action">itemsController</prop> <prop key="/itemsList1-2.action">itemsController</prop> </props> </property> </bean> <!-- 处理器适配器 所有处理器适器都实现 了HandlerAdapter接口 --> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" /> <!-- ViewResolver视图解析器,解析jsp视图 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 指定视图路径前缀 --> <property name="prefix" value="/WEB-INF/jsp/" /> <!-- 指定视图路径后缀 --> <property name="suffix" value=".jsp" /> </bean> </beans>

 

 

 

 

posted @ 2018-01-17 10:34  无~所~谓  阅读(189)  评论(0编辑  收藏  举报