本文轉(zhuǎn)自http://www.yiibai.com/struts_2/struts-2-spring-integration-example.html
1. 工程結(jié)構(gòu)
下面的圖是本教程的項(xiàng)目文件夾結(jié)構(gòu)。
![]()
![]()

2. Spring監(jiān)聽器
配置Spring監(jiān)聽器 “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>
3. 注冊Spring Bean
注冊所有的Spring Beans 配置在 applicationContext.xml 文件中, Spring監(jiān)聽器會自動找到這個(gè) 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.yiibai.user.bo.impl.UserBoImpl" /> <bean id="userSpringAction" class="com.yiibai.user.action.UserSpringAction"> <property name="userBo" ref="userBo" /> </bean> </beans>
UserBo.java
package com.yiibai.user.bo;
public interface UserBo{
public void printUser();
}
UserBoImpl.java
package com.yiibai.user.bo.impl;
import com.yiibai.user.bo.UserBo;
public class UserBoImpl implements UserBo{
public void printUser(){
System.out.println("printUser() is executed...");
}
}
UserSpringAction.java
package com.yiibai.user.action;
import com.yiibai.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";
}
}
4. Struts.xml
在此聲明的所有關(guān)系。
<?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.yiibai.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>
5. 示例
現(xiàn)在,所有的Struts2和Spring的集成工作已經(jīng)完成,現(xiàn)在看到下面的用例來訪問 Spring 的 “userBo” Bean。
- 用例 1 : 讓 Spring 充當(dāng) Struts2的Action類,并訪問Spring的Bean。
- 用例 2 : 在Struts2的Action類中訪問Spring的Bean。
用例1
在這個(gè)例子中,userSpringAction充當(dāng)Struts2的Action類,也可以使用普通Spring的方式注入Spring的userBo。
//struts.xml <action name="userSpringAction" class="userSpringAction" > <result name="success">pages/user.jsp</result> </action> //applicationContext.xml <bean id="userSpringAction" class="com.yiibai.user.action.UserSpringAction"> <property name="userBo" ref="userBo" /> </bean>
要訪問此操作,請使用網(wǎng)址: http://localhost:8080/struts2spring/userSpringAction.action
用例 2
默認(rèn)情況下,Spring監(jiān)聽器啟用 “通過匹配bean的名字自動裝配“。 因此,它會通過setUserBo自動傳遞Spring “userBo” Bean 到UserAction。請參閱下面的Struts2動作:
Spring的自動裝配功能可以修改為 name(默認(rèn)), type, auto 或 constructor, 可能需要參考 Struts2的Spring插件文檔。
UserAction.java
package com.yiibai.user.action;
import com.yiibai.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;
}
}
要訪問此操作,請使用網(wǎng)址: http://localhost:8080/struts2spring/userAction.action

WebApplicationContextUtils
另外,也可以使用Spring 通用 WebApplicationContextUtils 類來直接獲得Spring的bean。
另外,也可以使用Spring 通用 WebApplicationContextUtils 類來直接獲得Spring的bean。
package com.yiibai.user.action;
import org.apache.struts2.ServletActionContext;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import com.yiibai.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;
}
}
浙公網(wǎng)安備 33010602011771號