Spring学习(十一)--Spring MVC

时间:2019-06-18
本文章向大家介绍Spring学习(十一)--Spring MVC,主要包括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方法会完成不同的视图展示的处理。

原文地址:https://www.cnblogs.com/carblack/p/11024462.html