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. faster-rcnn系列笔记(一)

    目录: 1. 序言 2.正文 2.1  关于ROI 2.2  关于RPN 2.3 关于anchor 3. 关于数据集合制作 4. 关于参数设置 5. 参考 1.序言 叽歪一下目标检测这个模型吧,这篇笔 ...

  2. JS 引擎的执行机制

    关于JS引擎的执行机制,首先牢记2点: .JS是单线程语言 JS的Event Loop是JS的执行机制.深入了解JS的执行,就等于深入了解JS里的event loop 关于单线程相对还比较好理解,就是 ...

  3. 一种数据与逻辑分离的Python单元测试工具

    一种数据与逻辑分离的Python单元测试工具 几个概念 TestCase TestCase是一个完整的测试单元,最小的测试执行实体,就是我们常说的测试用例. TestSuite 以某种特性将测试用例组 ...

  4. HDU 1000 A + B Problem(指针版)

    A + B Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  5. Linux驱动手动绑定和解绑定

    Linux内核从2.6.13-rc3开始,提供了在用户空间,可动态的绑定和解绑定设备和设备驱动之间关系的功能.在这之前,只能通过insmod(modprobe)和rmmod来绑定和解绑,而且这种绑定和 ...

  6. line-height相关总结

    line-height http://cindylu520.iteye.com/blog/670512 四个boxes containing boxes inline boxes 匿名inline b ...

  7. PostgreSQL 的 distinct on 的理解

    摘录自:http://www.cnblogs.com/gaojian/archive/2012/09/05/2671381.html 对于 select distinct on , 可以利用下面的例子 ...

  8. struts配置json需要的jar包

  9. Java进阶篇(四)——Java异常处理

    程序中总是存在着各种问题,为了使在程序执行过程中能正常运行,使用Java提供的异常处理机制捕获可能发生的异常,对异常进行处理并使程序能正常运行.这就是Java的异常处理. 一.可捕获的异常 Java中 ...

  10. Python3基础知识

    1.查看关键字 Python3查看关键字要先导入模块keyword,然后运用keyword的属性kwlist获取 >>> import keyword>>> key ...