[Spring3.x] 第 15 章 Spring MVC : 第 四 篇 业务层及 web 层技术开发

第 四 篇  业务层及 web 层技术开发
第 15 章 Spring MVC
 Spring 为展现层提供了一个优秀的 web 框架 -- Spring MVC -- 松散耦合和插拔组件结构设计。
 Spring MVC 通过一套 MVC 注解,让 POJO 成为处理请求的控制器,无须实现任何接口。支持 REST 风格的 URL 请求。
 Spring MVC 在 数据绑定,视图解析,本地化处理及静态资源处理上表现不俗。
  主要内容 :
   * Spring MVC 体系
   * 注解驱动控制器
   * 数据绑定,数据校验
   * 视图解析
   * 本地化解析
   * 文件上传
   * 静态资源处理,请求拦截器,异常处理

 15.1 Spring MVC 概述
  15.1.1 体系结构

  Spring MVC 围绕 DispatcherServlet 这个核心展开。负责截获请求并将其分派给相应的处理器处理
 Spring MVC 框架包括注解驱动控制器,请求及相应的信息处理,视图解析,本地化解析,上传文件解析,异常处理,以及 表单标签绑定等内容。
 Spring MVC 处理请求的整体过程 7 步骤
  (1), 整个过程始于客户端发出一个 HTTP 请求,Web 应用服务器接受到这个请求,如果匹配 DispatcherServlet 的请求映射路径,Web 容器将该请求转交给 DispatcherServlet 处理。
  (2), DispatcherServlet 接收到这个请求后,将根据请求的信息 (包括 URL,, HTTP方法、请求报文头、请求参数、Cookie等)及 HanderMapping 的配置找到处理请求的处理器(Handler).可将 HandlerMapping 可按成路由控制器,Spring MVC 中,任何一个 Object 都可以成为请求处理器。
  (3), 当 DispatcherServlet 根据 HandlerMapping 得到对应当前请求的 Handler 后,通过 HandlerAdapter 对 Handler 进行封装,HandlerAdapter 是一个适配器,它用统一的接口对各种 Handler 方法进行调用。
  (4), 处理器完成业务逻辑的处理后将返回一个 ModelAndView 给 DispatcherServlet, ModelAndView 包含了视图逻辑名和模型数据信息
  (5), ModelAndView 包含逻辑视图名,DispatcherServlet 借由 ViewResolver 解析到 真正的视图
          <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  (6), 得到真实的 View 后, DispatcherServlet 就使用这个 View 对象对 ModelAndView 中的模型数据进行视图渲染
  (7), 最终客户端得到响应消息,可能是 html,json,xml,image,pdf等不同的媒体形式。
  15.1.2 配置 DispatcherServlet (Spring MVC 的心脏)
    DispatcherServlet 负责接收 HTTP 请求并协调 Spring MVC 的各个组件完成请求处理的工作。和其他 servlet 一样,要配置在 web.xml 之中。
    Spring MVC 框架的工作机理,三个问题的提出 :
     *1), DispatcherServlet 框架如何截获特定的 HTTP 请求,交由 Spring MVC 框架处理?
     *2), 位于 Web 层的 Spring 容器(WebApplicationContext), 如何与位于业务层的 Spring 容器 (ApplicationContext) 建立关联,以使 Web 层的 Bean 可以调用业务层的 Bean?
     *3), 如何初始化 Spring MVC 的各个组件,并将它们装配到 DispatcherServlet 中?
 *** 配置 DispatcherServlet, 截获特定的 URL 请求 ***
web.xml   
    <display-name>Spring MVC Application</display-name>
    <context-param>  &1, “业务层和持久层的 Spring 配置文件,这些配置文件被父 Spring 容器所使用”
        <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath:spring/dao.xml,
            classpath:spring/service.xml
        </param-value>
    </context-param> 
    
<!-- ContextLoaderListener 就是一个 ServletContextListener 它根据 contextConfigLocation 指定的配置文件启动业务层 Spring 容器 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>


    <!--
         DispatcherServlet : org.springframework.web.servlet.DispatcherServlet
         DispatcherServlet 是前端控制器,用户的浏览器web请求会由DispatcherServlet分配给控制器,
         控制器 完成处理后,接着请求会被发送给一个视图来呈现出结果
     -->
    <servlet>
        <servlet-name>mvc-dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>mvc-dispatcher</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>
</web-app>
  (&1), 通过 contextConfigLocation 参数指定业务层 Spring 容器的配置文件
  (2), 默认自动加载 <servlet-name>mvc-dispatcher</servlet-name> mvc-dispatcher-servlet.xml
  (3), Spring 容器 之间可设置问 父子级的关系,实现良好的解耦。 web层 Spring 容器 是 业务层 Spring 容器的子容器。
      即 “web 层” 容器可以引用 “业务层” 容器的 Bean,而 “业务层” 容器不能访问 “web层” 容器的 Bean
    一个 web.xml 可以配置多个 DispatcherServlet.
  15.1.3 一个简单的实例
    在学习了 Spring MVC 开发过程步骤 :
     (1), 配置 web.xml , 指定 业务层 对应的 Spring 配置文件,定义 DispatcherServlet.
     (2), 编写处理请求的控制器
     (3), 编写视图对象,这里我们使用 JSP 作为视图。
     (4), 配置 Spring MVC 的配置文件,使控制器,视图解析器等生效
            <context:component-scan base-package="com.qunar.springtest.controller" />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
 15.2 注解驱动的控制器
  15.2.1 使用 @RequestMapping 映射请求

   Spring 3.0 之后,支持带占位符的 URL /user/**/{userId}
  15.2.2 请求处理方法签名概述
   Spring MVC 对控制器处理方法签名的限制是很宽松的,你几乎可以按你喜欢的方式进行方法签名。
    如 : @PathVariable, @RequestParam, @RequestHeader 等,Spring MVC 会优雅的完成将 HTTP 请求的信息绑定到相应的方法入参中。
 15.3 处理方法和数据绑定
 15.4 视图和视图解析器
 15.5 本地化解析
 15.6 文件上传
 15.7 杂项
 15.8 小结

  Spring MVC 3.0 全面支持 REST 风格 和 Web编程,完全注解驱动,处理方法签非常灵活,处理器方法不依赖于 Servlet API等。
  由于 Spring MVC 框架在后台做了非常多的隐性工作,所以想深入掌握 Spring MVC 3.0 并非易事,只有了解这些机理后,才能更好的使用。
  
     
posted @ 2014-05-31 23:23  小尼人00  阅读(218)  评论(0编辑  收藏  举报