今さらながらStruts+Tomcatの環境周りまとめ
研修の講師をやることになり、サンプルアプリを作ることになったので、Struts+Tomcatでアプリを作ろうとしたら、開発環境構築で大分躓いてしまいました。久しぶりでほとんど覚えてなかったのでメモっておきます。
使用したStrutsのバージョンは1.2.9、Tomcatのバージョンは5.5です。*1
Tomcatと各JavaEE仕様のバージョンの対応
JavaEE Servlet JSP EJB JSF 備考 Tomcat4.x 1.3 2.3 1.2 2.0 Tomcat5.x 1.4 2.4 2.0 2.1 Tomcat6.x 5.0 2.5 2.1 3.0 1.2 JAX-WS2.0、JAXB2.0、JPA1.0、JSFとJSTLの共存が可能 Tomcat7.x 6.0 3.0 2.2/EL2.2 3.1 2.0 JAX-RS、CDIなどが追加、JAX-WS2.2、JAXB2.2、JPA2.0
JSTL/EL式とTomcatとの関係
JSTL EL式 備考 Tomcat4.x 1.0 △ ※EL式使うときはJSTL1.0が必須 Tomcat5.X 1.1 ○ ※JSTLなくてもEL式は使用可能(JSP2.0の標準仕様、Tomcatがcommons-el.jarを含んでいる) Tomcat6.x 1.1 ○ 1.2も使おうと思えば使える Tomcat7.x 1.2 ○ JSTL 1.2 には JSP 2.1 コンテナーが必要なこと、またJSTL 1.2 以降では JSTL が Java EE の一部を構成することに注意*2
- JSTL1.2 のライブラリは公式のMavenリポジトリにはない??(未確認)java.net の GrassFish のリポジトリから取得するよう
バージョン対応表など詳しくは
-
JavaEE6
-
JavaEE5
その他
その他Tomcat4.xとTomcat5.x以降で気をつけるべきこと
Tomcat4.x
- web.xmlの宣言がDTD(Servlet2.3)
- EL式をStrutsカスタムタグ内部で使いたいときは、Struts-ELタグライブラリを別途用意する
- tablibディレクティブのuri属性の値はhttp://java.sun.com/jstl/core
- <%@page isELIgnored=“false” %>が必要
- web.xmlの要素は、単独でそのまま記述
Tomcat5.x以降
-
web.xmlの宣言がXMLスキーマ(Servlet2.4)
- これを忘れるとEL式が評価されず${hoge}とかそのまま出力される
-
Strutsカスタムタグ内部にEL式がそのまま使える
-
pageディレクティブのisELIgnoredは不要(デフォルトでELが使える)
-
taglibディレクティブのuri属性の値はhttp://java.sun.com/jsp/jstl/core
-
web.xmlの要素は、の子要素として記述
JSTLのtaglib宣言について
実はweb.xml内のでの宣言は不要です。
standard.jarの中のMETA-INFフォルダの中にTLDファイルが同梱されており、そのTLDファイルに要素と属性uriが記述されています。サーブレットコンテナはWEB-INF/libの中にjarが入っていれば、jarの中までTLDファイルを探しに行くため、以下は不要となります。
- WEB-INF/lib内にTLDファイルの配置
- web.xml内ので、JSTLのTLDファイルのパス記述
各JSPでのpageディレクティブ宣言の共通化
各JSPのヘッダーに記述するJSTLのprefix設定は、下記の方法で共通化しておくとよい。
- 以下のようなJSPを作成しておく
// taglib.jsp
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
-
web.xmlの要素の子要素である要素内で、要素に上記のJSPのパスを指定
- コンテキストルートからの相対パスがよろしいかと
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<el-ignored>false</el-ignored>
<page-encoding>UTF-8</page-encoding>
<scripting-invalid>false</scripting-invalid>
<include-prelude>/pages/taglibs.jsp</include-prelude>
</jsp-property-group>
2012/1/19 追記
- Tomcatバージョン対応にTomcat7.x と備考欄 を追加
- JSTLとTomcat7.x の記述を追加
- バージョン対応リンク集とその他参考サイトを追加
*1:大分レガシーですが、これがSIerクオリティ
*2:http://www.ibm.com/developerworks/jp/java/library/j-jstlsql/
-—-