JSPもPHPと同様、HTML文書に埋め込んで記述するサーバーサイドスクリプトです。
JSPの記述言語はJavaなので、PHPにおける
「PHP言語」のような新たな記述言語を覚える必要はないのですが、
PHP言語に対するPHPエンジン(実行プログラム)が今のところ世界で一種類しかないのに比べ、
JSPエンジン(JSPコンテナ)
は市販の製品やTomcatのようなオープンソースのものなどたくさんあり、
若干環境に影響される面があります。
これからご紹介するスクリプトは全て Jakarta Tomcat 4.0.2b1
で動作確認しています。日本語はeuc-jp環境です。
それではまず、「Hello, World」を。
それだけだと退屈なので、少し欲張って現在の日時を表示させてみます。
<%@ page language="java" contentType="text/html;charset=euc-jp" %>
<%@ page import="java.util.*" %>
<html><head><title>JSPで時刻を表示するサンプル</title></head>
<body bgcolor="white">
<%!
private String getDateTimeString(){
GregorianCalendar cal = new GregorianCalendar();
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH) + 1;
int day = cal.get(Calendar.DAY_OF_MONTH);
int hour = cal.get(Calendar.HOUR_OF_DAY);
int minute = cal.get(Calendar.MINUTE);
int second = cal.get(Calendar.SECOND);
String s = String.valueOf(year) + "-" +
((month < 10) ? "0" : "") + String.valueOf(month) + "-" +
((day < 10) ? "0" : "") + String.valueOf(day);
s += " " + ((hour < 10) ? "0" : "") + String.valueOf(hour) + ":" +
((minute < 10) ? "0" : "") + String.valueOf(minute) + ":" +
((second < 10) ? "0" : "") + String.valueOf(second);
return s;
}
%>
<h1>Hello, JSP World!</h1>
<%
out.println("只今の時刻は、" + getDateTimeString() + "です。");
%>
</body></html>
|
JSPのコードは<%〜%>または<%!〜%>で囲んだ間に書きます。
JSPを全く知らないつもりになって、ものすごく省略して説明すると、
<%!〜%>の中には関数(メソッド)の定義や変数の定義など、
このJSPがサーブレットに化けた瞬間
(通常、Tomcatが起動して最初にこのページがロードされるとき)
だけ実行されればよい処理を、
<%〜%>の中には、ページがロードされるたびに実行されるべき処理を書きます。
JSPコードの中で、HTTPストリームに文字列を書き出すには、
典型的にはout.printlnメソッドを使います。
outは幾つかあるJSPの組み込みインスタンス変数のひとつで、
応答HTTPストリームへのデータの書き出しをつかさどるクラスJspWriter
のインスタンスです。
Javaコードの中で、java.util.なんとかとか、java.io.なんとかとかの標準クラスを使いたい場合には、
page importという疑似命令(ディレクティブ)
を使います。ここで、Javaソースコードのimport文のようにクラスを指定します。
パッケージに含まれる全てのクラスをインポートしたい場合には*を使えます。
また、複数のクラスをインポートしたい場合にはカンマで区切って並べることができます。
この例では、標準クラス java.util.GregorianCalendar を使っています。
HTMLのコメントは
<!-- コメント -->
と書きますが、同様にJSPのコメントは
<%-- コメント --%>
と書きます。HTMLのコメントはHTML文書の一部となってクライアントに送信されますが、
JSPのコメントはクライアントには見えません。
JSPでもPHPと同様、よく使うロジックなどを別ファイルに固めておき、
各JSPスクリプトからこれを呼び出す、ということが可能です。
上の例では、現在の日時を文字列にして返す処理が、
Javaでは若干たくさんのコードを書かなければならず面倒に思われますね。
そこで、この部分を共通ファイルに出してしまいます。
この共通ファイルには本来HTMLの部分とJSPの部分を混在させて書くことができるのですが、
どちらか片方しかなくてももちろん構いません。
HTMLだけのインクルードファイルを作ることも、
JSP(Javaコード)だけのそれらを作ることも可能です。
ただし、純粋なJavaコードの再利用のためには、
インクルードファイルを使うよりも、JavaBeans
の形にしたほうが、開発の再利用性だけでなくサーバの性能向上にもつながるので、
この例はあまり適した例ではありません。
ちょっとその点だけ注意が必要です。JavaBeansについては後のページで出てきます。
<%!
private String getDateTimeString(){
GregorianCalendar cal = new GregorianCalendar();
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH) + 1;
int day = cal.get(Calendar.DAY_OF_MONTH);
int hour = cal.get(Calendar.HOUR_OF_DAY);
int minute = cal.get(Calendar.MINUTE);
int second = cal.get(Calendar.SECOND);
String s = String.valueOf(year) + "-" +
((month < 10) ? "0" : "") + String.valueOf(month) + "-" +
((day < 10) ? "0" : "") + String.valueOf(day);
s += " " + ((hour < 10) ? "0" : "") + String.valueOf(hour) + ":" +
((minute < 10) ? "0" : "") + String.valueOf(minute) + ":" +
((second < 10) ? "0" : "") + String.valueOf(second);
return s;
}
%>
|
ファイル名は拡張子を含めて何でも構いません。
ここでは「hello-included.inc」と名づけて、
本来のJSP文書と同じディレクトリに保存します。
次に、上のファイルをインクルードするJSP文書の例です。
<%@ page language="java" contentType="text/html;charset=euc-jp" %>
<%@ page import="java.util.*" %>
<html><head><title>JSPで時刻を表示するサンプル</title></head>
<body bgcolor="white">
<%@ include file="hello-included.inc" %>
<h1>Hello, JSP World!</h1>
<%
out.println("只今の時刻は、" + getDateTimeString() + "です。");
%>
</body></html>
|
このように、よく使う部分だけを別ファイルに切り離すことで、
HTML文書のヘッダ部などの共通化を図ることが可能です。
(first uploaded 2001/12/24 last updated 2003/08/15, KOUKEN HEIJIMA)
|