Help us understand the problem. What is going on with this article?

ざっくりStruts2

More than 1 year has passed since last update.

Struts2のインターセプタについてざっくりまとめてみる

プログラミング業界に入っておよそ1年半が経った。
当然まだ知らないことだらけ。大体のことは「何だそれ、、」「何だっけこれ、、」から始まる。
学ぶことがたくさんあるのは良いことだが、仕事中以外のアウトプットが無いに等しいので練習がてら記事を書いてみる。

今回は知識整理も兼ねて、現場で使っているフレームワークであるStruts2についてかなりざっくりだがまとめる。
Qiitaには既に他の筆者の良記事は大量にあるので、引用とともに掲載させていただく。

アジェンダ

・struts2とは
・struts2におけるMVCモデル
・Interceptor(インターセプタ)

Struts2とは

Webアプリケーションフレームワークの1つ。
一般にStrutsというと「Ver1.x系」、Struts2というと「Ver2.x系」を指す。
Struts2といっても元は「WebWork2」というフレームワークが名称変更した結果であり、Struts1とは設計背景から異なる(知らなかった)。

struts2におけるMVCモデル

そもそもMVCモデルとは

M(Model)V(view)C(Controller)の略であり、機能で分けて実装するコーディングモデルのこと。ざっくり。

Struts2では

struts_2_architecture.gif
(図1)

Model:Actionクラスに代表され、入力データの保持や操作を行う。ActionクラスのほかにBusinessクラスやModel、Entityクラスもこれに含まれる。
View:JSP。Strutsの場合は"S:~"で始まるような独自のタグライブラリを持つ。(例:s:formでformタグ)
Contoroller:代表的なものはInterceptor(インターセプタ)クラス。クライアント(ユーザ)からの入力データをModelに渡す。

Interceptor(インターセプタ)

Interceptor(インターセプタ)とは

□英語の意味
Interceptor:横取りする人、さえぎる人、迎撃機

Modelの主要となるActionクラスによる処理の前後に、インターセプタの設定に基づいて処理を挟み込むことができる。
struts_2_interceptor.gif
(図2)

つまり、クライアントからデータを受け取ってActionクラスに渡す前に、バリデーションやトークンチェックなどの共通処理を行うことができる。

インターセプタの定義はstruts.xmlで行う。

<struts>
    <package name="hoge-package" extends="json-default" abstract="true">
<!-- インターセプタ定義 -->
        <interceptors>
<!-- インターセプタ・クラス定義 -->
            <interceptor name="sample" class="sample.sample"> 
            <interceptor name="hoge" class="hogehoge.sample"> 
        </interceptor>
<!-- インターセプタ・スタック定義 -->
            <interceptor-stack name="samplestack1">
                <interceptor-ref name="xxx" />
                <interceptor-ref name="yyy" />
            <!-- 上記のように、複数のインターセプタをひとまとめに構築できる -->
            </interceptor-stack>
        </interceptors>
    </package>
</struts>

機能ごとにxmlファイルを分けることも可能で、その場合はstruts.xmlの中で他のファイルをインクルードしてあげればよい。

<!-- インクルード -->
<include file="sampleA.xml">
<include file="sampleB.xml">

また、このインターセプタはクラス単位だけでなくメソッド単位での実装も可能。
・AbstractInterceptor(クラス単位)
・MethodFilterInterceptor (メソッド単位)

*の部分にメソッド名を指定してあげればよい。

<interceptor-ref name="samplestack1" />
<!-- インターセプタを有効にする場合はインターセプタ名.includeMetohds -->
    <param name="xxx.includeMethods">*</param>
<!-- インターセプタを無効にする場合はインターセプタ名.excludeMetohds -->
    <param name="yyy.excludeMethods">*</param>
</interceptor-ref>
参考文献

[Strutsのバージョンについて]
http://write-remember.com/archives/4983/
[【超初心者向け】Struts2超入門 - 2018年版]
https://qiita.com/tarosa0001/items/889faa2ab5853005f26b
→Strutsとはから始まり、導入メリットと環境構築手順についてわかりやすくまとめられています。
[Struts 2 - Architecture] ※図1の引用先
https://www.tutorialspoint.com/struts_2/struts_architecture.htm
→StrutsにおけるMVCモデルの解説
[MVCモデルについて]
https://qiita.com/s_emoto/items/975cc38a3e0de462966a
→他の筆者によるMVC説明記事です
[インターセプタ(interceptor)]
https://qiita.com/alpha_pz/items/f155b1ba1b5de4bd0a26
→Struts2のインターセプタに焦点を当ててまとめられている記事です。
[Struts 2入門(4)~インターセプターという仕組み~]※図2の引用先
https://codezine.jp/article/detail/3264

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away