作成 2003/1/14
(まだちょっと@TODO多い)
サーブレット2.4、JSP2.0の新機能を調べてみます。J2EE1.4の仕様はちょっと伸びて昨年末(2003/11/24)にFinalになりました。今年は、J2EE1.4対応のアプリケーションサーバが続々登場してくるでしょう。ここでは、Tomcat5を使い、J2EE1.4のサブセット(一部)であるサーブレットAPI2.4、JSP2.0について見ていきます。
ここでは、以下の情報源を参考にしました。
SunのJ2EEページ
http://java.sun.com/j2ee/
ドキュメントおよび、その中のAPIリファレンスはよく読むかも。
J2EE Tutorial
http://java.sun.com/j2ee/1.4/docs/tutorial/doc/index.htm
Tutorialは参考になります。
J2EE スキーマ集
http://java.sun.com/xml/ns/j2ee/
XMLスキーマ定義はこのページから
Java Press vol.28 ザJ2EE1.4 Servlet2.4 / JSP2.0
一年前のFinal以前の資料ですが大きく変更はないでしょう。
また、コードのサンプルとしては、Tomcat付属のjsp-examplesおよびservlet-examplesが参考になるでしょう。
J2EE1.4では、web.xmlなどのDD(デプロイメントデスクリプタ)ファイルが変更になりました。スキーマがDTDからXMLスキーマになりました。サーブレット2.4/JSP2.0の新機能を使うには、新しいバージョンでweb.xmlを記述する必要があります(もちろん、新機能を使わない場合は、前のバージョンで動作します)。
新web.xmlの例
<?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-app_2_4.xsd" version="2.4"> </web-app>
JSPは以前のバージョン1.2から2.0へと大きくバージョンアップしました。追加、変更された機能について見ていきます。
EL(式言語?)を使うと、スクリプトレットやカスタムタグとは別の記述方法で、ビーンのプロパティーにアクセスできます。また簡単な論理式や計算を、ELの書式内に記述することができます。
例えば、こういうクラス(Man.java)があるとします。このクラスはnameとageというプロパティを持っています。このクラスにELを使ってアクセスするJSPの例は次のようになります。
<%@ page import="foo.*" %> <html> <body> <% request.setAttribute("man",new Man("taro",10)); %> ${man.name} </body> </html>
注。分かりやすさのために、スクリプトレットを使っています。実際はスクリプトレットレスを目指しましょう
ListやMapの場合は、ちょっと違った方法でアクセス可能です。Listの場合は、[インデックス]、Mapの場合は、[キー](連想配列みたいな感じ)でアクセスできます。
<%@ page import="foo.*, java.util.*" %> <html> <body> <h2>TEST</h2> <% Man man = new Man(); man.setName("taro"); man.setAge(10); request.setAttribute("man",man); Map map = new HashMap(); map.put("man1", new Man("taro", 10)); map.put("man2", new Man("hanako", 20)); request.setAttribute("map",map); List list = new ArrayList(); list.add(new Man("john", 30)); list.add(new Man("meg", 40)); request.setAttribute("list", list); %> ${map["man1"].name} ${list[0].name} </body> </html>
この例のように"."を続けてプロパティーのプロパティーの...という風にアクセスすることができます。VelocityやStrutsを使っていれば、なんとなく馴染みのある方法でしょう。
↓その他補足
詳細は参考、その他の文献を見てください。
@TODO
@TODO
@TODO
@TODO
web.xmlでのJSPの設定をjsp-config要素の下にまとめて記述するようになりました。taglib要素もjsp-config要素の子要素に記述します。また、jsp-property-group要素で、JSPに関するいくつかの便利な設定が記述できるようになりました。以下は、Tomcat付属のjsp-examplesのweb.xmlからの抜粋です。デフォルトの文字コード(page-encoding)、ヘッダ(include-prelude)、フッダ(include-coda)、ELを無視するか(el-ignored)、スクリプトレットを無効にするか(scripting-invalid)などを指定できます。
<jsp-property-group> <description> Special property group for JSP Configuration JSP example. </description> <display-name>JSPConfiguration</display-name> <url-pattern>/jsp2/misc/config.jsp</url-pattern> <el-ignored>true</el-ignored> <page-encoding>ISO-8859-1</page-encoding> <scripting-invalid>true</scripting-invalid> <include-prelude>/jsp2/misc/prelude.jspf</include-prelude> <include-coda>/jsp2/misc/coda.jspf</include-coda> </jsp-property-group>
サーブレットAPIは2.3から2.4になり、微妙な改良が加えられました。
ServletRequestListener、ServletRequestAttributeListenerインターフェイスが追加されました。ServletRequestListenerの方はリクエストの開始、終了をフックでき、ServletRequestAttributeListenerの方は、requestへの属性追加、削除、置換のイベントを拾えます。
web.xmlは他のリスナークラスと同様の書式でlistener/listener-classに記述します。
フィルターが拡張され、フォワードやインクルードなど(REQUEST、FORWARD、INCLUDE、ERROR)のディスパッチ時にフィルターを指定できるようになりました。