-標準フレームワーク。JSFの登場でどうなる?以下の内容は1.x.x系のものです。

#contents

*インストール [#a46a051d]

基本的には、warファイルを自動解凍するTomcatでやるのが楽。 webappフォルダにwarファイルをコピーしてからTomcat起動 WindowsでもLinuxでも成功! 
基本的には、warファイルを自動解凍するTomcatでやるのが楽。 webappフォルダにwarファイルをコピーしてからTomcat起動 WindowsでもLinuxでも成功!追記この手順でJDK6とTomcat6とStruts1.3.8の組み合わせで動かせた。 

-手作業でやる場合は以下の手順で
+struts-blank.warを解凍
+WEB-INF/lib以下をコピー
+WEB-INFの全ファイルコピー

*struts-config.xmlの設定 [#h8ab57a9]

**データーソースの設定 [#yf10608f]

-struts-config.xmlで設定できる。DBCPを利用しているのでパラメータの詳細はDBCPのドキュメントを参照のこと!

 <data-sources>
 <data-source type="org.apache.commons.dbcp.BasicDataSource">
    <set-property
      property="driverClassName"
      value="org.postgresql.Driver" />
    <set-property
      property="url"
      value="jdbc:postgresql://ホスト名:ポート番号/DB名" />
    <set-property
      property="username"
      value="ユーザー" />
    <set-property
      property="password"
      value="パスワード" />
    <set-property
      property="maxActive"
      value="10" />
    <set-property
      property="maxWait"
      value="5000" />
    <set-property
      property="defaultAutoCommit"
      value="false" />
    <set-property
      property="defaultReadOnly"
      value="false" />
    <set-property
      property="validationQuery"
      value="SELECT version()" />
 </data-source>
 </data-sources>

**例外処理 [#k9418f73]

例外の種別ごとにキャッチできる。またExceptionHanderクラスを継承してログ出力などの処理を間にはさむこともできる。

    <global-exceptions>
    	<exception type="java.lang.Exception" key="hoge.hoge" path="/common/error.jsp" handler="common.ExceptionHandler"/>
    </global-exceptions>

**グローバルフォワード [#v81d8bc6]

各アクションで共通のものを定義できる

    <global-forwards>
        <forward name="top" path="/index.jsp"/>
    </global-forwards>


*はまった点 [#v18601f4]

**Actionクラスはスレッドセーフではない [#fdb83ab3]

これはAPIにも記載があるが意外とはまる人が多いので注意。リクエスト固有の情報をフィールドにもたせてはいけない。

**その他 [#b0d64775]

+リソースファイルはstruts-config.xmlで指定する。 
+リソースについては英語しかダメなのですが(未解決) 
+struts-config.xmlが間違っていると「サーブレット action は現在利用できません」 
+form-propertyに同一の名前があると上記エラー
+Dyna系フォームはプロパティのクラス名間違ってる(×String○java.lang.String)とActionFromがnullになる。

*サーブレットactionは利用できません エラー対策 [#o0762960]

Strutsでリクエストの受付先であるActionServletが何かしらの理由により初期化失敗したときに上記エラーメッセージが出る。なので何かしらの変更を加えて、その後Tomcatを再起動した後にこのエラーに遭遇することが多い。もし変更前に戻せるなら戻すべきである。Tomcatではservletのinit()でUnavailableExceptionをthrowするとこのメッセージが出る。なのでほかのサーブレットでも出ることがある。要は初期化に失敗しているから使えませんよってことである。一度こうなると該当設定を見直して、アプリケーションサーバー(Tomcat)再起動しないとだめである。

**上記エラー前にStrutsが出すエラーメッセージ [#xd880530]

-解決策はログを見ることだ。TOMCAT_HOME/logsを開いてみるべし。すると以下のようなメッセージが見つかるだろう。

Unable to initialize Struts ActionServlet due to an unexpected exception or error thrown, so marking the servlet as unavailable.  Most likely, this is due to an incorrect or missing library dependency.

-上記の日本語訳

予期せぬエラーのためActionサーブレットの初期化に失敗しました。このサーブレットを利用不可にセットします。原因としてはライブラリの設定が不正だったり、なかったりすることが考えられます。

**struts-config.xmlがおかしい場合 [#f946fdd0]

タグ閉じ忘れでもNG。ブラウザでも開けなかったらそれはxmlとしておかしい。

 2007-07-11 14:31:24 StandardWrapper[/struts-blank-1.3.8:action]: サーブレット action を利用不可能にマークします
 2007-07-11 14:31:24 StandardContext[/struts-blank-1.3.8]: サーブレット /struts-blank-1.3.8 がload()例外を投げました
 javax.servlet.UnavailableException: パス jndi:/localhost/struts-blank-1.3.8/WEB-INF/struts-config.xml に対するリソース読み込みエラー

以下スタックトレースが出力されているはずである。

*eclipseとの連携 [#hddd083a]

+struts-blankをworkspaceに解凍しておく
+そのまま新規プロジェクトをそのフォルダ名で作成する
+struts-config.xmlを編集

 <message-resources parameter="java.resources.application" />

struts-blank.warでは、application.propertiesは「/WEB-INF/src/java/resouces」というディレクトリに含まれていますので、eclipse上でソースディレクトリを「WEB-INF/src」とした場合は、リソースファイルは「java.resources」パッケージに含まれることになります。従って、解決方法としては(1)eclipse上でのソースディレクトリを「WEB-INF/src/java」にする。(2)struts-config.xmlのmessage-resourceタグのparameterを「java.resources.application」にする。(3)application.propertiesファイルを「/WEB-INF/src/resoucrs」に移動する。の何れかが必要です。

上記は1.2系

1.3系は以下のようにする

    <message-resources parameter="java.MessageResources" />


#counter

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS