Spring的IoC集成--MVC模式



 
 
  1. <init-param>  
  2.     <param-name>contextConfigLocation</param-name>  
  3.     <param-value>/WEB-INF/applicationContext.xml,  
  4.     /WEB-INF/part2.xml</param-value>  
  5. </init-param> 

在基于Struts+Spring的联合应用中,接收请求的Servlet是由Struts的ActionServlet来配置的,因此此时就不能够使用DispatcherServlet来接收请求了。为了在此时能够加载Spring的Bean配置,可以在web.xml中配置一个监听器,并通过<context-param>指定XML文件名,如下所示:

 
 
  1. <context-param>  
  2.     <param-name>contextConfigLocation</param-name>  
  3.     <param-value>/WEB-INF/applicationContext.xml</param-value>  
  4. </context-param>  
  5. <listener>  
  6.     <listener-class>  
  7.         org.springframework.web.context.ContextLoaderListener  
  8.     </listener-class>  
  9. </listener> 

这样在Struts Action中可以按照下面的方式访问:

 
 
  1. WebApplicationContext wac=WebApplicationContextUtils.
  2. getWebApplicationContext(servletContext);  
  3. UserDao udao=(UserDao)was.getBean("userdao"); 
=============================================================================================

Spring的IoC集成模式

Spring是一个完备的IoC容器框架,它提供了与其他J2EE技术进行集成的大量功能。在Java Web领域中所出现的技术,按照层次分类可以分为数据层、视图层、控制层三大类,Spring提供了与这些技术进行集成的接口,以及与其他很多J2EE技术的集成。

按照层次进行分类,Spring共提供了对如下技术的集成。

集成ORM工具:Hiberate、JDO、TopLink、Apache OJB、iBATIS、JPA。

集成视图技术:JSP、JSTL、Tiles、Velocity、FreeMarker、XSLT、PDF/Excel文档视图、JasperReports报表视图。

集成Web框架:JSF、Struts、Tapestry、WebWork。

整合其他J2EE技术:WebServices、EJB、JMS、JMX、JCA、邮件抽象层、定时调度和线程池、Java注解。

由于Spring是一个IoC的容器框架,因此与这些技术的集成也都十分简单,只需要在被集成的技术之上提供一个过滤组件,再交由IoC容器进行管理即可,这也是Spring开发者的初衷,如图34-1所示。

 

通过对J2EE体系中各种技术与框架的对比可以发现,没有什么框架或技术能够像Spring这样强大,Spring可以与几乎任何一种技术框架进行集成,这一切都得益于Spring的IoC容器。Spring就好比一块主板,只需提供某一种框架的接口,就可以即插即用。

==================================================================================================

Spring的MVC技术框架

Spring的即插即用性让它在Java Web的应用中如鱼得水,然而Spring的功用却远不如此。Spring的开发者们赋予了它王者的霸气,就是Spring不仅要作为一个IoC的容器,还要作为Web应用的MVC框架,控制Web应用的整个流程。因此,Spring不仅能够控制底层的组件组装,还可以控制上层的流转过程。

Spring是一种基于MVC经典设计模式的开放源代码的应用框架,也是目前Web开发中比较成熟的一种框架。它通过把Servlet、JSP、JavaBean、自定义标签和信息资源整合到一个统一的框架中,为Web开发提供具有高可配置性的MVC开发模式。

Spring体系结构实现了MVC设计模式的概念,它将Model、View和Controller分别映射到Web应用中的组件。Controller负责控制流程,由DispatcherServlet负责读取applicationContext.xml,并使用HandlerMapping来查找对应的Controller组件;Model由系统状态Bean Form和商业逻辑的JavaBean来构建;View是由JSP和Spring提供的自定义标签来实现,如图34-2所示。

Spring MVC的核心组件是DispatcherServlet,该类既作为整个MVC框架的前端控制器,同时又负责调动框架中其他组件协同工作完成对一个请求的处理,处理一个请求的大致流程如下。

(1)配置文件applicationContext.xml:当DispatcherServlet接收HTTP请求信息时,如何决定把用户请求转发给哪个Controller对象呢?这就需要一些描述用户请求路径和Controller映射关系的配置信息。在Spring中,这些配置映射信息都存储在特定的XML文件applicationContext.xml中,这些配置信息在系统启动时会被读入内存,供Spring在运行期间使用。

(2)请求首先由DispatcherServlet截获,DispatcherServlet把请求交给HandlerMapping,寻找相应的逻辑处理单元。

(3)HandlerMapping根据请求的不同,返回对应的Controller处理器,并通过HandlerAdapter来执行Controller的方法。使用HandlerAdapter的目的是因为Spring MVC并不关心Controller实现了什么样的接口,只要提供相应的HandlerAdapter,Spring MVC就知道该如何执行Controller。

(4)处理结束后返回一个包含了模型和视图的对象ModelAndView。DispatcherServlet把返回的ModelAndView对象交给ViewResolver,通过ViewResolver返回一个合适的View对象。最后DispatcherServlet调用View对象的render方法把模型中的数据和视图融合,返回给用户。


 

  
  
  1. <init-param>  
  2.     <param-name>contextConfigLocation</param-name>  
  3.     <param-value>/WEB-INF/applicationContext.xml,  
  4.     /WEB-INF/part2.xml</param-value>  
  5. </init-param> 

在基于Struts+Spring的联合应用中,接收请求的Servlet是由Struts的ActionServlet来配置的,因此此时就不能够使用DispatcherServlet来接收请求了。为了在此时能够加载Spring的Bean配置,可以在web.xml中配置一个监听器,并通过<context-param>指定XML文件名,如下所示:

  
  
  1. <context-param>  
  2.     <param-name>contextConfigLocation</param-name>  
  3.     <param-value>/WEB-INF/applicationContext.xml</param-value>  
  4. </context-param>  
  5. <listener>  
  6.     <listener-class>  
  7.         org.springframework.web.context.ContextLoaderListener  
  8.     </listener-class>  
  9. </listener> 

这样在Struts Action中可以按照下面的方式访问:

  
  
  1. WebApplicationContext wac=WebApplicationContextUtils.
  2. getWebApplicationContext(servletContext);  
  3. UserDao udao=(UserDao)was.getBean("userdao"); 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值