Spring MVC知识点详解

一、MVC思想

将一个应用分成三个基本部分:Model(模型)、View(视图)、Controller(控制器)

特点

  • 多个视图对应一个模型。减少代码的复制,及代码的维护量。
  • 模型返回数据与现实逻辑分离。
  • 应用被分隔为三层,降低各层之间的耦合。
  • 方便了分组开发。

二、MVC执行流程

url请求直接来到Controller中(Controller控制器)--->Controller从Model中取数据(Model模型)--->Model可能会去访问数据库--->Controller根据业务逻辑,选择合适的View呈现给客户端(View视图)--->View返回给客户端

三、Spring MVC执行流程图

  1. 用户发送请求至 前端控制器DispatcherServlet
  2. 前端控制器DispatcherServlet收到请求后调用处理器映射器HandlerMapping
  3. 处理器映射器HandlerMapping根据请求的Url找到具体的处理器,生成处理器对象Handler处理器拦截器HandlerIntercepter(如果有则生成)一并返回给前端控制器DispatcherServlet
  4. 前端控制器DispatcherServlet通过处理器适配器HandlerAdapter调用处理器Controller
  5. 执行处理器(Controller,也叫后端控制器)
  6. 处理器Controller执行完后返回ModelAnView
  7. 处理器映射器HandlerAdapter将处理器Controller执行返回的结果ModelAndView返回给前端控制器DispatcherServlet。
  8. 前端控制器DispatcherServletModelAnView传给视图解析器ViewResolver
  9. 视图解析器ViewResolver解析后返回具体的视图View
  10. 前端控制器DispatcherServlet视图View进行渲染视图(即:将模型数据填充至视图中)
  11. 前端控制器DispatcherServlet响应用户。

注意:由于现在前后端分离的开发模式比较流行,前后端交互基本上采用JSON的数据格式,所以视图解析这里就不太用到。

四、Spring MVC常用注解

  • @Controller

用于标记一个类,使用它标记的类就是一个Spring MVC Controller对象,即一个控制器类。

  • @RequestMapping

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

value:用于将指定请求的而实际地址映射到方法上

name:给映射地址指定一个别名

method:映射指定请求的方法类型包括get、put、post

consumes:指定处理请求的提交内容类型(Content-Type)如application/json

produces:指定返回内容类型,返回的内容类型必须是request请求头中包含的类型

params:指定request中必须包含某些参数值时,才让该方法处理

headers:指定request中必须包含某些指定的header值,才能让该方法处理

path:在servlet环境中只有:uri路径映射

  • @PathVariable

用于将请求URL中的模板变量映射到功能处理方法的参数上

  • @CookieValue

用来获取Cookie中的值

  • @RequestParam

用于将请求参数区数据映射到功能处理方法的参数上

  • @SessionAttributes

将值放到session作用域中,写在class上。除了可以通过属性名指定需要放到会话中的属性外(value 属性值),还可以通过模型属性的对象类型指定哪些模型属性需要放到会话中

  • @ModelAttribute

该Controller的所有方法在调用前,先执行此@ModelAttribute方法,可用于注解和方法参数中,可以把这个@ModelAttribute特性,应用在BaseController当中,所有的Controller继承BaseController,即可实现在调用Controller时,先执行@ModelAttribute方法。

  • @ResponseBody

该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。

五、与sturts2比较

1、性能:spring会稍微比struts2快。spring mvc是基于方法的设计,而sturts2是基于类,每次发一次请求都会实例一个action,每个action都会被注入属性,而spring基于方法,粒度更细,但要小心把握像在servlet控制数据一样。spring mvc是方法级别的拦截,拦截到方法后根据参数上的注解,把request数据注入进去,在spring mvc中,一个方法对应一个request上下文。而struts2框架是类级别的拦截,每次来了请求就创建一个Action,然后调用setter getter方法把request中的数据注入;struts2实际上是通过setter getter方法与request打交道的;struts2中,一个Action对象对应一个request上下文。

2、struts2其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了

   struts2封装前端参数有三种方法

  第一种在action中写属性并提供get set方法

  第二种在使用对象的方式 在action中创建对象,并提供对象的get set方法

  第三种使用模型驱动的方式(实现ModelDriver接口)并重写 getModel方法才能获取表单中的封装对象。并且声明对象的时候一定要实例化

六、Spring MVC初始化过程 

1.web应用启动时扫描web.xml文件,扫描到DispatcherServlet,对其进行初始化

2.调用DispatcherServlet父类的父类HttpServletBean的init()方法,把配置DispatcherServlet的初始化参数设置到DispatcherServlet中,调用子类FrameworkServlet的initServletBean()方法

3.initServletBean()创建springMVC容器实例并初始化容器,并且和spring父容器进行关联,使得mvc容器能访问spring容器里面的bean,之后调用子类DispatcherServlet的onRefresh(ApplicationContext context)方法

4.onRefresh(ApplicationContext context)进行DispatcherServlet的策略组件初始化工作,url映射初始化,文件解析初始化,运行适配器初始化等等。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值