Struts 2 + Spring統合の例
このチュートリアルでは、Struts 2とSpringの統合を示します。
1. プロジェクト構造
このチュートリアルのプロジェクトフォルダ構造は次のとおりです。

2. Struts 2 + Springプラグイン
Struts 2とSpringを統合するには、「struts2-spring-plugin-xxx.jar」ライブラリを取得してプロジェクトのクラスパスに含めます。
pom.xml
org.apache.struts
struts2-core
2.1.8
org.springframework
spring
2.5.6
org.springframework
spring-web
2.5.6
org.apache.struts
struts2-spring-plugin
2.1.8
3. 春のリスナー
web.xmlファイルでSpringリスナー「org.springframework.web.context.ContextLoaderListener」を構成します。
web.xml
Struts 2 Web Application struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter struts2 /* org.springframework.web.context.ContextLoaderListener
3. Spring Beanを登録する
すべてのSpringのBeanをapplicationContext.xmlファイルに登録すると、Springリスナーはこのxmlファイルを自動的に検索します。
applicationContext.xml
UserBo.java
package com.example.user.bo;
public interface UserBo{
public void printUser();
}
UserBoImpl.java
package com.example.user.bo.impl;
import com.example.user.bo.UserBo;
public class UserBoImpl implements UserBo{
public void printUser(){
System.out.println("printUser() is executed...");
}
}
UserSpringAction.java
package com.example.user.action;
import com.example.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
ここですべての関係を宣言しました。
pages/user.jsp pages/user.jsp
6. Demo
これで、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のuserBoBeanを通常のSpringの方法でDIできます。
//struts.xml//applicationContext.xml pages/user.jsp
このアクションにアクセスするには、次のURLを使用します:http://localhost:8080/Struts2Example/userSpringAction
ケース2
デフォルトでは、Springリスナーは「autowiring by matching the bean name」を有効にします。 そのため、Springの「userBo」BeanをsetUserBo()を介してUserActionに自動的に渡します。 以下のStruts 2アクションを参照してください。
Springの自動配線機能は、name(デフォルト)、type、auto、またはconstructorに変更できます。このStruts 2 Spring plugin documentationを参照する必要がある場合があります。
UserAction.java
package com.example.user.action;
import com.example.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.example.user.action;
import org.apache.struts2.ServletActionContext;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import com.example.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;
}
}
本当に長く退屈な記事です。実践のためにプロジェクトのソースコード全体をダウンロードしてください。