直線上に配置
Sub Application機能の使い方
Sub Application機能とは?
Sub Application機能とは、一言でいえば「struts-config.xmlを分割して管理する機能」です。Strutsを使って比較的巨大なサイトを作っていくと、struts-config.xmlが大変な事になりますよね。もう、それは理解不能どころか、メンテ不能と言っても過言ではありません。Strutsがリリースされた直後からこの問題は指摘されており、開発チームでも様々な検討がなされていました。Struts1.1ではStrutsとしての回答として、このSub Application機能が追加されました。Sub Applicationでは、任意のURLの単位でstruts-config.xmlを分割する事ができ、それぞれをSub Applicationという概念で扱います。この機能を使ってアプリケーションを分割しても、1つのstruts-config.xmlファイルで記述した場合と動作上の違いはありません。
実際のイメージは、任意のURLから後ろを1つのSub Applicationとみなして扱います。 たとえば、URLが /SubAppSample から始まるアプリケーションにおいて、/SubAppSample/admin から後ろを Sub Applicationとして扱う場合は、コンフィグレーションファイルをstruts-config.xml と struts-config-admin.xml の2つのファイルに分ける事ができ、/SubAppSample/admin以下の振る舞いに関しては struts-config-admin.xmlに記述するようになります(フォーマットなどは変わりません)。 このパスとコンフィグレーションファイルの指定は、web.xmlで定義します。 コンフィグレーションファイルの分割されたアプリケーションのイメージは以下のようになります。
設定方法
では、実際にどうやって使うかを説明します。 前述のようなアプリケーションを作る場合、web.xmlは下記のように記述します。
web.xml抜粋
  ........
    <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>config/admin</param-name>
            <param-value>/WEB-INF/struts-config-admin.xml</param-value>
        </init-param>
    </servlet>
  ........
これで、 URLが/admin 以下の定義は struts-config-admin.xml に記述する事になります。それ以外の場合の定義は struts-config.xmlです。 で、struts-config.xmlと、struts-config-admin.xmlは、通常通りの記述方法で書けばよいのです。
struts-config.xml
<?xml version="1.0" encoding="ISO-8859-1"?>

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

<struts-config>
    <form-beans>
        <form-bean name="LogonFormBean" type="sample.LogonForm"/>
    </form-beans>
    <global-forwards/>
    <action-mappings>
        <action input="index.jsp" name="LogonFormBean" path="/logon"
                scope="session" type="sample.LogonCheckAction" unknown="false"
                validate="false">
            <forward name="failuer" path="/index.jsp" redirect="false"/>
            <forward name="success" path="/admin/adminmenu.jsp" redirect="false"/>
        </action>
        <action path="/logoff" name="LogonFormBean"
                scope="session" type="sample.LogoffAction" unknown="false"
                validate="false">
            <forward name="success" path="/index.jsp" redirect="false"/>
        </action>
    </action-mappings>

  <message-resources parameter="ApplicationResources"/>

</struts-config>
struts-config-admin.xml
<?xml version="1.0" encoding="ISO-8859-1"?>

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

<struts-config>
    <form-beans>
        <form-bean name="LogonFormBean" type="sample.LogonForm"/>
    </form-beans>
    <global-forwards/>
    <action-mappings>
        <action path="/adminitems" type="sample.admin.AdminItemsAction">
            <forward name="success" path="/adminitems.jsp"  redirect="false"/>
        </action>

        <action path="/adminusers" type="sample.admin.AdminUsersAction">
            <forward name="success" path="/adminusers.jsp"  redirect="false"/>
        </action>

    </action-mappings>
</struts-config>
あとは、それぞれのファイルの配置だけです。jspファイルの置き場所がミソです。
ディレクトリ構成
SubAppSample/
 +---index.jsp
 +---admin/
 |    +---adminitems.jsp
 |    +---adminmenu.jsp
 |    +---adminusers.jsp
 |
 +---WEB-INF/
      +---web.xml
      +---struts-config-admin.xml
      +---struts-config.xml
      +---struts-bean.tld
      +---struts-html.tld
      +---struts-logic.tld
      +---struts-nested.tld
      +---struts-template.tld
      +---classes/
      |    +---ApplicationResources.properties
      |    +---sample
      |         +---LogoffAction.class
      |         +---LogonCheckAction.class
      |         +---LogonForm.class
      |         +---admin
      |              +---AdminItemsAction.class
      |              +---AdminUsersAction.class
      +---lib/
      +---src/
これで、SubApplication化ができるはずです。
ダウンロード
アプリケーションのダウンロードはこちら

直線上に配置
Strutsファンページ in Japan
Copyright 2002 黒住幸光