SpringMVC Summary

SpringMVC

Spring MVC是一个基于Java的MVC设计模式的Web框架,通过把Model,View,Controller分离,将web层进行解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。

SpringMVC常用注解

1. @Controller

@Controller标记该类是Controller

在SpringMVC中,控制器Controller负责处理由DispatcherServlet分发的请求,它把用户请求的数据经过业务逻辑层处理之后封装成一个Model,然后再把该Model返回给对应的View视图层进行展示。

2. @RequestMapping

@RequestMapping:用于处理请求 url 映射的注解,可用于类或方法上。用于类上,则表示类中的所有响应请求的方法都是以该地址作为父路径。

3. @RequestBody:实现接收http请求的json数据,将json转换为java对象。

4. @ResponseBody:注解实现将conreoller方法返回对象转化为json对象响应给客户。

参数绑定注解

1. @RequestParam

@RequestParam注解用于将制定的请求参数赋值给方法中的形参。如果参数没有接收到任何值,可以使用defaultValue指定参数的默认值。

1
2


SpringMVC执行流程

SpringMVC execution procedure

  1. 用户发起request请求,该请求被前端控制器DispatcherServlet处理。

  2. DispatcherServlet请求HandlerMapping查找Handler。

  3. HandlerMapping根据配置查找相关的Handler,返回给DispatcherServlet。

  4. DispatcherServlet请求HandlerAdapter执行相应的Handler(Controller)。

  5. HandlerAdapter执行Handler

  6. Handler执行完毕后会返回ModelAndView对象给HandlerAdapter。

  7. HandlerAdapter接收到ModelAndView后,将其返回给DispatcherServlet

  8. DispatcherServlet接收到ModelAndView后,请求View Resolver进行解析

  9. View Resolver根据View信息匹配相应的视图结果,返回给DispatcherServlet

  10. DispatcherServlet接收到View视图后,对视图进行渲染,将Model中的模型数据填充到View视图中的request域,生成最终的视图

  11. DispatcherServlet返回请求结果给用户。

DispatcherServlet

DispatcherServlet的作用是接收用户请求,然后给用户响应结果。相当于一个转发器或者中央处理器,控制整个流程的执行,对各个组件进行统一调度,以降低组件之间的耦合度,有利于组件之间的扩展。

HandlerMapping

HandlerMapping请求到Handler的映射,允许有多个实例。如果映射成功返回一个HandlerExecutionChain对象。

HandlerAdapter

会把Handler包装为适配器,从而支持多种类型的处理器,即适配器设计模型的应用,从而很容易支持多种类型的处理器。

ViewResolver

SpringMVC流程最后返回给用户的视图为具体的View对象,View对象包含Model对象,Model对象存放后端需要反馈给前端的数据。视图解析器把一个逻辑上的视图名称解析为一个具体的View视图对象。

SpringMVC的视图解析流程:

  1. SpringMVC调用目标方法,将目标方法返回的String、View、ModelMap或者ModelAndView都转换为一个ModelAndView对象。

  2. 通过ViewResolver将ModelAndView对象中的View对象进行解析,将逻辑视图View对象解析为一个物理视图View对象

  3. 调用物理视图View对象的render()方法进行视图渲染,得到响应结果。

SpringMVC和Struts2的区别有哪些?

  1. SpringMVC的入口是一个servlet即前端控制器(DispatchServlet),Struts2入口是一个filter过虑器(StrutsPrepareAndExecuteFilter)。

  2. SpringMVC是基于方法开发(一个url对应一个方法),请求参数传递到方法的形参,可以设计为单例或多例(建议单例)。Struts2是基于类开发,传递参数是通过类的属性,只能设计为多例。

  3. SpringMVC通过参数解析器将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过reques域传输到页面,Jsp视图解析器默认使用jstl。Struts2采用值栈存储请求和响应的数据,通过OGNL存取数据。