06.struts.xmlについて

概要

ここでは、struts.xmlファイルで使用できるタグ等についてみていこうと思います。

実際の使用サンプルについては、こちらの記事をご覧ください。

struts.xmlの記述サンプル

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC

"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"

"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts >

<!--

Action名に/を使用して階層を実現できるようにするかどうか。

-->

<constant name="struts.enable.SlashesInActionNames" value="true" />

<constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/>

<!--constant name="struts.patternMatcher" value="regex" /-->

<package name="struts-my-default" extends="struts-default" namespace="/sec" >

<global-results>

<result name="Exception">/WEB-INF/content/error.jsp</result>

</global-results>

<global-exception-mappings>

<exception-mapping result="Exception" exception="java.lang.Exception" />

</global-exception-mappings>

<!-- tilesの設定を可能にする(tiles-default のpacakgeタグをextendsしてもよいらしい) -->

<result-types>

<result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult"/>

</result-types>

<!-- デフォルトのコピーからconversionErrorを除外したinterceptor -->

<interceptors>

<interceptor-stack name="transact" >

<interceptor-ref name="exception"/>

<interceptor-ref name="alias"/>

<interceptor-ref name="servletConfig"/>

<interceptor-ref name="i18n"/>

<interceptor-ref name="prepare"/>

<interceptor-ref name="chain"/>

<interceptor-ref name="scopedModelDriven"/>

<interceptor-ref name="modelDriven"/>

<interceptor-ref name="fileUpload"/>

<interceptor-ref name="checkbox"/>

<interceptor-ref name="multiselect"/>

<interceptor-ref name="staticParams"/>

<interceptor-ref name="actionMappingParams"/>

<interceptor-ref name="params">

<param name="excludeParams">dojo\..*,^struts\..*</param>

</interceptor-ref>

<!--interceptor-ref name="conversionError"/-->

<interceptor-ref name="validation">

<param name="excludeMethods">input,back,cancel,browse</param>

</interceptor-ref>

<interceptor-ref name="workflow">

<param name="excludeMethods">input,back,cancel,browse</param>

</interceptor-ref>

</interceptor-stack>

</interceptors>

<default-interceptor-ref name="transact" />

<action name="*Edit" class="{1}EditAction" method="doInput" >

<result type="tiles">{1}-Edit-Input</result>

<result name="input" type="tiles">{1}-Edit-Input</result>

<result name="complete" type="tiles">{1}-Edit-Complete</result>

</action>

</package>

<include file="/com/struts2/actions/struts-action.xml" />

</struts>

ここでは記述サンプルを載せるだけです。

以下でタグをひとつひとつ見ていきます。

constantタグ

【サンプル再掲】

<constant name="struts.enable.SlashesInActionNames" value="true" />

constantタグでは、Struts2での定数を設定するタグです。

name属性・・・定数名

value属性・・・設定値を記述します。

name属性に設定する定数名は決まっています。

こちらの記事を参照ください。

packageタグ

【サンプル再掲】

<package name="struts-my-default" extends="struts-default" namespace="/sec" >

name属性・・・WEB上は特に意味はありません。管理上のpackage名を決めます。extendsするときに使用します。

extends属性・・・packageを継承します。継承元はname属性に記述した名前を指定します。継承元のタグの設定は上書きできます。

namespace属性・・・URLのパスの先頭部分を指定します。constantの"struts.enable.SlashesInActionNames"、

"struts.mapper.alwaysSelectFullNamespace"も参照ください。

【補足】

extendsはかなり便利です。

1つ共通の設定(例えばinterceptorタグ)をしたpackageを用意して、他のpackageでextendsすれば記述が楽になります。

また、1か所修正するだけですべて修正できるのでメンテナンスも楽になります。

global-resultsタグ

【サンプル再掲】

<global-results>

<result name="Exception">/WEB-INF/content/error.jsp</result>

</global-results>

global-resultsタグはグローバルなresultを設定するものです。

resultとは結果コードとViewをマッピングするものです。

上記は"Exception"という結果コードの場合、error.jspをViewとして使用することを記述しています。

実際にはjspだけでなく、FreeMarkerでもTilesでも使用可能です。

【resultタグ】

name属性・・・マッピングする結果コードを記述します。

type属性・・・Viewのタイプを指定します。tilesなどを指定します。省略するとjspになります。

以下のタグの説明も参照。

global-exception-mappingsタグ

【サンプル再掲】

<global-exception-mappings>

<exception-mapping result="Exception" exception="java.lang.Exception" />

</global-exception-mappings>

global-exception-mappingタグは、グローバルな例外処理を設定するものです。

result属性・・・結果コードを記述します。

exception属性・・・例外を記述します。記述した例外が投げられたときに指定の結果コードのViewを呼び出します。

result-typesタグ

【サンプル再掲】

<result-types>

<result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult"/>

</result-types>

result-typesタグはViewで使用するタイプ(Tilesなど)に名称をつけるタグです。

デフォルトで名称がついているものもありますが、Tilesはデフォルトでは設定されていないので上記のように設定する必要があります。

http://struts.apache.org/2.x/docs/result-types.html も参照

interceptorsタグ

このタグは、interceptorを定義するタグです。

interceptorについては、01.Struts2の全体概要(Struts2の役割&処理フロー)も参照ください。

ここで定義できるのは、stackと呼ばれる、interceptorのまとまりです。

まとまりは、使用するinterceptorと、順番を定義していて、他のstack内でも参照できます。

定義しているだけで使用することを宣言しているわけではないことに注意してください。

どのstackを使用するかは以下のタグで指定します。

<default-interceptor-ref name="transact" />

actionタグ

【サンプル再掲】

<action name="*Edit" class="{1}EditAction" method="doInput" >

<param name="fruits">{1}</param>

<result type="tiles">{1}-Edit-Input</result>

<result name="input" type="tiles">{1}-Edit-Input</result>

<result name="complete" type="tiles">{1}-Edit-Complete</result>

</action>

actionタグはURLとActionのマッピングを設定します。

name属性・・・URLのパス名を指定します。ワイルドカードも使用できます。

constantの設定で動作が変わります。スラッシュも使用できます。"struts.mapper.alwaysSelectFullNamespace"も参照。

class属性・・・Actionクラスのパッケージ名も含めた名前を記述します。Springと連携した時は、Springのbean名を記述します。

method属性・・・デフォルトのActionの処理メソッドを記述します。

paramタグ:

ここで記述すると、リクエストパラメタに新たなパラメタを追加できます。

主な使い方は、上記のようにワイルドカードを使用したときに、URLからパラメタを生成することです。

つまり、URLの一部⇒リクエストパラメタへの変換です。

こうすることで、Actionのプロパティ(setter)でURLの一部を受け取ることができます。

resultタグ:

name属性・・・処理結果コード(Actionの処理メソッドのreturn値)

type属性・・・Viewのタイプを指定します。省略時はjspです。result-typeタグで指定した名称を使用できます。

タグ内・・・jspファイルのパスなどを指定します。Viewのタイプにより指定するものが違います。

※それぞれ、ワイルドカードを使用した時の置換文字{n}が使用できます。

【resultタグの追加情報について】

リダイレクトもできます。

<result name="back" type="redirect">/xxxx/xxx.action</result>

また、以下のようにステータス等も指定できます。

<result name="input" type="httpheader">

<param name="status">204</param>

<param name="headers.content-type">text/html</param>

</result>

http://struts.apache.org/2.3.1/struts2-core/apidocs/org/apache/struts2/dispatcher/HttpHeaderResult.html

includeタグ

【サンプル再掲】

<include file="/com/struts2/actions/struts-action.xml" />

他のstruts.xmlファイルをインクルードするタグです。

Struts2の設定ファイルを分割して、管理しやすくできます。

Created Date: 2012/03/05