Struts2+Spring集成實例
在本教程中,我們來學習Struts2和Spring的集成。
1. 工程結構
下面的圖是本教程的項目文件夾結構。
2. Spring監聽器
配置Spring監聽器 「org.springframework.web.context.ContextLoaderListener」 到 web.xml 文件中。
web.xml
3. 註冊Spring Bean
註冊所有的Spring Beans 配置在 applicationContext.xml 文件中, Spring監聽器會自動找到這個 XML 文件。
applicationContext.xml
<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>
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
在此聲明的所有關係。
<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>
5. 示例
現在,所有的Struts2和Spring的集成工作已經完成,現在看到下面的用例來訪問 Spring 的 「userBo」 Bean。
- 用例 1 : 讓 Spring 充當 Struts2的Action類,並訪問Spring的Bean。
- 用例 2 : 在Struts2的Action類中訪問Spring的Bean。
用例1
在這個例子中,userSpringAction充當Struts2的Action類,也可以使用普通Spring的方式注入Spring的userBo。
//struts.xml
//applicationContext.xml
要訪問此操作,請使用網址: http://localhost:8080/struts2spring/userSpringAction.action
用例 2
默認情況下,Spring監聽器啓用 「通過匹配bean的名字自動裝配「。 因此,它會通過setUserBo自動傳遞Spring 「userBo」 Bean 到UserAction。請參閱下面的Struts2動作:
Spring的自動裝配功能可以修改爲 name(默認), 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;
}
}
要訪問此操作,請使用網址: http://localhost:8080/struts2spring/userAction.action
WebApplicationContextUtils
另外,也可以使用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;
}
}
這是一個又長又臭的文章(包教不包會),請下載完整的項目並按照源代碼去一步步實現。
參考
- Struts2 Spring 插件文檔
- Struts + Spring 集成實例