SpringMVC----视图层框架
Spring Web模型-视图-控制器(MVC)框架是围绕DispatcherServlet设计的,DispatcherServlet将接收的请求分派给应用程序。SpringMVC具有配置处理程序映射关系,视图解析,区域设置,时区和主题解析以及上传文件等功能。
简述SpringMVC工作内容:
接收用户请求;
指定应用程序实现请求的功能;
将应用程序处理的结果数据封装成要求的视图;
响应用户请求(回传封装的视图)。
完整的框架工作流程如下:
1. 用户发送请求至前端控制器DispatcherServlet;
2. DispatcherServlet收到请求调用HandlerMapping处理器映射器;
3. 处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet;
4. DispatcherServlet通过HandlerAdapter处理器适配器调用处理器
5. 执行处理器(Controller,也叫后端控制器);
6. Controller执行完成返回ModelAndView;
7. HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet;
8. DispatcherServlet将ModelAndView传给ViewReslover视图解析器;
9. ViewReslover解析后返回具体View;
10. DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中);
11. DispatcherServlet响应用户。
上图中涉及到很多关键组件,下面对其进行说明。
DispatcherServlet:前端控制器
用户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet是整个流程控制的中心,由它调用其它组件处理用户的请求,dispatcherServlet的存在降低了组件之间的耦合性。
HandlerMapping:处理器映射器
HandlerMapping负责根据用户请求找到Handler即处理器,SpringMVC提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。
Handler:处理器
Handler 是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理。
由于Handler涉及到具体的用户业务请求,所以一般情况需要程序员根据业务需求开发Handler。
HandlAdapter:处理器适配器
通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。
View Resolver:视图解析器
View Resolver负责将处理结果生成View视图,View Resolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。
View:视图
SpringMVC框架提供了很多的View视图类型的支持,包括:jstlView、freemarkerView、pdfView等。
一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发具体的页面。
在SpringMVC的各个组件中,处理器映射器、处理器适配器、视图解析器称为SpringMVC的三大组件。
SpringMVC框架加入对注解的支持后,配置和使用变得非常简单,这里不做赘述。下面再介绍两个知识:SpringMVC的拦截器以及对Restful的支持。
SpringMVC拦截器
Spring Web MVC 的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理,实现拦截器的功能需要实现接口HandlerInterceptor,该接口定义了三个方法:
preHandle
此方法在controller执行前调用,可以利用此方法实现登录校验、权限拦截等功能。
postHandle
此方法controller执行后但未返回视图前调用,此处可对模型数据进行加工处理,例如加入公用信息以便页面显示。
afterCompletion
此方法在controller执行后且视图返回后调用,可用于记录操作日志,资源清理等。
自定义的拦截器需要在配置文件中进行配置才可被框架应用,具体拦截的Mapping可通过配置或者直接在方法上使用注解实现拦截功能映射。
Restful风格
Restful就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格,是对http协议的诠释。
资源定位:互联网所有的事物都是资源,要求url中没有动词,只有名词。没有参数。Url格式:
http://blog.csdn.net/beat_the_world/article/details/45621673
资源操作:使用Put、Delete、Post、Get,使用不同方法对资源进行操作。分别对应添加、删除、修改、查询。一般使用时还是Post和Get。Put和Delete几乎不使用。
SpringMVC对Restful支持只需按照Restful请求Url的格式对最后的资源id进行解析即可,@PathVariable注解可实现将请求URL中的模板变量映射到功能处理方法的参数上的功能。
转载于:https://www.cnblogs.com/beichenroot/p/10994001.html
SpringMVC----视图层框架相关推荐
- 微信小程序逻辑层视图层解析
框架 小程序开发框架的目标是通过尽可能简单.高效的方式让开发者可以在微信中开发具有原生 APP 体验的服务.框架提供了自己的视图层描述语言 WXML 和 WXSS,以及基于JavaScript的逻辑层 ...
- 基于持久层框架hibernate用SpringMVC增删功能
接Spring MVC框架(1)的方法 Hibernate:持久层全自动化的框架 hibernate 用的少了 因为现在mybatis用的多 接下来 hibernate框架要链接数据库blog /* ...
- jsp springmvc 视图解析器_SpringMVC学习笔记
Springmvc springmvc是spring框架的一个模块,springmvc和spring无需通过中间整合层进行整合. springmvc是一个基于mvc的web框架. 基本概念和执行过程 ...
- 手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版)
手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版) SSM(Spring+SpringMVC+Mybatis),目前较为主流的企业级架构方案.标准的MVC设计模式, ...
- 详解手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版)
转载(https://www.jb51.net/article/130560.htm) SSM(Spring+SpringMVC+Mybatis),目前较为主流的企业级架构方案.标准的MVC设计模式, ...
- Spring+SpringMVC+MyBatis+Maven框架整合
本文记录了Spring+SpringMVC+MyBatis+Maven框架整合的记录,主要记录以下几点 一.Maven需要引入的jar包 二.Spring与SpringMVC的配置分离 三.Sp ...
- 手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版)【转】
一. 框架详情 Spring 是一个轻量级的Java开发框架,它是为了解决企业应用开发的复杂性而创建的.Spring的用途不仅限于服务器端的开发.从简单性.可测试性和松耦合的角度而言,任何Java应用 ...
- SpringMVC由浅入深day01_1springmvc框架介绍
springmvc 第一天 springmvc的基础知识 课程安排: 第一天:springmvc的基础知识 什么是springmvc? springmvc框架原理(掌握) 前端控制器.处理器映射器.处 ...
- Springmvc与ssh2框架的优势和劣势
近几年来SpringMVC的发展是比较迅速的,他的优点也慢慢的体现出来了,甚至很多公司要求SpringMVC替代SSH框架,SpringMVC到底有那些区别呢? SpringMVC框架是什么? Spr ...
- Spring+SpringMVC+Mybatis SSM框架详解
一.JDBC编程 1.JDBC 简介 JDBC其实就是 Java 官方提供的一套规范(接口),用于帮助开发人员快速实现不同关系型数据库的连接. 程序运行的时候,数据都是在内存中的.当程序终止的时候,通 ...
最新文章
- 超越MobileNetV3!Facebook提出更轻更快的FBNetV2
- zabbix登山路——简单监控_各项参数解析
- Android中获取系统语言(适用于Android7.0以上系统)
- Activity(3、启动模式)
- Java 16 正式发布!你还学得动吗?
- SpringMVC流程架构图
- 一文教你如何解决TXC晶振工作不正常的问题
- delphi实现延时的方法,很多人首先就想到用timer控件,这里我们不用timer控delphi直接用settimer函数实现延时的方法...
- 基于android酒店点餐系统设计,基于Android的餐厅点餐系统的设计与实现
- XtraReport 填补空白行,生成空白行
- Linux服务器docker中装oracle 11g
- 对象数据如何转化成数组
- 统一诊断服务(UDS)- 安全等级是怎么回事儿
- 阿里巴巴-新加坡南洋理工大学成立联合研究院 开展全方位AI合作
- Java字符串:getBytes() 方法
- webstorm2019 汉化后无法设置 webstorm最新汉化包
- MAB建模规范-Naming Conventions命名规范
- 女朋友发的微信消息撤回了,python一串代码,让你大呼过瘾
- Qmail 日志文件格式
- win 7 64位系统安装java jdk 遇到could not find the required version of the java 2 runtime environment 错误