我眼中的Spring MVC
来源:互联网 发布:什么牌子的口罩好 知乎 编辑:程序博客网 时间:2024/04/29 10:45
Spring MVC 是什么
Spring MVC 是应用于WEB应用程序 MVC架构的 C
Spring MVC 的特点是什么
首先说一下Spring MVC框架文档中的一句话 对扩展开放 对修改闭合
那么特点就来了 高扩展性 这是它最大的特点还有 友好的设计的结构,拦截器思想,参数绑定,允许其他MVC的实现等等 总的来就是简单易用
Spring MVC 有哪些核心类
在这里只是简单介绍一下有哪些类
1:DispatchServlet 前置控制器 - 核心处理器
2:HandlerMapping 处理器映射 - 找到处理请求的拦截器 类方法
3:HandlerAdapter 处理器适配器 - 针对请求处理的实现
4:HandlerExceptionReaolver 处理过程中出现的异常处理
5:ViewResolver 视图解析器 - 将视图映射到View类
6:LocaleResolver & LocaleContextResolver 地区解析 - 支持国际化
7:ThemeRosolver 视图的主题解析器
8:MultipartReaolver - 调用处理请求资源 - 文件上传中使用
9:FlashMapManager - FlashMap管理器 - 在两次请求中后需要重定向时使用
DispatcherServlet 的配置问题
这个类依赖的Bean 信息存放在org.springframework.web.servlet下的DispatcherServlet.properties文件中
当需要对其进行定制配置时 可以再此文件中进行调整
Spring MVC 的处理流程
请求 --> DispatcherServlet
1) DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE (上下文对象 - 别的组件可以用) -线程绑定
2) DispatcherServlet.LOCALE_RESOLVER_ATTRIBUTE 将地区解析器绑定到请求上
3) DispatcherServlet.THEME_RESOLVER_ATTRIBUTE 将主题解析器绑定到请求上
4) DispatcherServlet.MULTIPART_RESOLVER_BEAN_NAME 判断是否需要文件上传组件的绑定
5) 为该请求寻找一个合适的处理器
如果找到就则与该处理器关联的执行链(前后处理器/控制器) 都会被执行 返回模型或视图的渲染
6) 如果是模型 --> 框架渲染相应的视图
如果没有任何模型 会认为请求已经由处理链完成
在这个是在DispatcherServlet类中的处理流程 可以看出全部的实现是被直接或者间接的调用 然而在真正的处理请求的流程中却不仅如此
当DispatcherServlet 接收到请求之后 在做完参数绑定之后会使用HandlerAdapter类 (从注解中解析出信息与请求做匹配 会得到要使用哪一个Controller) - 适配器模式
然后是加载一些处理 比如绑定线程 地区信息等等
然后是加载HandlerMapping 找到对应的拦截器等来映射出执行链条
然后是HandlerExecutionChain这个类(执行链条)来执行 --> preHandle --> cantroller method --> posthandle --> afterConmpletion
产生一个ModleAndView (//Model //map 最后都会转换为 ModleAndView)
然后是交给ViewResolver 视图解析器
最后将视图返回给用户
Spring MVC 常用注解
@Controller 类/方法注解-声明是Controllerl类
@RestController 类/方法注解-声明是Controllerl类 省略了@RequestBody
@RequestMapping 方法/类注解-声明请求处理方法
@PathVariable 方法形参前 处理requet uri 部分 占位符 {} 中的数据
@RequestParam 绑定参数 单个
@RequestBody 处理request body部分的注解
@RequestHeader 处理request header部分
@CookieValue 获取Cookie
@SessionAttributes 设置Session
@ModelAttribute 处理数据绑定 实体
@ResponceBody 返回内容为指定的的格式
- 我眼中的Spring MVC
- 我眼中的 MVC
- 我眼中的Spring
- 我眼中的MVC模式
- 我眼中的MVC模式
- 转贴:我眼中的Spring
- 我眼中的MVC设计模式
- 我眼中的MVC模式(2) --- 变体 MOVE
- 我眼中的指针
- 我眼中的实施
- 我,眼中的诗歌
- 我眼中的李开复
- 我眼中的MM
- 我眼中的浪漫爱情
- 我眼中的自由
- 我眼中的Python
- 我眼中的指针
- 我眼中的人才
- 前段上传组件介绍与实例
- Swift学习笔记第四篇(函数)
- 汇编语言的组成
- jquery楼层效果
- Android中堆栈的处理
- 我眼中的Spring MVC
- Vim 复制粘贴探秘
- #ifdef与#ifdefine()之间的区别
- MUI常见问题集锦
- WPF中图形表示语法详解(Path之Data属性语法)
- 线程池测试
- mysql中timeout参数的相关解释
- 设计模式——工厂模式
- ReactNative布局