Strutsの概要

struts.png
  1. 上記のように Struts は、struts-config.xml を中心として動いています。
    よく言われているように、この仕組みは以下のような欠点があります。
    1. × 一目見て分かりにくい struts-config.xml ファイルに設定しなければならない(定義情報が散在する)
    2. × struts-config.xml が肥大化する
    3. × struts-config.xml を同時にいじれない
  2. そこで考え出されたのが Xdocletです。
    XdocletはActionクラスのコメント部に、struts-config.xml に記述する内容を記述して、struts-config.xmlを生成します。こうすることにより
    1. ○ 定義情報は Actionクラス に集約される
    2. ○ struts-config.xml はいじらない(肥大化しても関係ない)
    3. ○ 同時に作業を進めることができる

Xdocletのインストール

  1. http://xdoclet.sourceforge.net/xdoclet/install.html から、
    xdoclet-bin-1.2.2.zip
    をダウンロードして展開します。
    ここでは、
    C;\eclipse
    に展開します。
  2. 利用する場合は、antのクラスパスに
    C:\eclipse\xdoclet-1.2.2\lib
    以下のjarファイルを全て通します。
  3. 以下Antタスク雛型集#struts?を参照

Action雛形

一つの処理に対して一つのActionを作る。

 /*
  * Copyright(c)2004-2005 **********. All Rights Reserved.
  */
 package ****.****.****;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
 import org.apache.struts.action.Action;
 import org.apache.struts.action.ActionForm;
 import org.apache.struts.action.ActionForward;
 import org.apache.struts.action.ActionMapping;
 
 /**
  * ****Action.
  * @struts.action
  *  name="****Form"               このActionで使われるActionForm名
  *  path="/****Action"            このActionをマッピングするURL
  *  scope="request"               このActionのインスタンスの寿命
  *  input="/validation-err.jsp"   Validation Errorになったときの飛び先(呼び元にする場合が多い)
  *  validate="true"               Validationを行う
  * @struts.action-forward
  *  name="success"                返値がsuccessの時の飛び先
  *  path="/pages/****.jsp"
  * @struts.action-forward
  *  name="fail"                   返値がfailの時の飛び先
  *  path="/failAction.do"
  * @struts.action-exception       例外発生時の飛び先
  *  type="java.lang.NullPointerException" 発生した例外
  *  key="errors.invalid"                  application.propertiesのキー値(必須項目)
  *  path="/pages/nullpo.jsp"              飛び先のURI
  * @struts.action-exception
  *  type="java.lang.SQLException"
  *  key="errors.sqlerr"
  *  handler="com.foo.sqlex-handler"       ExceptionHandler(※後述)
  *  path="/pages/sqlerr.jsp"
  * @author
  * @version $Id$
  */
 public class ****Action extends Action {
  /**
   * jakarta-commons-logging
   */
  private static Log logger = LogFactory.getLog(****Action.class);
  
  /**
   * execute.
   * @param map ACTION MAP
   * @param actionForm FORM
   * @param req HTTP REQUEST
   * @param res HTTP RESPONSE
   * @return ACTION FORWARD
   * @throws java.lang.Exception EXCEPTION
   */
  public ActionForward execute(
    ActionMapping map,
    ActionForm actionForm,
    HttpServletRequest req,
    HttpServletResponse res)
    throws Exception {
    
    logger.trace("Start");
    
    ****Form fm = (****Form)actionForm;
    
    logger.trace("End");
    
    return map.findForward("success");
  }
 }

Form雛形

Struts Form/XDocletを参照

Exception Handler

Struts 例外ハンドラを参照

Controller

Struts-Controller?を参照

静的項目のマージ

struts-config.xml中の静的項目は、別ファイルに書いておきant実行時にマージする。
マージファイルを置く場所に関してはAntタスク雛型集#struts?を参照。

マージファイル名struts-config.xmlへの統合先利用説明
struts-data-sources.xml<data-sources>×データソース定義。EJBコンテナ/Tomcatのデータソースを使うので通常は使うことはない
struts-forms.xml<form-beans>×XDocletが生成するForm以外の定義。通常使うことはない
global-exceptions.xml<global-exception>共通的な例外処理。社内システムならこれ一本で良いかも…
global-forwards.xml<global-forwards>×共通的なAction/JSPとURLのマッピング。StrutsBlank?.warでも使われている。中規模以上のそろそろ仕様書が必要になってくるアプリからは使いたくねぇーな
struts-actions.xml<action-mappings>×独自にActionMapping?クラスを作るとき。通常使うことはない
struts-controller.xml<controller>Strutsのフィルタ処理、役割はServletのフィルタと同じ。Strutsのみを使うならこれを使う
struts-message-resources.xml<message-resources>必須。JSPからapplication.propertis を参照することを宣言
struts-plugins.xml<plug-in>必須。Validator pluginはたいていのアプリで使うので

静的項目の定義

  1. global-exceptions.xml
    Actionの @struts.action-exception で、設定した項目を global-exceptions.xml に定義すると、全てのActionに対して、該当する例外がおきた時に飛ぶURIを指定することができる。
    <global-exceptions>
    <exception type="java.lang.Error"
               key="message.fatal"
               path="/pages/fatal-error.jsp" />
    <exception type="java.lang.RuntimeException"
               key="message.pgerr"
               handler="com.foo.PgerrHandler"
               path="/pages/program-error.jsp" />
    </global-exceptions>
  2. controller.xml
    <controller processorClass="com.foo.CharsetSetterProcessor"/>
    <controller processorClass="com.foo.Log4jNDSSetterProcessor"/>
    Actionが動く前のフィルタ処理を行うクラスを設定します。
  3. struts-message-resources.xml
    <message-resources parameter="resoureces.application" />
    上のように定義すると、クラスパス上の resources/application.properties が利用される。
    クライアント側のロケール?により、使用されるプロパティファイルは自動的に切り替えられる。
    • デフォルト > resources/application.properteis (通常英語)
    • 日本からアクセス > resources/application_ja.properteis (日本語)
    • 独逸からアクセス > resources/application_de.properteis (独逸語)
    • 中国からアクセス > resources/application_zh.properteis (中国語)
  4. struts-plugins.xml
    以下のメモを参照

Java#Struts


添付ファイル: filestruts.png 3116件 [詳細] filestruts.vsd 1477件 [詳細]

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS   sitemap
Last-modified: 2006-04-15 (土) 22:41:00 (6810d)
Short-URL: http://at-sushi.com/pukiwiki/index.php?cmd=s&k=faa5dc7542
ISBN10
ISBN13
9784061426061