最近在写三大框架整合 其实主要就是一些配置文件问题,三大框架整合其实也就是Struts和Spring的整合 ,因为Hibernate和Spring的整合 eclipse已经帮我们做得很好了!而Struts和Spring的整合,主要是因为Spring的注入式管理bean方式,所以也要求在Struts和DWR中用到的bean也交给Spring来管理。所以这里就要求Spring的配置文件的解析时机(我的个人理解)。
[color=red]时机一:[/color]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">
[color=red]
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext.xml</param-value>
</context-param>
[/color]
[color=brown]<!-- 通过listener加载
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>-->
[/color]
<!--或者通过servlet加载-->
[color=brown]
<servlet>
<servlet-name>context</servlet-name>
<servlet-class>
org.springframework.web.context.ContextLoaderServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
[/color]
<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>
[color=red] 时机2:容器读取strut-config.xml[/color]
使用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=[color=blue]"/login"[/color] 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="[color=blue]/login[/color]" 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[color=orange] creator="spring"[/color] javascript="testDWR">
<param [color=orange]name="beanName"[/color] value="[color=red]testDWR[/color]">
</param>
<include method="test"/>
</create>
</allow>
</dwr>
spring中配置:
<bean id="[color=red]testDWR[/color]" class="com.time.util.TestDWR"></bean>
[color=red]时机一:[/color]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">
[color=red]
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext.xml</param-value>
</context-param>
[/color]
[color=brown]<!-- 通过listener加载
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>-->
[/color]
<!--或者通过servlet加载-->
[color=brown]
<servlet>
<servlet-name>context</servlet-name>
<servlet-class>
org.springframework.web.context.ContextLoaderServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
[/color]
<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>
[color=red] 时机2:容器读取strut-config.xml[/color]
使用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=[color=blue]"/login"[/color] 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="[color=blue]/login[/color]" 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[color=orange] creator="spring"[/color] javascript="testDWR">
<param [color=orange]name="beanName"[/color] value="[color=red]testDWR[/color]">
</param>
<include method="test"/>
</create>
</allow>
</dwr>
spring中配置:
<bean id="[color=red]testDWR[/color]" class="com.time.util.TestDWR"></bean>