Menu

設定ファイルリファレンス

SAStrutsで使われている設定ファイルの説明をします。

web.xml

サーブレットコンテナ用の設定ファイルです。WEB-INFにおきます。 sa-struts-tutorialプロジェクトでは、webapp/WEB-INFにあります。

<?xml version="1.0"?>

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">

    <context-param>
        <param-name>sastruts.VIEW_PREFIX</param-name>
        <param-value>/WEB-INF/view</param-value>
    </context-param>
    
    <filter>
        <filter-name>encodingfilter</filter-name>
        <filter-class>
            org.seasar.extension.filter.EncodingFilter
        </filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>

    <filter>
        <filter-name>s2filter</filter-name>
        <filter-class>
            org.seasar.framework.container.filter.S2ContainerFilter
        </filter-class>
    </filter>

    <filter>
        <filter-name>hotdeployfilter</filter-name>
        <filter-class>
            org.seasar.framework.container.hotdeploy.HotdeployFilter
        </filter-class>
    </filter>

    <filter>
        <filter-name>routingfilter</filter-name>
        <filter-class>
            org.seasar.struts.filter.RoutingFilter
        </filter-class>
        <init-param>
            <param-name>jspDirectAccess</param-name>
            <param-value>false</param-value>
        </init-param>
    </filter>
        
    <filter-mapping>
        <filter-name>encodingfilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <filter-mapping>
        <filter-name>s2filter</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>INCLUDE</dispatcher>
    </filter-mapping>

    <filter-mapping>
        <filter-name>hotdeployfilter</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD<dispatcher>
        <dispatcher>INCLUDE</dispatcher>
    </filter-mapping>
    
    <filter-mapping>
        <filter-name>routingfilter</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
    </filter-mapping>
    
    <servlet>
        <servlet-name>action</servlet-name>
        <servlet-class>
            org.apache.struts.action.ActionServlet
        </servlet-class>
        <init-param>
            <param-name>config</param-name>
            <param-value>/WEB-INF/struts-config.xml</param-value>
        </init-param>
        <init-param>
            <param-name>configFactory</param-name>
            <param-value>
                org.seasar.struts.config.S2ModuleConfigFactory
            </param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet>
        <servlet-name>s2container</servlet-name>
        <servlet-class>
            org.seasar.framework.container.servlet.S2ContainerServlet
        </servlet-class>
        <load-on-startup>2</load-on-startup>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>action</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
    
    <servlet-mapping>
        <servlet-name>s2container</servlet-name>
        <url-pattern>/s2container</url-pattern>
    </servlet-mapping>
    
    <jsp-config>
        <jsp-property-group>
            <url-pattern>*.jsp</url-pattern>
            <el-ignored>false</el-ignored>
            <page-encoding>UTF-8</page-encoding>
            <scripting-invalid>false</scripting-invalid>
            <include-prelude>/WEB-INF/view/common/common.jsp</include-prelude>
        </jsp-property-group>
    </jsp-config>
</web-app>

JSPなどのView用のファイルを置くディレクトリをsastruts.VIEW_PREFIXで指定します。 ブラウザから直接アクセスされないように/WEB-INF配下のディレクトリを指定すると良いでしょう。

EncodingFilterは、リクエストのパラメータをエンコードするためのフィルタです。

S2ContainerFilterは、Seasar2がリクエストやレスポンスなどの サーブレット用のオブジェクトをあつかえるようにするためのフィルタです。

HotdeployFilterは、Seasar2がJavaのクラスの変更をHOTに認識できるようにするためのフィルタです。

RoutingFilterは、きれいなURL(Strutsの.doなどの拡張子を見せない)を 実現するためのフィルタです。 デフォルトで、JSPへのダイレクトアクセスを禁止するようになっているので、 JSPへ直接アクセスする必要がある場合は、 jspDirectAccessのパラメータをtrueに設定してください。

filterタグとfilter-mappingタグの順番は、非常に重要です。 必ず上記の順序で定義するようにしてください。

ActionServletは、Struts用のサーブレットです。

S2ContainerServletは、Seasar2の初期化と終了処理を行なうためのサーブレットです。 ActionServletよりも後に起動されるようにload-on-startupの値を ActionServletのload-on-startupの値より大きくしてください。

S2ModuleConfigFactoryは、struts-config.xmlなしの 開発を実現するためのクラスです。

jsp-configタグの詳細は、こちらを参照してください。

struts-config.xml

Struts用の設定ファイルです。WEB-INFにおきます。 sa-struts-tutorialプロジェクトでは、webapp/WEB-INFにあります。

<?xml version="1.0"?>

<!DOCTYPE struts-config PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
    "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">

<struts-config>

    <form-beans>
    </form-beans>

    <global-exceptions>
    </global-exceptions>

    <global-forwards>
    </global-forwards>

    <action-mappings>
    </action-mappings>
    
    <controller
        maxFileSize="1024K"
        bufferSize="1024"
        processorClass="org.seasar.struts.action.S2RequestProcessor"
        multipartClass="org.seasar.struts.upload.S2MultipartRequestHandler"/>

    <message-resources parameter="application"
        factory="org.seasar.struts.util.S2PropertyMessageResourcesFactory"/>

    <plug-in className="org.seasar.struts.validator.S2ValidatorPlugIn">
        <set-property
          property="pathnames"
          value="/WEB-INF/validator-rules.xml"/>
    </plug-in>
</struts-config>

controllerタグのprocessorClass属性でS2RequestProcessorを指定します。 S2RequestProcessorによって、SAStrutsのやり方でリクエストを処理するようになります。 また、multipartClass属性でS2MultipartRequestHandlerを指定します。 S2MultipartRequestHandlerによって、ファイルアップロードで サイズオーバーの例外が発生した場合に、その例外を取得できるようになります (素のStrutsは取得できない)。

message-resourcesタグでS2PropertyMessageResourcesFactoryを指定します。 S2PropertyMessageResourcesFactoryによって、メッセージリソースの 変更をHOTに認識できるようになります。

plug-inタグでS2ValidatorPlugInを指定します。 S2ValidatorPlugInによって、検証用のアノテーションの 変更をHOTに認識できるようになります。

validator-rules.xml

バリデータを定義しているのが、validator-rules.xmlです。WEB-INFにおきます。 sa-struts-tutorialプロジェクトでは、webapp/WEB-INFにあります。 SAStruts用のvalidator-rules.xmlは、Struts標準のものに、 minbytelength、maxbytelength、longRangeのバリデータの定義が追加されています。

<validator    name="minbytelength"
            classname="org.seasar.struts.validator.S2FieldChecks"
               method="validateMinByteLength"
         methodParams="java.lang.Object,
                       org.apache.commons.validator.ValidatorAction,
                       org.apache.commons.validator.Field,
                       org.apache.struts.action.ActionMessages,
                       org.apache.commons.validator.Validator,
                       javax.servlet.http.HttpServletRequest"
              depends=""
                  msg="errors.minbytelength"/>


<validator       name="maxbytelength"
            classname="org.seasar.struts.validator.S2FieldChecks"
               method="validateMaxByteLength"
         methodParams="java.lang.Object,
                       org.apache.commons.validator.ValidatorAction,
                       org.apache.commons.validator.Field,
                       org.apache.struts.action.ActionMessages,
                       org.apache.commons.validator.Validator,
                       javax.servlet.http.HttpServletRequest"
              depends=""
                  msg="errors.maxbytelength"/>
                  
<validator       name="longRange"
            classname="org.seasar.struts.validator.S2FieldChecks"
               method="validateLongRange"
         methodParams="java.lang.Object,
                       org.apache.commons.validator.ValidatorAction,
                       org.apache.commons.validator.Field,
                       org.apache.struts.action.ActionMessages,
                       org.apache.commons.validator.Validator,
                       javax.servlet.http.HttpServletRequest"
              depends="long"
                  msg="errors.range"/>

app.dicon

アプリケーションの起動時に最初に読み込まれるファイルがapp.diconです。 app.diconは、クラスパスの通っているディレクトリにおきます。 sa-struts-tutorialプロジェクトでは、src/main/resourcesに app.diconがあります。

app.dicon
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
	"http://www.seasar.org/dtd/components24.dtd">
<components>
    <include path="convention.dicon"/>
    <include path="aop.dicon"/>
    <include path="j2ee.dicon"/>
    <include path="s2jdbc.dicon"/>
	
    <component name="actionMessagesThrowsInterceptor"
        class="org.seasar.struts.interceptor.ActionMessagesThrowsInterceptor"/>
</components>

ある設定ファイルから別の設定ファイルを読み込むためには、 includeタグを使います。 includeされている設定ファイルから、さらに別の設定ファイルをincludeすることができるので、 app.diconをルートとして、設定ファイルのツリーが構成されます。

convention.diconは規約を定義している設定ファイルです。

aop.diconはトレースなどの良く使うインターセプタが定義されている設定ファイルで、 s2-framework-xxx.jarの中に含まれています。 インタセプタとは、メソッドの呼び出しの前後に自動的に呼び出されるAOPのモジュールです。 AOPの詳細は、こちらを参照してください。

j2ee.diconはトランザクション用のインターセプタが定義されている設定ファイルで、 s2-extension-xxx.jarの中に含まれています。

s2jdbc.diconはS2JDBC用の設定ファイルです。

アクション以外から、 ActionMessages(html:errors)にメッセージを出力するためのインターセプタが ActionMessagesThrowsInterceptorです。 詳細は、こちらを参照してください。

convention.dicon

規約を定義しているのがconvention.diconです。 convention.diconは、クラスパスの通っているディレクトリにおきます。 sa-struts-tutorialプロジェクトでは、src/main/resourcesに convention.diconがあります。

convention.dicon
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" 
    "http://www.seasar.org/dtd/components24.dtd">
<components>
    <component
        class="org.seasar.framework.convention.impl.NamingConventionImpl">
        <initMethod name="addRootPackageName">
            <arg>"tutorial"</arg>
        </initMethod>
    </component>
    <component
        class="org.seasar.framework.convention.impl.PersistenceConventionImpl"/>
</components>

addRootPackageNameで追加しているtutorialの部分は、 プロジェクトにあわせて書き換えてください。 ルートパッケージの詳細は、こちらを参照してください。

env.txt

Seasar2が動作している環境を定義するファイルがenv.txtです。 env.txtは、クラスパスの通っているディレクトリにおきます。 sa-struts-tutorialプロジェクトでは、src/main/resourcesに env.txtがあります。

デフォルトで定義されている環境は下記のとおりです。

  • utは単体テスト用の環境です。
  • ctは結合テスト用の環境です。
  • itは統合テスト用の環境です。
  • productは本番用の環境です。env.txtがない場合のデフォルトです。

Seasar2がHOT deployで動作するのは、env.txtがctの場合です。 sa-struts-tutorialプロジェクトでは、env.txtがctに設定されています。

env.txtがitかproduct(設定無し)の場合、Seasar2はCOOL deployで動作します。 COOL deployで動作している場合、Javaのクラスの変更をHOTに認識することはできませんが、 アプリケーションの起動時にすべてのデプロイを完了させるので、 アプリケーションがHOT deployに比べて高速に動作します。

env.txtがutの場合、Seasar2はWARM deployで動作します。 WARM deployで動作している場合、Javaのクラスの変更をHOTに認識せず、 アプリケーションの起動時にもデプロイしません。 ただし、デプロイした内容をキャッシュするので、 一度利用したコンポーネントは高速に動作します。

それに対し、HOT deployは、HOTに変更を認識するためにリクエストの終了時に デプロイした内容はすべて破棄して、 リクエストのたびに必要とされるコンポーネントを再デプロイします。

WARM deployのCOOL deployに対するメリットは、 アプリケーションの起動が早いことです。 例えば、COOL deployの場合、1つのテストケースのメソッドで1つしかコンポーネントを 使わない場合でも、すべてのコンポーネントをデプロイしてしまいます。 それに対し、WARM deployでは、必要なコンポーネントしかデプロイしないので、 テストケースを高速に実行できます。 また、テストの場合は、HOT deployは必要ありません。

env_ut.txt

S2Unitを使った 単体テスト用の環境を定義するファイルがenv_ut.txtです。 env_ut.txtは、クラスパスの通っているディレクトリにおきます。 sa-struts-tutorialプロジェクトでは、src/main/resourcesに env_ut.txtがあり、値はutになっています。

s2container.dicon

Seasar2自身をカスタマイズする設定ファイルがs2container.diconです。 s2container.diconは、クラスパスの通っているディレクトリにおきます。 sa-struts-tutorialプロジェクトでは、src/main/resourcesに s2container.diconがあります。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" 
    "http://www.seasar.org/dtd/components24.dtd">
<components>
    <include condition="#ENV == 'ut'" path="warmdeploy.dicon"/>
    <include condition="#ENV == 'ct'" path="hotdeploy.dicon"/>
    <include condition="#ENV != 'ut' and #ENV != 'ct'" path="cooldeploy.dicon"/>
</components>

includeタグのcondition属性を使って、 特定の条件に一致するときにファイルをincludeすることができます。 #ENVは、env.txtの値です。 条件は、OGNLで記述します。 warmdeploy.dicon、hotdeploy.dicon、cooldeploy.diconは、 s2-framework-xxx.jarの中に含まれています。

env.txtの値で、Seasar2のデプロイの仕方が変化するのは、s2container.diconで実現されています。

creator.dicon

ルートパッケージ.actionなどにおいたJavaの設定情報を自動的に作成するための 設定ファイルがcreator.diconです。 creator.diconは、クラスパスの通っているディレクトリにおきます。 sa-struts-tutorialプロジェクトでは、src/main/resourcesに creator.diconがあります。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" 
    "http://www.seasar.org/dtd/components24.dtd">
<components>
    <include path="convention.dicon"/>
    <include path="customizer.dicon"/>
	
    <component
        class="org.seasar.framework.container.creator.ActionCreator"/>
    <component
        class="org.seasar.struts.creator.FormCreator"/>
    <component
        class="org.seasar.framework.container.creator.ServiceCreator"/>
    <component
        class="org.seasar.framework.container.creator.DtoCreator"/>
    <component
        class="org.seasar.framework.container.creator.InterceptorCreator"/>
</components>

action、form、serviceなどそれぞれのパッケージ応じたクリエータが登録されています。

customizer.dicon

クリエータが作成した設定情報をカスタマイズするための 設定ファイルがcustomizer.diconです。 customizer.diconは、クラスパスの通っているディレクトリにおきます。 sa-struts-tutorialプロジェクトでは、src/main/resourcesに customizer.diconがあります。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" 
    "http://www.seasar.org/dtd/components24.dtd">
<components>
    <include path="default-customizer.dicon"/>
	
    <component name="actionCustomizer"
        class="org.seasar.framework.container.customizer.CustomizerChain">
        <initMethod name="addAspectCustomizer">
            <arg>"aop.traceInterceptor"</arg>
        </initMethod>
        <initMethod name="addAspectCustomizer">
            <arg>"actionMessagesThrowsInterceptor"</arg>
        </initMethod>
        <initMethod name="addCustomizer">
            <arg>
                <component
                    class="org.seasar.framework.container.customizer.TxAttributeCustomizer"/>
            </arg>
        </initMethod>
        <initMethod name="addCustomizer">
            <arg>
                <component
                    class="org.seasar.struts.customizer.ActionCustomizer"/>
            </arg>
        </initMethod>
    </component>
	
    <component name="formCustomizer"
        class="org.seasar.framework.container.customizer.CustomizerChain"/>
        
    <component name="serviceCustomizer"
        class="org.seasar.framework.container.customizer.CustomizerChain">
        <initMethod name="addAspectCustomizer">
            <arg>"aop.traceInterceptor"</arg>
        </initMethod>
        <initMethod name="addCustomizer">
            <arg>
                <component
                    class="org.seasar.framework.container.customizer.TxAttributeCustomizer"/>
            </arg>
        </initMethod>
    </component>
</components>

アクションやサービスの設定をカスタマイズするために actionCustomizerやserviceCustomizerが定義されています。

aop.traceInterceptorはトレース用のログを出力するためのインターセプタで、 aop.diconに定義されています。

actionMessagesThrowsInterceptorはアクション以外から、 ActionMessages(html:errors)にメッセージを出力するためのインターセプタで、 app.diconに定義されています。

TxAttributeCustomizerは、トランザクションを自動的に処理するためのカスタマイザです。 詳細は、こちらを参照してください。

ActionCustomizerは、アクションが デプロイされるときに、Struts用の設定情報を自動的に組み立てるクラスで、 SAStrutsで最も重要なクラスです。

jdbc.dicon

データベース接続用の設定ファイルがjdbc.diconです。 jdbc.diconは、クラスパスの通っているディレクトリにおきます。 sa-struts-tutorialプロジェクトでは、src/main/resourcesに jdbc.diconがあります。

jdbc.diconの詳細は、こちらを参照してください。

s2jdbc.dicon

S2JDBC 用の設定ファイルがs2jdbc.diconです。 s2jdbc.diconは、クラスパスの通っているディレクトリにおきます。 sa-struts-tutorialプロジェクトでは、src/main/resourcesに s2jdbc.diconがあります。

s2jdbc.diconの詳細は、こちらを参照してください。

log4j.properties

log4j 用の設定ファイルがlog4j.propertiesです。 log4j.propertiesは、クラスパスの通っているディレクトリにおきます。 sa-struts-tutorialプロジェクトでは、src/main/resourcesに log4j.propertiesがあります。

log4j.category.org.seasar=DEBUG, C
log4j.additivity.org.seasar=false

log4j.category.tutorial=DEBUG, C
log4j.additivity.tutorial=false

log4j.appender.C=org.apache.log4j.ConsoleAppender
log4j.appender.C.Target=System.out
log4j.appender.C.ImmediateFlush=true
log4j.appender.C.layout=org.apache.log4j.PatternLayout
log4j.appender.C.layout.ConversionPattern=%-5p %d [%t] %m%n

log4j.rootLogger=INFO, A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n

tutorialの部分は、ルートパッケージ名を指定します。 ルートパッケージの詳細は、こちらを参照してください。

Tomcatのserver.xml

Tomcatを使っていて、GETのリクエストが文字化けする場合、 conf/server.xmlのConnectorタグの設定を下記のようにします。

<Connector port="8080" ... useBodyEncodingForURI="true"...

Tomcatを使っていて、URLが文字化けする場合、 conf/server.xmlのConnectorタグの設定を下記のようにします。 UTF-8の部分は、encodingfilterの設定にあわせてください。

<Connector port="8080" ... URIEncoding="UTF-8"...

Tomcatのcontext.xml

Tomcatを使っていて、ActionFormやDtoを セッションに格納するようにしている場合に、HOT deployが効かないことがあります。 これは、Tomcatがセッション情報をシリアライズし、 Seasar2が関与できないところでデシリアライズすることが原因です。

セッションをシリアライズ・デシリアライズさせないようにするには conf/context.xmlのManagerタグのコメントアウトをはずします。

<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<Manager pathname="" />

メッセージリソース

アプリケーションで使うメッセージは、xxx.propertiesに記述します。 xxx.propertiesはクラスパスの通っているディレクトリにおきます。 sa-struts-tutorialプロジェクトでは、src/main/resourcesに application(_ja).propertiesがあります。

多言語対応する場合は、ロケールに応じて、xxx_ja.propertiesなどを用意してください。 xxxの部分は、struts-config.xmlのmessage-resourcesタグのparameter属性に設定します。

<message-resources parameter="xxx"
    factory="org.seasar.struts.util.S2PropertyMessageResourcesFactory"/>

xxx.propertiesを日本語で入力するためには、 プロパティエディタを使うのが、 お勧めです。

プロパティエディタをインストールするには、Eclipseのメニューから[Help] -> [Software Updates] -> [Find and Install…]を選択し、 Install/Updateのダイアログを表示させます。 [Search for new features to install]のラジオボタンをチェックして[Next]ボタンをクリックします。

[New Remote site]ボタンをクリックして[Name]を[PropertiesEditor]、 [URL]に[http://propedit.sourceforge.jp/eclipse/updates/]を入力して[OK]をクリックします。

[Finish]ボタンをクリックするとインストールする候補として、 PropertiesEditorForEclipse3.xが出てくるのでそのままインストールしましょう。