`
timesongjie
  • 浏览: 16113 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

Struts1 Spring DWR的整合

    博客分类:
  • ssh
阅读更多
最近在写三大框架整合 其实主要就是一些配置文件问题,三大框架整合其实也就是Struts和Spring的整合 ,因为Hibernate和Spring的整合 eclipse已经帮我们做得很好了!而Struts和Spring的整合,主要是因为Spring的注入式管理bean方式,所以也要求在Struts和DWR中用到的bean也交给Spring来管理。所以这里就要求Spring的配置文件的解析时机(我的个人理解)。
时机一:web容器读取web.xml时候 ,通过web.xml配置加载spring上下文环境。
  修改web.xml配置:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="2.5"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
      
       <context-param>
       <param-name>contextConfigLocation</param-name>
       <param-value>/WEB-INF/classes/applicationContext.xml</param-value>
       </context-param>
      

       <!-- 通过listener加载      
         <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
        </listener>-->
       


       <!--或者通过servlet加载-->
      
             <servlet>    
             <servlet-name>context</servlet-name>
               <servlet-class>
                 org.springframework.web.context.ContextLoaderServlet
               </servlet-class>
             <load-on-startup>1</load-on-startup>
             </servlet>
      

     <servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>3</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>3</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
    <servlet>
</web-app>
   时机2:容器读取strut-config.xml
   使用Struts插件在struts-config.xml中
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml"/>
</plug-in>
这时需要对<action path="/login" type=""/>配置中属性type做更改:
   这里又有两种方法:
    a 使用 org.springframework.web.struts.DelegatingActionProxy :
       将所有的action type属性改为这个,这样做的好处是可以不用任何spring特定的类编写Struts Action,也有不足之处就是不太直观,所有的路径都映射到了一个类。这样也就有了第二种方法:
    b 请求委托
      <controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor"/>实际上这里内部是让spring去代理我们的action(由于jdk代理只能代理接口类,所以这里应该是cglib代理)。

与此同时,我们还需要对applicationContext.xml做相应修改 配置各种需要的bean。
由于spring的dtd 规定id中不能出现"/",所以我们使用name定义path,这里path要求与struts-config.xml中path一致。
   :<bean name="/login" class="com.time.struts.action.LoginAction">


在此过程中 发现 使用第一时机配置使用DWR可以正常使用 而使用第二时机不行。
DWR配置  dwr.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://www.getahead.ltd.uk/dwr/dwr20.dtd">
<dwr>
  <allow>
    <create creator="spring" javascript="testDWR">
      <param name="beanName" value="testDWR">
      </param>
      <include method="test"/>
    </create>
  </allow>
</dwr>
spring中配置:
<bean id="testDWR" class="com.time.util.TestDWR"></bean>
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics