SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

続 Struts 2入門

Struts2のインターセプタの選定(1)

続 Struts 2入門(2)

(2)Execute And Wait Interceptor

 Actionクラスを別スレッド(BackgroundProsess)にて動かし、Actionクラスの動作が完了するまでResultにwaitを返すようにします。スレッドはセッション単位で動作します。

 詳細については『続・Struts 2入門(1)Struts 2の同期処理を手助けするExecuteAndWaitインターセプタ』を参照してください。

(3)Exception Interceptor

 例外を検出した場合、設定されている例外とresultの対応マッピングを見て、例外ごとに定義されたresultを返すようになります。Action単位で指定も可能で、共通の指定も可能になっています。

 次のサンプルは、設定ファイルであるstruts.xmlに例外設定を付け加えたものです。

リスト3 struts.xml
<struts>
    <!-- 継承用の設定 -->
    <package name="base" extends="struts-default" abstract="true">
        …(省略)…
        <!-- 共通Result定義 -->
        <global-results>
            <result name="ApplicationException">/ApplicationException.jsp    
        </global-results>

        <global-exception-mappings>
            <exception-mapping exception="seren.lumi2.exception.ApplicationException"
                               result="ApplicationException"/>
        </global-exception-mappings>
    </package>
</struts>

 上のサンプルでは、Strust2のデフォルト設定を継承したbaseパッケージという共通定義をpackage要素で作成しています。その中で、global-exception-mappingsにて例外と対応する遷移先ID、global-resultsにて、共通する遷移先IDと遷移先を定義することができます。この例では、seren.lumi2.exception.ApplicationExceptionを検出すると、遷移先がApplicationExceptionになり、つまりApplicationException.jspが表示されるようになります。

 では実際にサンプルで確認をしてみましょう。ブラウザで「http://127.0.0.1:8080/interceptors/exception/start.action」を開きます。

図4 Exception Interceptor の開始画面
図4 Exception Interceptor の開始画面

 この画面で「Actionを起動する」ボタンを押して起動されるActionクラスでは、次のような実装をしています。

リスト4 ExceptionSampleAction.java(抜粋)
// 使用するpackage名
@Namespace(value="/exception")
// 利用するstruts.xmlのpackage要素名
@ParentPackage("base")
// Actionクラスの遷移先
@Results({
    @Result(name="success" , location="success.jsp"),
})
/**
 * ExceptionInterceptor利用サンプル。
 */
public class ExceptionSampleAction extends ActionSupport {
    private static Logger log = Logger.getLogger(ExceptionSampleAction.class);

    // 開始画面を表示
    @Action(value="start")
    public String start() throws Exception {
        return "success";
    }
    
    // アプリケーション例外を送出するAction
    @Action(value="execute")
    public String execute() throws Exception {
        log.debug("アプリケーション例外を送出します");
        throw new ApplicationException("アプリケーション例外です");
    }
}

 「Actionを起動する」ボタンを押すと、execute()メソッドが起動します。このメソッドではstruts.xmlにて定義した例外クラスであるApplicationExceptionを送出します。すると定義どおり、ApplicationException.jspへ遷移し、次の画面が表示されます。

図5 Exception Interceptor で設定された例外送出画面
図5 Exception Interceptor で設定された例外送出画面

次のページ
(4)Prepare Interceptor

この記事は参考になりましたか?

続 Struts 2入門連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 東 浩二(アズマ コウジ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/5024 2010/04/22 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー