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]