Tomcat5めも(2)

作成 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が参考になるでしょう。

web.xmlの変更

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>

JSP2.0の新機能

JSPは以前のバージョン1.2から2.0へと大きくバージョンアップしました。追加、変更された機能について見ていきます。

EL(Expression Language)

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を使っていれば、なんとなく馴染みのある方法でしょう。

↓その他補足

詳細は参考、その他の文献を見てください。

<jsp:attribute>と<jsp:body>標準アクション

@TODO

シンプルタグハンドラ

@TODO

タグファイル

@TODO

JSPフラグメント

@TODO

JSPコンフィグレーション

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>

サーブレット2.4

サーブレットAPIは2.3から2.4になり、微妙な改良が加えられました。

リクエストリスナ

ServletRequestListener、ServletRequestAttributeListenerインターフェイスが追加されました。ServletRequestListenerの方はリクエストの開始、終了をフックでき、ServletRequestAttributeListenerの方は、requestへの属性追加、削除、置換のイベントを拾えます。

web.xmlは他のリスナークラスと同様の書式でlistener/listener-classに記述します。

リクエストディスパッチャフィルタ

フィルターが拡張され、フォワードやインクルードなど(REQUEST、FORWARD、INCLUDE、ERROR)のディスパッチ時にフィルターを指定できるようになりました。


TOP