zoukankan      html  css  js  c++  java
  • Spring学习(十一)--Spring MVC

    1、MVC模式

    (1)视图

    通过视图展示应用数据    向应用数据提供更新动作   向控制器提交用户动作   运行控制器选择不同视图

    (2)模型提供

    封装应用数据状态  响应数据状态查询  提供应用功能接口 数据变化通知视图

    (3)控制器

     定义应用功能  映射用户动作到数据更新  选择对应视图   一个控制器对应一组功能 

    使用MVC模式时,需要在web.xml中配置一个DispatcherServlet,这个DispatcherServlet可以看成一个前端控制器,还需要在Bean定义中配置Web请求和Controller的对应关系,以及各种视图的展现方式。在具体使用Controller时,会产生MoudelAndView数据,把数据交给相应的视图view进行展示。

    web应用中,Spring MVC是建立在IOC容器基础上的。Web环境中使用IOC容器,需要Spring将IOC容器启动,把IOC容器导入,并在Web容器中建立起来,IOC容器启动和Web容器启动启动是集成在一起的,启动过程中,一面处理Web容器的启动,另一方面通过设计特定的Web容器拦截器,将IOC容器载入到Web环境中,并进行初始化。启动完成后,IOC容器可以正常工作,才能建立MVC框架的运行机制,从而响应从Web容器传递的HTTP请求。

    Spring MVC的启动类ContextLoaderListener被定义为一个监听器,DispatchServlet和ContextLoaderListener提供了在Web容器中对Spring接口,这些接口与Web容器耦合是通过ServletContext来实现的。

    2、上下文在Web容器中启动

    ContextLoaderListener是Spring提供的类,实现了定义在Servlet API 中ServletContextListener接口,而在Web容器中建立applicationContext的过程中,是在contextInitialized的接口实现完成的。

    在ContextLoader,完成两个IOC容器建立过程,一个是在Web容器中建立起双亲IOC容器,另一个是生成相应的WebApplicationContext并进行初始化。

    ContextLoaderListener加载过程:

    (1)从servlet事件中得到ServletContext;

    (2)读取配置在web.xml中的各个相关属性;

    (3)ContextLoader实例化WebApplicationContext,完成载入和初始化,这个初始化的第一个上下文作为根上下文存在,根上下文载入后被绑 定到Web应用程序的ServletContext,任意需要访问根上下文的应用程序代码都可以从WebApplicationContextUntils类的静态方法中得到,取得上下文方法:webApplicationContext getWebApplicationContext(ServletContext sc);

    (4)ContextLoaderListener实现ServletContextListener,监听ServletContext,如果ServletContext发生变化,监听到动作之后,执行预定的响应动作。

    3、DispatcherServlet在MVC中的作用

    在web.xml中除了配置ContextLoaderListener外还需要配置DispatcherServlet,DispatcherServlet是实现sun公司的J2EE核心模式中的前端控制器模式,进行转发、匹配、数据处理后,并让前端页面来显示。

    Spring MVC中,除了DispatcherServlet之后,对于不同的web请求的映射需求,还提供了不同的HandlerMapping,默认情况下,DispatcherServlet选取了BeanNameUrlHandlerMapping作为映射实现策略。

    除了映射策略外,SPring MVC还提供了各种Controller的实现来供应用扩展和使用,这些控制器实现handleRequest接口方法,并返回MoudleAndView对象。

     Spring MVC中Spring上下文体系通过ContextLoader和DispatcherServlet来建立和初始化。完成ContextLoader的初始化,Web容器开始对DispatcherServlet进行初始化,DispatcherServlet会建立自己的上下文来持有Spring MVC的Bean对象、会建立自己的IOC容器、会从ServletContext中得到根上下文最为DispatcherServlet持有上下文的双亲上下文。

    DispatcherServlet通过继承FrameworkServlet和HTTPServletBean而继承HTTPServlet,通过使用Servlet API来对HTTP的请求进行响应。

    DispatcherServlet处理过程:

    HandlerMapping的作用

    初始化完成后,所有的HandlerMapping都被加载,储存到一个List中并被排序,这个List中每一个元素都对应着一个具体的HandlerMapping的配置。

    4、Spring MVC视图的呈现

    视图调用入口在DispatcherServlet中的doDispatcher方法中实现,具体说,在DispatcherServlet中对视图的处理是在render()方法调用中完成的,首先从ModuleAndView中获取视图对象,然后调用视图对象的render方法,在方法中会对视图的名字进行解析,获取对应的视图,不同的视图有不同的解析方式,最后完成特定的视图呈现的动作。

    几种常见的视图:JSP、ExcelView、PDFView。。。。

    ExcelView:Spring中没有对Excel的实现方案,所以是通过Java Excel来解决的,然后与Spring MVC 框架进行整合,把生成的Excel文件输出到Http的Response中,在Http客户端展示出来,Spring 3.0中提供了两种方案在MVC框架中进行整合:POI和JExcelAPI,分别对应着两个View类:AbstractExcelView和AbstractJExcelView。

    PDFView:与ExcelView一样,也是实现在AbstractpdfView类中完成。

    Spring MVC小结:

    (1)建立Controller控制器和HTTP请求之间的映射关系,这个过程是由handlerMapping中封装的HandlerExcutionChain对象完成的,Controller和HTTP的对应关系的配置在Bean中描述,并在IOC容器初始化的时候,通过初始化HandlerMapping来完成的,这些定义的关系会被载入到一个handlerMap中进行使用。

    (2)初始化过程中,Controller和HTTP映射关系建立完成,为Spring MVC接收HTTP请求并完成响应做准备。接收到HTTP请求时,DispatcherServlet根据具体的URL请求信息,在handlerMapping中进行查询,得到相应的HandlerExcutionChain对象,HandlerExcutionChain对象中封装了配置的Controller,对应的Controller会完成响应动作,返回需要的ModuleAndView。

    (3)得到ModuleAndView对象后,DispatcherServlet把获得的对象交给特定的视图对象,视图对象吧ModuleAndView中的数据展示出来,这个视图展示的动作是由视图对象的render方法完成的,对不同的视图对象,render方法会完成不同的视图展示的处理。

  • 相关阅读:
    Java实现 LeetCode 136 只出现一次的数字
    Java实现 LeetCode 136 只出现一次的数字
    Java实现 LeetCode 136 只出现一次的数字
    Java实现 LeetCode 135 分发糖果
    Java实现 LeetCode 135 分发糖果
    Java实现 LeetCode 135 分发糖果
    Java实现 LeetCode 134 加油站
    Java实现 LeetCode 134 加油站
    Java实现 LeetCode 134 加油站
    Java实现 LeetCode 133 克隆图
  • 原文地址:https://www.cnblogs.com/carblack/p/11024462.html
Copyright © 2011-2022 走看看