Spring MVC 工作原理及开发流程(持续更新中......)

来源:互联网 发布:mysql weekday 编辑:程序博客网 时间:2024/06/11 08:41

最近应项目的需要,要用到Spring MVC 框架业余时间学了一下,整理了一点资料,供大家参考。

Spring MVC 工作原理
  1. 客户端请求提交到DispatcherServlet 
  2. DispatcherServlet 查询多个HandlerMapping,找到处理请求的Controller在提交给DispatcherServlet
  3. DispatcherServlet 讲请求提交给Controller
  4. Controller调用业务逻辑层 返回给 ModelAndView
  5. DispatcherServlet 查询一个或者多个ViewResolver 试图解析器找到ModelAndView制定的视图
  6. 视图负责将结果返回到客户端
工作原理图解 图一


图二


图三


图四

核心架构的具体流程步骤如下:
1、首先用户 发送请求——>DispatcherServlet, 前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行
处理,作为统一访问点,进行全局的流程控制;
2、DispatcherServlet——>HandlerMapping, HandlerMapping 将会把请求映射为HandlerExecutionChain 对象(包含一
个Handler 处理器(页面控制器)对象、多个HandlerInterceptor 拦截器)对象,通过这种策略模式,很容易添加新
的映射策略;
3、DispatcherServlet——>HandlerAdapter,HandlerAdapter 将会把处理器包装为适配器,从而支持多种类型的处理器,
即适配器设计模式的应用,从而很容易支持很多类型的处理器;
4、HandlerAdapter——>处理器功能处理方法的调用, HandlerAdapter 将会根据适配的结果调用真正的处理器的功能处
理方法,完成功能处理;并返回一个ModelAndView 对象(包含模型数据、逻辑视图名);
5、ModelAndView的逻辑视图名——> ViewResolver , ViewResolver 将把逻辑视图名解析为具体的View,通过这种策
略模式,很容易更换其他视图技术;
6、View——>渲染,View会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map数据结构,因此
很容易支持其他视图技术;
7、返回控制权给DispatcherServlet,由DispatcherServlet返回响应给用户,到此一个流程结束。
通过伤处
     现在想想这些问题吧
1、请求如何给前端控制器? 这个应该在web.xml 中进行部署描述,在 HelloWorld中详细讲解。
2、前端控制器如何根据请求信息选择页面控制器进行功能处理? 我们需要配置 HandlerMapping进行映射
3、如何支持多种页面控制器呢? 配置HandlerAdapter 从而支持多种类型的页面控制器
4、如何页面控制器如何使用业务对象? 可以预料到,肯定利用 Spring IoC容器的依赖注入功能
5、页面控制器如何返回模型数据? 使用ModelAndView 返回
6、前端控制器如何根据页面控制器返回的逻辑视图名选择具体的视图进行渲染? 使用ViewResolver 进行解析
7、不同的视图技术如何使用相应的模型数据? 因为Model是一个 Map数据结构,很容易支持其他视图技术


Spring MVC开发流程
  1. 新建web project
  2. 添加spring支持
  3. 配置web.xml 添加配置dispatcherservlet
  4. 实现module层
  5. 实现Controller
  6. 实现View层  *.jsp
  7. 修改applicationContext.xml


在此我们可以看出具体的核心开发步骤:
1、DispatcherServlet在web.xml 中的部署描述,从而拦截请求到Spring Web MVC
2、HandlerMapping的配置,从而将请求映射到处理器
3、HandlerAdapter 的配置,从而支持多种类型的处理器
4、ViewResolver 的配置,从而将逻辑视图名解析为具体视图技术
5、处理器(页面控制器)的配置,从而进行功能处理




一、Spring2.5 之前,我们都是通过实现Controller 接口或其实现来定义我们的处理器类。已经
@Deprecated。
二、Spring2.5 引入注解式处理器支持,通过@Controller 和@RequestMapping注解定义我们的处理器
类。并且提供了一组强大的注解:
需要通过处理器映射DefaultAnnotationHandlerMapping和处理器适配器AnnotationMethodHandlerAdapter来开启支
持@Controller 和 @RequestMapping 注解的处理器。
@Controller:用于标识是处理器类;
@RequestMapping:请求到处理器功能方法的映射规则;
@RequestParam:请求参数到处理器功能处理方法的方法参数上的绑定;
@ModelAttribute:请求参数到命令对象的绑定;
@SessionAttributes:用于声明session 级别存储的属性,放置在处理器类上,通常列出模型属性(如
@ModelAttribute)对应的名称,则这些属性会透明的保存到session 中;
@InitBinder:自定义数据绑定注册支持,用于将请求参数转换到命令对象属性的对应类型;
三、Spring3.0 引入RESTful 架构风格支持(通过@PathVariable注解和一些其他特性支持),且又引入了
更多的注解支持:
@CookieValue:cookie 数据到处理器功能处理方法的方法参数上的绑定;
@RequestHeader:请求头(header)数据到处理器功能处理方法的方法参数上的绑定;
@RequestBody:请求的body体的绑定(通过HttpMessageConverter 进行类型转换);
@ResponseBody:处理器功能处理方法的返回值作为响应体(通过HttpMessageConverter进行类型转换);
@ResponseStatus:定义处理器功能处理方法/异常处理器返回的状态码和原因;
@ExceptionHandler:注解式声明异常处理器;
@PathVariable:请求URI 中的模板变量部分到处理器功能处理方法的方法参数上的绑定,从而支持RESTful 架构风
格的URI;
四、Spring3.1 使用新的HandlerMapping 和 HandlerAdapter 来支持@Contoller 和@RequestMapping
注解处理器。
新的@Contoller 和@RequestMapping 注解支持类:处理器映射RequestMappingHandlerMapping 和处理器适配器
RequestMappingHandlerAdapter组合来代替Spring2.5 开始的处理器映射DefaultAnnotationHandlerMapping和处理
器适配器AnnotationMethodHandlerAdapter,提供更多的扩展点。

暂时先整理这些,有空再接着更新

希望以上资料能对大家有帮助 专注我的新浪微博 http://weibo.com/419768151


原创粉丝点击