Struts1 Spring DWR的整合
最近在写三大框架整合 其实主要就是一些配置文件问题,三大框架整合其实也就是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 processorencoding="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>