web开发——【SpringMVC】


SpringMVC的详细讲解

一、什么是MVC

MVC是一种设计模式,在这种设计模式下软件被分为三层:模型视图控制器

  • 模型:工程中的Bean,代表的是数据,具体分为实体类Bean(存储业务数据)和业务处理Bean(servlet或Dao对象,专门处理业务逻辑和数据访问)
  • 视图层:工程中的html、jsp等页面,用于和用户交互,展示数据
  • 控制层:工程中的servlet,用于接受请求和相应浏览器。

流程如下所示:
MVC流程
SpringMVC将这套MVC流程进行封装,屏蔽底层细节,开放出相关接口供开发者调用,让MVC开发更简单
SpringMVC三层架构

二、Spring MVC的实现原理

2.1 核心组件

  • DispatcherServlet:前置控制器,负责调度其他组件的执行,可以降低不同组件之间的耦合度,是整个SpringMVC的核心模块
  • Handler:处理器,完成具体的业务逻辑,相当于Servlet
  • HaddlerMapping:DispatcherServlet通过HandlerMapping把请求映射到不同的Handler.
  • HandlerInterceptor:处理器拦截器,是一个接口,如果如要进行一些拦截处理,通过实现该接口完成
  • HandlerExecutionChain:处理器执行链,包括两部分内容:Handler和HandlerInterceptor(系统会有一个默认的HandlerInterceptor,如果有额外的拦截处理,可以添加拦截器进行设置)
  • HandlerAdapter:处理器适配器,Handler执行业务方法之前,需要进行一系列的操作,包括:表单的数据验证、数据类型转换、把表单数据封装到POJO等,这些都有HandlerAdapter完成Dispatcher通过HandlerAdapter执行不同的Adapter
  • ModelAndView:封装了模型数据和视图信息,作为Handler的处理结果,返回给DispatcherServlet.
  • ViewResolver:视图解析器,DispacherServlet通过它把逻辑视图解析为物理视图,最终把渲染的结果相应给客户端

2.2 工作流程

  1. 客户端请求被DispatcherServlet接受
  2. 根据HandlerMapping映射到Handler
  3. 生成Handler和HandlerInterceptor
  4. Hander和HandlerInterceptor通过HandlerExecutionChain的方式返回给DispatcherServlet
  5. DIspatchServlet通过HandlerAdapter调用Handler的方法完成逻辑处理
  6. 返回一个ModlerAndView对象给迁至控制器
  7. 把ModlerAndView传给视图解析器
  8. ViewResolver返回一个View进行视图渲染
  9. DispatcherServlet把渲染后的视图响应给客户端

工作流程

三、常用注解

3.1 @RequestMapping

作用:用来处理请求地址映射,将其中的处理器方法映射到url路径
属性:

  • method:指定请求的method的类型,比如post、get
  • value:请求的实际地址,多个地址用{}指定
  • produces:指定返回的内容类型,当request请求头中的Accept类型中包含指定的类型才可以返回
  • consumes:指定处理请求的提交内容类型,比如json、html、text等
  • headers:指定request中必须包含header值时,才会用该方法处理请求
  • params:指定request中必须有的参数值时,才会用该方法处理请求

3.2 RequestParam

作用:将请求参数绑定到控制器的方法参数上,是SpringMVC中的接收普通参数的注解
属性:

  • value:请求参数中的名称
  • required:是否必须提供参数

3.3. RequestBody:

作用:如果作用在方法中,表示该方法的返回结果是直接按写入的Http responsebody中(异步获取数据时使用的注解)
属性:required

3.4 PathVariable

作用:用于绑定url中的占位符(spring3.0后,url才支持占位符)

3.5 RequestParam和PathVariable的区别

@PathVariable主要用于接收http://host:port/path/{参数值}数据。@RequestParam主要用于接收http://host:port/path?参数名=参数值数据,这里后面也可以不跟参数值。

@RequestParam和@PathVariable这两者之间区别不大,主要是请求的URL不一样

用@RequestParam请求接口时,URL是:http://www.test.com/user/getUserById?userId=1

用@PathVariable请求接口时,URL是:http://www.test.com/user/getUserById/2

四、拦截器

4.1 过滤器、监听器、拦截器的对比

Servlet:处理Request请求和Response响应
过滤器:对Request请求起到过滤作用,作用在Servlet之前,如果配置为/*可以为所有资源进行过滤处理
监听器:实现监听接口的服务器端组件,随Web应用的启动而启动,只初始化一次,然后一直监视,随web应用的停止而销毁

  • 做初始化工作
  • 监听web中的特定事件,比如HttpSession,ServletRequest的创建和销毁;变量的创建、销毁和修改等可以在某些动作前后增加处理,实现监控,比如统计在线人数等

拦截器:SpringMVC、Structs等表现层框架自己的,不会拦截jsp/html/image等的访问,只会拦截访问的控制器方法

  • servlet、filter、listener是配置在web.xml中,interceptor配置在表现层框架自己的配置文件中
  • 在Handler业务逻辑执行前拦截一次
  • 在Handler逻辑执行完但还没有跳转页面前拦截一次

4.2 拦截器的基本概念

SpringMVC中的拦截器类似于Servlet中的过滤器,主要用于拦截用户的请求并作相应处理。通过拦截器可以进行权限验证记录请求信息的日志判断用户是否登录等。
拦截器类的定义:

  • 实现HandlerInterceptor的接口
  • 继承HandlerInterceptor接口的实现类

所有的拦截器都需要实现HandlerInterceptor接口,该接口包含三个方法:

  • preHandler:在Handler执行前执行,返回true,则执行Handler方法
  • postHandler:在Handler执行后,视图生成前执行
  • afterCompletion:在视图生成后执行

如图所示为Spring MVC拦截器的执行流程
拦截器执行流程
拦截器的开发步骤:

  1. 开发拦截器
    实现handlerInterceptor接口
  2. 注册拦截器
    定义配置类,并让它实现WebMvcConfigurer接口,在接口的addInterceptor方法中注册拦截器。

4.3 怎么做请求拦截

如果是对Controller进行拦截,使用SpringMVC的拦截器
如果是对所有请求拦截,使用Filter
如果是对除了Controller之外的其他Bean请求拦截,使用Spring AOP

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值