Struts2+Spring集成实例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Struts2+Spring集成实例
1. ⼯程结构
下⾯的图是本教程的项⽬⽂件夹结构。
2. Spring监听器
配置Spring监听器 “org.springframework.web.context.ContextLoaderListener” 到 web.xml ⽂件中。
web.xml
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"/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监听器会⾃动找到这个 XML ⽂件。
applicationContext.xml
<beans xmlns="/schema/beans"
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="/schema/beans
/schema/beans/spring-beans-2.5.xsd">
<bean id="userBo" class="erBoImpl" />
<bean id="userSpringAction" class="erSpringAction">
<property name="userBo" ref="userBo" />
</bean>
</beans>
UserBo.java
package er.bo;
public interface UserBo{
public void printUser();
}
UserBoImpl.java
package er.bo.impl;
import erBo;
public class UserBoImpl implements UserBo{
public void printUser(){
System.out.println("printUser() is executed...");
}
}
UserSpringAction.java
package er.action;
import erBo;
public class UserSpringAction{
//DI via Spring
UserBo userBo;
public UserBo getUserBo() {
return userBo;
}
public void setUserBo(UserBo userBo) {
erBo = userBo;
}
public String execute() throws Exception {
userBo.printUser();
return "success";
}
}
4. Struts.xml
在此声明的所有关系。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<package name="default" namespace="/" extends="struts-default">
<action name="userAction"
class="erAction" >
<result name="success">pages/user.jsp</result>
</action>
<action name="userSpringAction"
class="userSpringAction" >
<result name="success">pages/user.jsp</result>
</action>
</package>
</struts>
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
<action name="userSpringAction"
class="userSpringAction" >
<result name="success">pages/user.jsp</result>
</action>
//applicationContext.xml
<bean id="userSpringAction" class="erSpringAction">
<property name="userBo" ref="userBo" />
</bean>
⽤例 2
默认情况下,Spring监听器启⽤ “通过匹配bean的名字⾃动装配“。
因此,它会通过setUserBo⾃动传递Spring “userBo” Bean 到UserAction。
请参阅下⾯的Struts2动作:
Spring的⾃动装配功能可以修改为 name(默认), type, auto 或 constructor, 可能需要参考。
UserAction.java
package er.action;
import erBo;
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) {
erBo = userBo;
}
public String execute() throws Exception {
userBo.printUser();
return SUCCESS;
}
}
WebApplicationContextUtils
另外,也可以使⽤Spring 通⽤ WebApplicationContextUtils 类来直接获得Spring的bean。
package er.action;
import org.apache.struts2.ServletActionContext;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import erBo;
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;
}
}。