Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1339017
  • 博文数量: 205
  • 博客积分: 6732
  • 博客等级: 准将
  • 技术积分: 2835
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-04 17:59
文章分类

全部博文(205)

文章存档

2016年(1)

2015年(10)

2014年(1)

2013年(39)

2012年(23)

2011年(27)

2010年(21)

2009年(55)

2008年(28)

我的朋友

分类: Java

2009-01-04 11:51:51

spring整合struts时创建ApplicationContext的方法
 首先简单了解下ApplicationContext这个类,ApplicationContext是Spring的容器,负责管理所有的组件,从业务逻辑层组件到持久层组件,都必须运行在Spring容器中。因此,必须在Web应用启动时,创建Spring的ApplicationContext实例。为了让Spring容器能自动加载,通常有以下一些做法:
 
一、采用ContextLoaderListener来创建ApplicationContext。
Spring提供ServletContextListener的一个实现类ContextLoaderListener,该类可以作为listener使用,它会在创建时自动查找/WEB-INF/下的applicationContext.xml文件。因此,如果只有一个配置文件,并且文件名为applicationContext.xml,则只需要在web.xml文件中增加如下代码即可:
 
        
                  
                            org.springframework.web.context.ContextLoaderListener
                  

        

 
        
         如果有多个配置文件需要加载,则使用元素来确定配置文件的文件名。由于ContextLoaderListener加载时,会查找名为contextConfigLocation的参数。因此,配置时的参数名字应该为contextConfigLocation。如果加载多个配置文件,则在web.xml文件增加如下代码即可:
 

                  
                   contextConfigLocation
                 
                  /WEB-INF/applicationContext.xml,/WEB-INF/service.xml
        


                  
                            org.springframework.web.context.ContextLoaderListener
                  

        

 
二、采用load-on-startup Servlet来创建ApplicationContext。
         Spring提供了一个特殊的Servlet类:ContextLoaderServlet。该Servlet在启动时,会自动查找/WEB-INF/下的applicationContext.xml文件。为了让ContextLoaderServlet随应用启动而启动,应将此Servlet配置成load-on-startup的Servlet。Load-on-startup的值小一点比较合适,因为要保证ApplicationContext优先创建。如果只有一个配置文件,并且文件名为applicationContext.xml,则在web.xml文件中增加如下代码即可:
 

                   context
                  
                            org.springframework.web.context.ContextLoaderServlet
                  

                   1
        

 
         该Servlet用于提供“后台”服务,作为容器管理应用中的其他bean,不需要响应客户请求,因此无须配置servlet-mapping。
         如果有多个配置文件需要加载,则使用元素来确定配置文件的文件名。由于ContextLoaderListener加载时,会查找名为contextConfigLocation的参数。因此,配置时的参数名字应该为contextConfigLocation。如果加载多个配置文件,则在web.xml文件增加如下代码即可:
 

                  
                   contextConfigLocation
                
                 /WEB-INF/applicationContext.xml,/WEB-INF/service.xml
        

        
                   context
                  
                            org.springframework.web.context.ContextLoaderServlet
                  

                   1
        

 
三、采用ContextLoaderPlugIn来创建ApplicationContext。
         Spring提供了ContextLoaderPlugIn类,用于在启动时加载配置文件。ContextLoaderPlugIn默认加载的配置文件为servletName-servlet.xml,其中servletName是Struts的ActionServlet对应的Servlet名。例如web.xml中进行如下定义:
 
        
                   action
                  
                            org.apache.struts.action.ActionServlet
                  


 
         ContextLoaderPlugIn默认加载/WEB-INF/action-servlet.xml,将该文件作为Spring的配置文件。因此,如果Spring的配置文件只有一个,并且文件名为action-sevlet.xml,则只需在struts-config.xml配置文件中增加如下代码:
        

 
如果有多个配置文件,则使用元素来加载多个配置文件,如果加载多个配置文件,则在struts-config.xml文件增加如下代码即可:
 
                            className="org.springframework.web.struts.ContextLoaderPlugIn">
                           
               value="/WEB-INF/action-servlet.xml,
/WEB-INF/applicationContext.xml" />
        

 

struts的集成的话就要配制
eg:
   
    
   

 

 
  
   
  

 

struts请求的转发代理控制类。如果你在 Struts 应用中使用了 Tiles,你需要配置 为 DelegatingTilesRequestProcessor。

如果用的是第三种方法其它两种方法我测试的不能用ActionSupport.
如果TestSupportAction是继承org.springframework.web.struts.ActionSupport的话
就要在web.xml中配制
 
      org.springframework.web.context.ContextLoaderListener
 

如果你有一个自定义的 RequestProcessor 并且不能够使用 DelegatingRequestProcessor 或者 DelegatingTilesRequestProcessor,你可以使用 DelegatingActionProxy 作为你 action-mapping 中的类型。
即你不能用

这个代理的话可以用org.springframework.web.struts.DelegatingActionProxy来代理struts的请求.
   
    
   

阅读(1475) | 评论(1) | 转发(1) |
给主人留下些什么吧!~~

chinaunix网友2009-04-28 11:04:08

谢啦