配置spring监听器 “org.springframework.web.context.contextloaderlistener” 到 web.xml 文件中。
web.xml
<!doctype web-app public "-//sun microsystems, inc.//dtd web application 2.3//en" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <display-name>struts 2 web application</display-name> <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.ng.filter.strutsprepareandexecutefilter </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <listener> <listener-class> org.springframework.web.context.contextloaderlistener </listener-class> </listener> </web-app>
注册所有的spring beans 配置在 applicationcontext.xml 文件中, spring监听器会自动找到这个 xml 文件。
applicationcontext.xml
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <bean id="userbo" class="com.h3.user.bo.impl.userboimpl" /> <bean id="userspringaction" class="com.h3.user.action.userspringaction"> <property name="userbo" ref="userbo" /> </bean> </beans>
userbo.java
package com.h3.user.bo; public interface userbo{ public void printuser(); }
userboimpl.java
package com.h3.user.bo.impl; import com.h3.user.bo.userbo; public class userboimpl implements userbo{ public void printuser(){ system.out.println("printuser() is executed..."); } }
userspringaction.java
package com.h3.user.action; import com.h3.user.bo.userbo; public class userspringaction{ //di via spring userbo userbo; public userbo getuserbo() { return userbo; } public void setuserbo(userbo userbo) { this.userbo = userbo; } public string execute() throws exception { userbo.printuser(); return "success"; } }
<?xml version="1.0" encoding="utf-8" ?> <!doctype struts public "-//apache software foundation//dtd struts configuration 2.0//en" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.devmode" value="true" /> <package name="default" namespace="/" extends="struts-default"> <action name="useraction" class="com.h3.user.action.useraction" > <result name="success">pages/user.jsp</result> </action> <action name="userspringaction" class="userspringaction" > <result name="success">pages/user.jsp</result> </action> </package> </struts>
//struts.xml <action name="userspringaction" class="userspringaction" > <result name="success">pages/user.jsp</result> </action> //applicationcontext.xml <bean id="userspringaction" class="com.h3.user.action.userspringaction"> <property name="userbo" ref="userbo" /> </bean>
要访问此操作,请使用网址: http://localhost:8080/struts2spring/userspringaction.action
默认情况下,spring监听器启用 “通过匹配bean的名字自动装配“。 因此,它会通过setuserbo自动传递spring “userbo” bean 到useraction。请参阅下面的struts2动作:
useraction.java
package com.h3.user.action; import com.h3.user.bo.userbo; import com.opensymphony.xwork2.actionsupport; public class useraction extends actionsupport{ //di via spring userbo userbo; public userbo getuserbo() { return userbo; } public void setuserbo(userbo userbo) { this.userbo = userbo; } public string execute() throws exception { userbo.printuser(); return success; } }
要访问此操作,请使用网址: http://localhost:8080/struts2spring/useraction.action
package com.h3.user.action; import org.apache.struts2.servletactioncontext; import org.springframework.web.context.webapplicationcontext; import org.springframework.web.context.support.webapplicationcontextutils; import com.h3.user.bo.userbo; import com.opensymphony.xwork2.actionsupport; public class useraction extends actionsupport{ public string execute() throws exception { webapplicationcontext context = webapplicationcontextutils.getrequiredwebapplicationcontext( servletactioncontext.getservletcontext() ); userbo userbo1 = (userbo)context.getbean("userbo"); userbo1.printuser(); return success; } }