ファイヤープロジェクト
struts-config.xmlについて
2003-07-20T15:13+09:00   matsu
struts-config.xmlはStrutsを使用したWebアプリケーションの中心となる設定ファイルである.というは,StrutsではServletをまったくコーディングする必要はなく,Strutsが提供するServletを使用するが,そのServletの設定をstruts-config.xmlで行うのである.
サンプルを通してstruts-config.xmlの各要素の説明を行う.で,早速サンプルである.
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!-- $Id: struts-config.xml,v 1.1.1.1 2003/08/12 14:45:44 matsu Exp $ -->

<!DOCTYPE struts-config PUBLIC

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

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

<!--
   コメントに対する注
       私がDTDにざっと目を通して書いたものなので,誤りがあったらごめんなさい.
       「書かなくてもよい」とあるのは「書かなくても妥当な文書である」という意味である. 
       Deprecatedは「あの」Deprecated.(おそらく全ての場合)書いても無視される.
-->

<struts-config>
  <!-- 
      この要素の内容に要素form-beanを0個以上書く
      要素名 form-beans
      属性   id        書かなくてもよい
             type      Deprecated

  -->
  <form-beans>
  <!--
      ActionFormBeanの定義
      要素名 form-bean
      属性   id        書かなくてもよい
             classname 書かなくてもよい.
	               ActionFromBeanクラスの完全修飾名.
	               属性typeとの違いがよくわからん.初期化に関係か?
             name      ActionFormBeanの論理名
             type      ActionFormBeanクラスの完全修飾名
  -->
    <form-bean      name="Type1Form"
                    type="matsu.struts.sample.Type1Form"/>
    <form-bean	    name="Type2Form"
                    type="matsu.struts.sample.Type2Form"/>
  </form-beans>

  <!-- 
      この要素の内容に要素forwardを0個以上書く.
      要素actionの内容に書くforwardとはscopeが違う.
      つまり,要素actionの内容に書いたforwardは
      そのActionのActionクラスからしか参照できないが,
      要素global-forwardsの内容に書いたforwardは
      どのActionのActionクラスからも参照できる.
      要素名 global-forwards
      属性 id    書かなくてもよい
           type  Deprecated
  -->
  <global-forwards>
  <!--
      要素名 forward
      属性 id         書かなくてもよい
           className  書かなくてもよい.
	              ActionForwardクラスの完全修飾名
	   name       forwardの論理名.(必須)
	              この名前はActionクラスにおいてforwardを指定するときに参照される.
		      もっと直接的にいうと,この名前はActionクラスのコードにハードコードされる.
		      (詳細は別ページで).
	   path	      forwardするURI.(必須)
	   redirect   書かなくてもよい.
	              この属性はtrue,false,yes,noのいずれかの値をとる.
		      trueならsendRedirect()でフォワードできる.
		      falseならRequestDispathcer.forward()でフォワードできる.
	   
  -->
     <forward   name="globalForward1"                path="/GlobalType1.jsp"/>
     <forward	name="globalForward2"		     path="/GlobalType2.jsp"/>
  </global-forwards>

  <!--
      この要素の内容に0個以上の要素actionを書く
      要素名 id           書かなくてもよい
             type	  書かなくてもよい.
	                  ActionMappingクラスの完全修飾名
  -->
  <action-mappings>
    <!--
       アクション.リクエストされたURIからActionへのマッピングを記述する.
       この要素の内容には0個以上の要素forwardがある(他にもset-propertyなどの要素がある).
       要素名 action
       属性   pathのみが必須.他は書かなくてもよい.
	      forwardかtypeかincludeのうちどれか一つは書く必要がある.
              id           ?
              attribute	   このActionで使用するActionFormBeanの属性.
	      className	   ActionMappingクラスの完全修飾名
	      forward	   このActionへのリクエストを実行する.
	                   ServletかJSPへのContextにおける相対パス.
	      include	   typeで指定されるActionをインスタンス化して呼ぶかわりに
	                   実行するSevletやJSPへのContextにおける相対パスを書く.
	      input	   認証エラーが発生したときの入力フォーム画面.
	                   nameを指定しないと記述できない.
			   nameを指定して認証エラーが発生したときは必須
			   nameを指定して認証エラーが発生しないときは,Optional
	      name	   このActionに関連づけられるActionFormBeanの名前
	                   (要素form-beanのどれかの属性nameと一致する).
	      path	   /で始まるContext内でのこのActionの相対パス
	      parameter	   汎用目的で使用されるActionのパラメータ.
	      prefix	   nameが指定されていないと指定できない.
	                   ActionFormBeanのパラメータ名のprefix.
	      scope	   ActionFormBeanのscope.
	                   requestかsession.
			   nameが指定されていないと使用できない.
	      suffix	   nameが指定されていないと指定できない.
	                   ActionFormBeanのパラメータ名のsuffix.
	      type	   このActionを処理するActionクラスの完全修飾名.
	                   forwardかincludeがないときに必要.
	      unknown	   このWebアプリケーションのデフォルトのActionにしたいときに
	                   trueにする.要素Actionの中で一つだけtrueにすることができる.
	      validate	   このActionを実行すう前にActionFormBeanの
	                   validate()を呼び出したいならtrueにする.
			   逆に呼び出したくないならtrueにする.
    -->
    <action    path="/Action1"
               type="matsu.struts.sample.Action1"
	       name="Type1Form">
      <forward name="localForward1"        path="/LocalType1.jsp" />
    </action>

    <action    path="/Action2"
               type="matsu.struts.sample.Action2"
	       name="Type2Form">
      <forward name="localForward2"              path="/LocalType2.jsp" />
    </action>


    <!--
         開発時には便利なアクション.
	 セキュリティ上問題があるので,
	 本番時にはコメントアウトする.
    --> 	 
    <action    path="/admin/addFormBean"

               type="org.apache.struts.actions.AddFormBeanAction"/>

    <action    path="/admin/addForward"

               type="org.apache.struts.actions.AddForwardAction"/>

    <action    path="/admin/addMapping"

               type="org.apache.struts.actions.AddMappingAction"/>

    <action    path="/admin/reload"

               type="org.apache.struts.actions.ReloadAction"/>

    <action    path="/admin/removeFormBean"

               type="org.apache.struts.actions.RemoveFormBeanAction"/>

    <action    path="/admin/removeForward"

               type="org.apache.struts.actions.RemoveForwardAction"/>

    <action    path="/admin/removeMapping"

               type="org.apache.struts.actions.RemoveMappingAction"/>

  </action-mappings>
</struts-config>
このサンプルの設定を以下に示す.
要素form-beansの内容である要素form-beanでActonFormBeanを指定している.また,属性nameで指定する論理名は,要素actionで参照される.
論理名 クラス名(完全修飾名)
ActionFormBeanType1Formmatsu.struts.sample.Type1Form
Type2Formmatsu.struts.sample.Type2Form
要素global-forwardsの内容である要素forwardでGlobalForwardを指定している.ここで設定したものは,すべてのActionでforwardoすることができる.また,ここで属性nameで指定する論理名は,ActionクラスでForwardするときに参照する.
論理名 パス名(コンテキスト内の相対パス)
GlobalForwardglobalForward1/GlobalType1.jsp
globalForward2/GlobalType2.jsp
要素actionmappingsの内容である要素actionでActionを指定している.属性nameは使用するActionFormBeanの論理名である.また,実際にアクションにアクセスするときは,パス名.doというURLになる.これは設定で変更することができるが,その場合web.xmlを編集する必要が生じるかもしれない.
パス名(コンテキスト内での相対パス)Actionクラス名(完全修飾名)ActionFormBean(論理名)
Action/Action1 matsu.struts.sample.Action1Type1Form
/Action2 matsu.struts.sample.Action2Type2Form
上の要素actionの内容である要素forwardの中でそのActionからフォワードできるURIを指定している(便宜上これをLocalForwardと呼ぶ).
論理名 パス名(コンテキスト内の相対パス)
LocalForwardlocalForward1/LocalType1.jsp
localForward2/LocalTYpe2.jsp
matsu(C)
Since 2002
Mail to matsu