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 文件中增加如下代码即可:
 
         <listener>
                   <listener-class>
                            org.springframework.web.context.ContextLoaderListener
                   </listener-class>
         </listener>
 
        
         如果有多个配置文件需要加载,则使用 <context-param> 元素来确定配置文件的文件名。由于 ContextLoaderListener 加载时,会查找名为 contextConfigLocation 的参数。因此,配置 <context-param> 时的参数名字应该为 contextConfigLocation 。如果加载多个配置文件,则在 web.xml 文件增加如下代码即可:
 
<context-param>
                   <!— 配置多个文件时需要的参数 -->
                   <param-name>contextConfigLocation</param-name>
         <!— 需要加载的配置文件,可以有多个,用逗号或空格或分号隔开 -->        
                  <param-value>/WEB-INF/applicationContext.xml,/WEB-INF/service.xml</param-value>
         </context-param>
<listener>
                   <listener-class>
                            org.springframework.web.context.ContextLoaderListener
                   </listener-class>
         </listener>
 
二、 采用 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 文件中增加如下代码即可:
 
<servlet>
                   <servlet-name>context</servlet-name>
                   <servlet-class>
                            org.springframework.web.context.ContextLoaderServlet
                   </servlet-class>
                   <load-on-startup>1</load-on-startup>
         </servlet>
 
         Servlet 用于提供 后台 服务,作为容器管理应用中的其他 bean ,不需要响应客户请求,因此无须配置 servlet-mapping
         如果有多个配置文件需要加载,则使用 <context-param> 元素来确定配置文件的文件名。由于 ContextLoaderListener 加载时,会查找名为 contextConfigLocation 的参数。因此,配置 <context-param> 时的参数名字应该为 contextConfigLocation 。如果加载多个配置文件,则在 web.xml 文件增加如下代码即可:
 
<context-param>
                   <!— 配置多个文件时需要的参数 -->
                   <param-name>contextConfigLocation</param-name>
         <!— 需要加载的配置文件,可以有多个,用逗号或空格或分号隔开 -->        
                 <param-value>/WEB-INF/applicationContext.xml,/WEB-INF/service.xml</param-value>
         </context-param>
         <servlet>
                   <servlet-name>context</servlet-name>
                   <servlet-class>
                            org.springframework.web.context.ContextLoaderServlet
                   </servlet-class>
                   <load-on-startup>1</load-on-startup>
         </servlet>
 
三、 采用 ContextLoaderPlugIn 来创建 ApplicationContext
         Spring 提供了 ContextLoaderPlugIn 类,用于在启动时加载配置文件。 ContextLoaderPlugIn 默认加载的配置文件为 servletName-servlet.xml ,其中 servletName Struts ActionServlet 对应的 Servlet 名。例如 web.xml 中进行如下定义:
 
         <servlet>
                   <servlet-name>action</servlet-name>
                   <servlet-class>
                            org.apache.struts.action.ActionServlet
                   </servlet-class>
</servlet>
 
         ContextLoaderPlugIn 默认加载 /WEB-INF/action-servlet.xml, 将该文件作为 Spring 的配置文件。因此,如果 Spring 的配置文件只有一个,并且文件名为 action-sevlet.xml ,则只需在 struts-config.xml 配置文件中增加如下代码:
        
<plug-in className="org.springframework.
web.struts.ContextLoaderPlugIn"/>
 
如果有多个配置文件,则使用 <set-property property="" value=""/> 元素来加载多个配置文件, 如果加载多个配置文件,则在 struts-config.xml 文件增加如下代码即可:
 
         <plug-in
                   className="org.springframework.web.struts.ContextLoaderPlugIn">
                   <set-property property="contextConfigLocation"
         <!— 需要加载的配置文件,可以有多个,用逗号或空格或分号隔开 -->
               value="/WEB-INF/action-servlet.xml,
/WEB-INF/applicationContext.xml" />
         </plug-in>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值