kuniku’s diary

はてなダイアリーから移行(旧 d.hatena.ne.jp/kuniku/)、表示がおかしな箇所はコメントをお願いします。記載されている内容は日付およびバージョンに注意してください。直近1年以上前は古い情報の可能性が高くなります。

Doltengで作成したプロジェクトでServlet2.5を使う場合

Dolteng0.38.0(org.seasar.dolteng.projects_0.38.0.jar)で作成したプロジェクトはプロダクトによりweb.xmlやServletAPIなどが異なる模様。
プラグインとしてWTPを使用する前提としたためSysdeo Tomcatプラグインでは未調査です。

未解決事項
まだ未解決事項がいくつかあると思われます。

  • tomcat6.0.xでは、Servlet2.5とjsp2.1 を実装したものですが、クラスパス上の問題かいくつかコンパイルできない場合がある模様。


SAStrutsS2JDBCS2Dao)+サーバー管理:WTP(Servlet2.5)
として作成したSAStruts(sa-struts-1.0.4-sp6)はTomcat6.0.16で動作し、JSPコンパイルもできる。
JSTLも特に何もせずに使用可能。
でも自動生成されたweb.xmlの定義を見るとServletAPIは、2.4として定義される。

http://d.hatena.ne.jp/kurukuru-papa/20090513

のコメント欄とは異なるけど、Eclipse内で動作させた限りでは、普通に動作できる。
上記URLのコメント(kurukuru-papa 2009/05/16 22:38)にある

Servlet関連のJARファイル(servlet-api-2.3.jar、geronimo-servlet_2.4_spec-1.0.jar、geronimo-jsp_2.0_spec-1.0.jar)を削除しました。すると正常動作しました

のjarは、WEB-INF/lib に1つも入ってないので Dolteng0.38.0では問題ないと思う。
pom.xml ファイル上は 「geronimo-jsp_2.0_spe、geronimo-servlet_2.4_spec」が scope=provided であるが関係ないかも。
参考pom.xmlの説明 http://www.limy.org/program/java/maven/project.html

で、解決したかに見えたけど、

S2Flex2S2JDBCS2Dao)+サーバー管理:WTP(Servlet2.5)
だと、web.xmlが ServletAPIは、2.3となってる。
けど、Tomcat6.0.18でS2Flex2(swfの実行などやサーバーとクライアント通信)は動作はするけど、JSPは動作しなかったり・・・。

DoltengS2Flex2(with Flex3.1)+S2JDBCS2Dao)+サーバー管理:WTP(Servlet2.5)で作成した動的WEBプロジェクトに対して+SAStrutsをやってみたんだけど

jspを表示する際に、

http://d.hatena.ne.jp/kurukuru-papa/20090513#c1242481104 と同じ現象が発生する。

org.apache.jasper.JasperException: /WEB-INF/view/index.jsp(1,1) JARファイル "file:/C:/flex/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp3/wtpwebapps/s2flexsample/WEB-INF/lib/jakarta-taglibs-standard-1.1.2.jar" からTLD "META-INF/c.tld" を読み込めません: org.apache.jasper.JasperException: TagLibraryValidatorクラスのロード又はインスタンス化に失敗しました: org.apache.taglibs.standard.tlv.JstlCoreTLV

URLで説明されている同様の対処として、S2Flex2のプロジェクトで geronimo-jsp_2.0_spec-1.0.jar が クラスパスWEB-INF/lib にあるので削除する。geronimo-servlet_2.4_spec-1.0.jarは、クラスパス上にはなかった。プロジェクト/lib にgeronimo-servlet_2.4_spec-1.0.jarはいた。。。

で、jspコンパイルjstlの使用)ができるようになった。

なお、S2Flex2のpom.xmlには、org.apache.geronimo.specsがいくつか書かれている。

S2Flex2のプロジェクトにSAStrutsを合わせる場合

  • 必要なライブラリ(jar)をSAStrutsのプロジェクトからもってくる
    • DoltengSAStruts(永続化、ServleteAPIのバージョンを合わせて)プロジェクトを作成する
    • SAStrutsのプロジェクトからS2Flex2のプロジェクトにファイルのコピーやら修正
      • src/main/resources
        • app.dicon
<component name="actionMessagesThrowsInterceptor"  class="org.seasar.struts.interceptor.ActionMessagesThrowsInterceptor"/>
必要であれば、 <include path="j2ee.dicon"/> の追加も。
        • strutsのメッセージファイル application.properties、application_ja.properties も必要であれば。
        • creator.dicon

ActionやFormのcreatorを追加

  <component name="actionCreator" class="org.seasar.framework.container.creator.ActionCreator"/>
  <component class="org.seasar.struts.creator.FormCreator"/>
        • customizer.dicon

トランザクション系は、考慮していませんが formCustomizer、actionCustomizerを追加。

<component name="formCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain"/>
<component name="actionCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">
    <initMethod name="addAspectCustomizer">
      <arg>"actionMessagesThrowsInterceptor"</arg>
    </initMethod>
    <initMethod name="addCustomizer">
      <arg>traceCustomizer</arg>
    </initMethod>
    <initMethod name="addCustomizer">
      <arg>
        <component class="org.seasar.struts.customizer.ActionCustomizer"/>
      </arg>
    </initMethod>
</component>
      • WEB-INF/lib jarの指定
        • SAStrutsからS2flex2のlibに全コピーして、eclipseのリソースを更新しプロジェクトのプロパティでjavaのビルドパスのライブラリーでコピーしたjarを追加をする。ソースを参照したい場合は同様にWEB-INF/lib/sourceにコピーしておき、ライブラリでソース添付する。
        • もしくは、WEB-INF/libにコピーし、eclipseをナビゲータなどの表示に切り替えて .classpath ファイルで追加したファイルをSAStruts側に合わせる。(ディレクトリ構成が同じである必要あり)
  • web.xmlを修正
    • Tomcatなどのサーブレットコンテナのバージョンに合わせる
      • Tomcat6.0.Xならば、2.5に
      • tomcat5.5.Xならば、2.4に
    • SAStrutsでのJSPファイルの場所指定
    • SAStrutsで用意するroutingfilterを指定
    • SAStrutsのために、strutsが使用するActionServletを指定
      • load on starupの指定をSAStrutsにあわせ、ActionServletを1へ、s2containerのload on starupを2へ、s2flex2のRemotingGatewayのload-on-startupを3へ変更
    • jsp-configの指定
    • web.xmlの修正点を列挙
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   version="2.5">


    <!-- JSPファイルの場所指定 -->
    <context-param>
        <param-name>sastruts.VIEW_PREFIX</param-name>
        <param-value>/WEB-INF/view</param-value>
    </context-param>

    <!--  encodingfilter,hotdeployfilter,s2filterはs2flex2から変更なし -->
    <!-- -->
    <!-- SAStrutsで用意するroutingfilterを追加する -->
    
    <!-- routingfilterはURLパターンとActionクラス+メソッドをマッピングされるので
    SAStrutsで処理する対象URLのみ(もしくは、S2flex2で使用するURLを除外)適用する
    ようにする
     -->
    <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>
    

    <!-- デバッグ用のログなどが欲しければrequestDumpFilterを追加 -->
    <filter>
        <filter-name>requestDumpFilter</filter-name>
        <filter-class>org.seasar.extension.filter.RequestDumpFilter</filter-class>
    </filter>

    <!-- SAStrutsのために、strutsが使用するActionServletを指定(SAStrutsを指定して作成した空プロジェクトからコピー) -->
    <!-- ActionServletは、load-on-startupを1へ -->
    
    <servlet>
        <servlet-name>s2container</servlet-name>
        <servlet-class>org.seasar.framework.container.servlet.S2ContainerServlet</servlet-class>
                <init-param>
	        <param-name>debug</param-name>
	        <param-value>true</param-value>
	    </init-param>
	    <!-- s2containerは、load-on-startupを2へ -->
        <load-on-startup>2</load-on-startup>
    </servlet>

    <servlet>
        <servlet-name>gateway</servlet-name>
        <servlet-class>org.seasar.flex2.rpc.remoting.RemotingGateway</servlet-class>

        <!-- s2flexの使用するgatewayは、load-on-startupを3へ -->
        <load-on-startup>3</load-on-startup>
    </servlet>
    <!-- すべてのjspに共通の設定などをするならばjsp-configを追加 -->



</web-app>
  • struts-config.xmlをweb.xmlのActionServletで指定したパスに配置。
  • validator-rules.xmlstruts-config.xmlのplug-inで指定したパスに配置。