Struts 2 + Spring統合の例

Struts 2 + Spring統合の例

ダウンロード–Struts2-Spring-Integration-Example.zip

このチュートリアルでは、Struts 2とSpringの統合を示します。

1. プロジェクト構造

このチュートリアルのプロジェクトフォルダ構造は次のとおりです。

Struts 2 Spring integration example

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

    pages/user.jsp


//applicationContext.xml

    

このアクションにアクセスするには、次のURLを使用します:http://localhost:8080/Struts2Example/userSpringAction

ケース2

デフォルトでは、Springリスナーは「autowiring by matching the bean name」を有効にします。 そのため、Springの「userBo」BeanをsetUserBo()を介してUserActionに自動的に渡します。 以下のStruts 2アクションを参照してください。

Springの自動配線機能は、name(デフォルト)、typeauto、または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;

    }
}

本当に長く退屈な記事です。実践のためにプロジェクトのソースコード全体をダウンロードしてください。