Spring MVC执行的流程

1.Spring MVC应用的开发步骤前端

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

<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方式发送请求,则无需通过这一步web

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

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

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

    配置方法一:mvc

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

    配置方法二:app

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

  e. 编写视图资源。框架

  当Handle处理用户请求结束后,一般会返回一个ModelAndView对象,该对象中应该包含返回的视图名或视图名和模型,这个视图名就表明须要显示的物理视图资源。若是Handle须要把一些数据传给视图资源,则能够经过模型对象。url

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)当中完成对请求的业务处理。

相关文章
相关标签/搜索