【SpringMVC学习01】宏观上把握SpringMVC框架

  springmvc是一个基于mvc的web框架,是spring框架的一个模块,所以springmvc和spring无需通过中间整合层进行整合。我们先来看下spring的一个架构模型,看springmvc在spring框架中所处的位置:

  从图中可以看出,springmvc是spring的一个web框架,所以上图中描述的是spring web mvc,它和struts2的功能差不多,下面我们来深入到springmvc内部,看它的干了些啥,先看一个图:

  这个图描述了springmvc的整个执行的流程,乍一看有点晕乎,待我一步步分析,最后弄个流程图出来就明白了。

  结合上图,我描述一下springmvc的执行流程:

  1. 向服务器发送Http request请求,请求被前端控制器(DispatcherServlet)捕获。
  2. 前端控制器根据xml文件中的配置(或者注解)对请求的URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用处理器映射器(HandlerMapping)获得处理该请求的Handler以及Handler对应的拦截器,最后以 HandlerExecutionChain 对象的形式返回。
  3. 前端控制器根据获得的Handler,选择一个合适的处理器适配器(HandlerAdapter)去执行该Handler。
  4. 处理器适配器提取request中的模型数据,填充Handler入参,执行处理器(Handler)(也称之为Controller).
  5. Handler(Controller)执行完成后,向处理器适配器返回一个ModelAndView对象,处理器适配器再向前端控制器返回该ModelAndView对象(ModelAndView只是一个逻辑视图)。
  6. 根据返回的ModelAndView,前端控制器请求一个适合的视图解析器(ViewResolver)(必须是已经注册到Spring容器中的ViewResolver)去进行视图解析,然后视图解析器向前端控制器返回一个真正的视图View(jsp)。
  7. 前端控制器通过Model解析出ModelAndView中的参数进行解析,最终展现出完整的View并通过Http response返回给客户端。

  上面描述了一下springmvc的执行流程,如果还是有点模糊的话,我用下面这个流程图来表示一下,也为了自己更好的理解整个执行流程:

Created with Rapha?l 2.1.0用户用户DispatcherServletDispatcherServletHandlerMappingHandlerMappingHandlerAdapterHandlerAdapterHandlerHandlerViewResolverViewResolverHttp request请求读取配置文件或注解解析请求的url根据解析结果调用处理器映射器返回请求对应的Handler选择一个合适的处理器适配器提取request中的模型数据填充Handler入参执行返回ModelAndView返回ModelAndView选择一个合适的视图解析器解析ModelAndView返回真正的视图View通过Model解析出ModelAndView中的参数解析参数,展现完整的viewHttp response返回

  经过这么一分析,现在对springmvc的执行流程有了宏观上的了解了,从上面的分析可以看出,springmvc有几个主要的组件,下面结合我们编程,来分析一下这几个组件:

  1. 前端控制器DispatcherServlet(不需要程序员开发)。

    作用:接收请求,响应结果,相当于转发器,中央处理器。有了DispatcherServlet减少了其它组件之间的耦合度。

  2. 处理器映射器HandlerMapping(不需要程序员开发)。

    作用:根据请求的url查找Handler。

  3. 处理器适配器HandlerAdapter(不需要程序员开发)。

    作用:按照特定规则(HandlerAdapter要求的规则)去执行Handler。

  4. 处理器Handler(需要程序员开发)。

    注意:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler

  5. 视图解析器ViewResolver(不需要程序员开发)。

    作用:进行视图解析,根据逻辑视图名解析成真正的视图(view)

  6. 视图View(需要程序员开发jsp)。

    View是一个接口,实现类支持不同的View类型(jsp、freemarker、pdf…)

    【注】:不需要程序员开发的,需要程序员自己做一下配置即可。

  现在看来,其实真正需要程序员开发的就两大块:一个是Handler,一个是jsp,这样的话,其实和struts2就差不多了,所以不要被上面那个一系列的流程给绕傻了。

  整个springmvc的架构就总结到这吧,后面就要开始走进springmvc的世界了。



—–乐于分享,共同进步!

—–我的博客主页:http://blog.csdn.net/eson_15

时间: 2024-10-07 11:31:54

【SpringMVC学习01】宏观上把握SpringMVC框架的相关文章

springMVC学习总结(二) --springMVC表单处理和静态文件处理

springMVC学习总结(二) --springMVC表单处理和静态文件处理 根据springMVC学习总结(一) --springMVC搭建 搭建项目 一.表单处理 1.创建两个java类 Student.java, StudentController.java. 2.在jsp字文件夹下面创建两个视图文件student.jsp.result.jsp. 项目目录结构如下: 实体类Student.java package com.myl.controller.form; /** * * @aut

springMVC学习总结(三) --springMVC重定向

根据springMVC学习总结(一) --springMVC搭建搭建项目 在com.myl.controller包下创建一个java类WebController. 在jsp子文件夹下创建一个视图文件index.jsp.final.jsp. 配置web.xml 配置springmvc-servler.xml 创建项目结构如下: WebController.java代码如下 package com.myl.controller; import org.springframework.stereoty

SpringMVC学习(三)整合SpringMVC和MyBatis

工程结构 导入jar包 配置文件 applicationContext-dao.xml---配置数据源.SqlSessionFactory.mapper扫描器 applicationContext-service.xml---配置service接口 applicationContext-transaction.xml--事务管理 sprintmvc.xml---springmvc的配置,配置处理器映射器.适配器.视图解析器 SqlMapConfig.xml---mybatis的配置文件,配置别名

SpringMvc学习笔记(一)SpringMvc简单介绍

欢迎访问:鲁春利的工作笔记,学习是一种信仰,让时间考验坚持的力量. SpringFramework下载地址:http://projects.spring.io/spring-framework/ SpringFramework Maven资源库地址:http://mvnrepository.com/search?q=spring 如果下载的是RELEASE的话,在docs\spring-framework-reference\pdf目录下有完整的用户手册. 简介

【SpringMVC学习02】走进SpringMVC的世界

上一篇博文主要介绍了springmvc的整个架构执行流程,对springmvc有了宏观上的把握,这一篇博文主要以案例作为驱动,带你走进springmvc的世界.案例中的需求很简单:对商品列表的查询.表的话还是使用我在学习mybatis时候用的表,具体可以参见这篇博文中的建表语句. 1. 环境的搭建 需要导入spring的jar包,单纯的入门springmvc的话不需要导入所有的spring jar包,但是核心包和spring-web/spring-webmvc是一定要导入的,考虑到后面还会和my

springmvc学习笔记(20)-拦截器

springmvc学习笔记(20)-拦截器 springmvc学习笔记20-拦截器 拦截定义 拦截器配置 针对HandlerMapping配置 类似全局的拦截器 拦截测试 拦截器应用实现登陆认证 需求 登陆controller方法 登陆认证拦截实现 本文主要介绍springmvc中的拦截器,包括拦截器定义和的配置,然后演示了一个链式拦截的测试示例,最后通过一个登录认证的例子展示了拦截器的应用 拦截定义 定义拦截器,实现HandlerInterceptor接口.接口中提供三个方法. public

springmvc学习笔记(19)-RESTful支持

springmvc学习笔记(19)-RESTful支持 springmvc学习笔记19-RESTful支持 概念 REST的样例 controller REST方法的前端控制器配置 对静态资源的解析 本文介绍RESTful的概念,并通过一个小样例展示怎样编写RESTful风格的controller和配置前端控制器,最后展示静态资源的解析 概念 首先附上两篇博客链接 理解RESTful架构 - 阮一峰的网络日志 RESTful API 设计指南- 阮一峰的网络日志 RESTful架构.就是眼下最流

springMVC学习笔记汇总(持续更新)

SpringMVC 学习笔记(一) Hello World SpringMVC 学习笔记(二) @RequestMapping.@PathVariable等注解 SpringMVC 学习笔记(三) 使用ServletAPI 和 实体 做为参数 SpringMVC 学习笔记(四) 处理模型数据 SpringMVC 学习笔记(五) 基于RESTful的CRUD SpringMVC 学习笔记(六) 数据绑定和JSR校验 SpringMVC 学习笔记(七) JSON返回:HttpMessageConve

springmvc学习笔记(18)-json数据交互

springmvc学习笔记(18)-json数据交互 springmvc学习笔记18-json数据交互 springmvc进行json交互 环境准备 添加json转换的依赖 配置json转换器 json交互测试 输入json串输出是json串 输入keyvalue输出是json串 本文主要介绍如何在springmvc中进行json数据的交互,先是环境准备和配置,然后分别展示了"输入json串,输出是json串"和"输入key/value,输出是json串"两种情况下