在本教程中,它显示了Struts 2和Spring之间的集成。
1.项目结构
这是本教程的项目文件夹结构。
2. Struts 2 +弹簧插件
要集成Struts 2和Spring,请获取“ struts2-spring-plugin-xxx.jar ”库并将其包括在您的项目类路径中。
pom.xml
<!-- Struts 2 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.1.8</version>
</dependency>
<!-- Spring framework -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
<version>2.5.6</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>2.5.6</version>
</dependency>
<!-- Struts 2 + Spring plugins -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>2.1.8</version>
</dependency>
3. Spring Listener
在web.xml文件中配置Spring侦听器“ org.springframework.web.context.ContextLoaderListener ”。
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
在applicationContext.xml文件中注册所有Spring Bean,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.mkyong.user.bo.impl.UserBoImpl" />
<bean id="userSpringAction" class="com.mkyong.user.action.UserSpringAction">
<property name="userBo" ref="userBo" />
</bean>
</beans>
UserBo.java
package com.mkyong.user.bo;
public interface UserBo{
public void printUser();
}
UserBoImpl.java
package com.mkyong.user.bo.impl;
import com.mkyong.user.bo.UserBo;
public class UserBoImpl implements UserBo{
public void printUser(){
System.out.println("printUser() is executed...");
}
}
UserSpringAction.java
package com.mkyong.user.action;
import com.mkyong.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";
}
}
5. Struts.xml
在这里声明所有关系。
<?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.mkyong.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>
6.演示
现在,所有Struts 2和Spring的集成工作都已完成,现在请参阅以下用例访问Spring的“ userBo ” bean。
- 案例1:让Spring充当Struts 2 Action类,并访问Spring的bean。
- 情况2:在Struts 2 Action类中访问Spring的bean。
情况1
在此示例中, userSpringAction充当Struts 2 Action类,您可以使用常规Spring的方式对Spring的userBo bean进行DI。
//struts.xml
<action name="userSpringAction"
class="userSpringAction" >
<result name="success">pages/user.jsp</result>
</action>
//applicationContext.xml
<bean id="userSpringAction" class="com.mkyong.user.action.UserSpringAction">
<property name="userBo" ref="userBo" />
</bean>
要访问此操作,请使用URL: http:// localhost:8080 / Struts2Example / userSpringAction
情况二
默认情况下,Spring侦听器启用“ 通过匹配bean名称进行自动装配 ”。 因此,它将通过setUserBo()自动将Spring的“ userBo ” bean传递到UserAction中。 参见下面的Struts 2 Action:
Spring的自动装配功能可以更改为名称 (默认), 类型 , 自动或构造函数 ,您可能需要查阅此Struts 2 Spring插件文档 。
UserAction.java
package com.mkyong.user.action;
import com.mkyong.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;
}
}
要访问此操作,请使用URL: http:// localhost:8080 / Struts2Example / userAction
WebApplicationContextUtils
另外,您可以使用Spring的通用WebApplicationContextUtils类直接获取Spring的bean。package com.mkyong.user.action; import org.apache.struts2.ServletActionContext; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; import com.mkyong.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; } }
一篇冗长而乏味的文章,请确保下载完整的项目源代码以进行练习。
参考
翻译自: https://mkyong.com/struts2/struts-2-spring-integration-example/