2.

struts-config.xmlの説明

編集
この記事の要点
  • struts-config.xml は Struts 1.x の中心設定ファイル
  • Action(コントローラ)・ActionForm(フォーム)・ActionForward(遷移先)を XML で定義
  • Struts 1 はレガシー — 新規開発では Spring MVC 推奨
  • 既存システムの保守用に最低限の構造を理解

 

struts-config.xml の役割

Struts 1 は MVC フレームワークで、リクエスト → Action → JSP の流れを struts-config.xml で宣言的に定義します。Struts 2 とは構成が大きく異なるので注意(こちらは struts.xml)。

Struts 1 のサポートは2013 年で終了しており、セキュリティ脆弱性も多数。新規開発では使わず、既存システムの保守用に必要な範囲で理解します。

全体構造






    
    
        
            ...
        
    

    
    
        
        
    

    
    
        
    

    
    
        
        
    

    
    
        
            
            
        
    

    
    

    
    
        
    

各要素の役割

① form-beans(フォーム Bean)

HTML フォームのデータを受け取るクラス:


    
// com.example.UserForm.java
public class UserForm extends ActionForm {
    private String name;
    private String email;

    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public String getEmail() { return email; }
    public void setEmail(String email) { this.email = email; }

    @Override
    public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
        ActionErrors errors = new ActionErrors();
        if (name == null || name.isEmpty()) {
            errors.add("name", new ActionMessage("error.name.required"));
        }
        return errors;
    }
}

② action-mappings(Action 定義)

URL → Action(コントローラ)の紐付け:

属性意味
pathリクエストパス(/login
typeAction クラスの FQDN
name使用する form-bean 名
scoperequest / session
validatetrue なら form-bean の validate() を呼ぶ
inputvalidate 失敗時の戻り先
parameterDispatchAction 等で使うメソッド名指定

    
    
// com.example.UserSaveAction.java
public class UserSaveAction extends Action {
    @Override
    public ActionForward execute(
            ActionMapping mapping,
            ActionForm form,
            HttpServletRequest request,
            HttpServletResponse response) throws Exception {

        UserForm userForm = (UserForm) form;
        try {
            userService.save(userForm.getName(), userForm.getEmail());
            return mapping.findForward("success");
        } catch (Exception e) {
            return mapping.findForward("failure");
        }
    }
}

③ forward(遷移先)

名前と JSP パスの対応:



    




    
    

④ message-resources(メッセージ)




error.name.required=名前は必須です
welcome.message=ようこそ、{0} さん

典型的なリクエストの流れ

  1. ユーザが /login.do にアクセス
  2. ActionServlet がリクエストを受信
  3. struts-config.xml の action-mappings から /login を検索
  4. form-bean loginForm を生成してパラメータをバインド
  5. validate=true なら form の validate() メソッド呼び出し
  6. エラーあり → input 属性の JSP に戻る
  7. エラーなし → Action クラスの execute() 実行
  8. execute() が ActionForward を返す(例: success)
  9. 該当する forward の path(JSP)に遷移

Struts 1 vs Spring MVC(モダン)

項目Struts 1Spring MVC
設定XML 中心アノテーション中心
コントローラAction クラス@Controller / @RestController
フォームバインドActionForm 継承POJO + @ModelAttribute
バリデーションvalidate() メソッドBean Validation (@Valid)
テスト困難容易(POJO ベース)
DI限定的強力
サポート2013 終了アクティブ

レガシー保守の注意点

  • セキュリティパッチ: Struts 1 は提供されない。脆弱性報告(CVE)を確認
  • Java バージョン: Struts 1 は古い Java 向けで、Java 17+ では動作しない場合あり
  • 移行計画: Spring MVC / Spring Boot へのリプレースを段階的に
  • テスト不足: 単体テストが書きづらい設計、リファクタリング前にテスト追加

関連記事

編集
Post Share
子ページ
  1. ActionMapping
同階層のページ
  1. 導入方法
  2. struts-config.xmlの説明
  3. ActionForm
  4. Action
  5. エラー一覧
  6. JSP タグ
  7. カスタムタグ(tablib)