配置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;
}
}

