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>



struts的集成的话就要配制
eg:
  <action path="/demo">
    <forward name="t" path="/index.jsp"></forward>
  </action>

<controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor"/>

<bean name="/demo" class="com.yysoft.actions.TestSupportAction">
  <property name="deptdao">
  <ref bean="DeptDAO" />
  </property>
</bean>
struts请求的转发代理控制类。如果你在 Struts 应用中使用了 Tiles,你需要配置 <controller> 为 DelegatingTilesRequestProcessor。

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

如果你有一个自定义的 RequestProcessor 并且不能够使用 DelegatingRequestProcessor 或者 DelegatingTilesRequestProcessor,你可以使用 DelegatingActionProxy 作为你 action-mapping 中的类型。
即你不能用
<controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor"/>

这个代理的话可以用org.springframework.web.struts.DelegatingActionProxy来代理struts的请求.
  <action path="/demo" type="org.springframework.web.struts.DelegatingActionProxy">
    <forward name="t" path="/index.jsp"></forward>
  </action>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值