1.Spring MVC应用的开发步骤

  a.在web.xml文件中定义前端控制器DispatcherServlet来拦截用户请求。由于Web应用是基于请求/响应架构的应用,所以 不管哪个MVC Web框架,都需要在web.xml中配置该框架的核心Servlet或Filter,这样才可以让该框架介入到Web应用中。

 <servlet>
<!-- Serlvet的名称 -->
<servlet-name>springmvc</servlet-name>
<!-- Serlvet对应的java类 -->
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<!-- 当前Serlvet的参数信息 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/springmvc-config.xml</param-value>
</init-param>
<!-- 在Web应用启动时立即加载Serlvet -->
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 让Spring MVC的前端控制器拦截所有请求 -->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

  b.如果需要以POST方式提交请求,则定义包含表单数据的JSP页面。如果仅仅是以GET方式发送请求,则无需经过这一步

  c.定义处理用户请求的Handle类,可以实现Controller接口或使用@Controller注解。前端控制器负责接收请求,并将请求分发给对应的Handle,即实现Controller接口的java类,而该java类负责调用后台业务逻辑代码来处理请求。

  在Spring MVC框架中,控制器实际上是由两个部分共同组成,即拦截所有用户请求和处理请求的通用代码都由前端控制器DispatcherServlet完成,而实际的业务控制(诸如调用后台业务逻辑代码,返回处理结果等)则由Controller处理。

  d.配置Handle. java领域的绝大部分MVC框架都非常喜欢使用xml文件来进行配置管理,这在以前是一种思维定势。即配置哪个请求对应哪个Controller进行处理,从而让前端控制器根据该配置来创建合适的Controller实例,并调用该Controller的业务控制方法。

    配置方法一:

<!-- 配置Handle,映射"/hello"请求 -->
<bean name="/hello" class="org.fkit.controller.HelloController"/>

    配置方法二:

@Controller
public class HelloController{
@RequestMapping(value="/hello")
public ModelAndView hello(){

  e. 编写视图资源。

  当Handle处理用户请求结束后,通常会返回一个ModelAndView对象,该对象中应该包含返回的视图名或视图名和模型,这个视图名就代表需要显示的物理视图资源。如果Handle需要把一些数据传给视图资源,则可以通过模型对象。

2.Spring MVC执行流程

  a. 用户向服务器发送请求,请求被Spring的前端控制器DispatcherSerlvet截获

  b. DispatcherServlet对请求URL进行解析,得到URI(请求资源标识符)。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象,包括Handler对象以及Handler对象对应的拦截器,这些对象会被疯转到一个HandlerExecutionChain对象进行解析

  c. DispatcherServlet根据获得的Handler,选择一个合适的HandlerAdapter,用于处理多种Handler,调用Handler实际处理请求的方法。

  d. 提取请求中的模型数据,开始执行Handler(Controller)。在填充Handler的入参过程中,根据配置,Spring将帮你做一些额外的工作。

    >>消息转换: 将请求消息(如Json,xml等数据)转换成一个对象,将对象转换为指定的响应信息

    >>数据转换: 对请求消息进行数据转换,如Spring转换成Integer,Double等

    >>数据格式化: 对请求消息进行数据格式化,如将字符串转化为格式化数字或格式化日期等

    >>数据验证: 验证数据的有效性(长度,格式等),验证结果存储到BindingResult或Error中

  e.Handler执行完成后,向DispatcherSerlvet返回一个ModelAndView对象,应该包含视图名或视图名和模型

  f, 根据返回的ModelAndView对象,选择一个合适的ViewResovler(视图解析器)返回给DispatcherServlet

  g. ViewResovler结合Model和View来渲染视图

  h. 将视图渲染结果返回给客户端

  以上8个步骤,DispatcherServlet,HandlerMapping,HandlerAdapter,ViewResolver等对象协同工作,完成Spring MVC请求->响应的整个工作流程,这些对象所完成的工作对于开发者来说都是不可见的,开发者并不需要关心这些对象是如何工作的,只需要在Handler(Controller)当中完成对请求的业务处理。

  

Spring MVC执行的流程的更多相关文章

  1. Spring MVC简介 2.5 Spring MVC执行的流程

    package org.fkit.controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http ...

  2. 一文读懂Spring MVC执行流程

    说到Spring MVC执行流程,网上有很多这方面的文章介绍,但是都不太详细,作为一个初学者去读会有许多不理解的地方,今天这篇文章记录一下我学习Spring MVC的心得体会 话不多说,先上图:   ...

  3. Java——一文读懂Spring MVC执行流程

    说到Spring MVC执行流程,网上有很多这方面的文章介绍,但是都不太详细,作为一个初学者去读会有许多不理解的地方,今天这篇文章记录一下我学习Spring MVC的心得体会 话不多说,先上图: Sp ...

  4. (4.1)Spring MVC执行原理和基于Java的配置过程

    一.Spring MVC执行原理和基于Java配置的配置过程 (一)Spring MVC执行过程,大致为7步. 所有的请求都会经过Spring的一个单例的DispacherServlet. Dispa ...

  5. spring Mvc 执行原理 及 xml注解配置说明 (六)

    Spring MVC 执行原理 在 Spring Mvc 访问过程里,每个请求都首先经过 许多的过滤器,经 DispatcherServlet 处理; 一个Spring MVC工程里,可以配置多个的 ...

  6. Spring MVC执行原理和基于Java的配置过程

    一.Spring MVC执行原理和基于Java配置的配置过程 (一)Spring MVC执行过程,大致为7步. 所有的请求都会经过Spring的一个单例的DispacherServlet. Dispa ...

  7. Spring Bean的生命周期、Spring MVC的工作流程、IOC,AOP

    1.Spring Bean的生命周期? (1)构造方法实例化bean. (2)构造方法设置对象属性. (3)是否实现aware接口,三种接口(BeanNameAware,BeanFactoryAwar ...

  8. Spring MVC整体处理流程

    一.spring整体结构 首先俯视一下spring mvc的整体结构 二.处理流程 1.请求处理的第一站就是DispatcherServlet.它是整个spring mvc的控制核心.与大多数的jav ...

  9. Spring MVC执行原理

    spring的MVC执行原理 1.spring mvc将所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责对请求 进行真正的处理工作. 2.DispatcherSer ...

随机推荐

  1. Git知识总览(三) 分支的创建、删除、切换、合并以及冲突解决

    前两篇博客集中的聊了git的一些常用命令,具体请参见<Git知识总览(一) 从 git clone 和 git status 谈起>.<Git知识总览(二) git常用命令概览> ...

  2. atom编辑器启动后文件不能编辑的解决办法

    今天更新了atom,并且安装了很多插件,突然发现所有页面不能编辑了,如图 这个光标块会自动跳到单词后面,后来发现按一下键盘的字母a就变成正常光标了,至于原因,折腾了一个小时也没发现,后来百度到用Ctr ...

  3. 洛谷 2634&&BZOJ 2152: 聪聪可可【点分治学习+超详细注释】

    2152: 聪聪可可 Time Limit: 3 Sec  Memory Limit: 259 MBSubmit: 3435  Solved: 1776[Submit][Status][Discuss ...

  4. 51 Nod 1791 合法括号子段【分治+字符串】

    1791 合法括号子段 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 有一个括号序列,现在要计算一下它有多少非空子段是合法括号序列. 合法括号序列的定义是: 1. ...

  5. 0/1背包 dp学习~6

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1203 I NEED A OFFER! Time Limit: 2000/1000 MS (Java/O ...

  6. flume1.8 开发指南学习感悟

    概述: Apache Flume是一个分布式.可用的系统,用于从许多不同的sources有效的收集并移动大量日志数据用于集中存储数据. 架构及数据流动模型: flume实际上就是一个Agent.Age ...

  7. UEP-查询方式总结

    public void retrieve() { QueryParamList params = getQueryParam("dataWrap"); //获取页面上的参数,即查询 ...

  8. 如何开发由Create-React-App 引导的应用(二)

    此文章是翻译How to develop apps bootstrapped with Create React App 官方文档 系列文章 如何开发由Create-React-App 引导的应用 如 ...

  9. C#面试常见题目

    1.CTS.CLS.CLR分别作何解释 CTS:Common Type System 通用系统类型.Int32.Int16→int.String→string.Boolean→bool CLS:Com ...

  10. ArrayList 源码详细分析

    1.概述 ArrayList 是一种变长的集合类,基于定长数组实现.ArrayList 允许空值和重复元素,当往 ArrayList 中添加的元素数量大于其底层数组容量时,其会通过扩容机制重新生成一个 ...