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 を実装したものですが、クラスパス上の問題かいくつかコンパイルできない場合がある模様。
SAStruts+S2JDBC(S2Dao)+サーバー管理: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
で、解決したかに見えたけど、
S2Flex2+S2JDBC(S2Dao)+サーバー管理:WTP(Servlet2.5)
だと、web.xmlが ServletAPIは、2.3となってる。けど、Tomcat6.0.18でS2Flex2(swfの実行などやサーバーとクライアント通信)は動作はするけど、JSPは動作しなかったり・・・。
Doltengで S2Flex2(with Flex3.1)+S2JDBC(S2Dao)+サーバー管理: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のプロジェクトからもってくる
<component name="actionMessagesThrowsInterceptor" class="org.seasar.struts.interceptor.ActionMessagesThrowsInterceptor"/> 必要であれば、 <include path="j2ee.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.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>