1.1 框架结构

1.2 架构流程

1.用户发送请求至前端控制器DispatcherServlet;

2.DispatcherServlet收到请求调用HandlerMapping处理器映射器;

3.处理器映射器根据url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。结果:Handler;

4.DispatcherServlet通过HandlerAdapter处理器适配器调用处理器执行;

5.执行处理器(Controller,也叫后端控制器)

6.Controller执行完成后返回ModelAndView

7.HandlerAdpater将controller执行结果ModelAndView返回给DispatcherServlet.

8.DispatcherServlet将ModelAndView传给ViewResloved视图解析器

9.ViewResloved解析后返回具体View

10.DispatcherServlet对View进行渲染(即将模型数据填充至视图中)

11.DispatcherServlet相应用户。

1.3 组件说明

以下组件通常使用框架提供实现:

  • DiapatcherServlet:前端控制器

  用户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet是整个流程控制的中心,由它调用其他组件处理用户的请求,dispatcherServlet的存在降低了组件之间的耦合性。

  • HandlerMapping:处理器映射器

  HandlerMapping负责根据用户请求找到Handler(即处理器),springmvc提供了不同的映射器实现不同的映射方式。例如:配置文件方式,实现接口方式,注解方式等。

  • Handler:处理器

  Handler是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler度具体的用户请求进行处理。

  由于Handler涉及具体的用户业务请求,所以一般情况需要程序要根据业务需求开发Handler.

  • HandlerAdapter:处理器适配器

  通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。

               

  • ViewReslover:视图解析器

  ViewReslover负责处理结果生成View视图,ViewReslover首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。

  • View:视图

  springmvc框架提供了很多的View视图类型的支持,包括jstView、freemakerView、pdfView等。我们最常用的视图就是jsp。

  一般情况下需要通过页面标签或页面模板技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发具体的页面。

  说明:在springmvc的各个组件中,处理器映射器、处理器适配器、视图解析器成为springmvc的三大组件。

  需要用户开发的组件有handler、view。

1.4 框架默认加载组件

  

1.5 注解映射器和适配器

1.5.1 组件扫描器

  使用组件扫描器省去在spring容器配置每个controller类的繁琐。使用<context:component-scan>自动扫描标记@controller的控制器类,配置如下:

<!-- 包的扫描器 -->
<context:component-scan base-package="com.huida.controller"></context:component-scan>

  多个包中间使用半角逗号分隔。

1.5.2 RequestMappingHandlerMapping

  注解式处理器映射器,对类中标记@RequestMapping的方法进行映射,根据RequestMapping定义的url匹配RequestMapping标记的方法,匹配成功返回HandlerMethod对象给前端控制器,HandlerMethod对象中封装url对应的方法Method。

  从spring3.1开始,废除了DefaultAnnotationHandlerMapping的使用,推荐使用

RequestMappingHandlerMapping完成注解式处理器映射。

  配置如下:

<!-- 注解形式的处理器其映射器 -->
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"></bean>

  包的名字可以在DiapatcherServlet.properties的文件中找到。

  注解描述:

  @RequestMapping:定义请求url到处理器功能方法的映射。

1.5.3 RequestMappingHandlerAdapter

  注解式处理器,对标记@RequestMapping的方法进行适配。

  从spring3.1开始,废除了AnnotationMethodHandlerAdapter的使用,推荐使用

RequestMappingHandlerAdapter完成注解式处理器适配。

  配置如下:

<!-- 注解形式的处理器适配器 -->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>

  包的名字可以在DiapatcherServlet.properties的文件中找到。

1.5.4 <mvc:annotation-driven>

  springmvc使用<mvc:annotation-driven>自动加载RequestMappingHandlerMapping和RequestMappingHandlerAdapter,可用在springmvc.xml配置文件中使用<mvc:annotation-driven>替代注解处理器和适配器的配置。

  注意:如果没有显式的配置处理器映射器和处理器适配器,那么springMVC会去默认的

DispatcherServlet.properties中查找。对应的处理器映射器和处理器适配器去使用,这样每个请求都要扫描一次他的默认文件,效率非常低,会降低访问速度,所以要显式的配置处理器映射器和处理器适配器。

1.6 视图解析器

  在springmvc.xml文件配置如下:

<!-- 配置视图解析器 地址可以在:配置的视图解析器的包可以从DispatcherServlet.properties中找
作用:可以在controller中指定页面路径的时候不用写完整的路径名称,可以直接写页面去掉扩展名的名称
-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 前缀 -->
<property name="prefix" value="/WEB-INF/jsp"></property>
<!-- 后缀 -->
<property name="suffix" value=".jsp"/>
</bean>

  包的名字可以在DiapatcherServlet.properties的文件中找到。  

  InternalResourceViewResolver:支持JSP视图解析。

  viewClass:JstlView表示JSP模板页面需要使用JSTL标签库,所以classpath中必须包含jstl的相关jar 包。此属性可以不设置,默认为JstlView。

  prefix 和suffix:查找视图页面的前缀和后缀,最终视图的址为:前缀+逻辑视图名+后缀,逻辑视图名需要在controller中返回ModelAndView指定,比如逻辑视图名为hello,则最终返回的jsp视图地址 “WEB-INF/jsp/hello.jsp”。

  

SpringMVC框架结构的图解、架构的处理流程以及三大组件的说明和使用的更多相关文章

  1. springMVC的架构与执行流程

    SpringMVC术语 前端控制器(DispatcherServlet):接收请求,响应结果,相当于电脑的CPU. 处理器映射器(HandlerMapping):根据URL去查找处理器 处理器(Han ...

  2. SpringMVC核心架构的具体流程

    核心架构的具体流程步骤如下: 1.首先用户发送请求-->DispatcherServlet,前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行 处理,作为统一访问点,进行全局的流程控 ...

  3. SpringMVC工作原理图解

    SpringMVC的工作原理图: SpringMVC流程 1.  用户发送请求至前端控制器DispatcherServlet. 2.  DispatcherServlet收到请求调用HandlerMa ...

  4. Springmvc入门基础(二) ---架构详解

    1.框架结构图 架构流程文字说明 用户发送请求至前端控制器DispatcherServlet DispatcherServlet收到请求调用HandlerMapping处理器映射器. 处理器映射器根据 ...

  5. 步步深入MySQL:架构->查询执行流程->SQL解析顺序!

    一.前言 一直是想知道一条SQL语句是怎么被执行的,它执行的顺序是怎样的,然后查看总结各方资料,就有了下面这一篇博文了. 本文将从MySQL总体架构--->查询执行流程--->语句执行顺序 ...

  6. 我收藏的技术知识图(每张都是大图)关于XX背后的知识、技术图,例如:Linux、Nginx架构、PHP知识卡、机会、HTML5移动、Android系统架构、YII架构的典型流程、Css知识表

    我收藏的技术知识图(每张都是大图) HTML5Linux/Unix系统设计思想读书笔记 LinuxMVCJava线程MVCSpring MVCCSS3Nginx架构VimCliCommandsPHP知 ...

  7. Nginx的架构及工作流程

    NGINX是一个免费的,开源的,高性能的HTTP服务器和反向代理,以及IMAP / POP3代理服务器.NGINX以其高性能,稳定性,丰富的功能集,简单的配置和低资源消耗而闻名,也是为解决C10K问题 ...

  8. 浅析MyBatis(一):由一个快速案例剖析MyBatis的整体架构与运行流程

    MyBatis 是轻量级的 Java 持久层中间件,完全基于 JDBC 实现持久化的数据访问,支持以 xml 和注解的形式进行配置,能灵活.简单地进行 SQL 映射,也提供了比 JDBC 更丰富的结果 ...

  9. Dubbo基础二之架构及处理流程概述

    Dubbo基础一之实战初体验 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中体验了Dubbo的使用,对于消费端对服务提供者的调用非常清晰明确.那么Dubbo是如何做到的呢?下面对Dub ...

随机推荐

  1. JavaScript学习(一)——基础知识查漏补缺

    标签script 我们知道,html要使用js就要使用<script>标签. 两种方式: 一是直接在<script>这里</script>写入代码. 二是在别的文件 ...

  2. Python中的变量和常量

    本文主要介绍Python中的变量和常量,包括变量的命名规范,使用注意事项 -------------- 完美的分割线 --------------- 1.变量 1.1.变量理解 1)什么是变量 变量即 ...

  3. Codeforces 133A:HQ9+

    A. HQ9+ time limit per test 2 seconds memory limit per test 256 megabytes input standard input outpu ...

  4. 使用 Windows 10 中的加速度计(Accelerometer,重力传感器)

    在做 UWP 应用开发的时候还有什么理由可以用到加速度计呢?场景很多啦,比如做游戏,做类似 Surface Hub 那种一边旋转,一边所有内容跟着一起转的效果. Windows 10 UWP 中的加速 ...

  5. Microsoft SQL Server Express各版本对比

    Microsoft® SQL Server® 2016 Express 支持的操作系统 Windows 10 , Windows 8, Windows Server 2012, Windows Ser ...

  6. Plus and Square Root

    ZS the Coder is playing a game. There is a number displayed on the screen and there are two buttons, ...

  7. nexus helm proxy 集成&&问题解决

      对于使用kubernetes 进行开发的人员来说helm是很方便的 构建nexus helm plugin git clone https://github.com/sonatype-nexus- ...

  8. 解决:win8.1 oepnvpn客户端 redirect-gateway def1无效,自动获取的IP没有网关问题

    解决:win8.1 oepnvpn客户端 redirect-gateway def1无效,自动获取的IP没有网关问题 该问题是操作系统权限问题,需要将程序设置为以管理员模式运行和以windows7兼容 ...

  9. [DP题]登山

    描述 五一到了,PKU-ACM队组织大家去登山观光,队员们发现山上一个有N个景点,并且决定按照顺序来浏览这些景点,即每次所浏览景点的编号都要大于前一个浏览景点的编号.同时队员们还有另一个登山习惯,就是 ...

  10. Java获取Resource目录下的文件

    工程结构: 有两种方式: Java代码中的类,要获取Resource资源文件目录下文件 绝对路径寻址 String s1 = this.getClass().getResource("/te ...