ActionとActionForward

Struts 1で処理を実行するActionと、次の遷移先を表すActionForwardの役割。

作成日: 2026-07-28 / 更新日: 2026-07-28

キーワード: execute / ActionMapping / findForward / forward / redirect / thread safe

概要

Struts 1のActionは、特定のリクエストに対する処理を受け持ちます。入力値を受け取り、業務処理を呼び出し、表示用の値を用意して、ActionForwardを返します。

execute()

public ActionForward execute(
    ActionMapping mapping,
    ActionForm form,
    HttpServletRequest request,
    HttpServletResponse response) throws Exception {
    // 処理
}
引数主な用途
mapping現在のAction設定やforwardを参照する
formActionFormから入力値を受け取る
requestリクエスト属性、パラメータ、セッションを扱う
responseレスポンスを直接操作する場合に使う

典型的な処理

UserSearchForm searchForm = (UserSearchForm) form;
User user = userService.find(searchForm.getUserId());
request.setAttribute("user", user);
return mapping.findForward("success");

Actionは業務処理をServiceへ委譲し、その結果から表示データと遷移先を決める形が読みやすくなります。

ActionForward

return mapping.findForward("success");
<forward name="success" path="/WEB-INF/jsp/user/result.jsp"/>

論理名を介することで、処理と物理的な画面パスを分けています。

forwardとredirect

観点forwardredirect
処理サーバー内部で転送ブラウザへ別URLへの移動を指示
リクエスト同じrequest新しいrequest
request属性引き継げる原則引き継げない
ブラウザのURL通常変わらない移動先に変わる
再読み込み元のリクエストを再実行し得るPOST後の再送信を避けやすい

Actionのインスタンス変数

Struts 1のActionは、複数リクエストから利用される可能性があります。リクエスト固有の状態をActionのインスタンス変数へ保存すると、別リクエストの値が混ざる危険があります。

// 避ける
public class UserAction extends Action {
    private String currentUserId;
}

リクエスト固有の値は、ローカル変数、ActionForm、request、必要な場合はsessionなど、寿命が明確な場所へ置きます。

DispatchAction

DispatchActionでは、1つのActionクラス内の複数メソッドをパラメータで呼び分けます。

<action path="/user" type="example.web.UserAction" parameter="method"/>

execute()だけを探すと処理本体を見落とすため、parameter属性と継承クラスを確認します。

調査時の確認事項

参考文献

更新履歴

  • 初版作成

関連項目

このページを参照しているページ