OKLabのタイトルロゴ

JSP2.0入門

目次

JSP2.0とは

  JSP2.0はJSP1.2を拡張したものです。J2SE 1.3以上、Servlet 2.4仕様の環境で動作させることができます。 大きな変更点のひとつにExpression Languageの導入があります。この機能を使うことでJSP1.xで記述していた スクリプトレット形式をタグ形式に変更することができるので、JSPの可視性が向上します。またif,forなどの 制御文もELで実現されました。ほかには、Tag Filesをいうタグライブラリの拡張機能があります。今までの タグライブラリは、多くの設定ファイルが必要でした。これを簡素化することができます。XML View機能は JSPをXMLで処理できるようにする機能です。XMLは多くのプログラミング言語から解析(parse:パース)する事が できるので、今後JSPは、表示するだけのテクノロジーだけでなくデータのやり取りなどでも使われてきそうです。 それでは、早速はじめてみましょう。。。

対象読者

JSTL開発経験者、JSTLを理解している方。

動作環境

インストール

ここでは、SDK(Software Development Kit)のインストール方法は説明していません。
SDKのインストール方法がわからない方はJava入門を確認してみてください。
Tomcat 5.0.9のインストールを説明します。Tomcat 5.0.9はインストールウィザードがあるので、
特に迷うことなくインストールできると思います。
インストールウィザードが開始されます。
まだ英語版のようですがそのまま、Nextを選択します。


ライセンスの確認です。I Agreeを選択します。


今回は、Normalでインストールします。
Fullインストールだと、ソースコード、windowsサービスへの登録が行われます。 Examplesは参考になりますのでインストールしましょう。


インストール先を指定します。どこでもかまいませんが、今回はC:\直下にインストールします。


Tomcat4.xからWeb管理ができるようになりました。その管理ツールの管理者パスワードを指定します。
とりあえず、開発するのでadminで問題ないでしょう。


インストーラがJVMの場所を勝手に探してくれます。そのまま選択してください。
VMをいくつかインストールしている方は、1.3 laterでなければならないようです。
JSP2.0のSpecificationに書いてありました。


インストールが開始されます。コーヒーでも飲んで待ちましょう。


終了したらそのままFinishを押しましょう


動作確認

アドレスを指定して(http://127.0.0.1:8080)ブラウザで動作しているか確認してみてください。
Tomcatが起動していなかったら以下のバッチファイルで起動してみてください。

C:\Tomcat 5.0\bin\startup.bat

コンテキストの作成

テスト用のコンテキストを作成します。
下記の図のようにwebappsフォルダ内にhoge\WEB-INF\classesを作成してください。
今後、開発はこのコンテキスト内で行います。


またこのコンテキストの設定ファイルも作る必要があります。
設定ファイル名はweb.xmlで必須となります。
これは、hogeフォルダに置きます。以下にサンプルを載せておきます。


<?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">

    <description>
      hoge
    </description>
    <display-name>hoge</display-name>
</web-app>

もう一度、フォルダの図を見てもらいたいのですが、Tomcat 5.0\webappを確認すると 最初からjsp-examples, ROOT, servlet-example, tomcat-docsというコンテキストが 存在するのがわかると思います。是非web.xmlがどこに置かれているかなど確認してみてください。

Expression Language

Expression Languageは日本語で式言語ともいわれています。この仕組みを使用することでJSPから<%のような スクリプトをなくしていくのですが、このテクノロジー自体はJSTL(Java Statard Tag Library)として公開されています。 なので、このJSP2.0入門ではExpression Languageについては説明しません。当サイトでExpression Languageを学ぶ方は JSTL入門があります。

Taglib拡張

JSP2.0ではJSP内をスクリプトレスにしようとしている傾向があります。そのためいままでのTaglibを利用するとスクリプトを記述する 可能性が出てきてしまいます。そのためTaglibの機能も拡張されました。実際に動作させながら確認していきましょう。

Functionsを使ってみる

Functionsを作るステップ

クラスを作成する。

このクラスはpublicでメソッドはstaticで定義しなければならない。

package hoge;

public class FunctionHoge {
        public static String addString(String str1, String str2) {
                return "<h1>" + str1 + " java " + str2 + "</h1>";
        }
}

taglibディスクリプタを定義する(hoge-taglib.tld)


<?xml version="1.0" encoding="UTF-8" ?>

<taglib 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-jsptaglibrary_2_0.xsd"
    version="2.0">
    <description>A tag library exercising SimpleTag handlers.</description>
    <tlib-version>1.0</tlib-version>
    <short-name>SimpleTagLibrary</short-name>
    <uri>/SimpleTagLibrary</uri>
    <function>
        <description>hoge</description>
        <name>addString</name>
        <function-class>hoge.FunctionHoge</function-class>
        <function-signature>java.lang.String addString( java.lang.String, java.lang.String)</function-signature>
    </function>
</taglib>

JSPにタグを書き込む(test.jsp)


<%@ taglib uri="/WEB-INF/hoge-taglib.tld" prefix="hoge" %>
<html>
<head>
<title>Functions</title>
</head>
<body>
${hoge:addString("hello","world")}
</body>
</html>

web.xmlのjsp-configについて

今回のサンプルでは、

<%@ taglib uri="/WEB-INF/hoge-taglib.tld" prefix="hoge" %>

のように書いてディレクトリを直接指定しましたが、web.xmlのjsp-config設定を行うこともできます。

<?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">

    <description>
      hoge
    </description>
    <display-name>hoge</display-name>
    <jsp-config>
        <taglib>
            <taglib-uri>
               http://127.0.0.1/hoge-taglib
            </taglib-uri>
            <taglib-location>
               /WEB-INF/hoge-taglib.tld
            </taglib-location>
        </taglib>
    </jsp-config>
</web-app>
上記のようにweb.xmlを指定した場合は、

<%@ taglib uri="http://127.0.0.1/hoge-taglib" prefix="hoge" %>

のようになるでしょう。

Simple Tag Extension

JSF,JSTL,jakarta-taglibsをご存知でしょうか?一般によく使われている機能をタグ・ライブラリ としてライブラリ化をして配布したものです。このライブラリを利用すれば、Javaを知らなくても HTML,JSPでのエンド開発が行えます。この機能はJSP1.xでもtaglibとして存在していますが JSP2.0からはSimpleTagSupportクラスを継承することで記述することができるようになりました。 これによりスクリプトレスなJSP開発が行えます。 実際に簡単なサンプルを作成してどのようなものか確認していきたいと思います。
Taglib作成手順
独自のタグのためのクラスHelloWorld.javaを作成

package hoge;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;
import java.io.IOException;

public class HelloWorld extends SimpleTagSupport {
        public void doTag() throws JspException, IOException {
                getJspContext().getOut().write("<h1>Hello Java World!</h1>");
        }
}
タグディスクリプタhoge-taglib.tldの登録

<?xml version="1.0" encoding="UTF-8" ?>

<taglib 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-jsptaglibrary_2_0.xsd"
    version="2.0">
    <description>A tag library exercising SimpleTag handlers.</description>
    <tlib-version>1.0</tlib-version>
    <short-name>SimpleTagLibrary</short-name>
    <uri>/SimpleTagLibrary</uri>
    <tag>
        <description>SimpleTag</description>
        <name>helloworld</name>
        <tag-class>hoge.HelloWorld</tag-class>
        <body-content>empty</body-content>
    </tag>
</taglib>
表示するJSP(hello.jsp)の作成

<%@ page contentType="text/html; charset=iso-8859-1" %>
<%@ taglib uri="/WEB-INF/hoge-taglib.tld" prefix="hoge" %>
<html>
<head>
<title>Functions</title>
</head>
<body>
<hoge:helloworld/>
</body>
</html>
http://127.0.0.1:8080/hoge/hello.jspと入力して表示して確認してみましょう。以下のように表示されると思います。

Tag File

<jsp:include>のようにファイルを読み込む機能です。<jsp:include>と 異なるのは、タグを記述して読み込むため、属性を指定できることです。 以下は属性に色を指定したサンプルです。

まず、.tagファイルを作成します。これは/WEB-INF/tagsディレクトリに保存します。 (style.tag)

<%@ attribute name="color" %>
<span style="background-color:${color}"><jsp:doBody/></span>
次にコンテキスト直下に表示するためのJSPを作成します。(view.jsp)

<%@ page contentType="text/html; charset=iso-8859-1" %>
<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>
<html>
<head>
<title>view.jsp</title>
</head>
<body>
<tags:style color="#ff0000">red</tags:style><br>
<tags:style color="#00ff00">green</tags:style><br>
<tags:style color="#0000ff">blue</tags:style><br>
</body>
</html>
タグの指定の仕方は以下のようになります。

<プリフィックス:タグファイル名 タグファイル属性="">任意のデータ</プリフィックス:タグファイル名>

http://127.0.0.1:8080/hoge/view.jspと入力して表示して確認してみましょう。以下のように表示されると思います。



最後に

今回、JSP2.0でJSP1.xからどのように拡張されたか学びました。何度も繰り返すようですがスクリプトレス化することがテーマのようです。また、今までMVCモデルのようにServletに遷移コントローラを任せていたスタイルからJSPからJSP遷移のような開発スタイルがふえるのではないでしょうか。これはHTMLリンクに近いイメージになると思います。参考資料などを元にここで紹介されていない機能なども確認してみてください。

参考資料

用語

スクリプトレス(scriptless)
JSP1.xでのJSP開発では、<%記号によるスクリプトレットを宣言しその中にJavaソースを記述することで 開発していました。Perlなどのスクリプト言語のように手動でコンパイルせずに開発できるのは効率上よかったのですが、可視性に優れませんでした。 JSP2.0からはスクリプトレットをJSPから排除しようとするスクリプトレスが1つのテーマになっています。


$Date: 2004/01/18 14:05:48 $