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的更多相关文章

  1. Spring学习(十一)-----Spring使用@Required注解依赖检查

    Spring学习(九)-----Spring依赖检查 bean 配置文件用于确定的特定类型(基本,集合或对象)的所有属性被设置.在大多数情况下,你只需要确保特定属性已经设置但不是所有属性.. 对于这种 ...

  2. Spring学习(六)-----Spring使用@Autowired注解自动装配

    Spring使用@Autowired注解自动装配 在上一篇 Spring学习(三)-----Spring自动装配Beans示例中,它会匹配当前Spring容器任何bean的属性自动装配.在大多数情况下 ...

  3. Spring学习笔记--spring+mybatis集成

    前言: 技术的发展, 真的是日新月异. 作为javaer, 都不约而同地抛弃裸写jdbc代码, 而用各种持久化框架. 从hibernate, Spring的JDBCTemplate, 到ibatis, ...

  4. spring学习12 -Spring 框架模块以及面试常见问题注解等

    以下为spring常见面试问题: 1.Spring 框架中都用到了哪些设计模式? Spring框架中使用到了大量的设计模式,下面列举了比较有代表性的: 代理模式—在AOP和remoting中被用的比较 ...

  5. Spring学习【Spring概述】

    从本文開始,我们就要一起学习Spring框架,首先不得不说Spring框架是一个优秀的开源框架. 当中採用IoC原理实现的基于Java Beans的配置管理和AOP的思想都是非常值得学习与使用的.以下 ...

  6. Spring学习笔记—Spring之旅

    1.Spring简介     Spring是一个开源框架,最早由Rod Johnson创建,并在<Expert One-on-One:J2EE Design and Development> ...

  7. spring学习(三) ———— spring事务操作

    前面一篇博文讲解了什么是AOP.学会了写AOP的实现,但是并没有实际运用起来,这一篇博文就算是对AOP技术应用的进阶把,重点是事务的处理. --wh 一.jdbcTemplate 什么是JdbcTem ...

  8. spring 学习 一 spring 介绍

    Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的.框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架. Spring ...

  9. Spring学习2—Spring容器

    一.Spring容器接口关系 容器是Spring框架的核心,Spring容器就是一个巨大的工厂.Spring容器使用Ioc(控制反转(Inversion of Control )管理所有组成应用系统的 ...

  10. spring学习之spring入门

    一 spring的基础 1:什么是spring spring是由Rod Johnson组织和开发的一个分层 的Java SE/EE 一站式轻量级开源框架,它以Ioc(控制反转)和 AOP(面向切面编程 ...

随机推荐

  1. mysql事务级别和spring中应用

    一.事务的基本要素(ACID) 1.原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节.事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有 ...

  2. Linux系统时间同步方法

    在Windwos中,系统时间的设置很简单,界面操作,通俗易懂,而且设置后,重启,关机都没关系.系统时间会自动保存在BIOS时钟里面,启动计算机的时候,系统会自动在BIOS里面取硬件时间,以保证时间的不 ...

  3. 华为云服务器基于hadoop2.7.5安装hive-2.3.7

    1. Hive简介 The Apache Hive data warehouse software facilitates reading, writing, and managing large d ...

  4. [ASP.NET Core开发实战]基础篇01 Startup

    Startup,顾名思义,就是启动类,用于配置ASP.NET Core应用的服务和请求管道. Startup有两个主要作用: 通过ConfigureServices方法配置应用的服务.服务是一个提供应 ...

  5. Nodejs模块:querystring

    /** * @description querystring模块 */ const querystring = require('querystring'); const url = 'https:/ ...

  6. checkbox手动样式改变

    .image_input_checkbox{ width:18px; height:18px; display: inline-block; vertical-align: middle; -webk ...

  7. 【小白学PyTorch】7 最新版本torchvision.transforms常用API翻译与讲解

    文章来自:微信公众号[机器学习炼丹术].欢迎关注支持原创 也欢迎添加作者微信:cyx645016617. 参考目录: 目录 1 基本函数 1.1 Compose 1.2 RandomChoice 1. ...

  8. linux 安装ifconfig

    一:使用yum命令下载安装wget 查看镜像中ifconfig安装包 yum search ifconfig yum install net-tools.x86_64 -y 下面按照提示一步步安装即可 ...

  9. Tomcat源码分析(下载、启动)

    1.下载Tomcat源代码: https://tomcat.apache.org/download-80.cgi 2. 解压以及创建必要目录和配置 解压.新建catalina-home目录,同时将目录 ...

  10. 关于Vue-CLI的那些事儿

    Vue CLI是基于Vue.js进行快速发展的完整系统,提供了: 交互式的项目脚手架 实现零配件的原型开发 图形化的创建和管理项目的界面 基本框架的构建: . ├── build/ # webpack ...