Spring学习(十一)--Spring MVC
1、MVC模式
(1)视图
通过视图展示应用数据 向应用数据提供更新动作 向控制器提交用户动作 运行控制器选择不同视图
(2)模型提供
封装应用数据状态 响应数据状态查询 提供应用功能接口 数据变化通知视图
(3)控制器
定义应用功能 映射用户动作到数据更新 选择对应视图 一个控制器对应一组功能
使用MVC模式时,需要在web.xml中配置一个DispatcherServlet,这个DispatcherServlet可以看成一个前端控制器,还需要在Bean定义中配置Web请求和Controller的对应关系,以及各种视图的展现方式。在具体使用Controller时,会产生MoudelAndView数据,把数据交给相应的视图view进行展示。
web应用中,Spring MVC是建立在IOC容器基础上的。Web环境中使用IOC容器,需要Spring将IOC容器启动,把IOC容器导入,并在Web容器中建立起来,IOC容器启动和Web容器启动启动是集成在一起的,启动过程中,一面处理Web容器的启动,另一方面通过设计特定的Web容器拦截器,将IOC容器载入到Web环境中,并进行初始化。启动完成后,IOC容器可以正常工作,才能建立MVC框架的运行机制,从而响应从Web容器传递的HTTP请求。
Spring MVC的启动类ContextLoaderListener被定义为一个监听器,DispatchServlet和ContextLoaderListener提供了在Web容器中对Spring接口,这些接口与Web容器耦合是通过ServletContext来实现的。
2、上下文在Web容器中启动
ContextLoaderListener是Spring提供的类,实现了定义在Servlet API 中ServletContextListener接口,而在Web容器中建立applicationContext的过程中,是在contextInitialized的接口实现完成的。
在ContextLoader,完成两个IOC容器建立过程,一个是在Web容器中建立起双亲IOC容器,另一个是生成相应的WebApplicationContext并进行初始化。
ContextLoaderListener加载过程:
(1)从servlet事件中得到ServletContext;
(2)读取配置在web.xml中的各个相关属性;
(3)ContextLoader实例化WebApplicationContext,完成载入和初始化,这个初始化的第一个上下文作为根上下文存在,根上下文载入后被绑 定到Web应用程序的ServletContext,任意需要访问根上下文的应用程序代码都可以从WebApplicationContextUntils类的静态方法中得到,取得上下文方法:webApplicationContext getWebApplicationContext(ServletContext sc);
(4)ContextLoaderListener实现ServletContextListener,监听ServletContext,如果ServletContext发生变化,监听到动作之后,执行预定的响应动作。
3、DispatcherServlet在MVC中的作用
在web.xml中除了配置ContextLoaderListener外还需要配置DispatcherServlet,DispatcherServlet是实现sun公司的J2EE核心模式中的前端控制器模式,进行转发、匹配、数据处理后,并让前端页面来显示。
Spring MVC中,除了DispatcherServlet之后,对于不同的web请求的映射需求,还提供了不同的HandlerMapping,默认情况下,DispatcherServlet选取了BeanNameUrlHandlerMapping作为映射实现策略。
除了映射策略外,SPring MVC还提供了各种Controller的实现来供应用扩展和使用,这些控制器实现handleRequest接口方法,并返回MoudleAndView对象。
Spring MVC中Spring上下文体系通过ContextLoader和DispatcherServlet来建立和初始化。完成ContextLoader的初始化,Web容器开始对DispatcherServlet进行初始化,DispatcherServlet会建立自己的上下文来持有Spring MVC的Bean对象、会建立自己的IOC容器、会从ServletContext中得到根上下文最为DispatcherServlet持有上下文的双亲上下文。
DispatcherServlet通过继承FrameworkServlet和HTTPServletBean而继承HTTPServlet,通过使用Servlet API来对HTTP的请求进行响应。
DispatcherServlet处理过程:
HandlerMapping的作用
初始化完成后,所有的HandlerMapping都被加载,储存到一个List中并被排序,这个List中每一个元素都对应着一个具体的HandlerMapping的配置。
4、Spring MVC视图的呈现
视图调用入口在DispatcherServlet中的doDispatcher方法中实现,具体说,在DispatcherServlet中对视图的处理是在render()方法调用中完成的,首先从ModuleAndView中获取视图对象,然后调用视图对象的render方法,在方法中会对视图的名字进行解析,获取对应的视图,不同的视图有不同的解析方式,最后完成特定的视图呈现的动作。
几种常见的视图:JSP、ExcelView、PDFView。。。。
ExcelView:Spring中没有对Excel的实现方案,所以是通过Java Excel来解决的,然后与Spring MVC 框架进行整合,把生成的Excel文件输出到Http的Response中,在Http客户端展示出来,Spring 3.0中提供了两种方案在MVC框架中进行整合:POI和JExcelAPI,分别对应着两个View类:AbstractExcelView和AbstractJExcelView。
PDFView:与ExcelView一样,也是实现在AbstractpdfView类中完成。
Spring MVC小结:
(1)建立Controller控制器和HTTP请求之间的映射关系,这个过程是由handlerMapping中封装的HandlerExcutionChain对象完成的,Controller和HTTP的对应关系的配置在Bean中描述,并在IOC容器初始化的时候,通过初始化HandlerMapping来完成的,这些定义的关系会被载入到一个handlerMap中进行使用。
(2)初始化过程中,Controller和HTTP映射关系建立完成,为Spring MVC接收HTTP请求并完成响应做准备。接收到HTTP请求时,DispatcherServlet根据具体的URL请求信息,在handlerMapping中进行查询,得到相应的HandlerExcutionChain对象,HandlerExcutionChain对象中封装了配置的Controller,对应的Controller会完成响应动作,返回需要的ModuleAndView。
(3)得到ModuleAndView对象后,DispatcherServlet把获得的对象交给特定的视图对象,视图对象吧ModuleAndView中的数据展示出来,这个视图展示的动作是由视图对象的render方法完成的,对不同的视图对象,render方法会完成不同的视图展示的处理。
Spring学习(十一)--Spring MVC的更多相关文章
- Spring学习(十一)-----Spring使用@Required注解依赖检查
Spring学习(九)-----Spring依赖检查 bean 配置文件用于确定的特定类型(基本,集合或对象)的所有属性被设置.在大多数情况下,你只需要确保特定属性已经设置但不是所有属性.. 对于这种 ...
- Spring学习(六)-----Spring使用@Autowired注解自动装配
Spring使用@Autowired注解自动装配 在上一篇 Spring学习(三)-----Spring自动装配Beans示例中,它会匹配当前Spring容器任何bean的属性自动装配.在大多数情况下 ...
- Spring学习笔记--spring+mybatis集成
前言: 技术的发展, 真的是日新月异. 作为javaer, 都不约而同地抛弃裸写jdbc代码, 而用各种持久化框架. 从hibernate, Spring的JDBCTemplate, 到ibatis, ...
- spring学习12 -Spring 框架模块以及面试常见问题注解等
以下为spring常见面试问题: 1.Spring 框架中都用到了哪些设计模式? Spring框架中使用到了大量的设计模式,下面列举了比较有代表性的: 代理模式—在AOP和remoting中被用的比较 ...
- Spring学习【Spring概述】
从本文開始,我们就要一起学习Spring框架,首先不得不说Spring框架是一个优秀的开源框架. 当中採用IoC原理实现的基于Java Beans的配置管理和AOP的思想都是非常值得学习与使用的.以下 ...
- Spring学习笔记—Spring之旅
1.Spring简介 Spring是一个开源框架,最早由Rod Johnson创建,并在<Expert One-on-One:J2EE Design and Development> ...
- spring学习(三) ———— spring事务操作
前面一篇博文讲解了什么是AOP.学会了写AOP的实现,但是并没有实际运用起来,这一篇博文就算是对AOP技术应用的进阶把,重点是事务的处理. --wh 一.jdbcTemplate 什么是JdbcTem ...
- spring 学习 一 spring 介绍
Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的.框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架. Spring ...
- Spring学习2—Spring容器
一.Spring容器接口关系 容器是Spring框架的核心,Spring容器就是一个巨大的工厂.Spring容器使用Ioc(控制反转(Inversion of Control )管理所有组成应用系统的 ...
- spring学习之spring入门
一 spring的基础 1:什么是spring spring是由Rod Johnson组织和开发的一个分层 的Java SE/EE 一站式轻量级开源框架,它以Ioc(控制反转)和 AOP(面向切面编程 ...
随机推荐
- mysql事务级别和spring中应用
一.事务的基本要素(ACID) 1.原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节.事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有 ...
- Linux系统时间同步方法
在Windwos中,系统时间的设置很简单,界面操作,通俗易懂,而且设置后,重启,关机都没关系.系统时间会自动保存在BIOS时钟里面,启动计算机的时候,系统会自动在BIOS里面取硬件时间,以保证时间的不 ...
- 华为云服务器基于hadoop2.7.5安装hive-2.3.7
1. Hive简介 The Apache Hive data warehouse software facilitates reading, writing, and managing large d ...
- [ASP.NET Core开发实战]基础篇01 Startup
Startup,顾名思义,就是启动类,用于配置ASP.NET Core应用的服务和请求管道. Startup有两个主要作用: 通过ConfigureServices方法配置应用的服务.服务是一个提供应 ...
- Nodejs模块:querystring
/** * @description querystring模块 */ const querystring = require('querystring'); const url = 'https:/ ...
- checkbox手动样式改变
.image_input_checkbox{ width:18px; height:18px; display: inline-block; vertical-align: middle; -webk ...
- 【小白学PyTorch】7 最新版本torchvision.transforms常用API翻译与讲解
文章来自:微信公众号[机器学习炼丹术].欢迎关注支持原创 也欢迎添加作者微信:cyx645016617. 参考目录: 目录 1 基本函数 1.1 Compose 1.2 RandomChoice 1. ...
- linux 安装ifconfig
一:使用yum命令下载安装wget 查看镜像中ifconfig安装包 yum search ifconfig yum install net-tools.x86_64 -y 下面按照提示一步步安装即可 ...
- Tomcat源码分析(下载、启动)
1.下载Tomcat源代码: https://tomcat.apache.org/download-80.cgi 2. 解压以及创建必要目录和配置 解压.新建catalina-home目录,同时将目录 ...
- 关于Vue-CLI的那些事儿
Vue CLI是基于Vue.js进行快速发展的完整系统,提供了: 交互式的项目脚手架 实现零配件的原型开发 图形化的创建和管理项目的界面 基本框架的构建: . ├── build/ # webpack ...