0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

🧩 Vol.11.13 Resultタイプ完全解説(dispatcher / redirect / stream など)遷移パターン理解

Last updated at Posted at 2025-05-29

Struts2の「画面遷移の種類」を徹底解説。dispatcherredirectstream それぞれの使いどころと注意点を整理します。


✅ 1. Struts2における「Resultタイプ」とは?

Struts2のアクションクラスでは、return した文字列(たとえば "success")に応じて、次に遷移する画面や動作が定義されます。

public String execute() {
    return "success";
}

これに対応する遷移先や処理は、struts.xml<result> タグで定義されます。この <result> タグに指定できるのが「Resultタイプ」です。


✅ 2. よく使うResultタイプ一覧

タイプ 概要 主な使いどころ
dispatcher(デフォルト) サーバー内でリクエストをフォワード 値を保持したままJSPへ画面遷移
redirect クライアントにリダイレクト指示(URL変更あり) 完了後に一覧画面などへ戻る場合
redirectAction アクションにリダイレクト アクション間の完全な再呼び出し
chain アクションを連鎖実行(チェイン) 値を引き継いでアクションを続けたいとき
stream ファイルやバイナリを直接出力 CSV、PDF、画像などの出力

✅ 3. dispatcher(デフォルト)とは?

<result name="success" type="dispatcher">/view/userPortal.jsp</result>
  • 内部的に RequestDispatcher.forward() を使用。

  • URLは変わらず、画面遷移時にリクエストスコープが引き継がれる。

  • フォーム送信→入力エラー→再表示、などに適している。


✅ 4. redirect とは?

<result name="success" type="redirect">/complete.jsp</result>
  • 内部的に response.sendRedirect() を使用。

  • クライアントに再リクエストを指示(URLが変わる)。

  • セッション以外のデータは引き継がれない。

  • 「リロードで二重投稿される問題」回避に有効。


✅ 5. redirectAction とは?

<result name="success" type="redirectAction">list</result>

  • 指定されたアクションを新しいリクエストとして呼び出す。
  • 例えばフォームの登録完了後に一覧を表示したい場合に便利。
  • アクションクラスが新たに実行され、JSPに遷移するより柔軟。

✅ 6. chain とは?

<result name="success" type="chain">nextAction</result>
  • 複数のアクションを連続して呼び出す。

  • 前のアクションで設定したプロパティが後続アクションに引き継がれる。

  • ModelDrivenや共通の値を引き渡したいケースで活用。


✅ 7. stream とは?

<result name="success" type="stream">
    <param name="contentType">application/pdf</param>
    <param name="inputName">inputStream</param>
    <param name="contentDisposition">attachment;filename="sample.pdf"</param>
</result>

  • アクションから直接ファイルやバイナリを出力できる。

  • InputStream を返すgetterを用意する必要がある。

public InputStream getInputStream() throws Exception {
    return new FileInputStream("output/sample.pdf");
}

✅ 8. 遷移パターンまとめ

タイプ リクエスト継続 URL変更 主な用途
dispatcher × JSPへのフォワード
redirect × 二重送信防止/画面リダイレクト
redirectAction × アクションを再実行
chain × 複数アクションの連携
stream - - バイナリ出力

✅ 9. どれを選べばいい?

状況 適切なタイプ
入力エラー時など、値を保持して同じ画面に戻す dispatcher
完了後、一覧に戻りたい(URL変更したい) redirectAction
ファイルやPDFを出力したい stream

✅ 10. 実務での注意点

  • dispatcher を使った場合、JSPに直接アクセスされないようURL制御が重要(セキュリティ対策)。

  • redirect / redirectAction はURLが変わるため、画面の「再読み込み」にも強い。

  • chain の多用は可読性やメンテナンス性を損なうことがあるので、慎重に。


📝 まとめ

Struts2における「Resultタイプ」は、画面遷移の基本であり、アプリの動き方を決定づけます。
目的に応じて適切なタイプを選択し、ユーザー体験とメンテナンス性の高い設計を目指しましょう。


🧭 関連記事(Vol.11.xxxシリーズ)

連番 タイトル 内容分類
Vol.11.0 Struts2が提供してくれる便利機能まとめ9選 導入&概要
Vol.11.1 自動注入とステートレスActionの仕組み フレームワーク内部理解
Vol.11.2 UX改善に効く!アクション層設計と入力制御の極意(プロローグ) UX設計・アクション層総論
Vol.11.2.1 【実践編】Struts2アクション層の役割と設計パターン(Command型 / UIアクション分離など) アクション設計パターン
Vol.11.2.2 【UX重視】戻るボタン・キャンセル処理の設計手法と「戻り先管理」のスマート実装 戻り先制御とUX設計
Vol.11.2.3 【設計ノウハウ】多画面遷移時のパラメータ受け渡し・保持戦略(セッション vs hidden vs URL) パラメータ多重管理
Vol.11.2.4 【実践ガイド】ユーザー操作を考慮したアクション遷移設計(リダイレクト vs フォワードの使い分け) UX遷移設計/Result制御
Vol.11.2.5 【トラブル防止】アクション層の共通処理とメンテナブルなBaseAction設計 アクション共通化/保守性
Vol.11.3 Struts2の defaultStack とは?Interceptorの中身を詳しく追ってみる Interceptor
Vol.11.3.2 🔧 Vol.11.3.2 独自Interceptorの作り方と使い所 Struts2のカスタマイズを“実践で使えるレベル”に一歩進めよう Interceptor
Vol.11.4 入門者のための「パラメータ自動バインディング」完全理解ガイド 自動バインディング
Vol.Vol.11.4.1 入門者のための自動バインディング実践パターン集 自動バインディング
Vol.11.5 Struts2の構成理解が“実務レベル”へと進化する決定版 設定ファイル構造
Vol.11.5.1 Struts2の“画面遷移の全体像”を理解するためのマイルストーン記事 設定ファイル構造
Vol.11.6 ActionSupport の便利メソッドと国際化対応 ユーティリティ / i18n
Vol.11.7 validate() / input 戦略とUX設計 開発スタイルの違い
Vol.11.8 アノテーションベースの設定 vs XML定義の比較 開発スタイルの違い
Vol.11.9 バリデーション完全解説(XML / アノテーション) バリデーション(※Vol.8補完)
Vol.11.10 Struts2の「OGNL」ってなに?しくみと使い方をやさしく解説 式言語OGNL解説
Vol.11.11 ModelDriven インターフェースの使いどころと注意点 Model駆動開発
Vol.11.12 SessionAware と RequestAware でセッション/リクエスト管理 セッション管理
Vol.11.14 Vol.11.14 ValueStackの中身を理解する – 画面とActionの橋渡し役 Action
Vol.11.15 Interceptorチェーンを自作してみよう(ログ / 認証フィルタ) Interceptor
Vol.11.16 エラー処理と例外ハンドリングの実践パターン ハンドリング設計
Vol.11.17 Struts2でファイルアップロード機能を実装する方法 実装系Tips
Vol.11.18 非同期通信(AJAX)とStruts2の連携方法 フロント連携編
Vol.11.19 セキュリティ対策(CSRF, XSS, パラメータ偽装) セキュリティ対策
Vol.11.20 複数フォームを安全に扱う!セッション管理と動的フォームの考え方 セッション管理
Vol.11.21 Struts2でJSONを返す!REST API連携と非同期通信の基本設計 セッション管理
Vol.11.22 本番環境構成とセキュリティ設計(Apache+Tomcat+Struts2連携) 外部公開

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?