Struts 2 + Spring統合の例
それをダウンロードする –
Struts2-Spring-Integration-Example.zip
このチュートリアルでは、Struts 2とSpringの統合について説明します。
1.プロジェクトの構成
ここでは、このチュートリアルのプロジェクトフォルダ構造を示します。

2. Struts 2 Spring Plugin
Struts 2とSpringを統合するには、プロジェクトクラスパスに ”
struts2-spring-plugin-xxx.jar
“ライブラリを含めてください。
<!-- 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.春のリスナー
-
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の登録
すべてのSpringのBeanを
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.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クラスとして動作させ、
春の豆。
-
ケース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>
<bean id=”userSpringAction” class=”com.mkyong.user.action.UserSpringAction”>
<property name=”userBo” ref=”userBo”/>
</bean>
この操作にアクセスするには、次のURLを使用します。 __http://localhost:8080/Struts2Example/userSpringAction__ === ケース2 デフォルトでは、Springリスナーは "** Beanの名前を一致させてオートワイヤリングする" ** を有効にします。つまり、自動的に** setUserBo()** を介してSpringの "** userBo ** " BeanをUserActionに渡します。以下を参照してください。Struts 2 Action: Springのautowiring機能は、** name ** (デフォルト)、** type ** 、** auto ** または** constructor ** に変更することができます。このhttp://struts.apache.org/2.x/docs/spring- plugin.html[Struts 2 Spring Pluginのドキュメント]を参照してください。 ** 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;
} }
本当に長くて退屈な記事ですが、練習用の完全なプロジェクトソースコードをダウンロードしてください。 === リファレンス . http://struts.apache.org/2.x/docs/spring-plugin.html[Struts 2 Spring プラグインのドキュメント]。リンク://struts/struts-spring-integration-example/[Struts Spring 統合例] link://tag/integration/[integration]link://タグ/spring/[spring]link://tag/struts2/[struts2]