JSP関連のタグについて
ここでは、HTMLの見慣れたタグ以外に、なんだかよくわからないタグがいろいろと使われていますね。これらが、JSPのタグなのです。JSP関係のタグの基本は「<%で始まり、%>で終わる」という形になっています。この点に注目をしてリストを読んでください。
では、最初から順にJSP関係のタグについて説明をしていきましょう。
<%@page contentType="text/html" %>
<%@page pageEncoding="UTF-8" %>
これは、それぞれ「このページのコンテンツの種類と、エンコーディング方式を指定するためのタグ」と考えてください。このような<%@で始まり、%>で終わるタグは、「ディレクティブ(指令)」と呼ばれます。これは<%@の後に「page」とありますから「Pageディレクティブ」と呼ばれます。
このPageディレクティブは、このページに関する各種の情報を記述するために用いられるものです。ここではcontentTypeとpageEncodingというものがタグの中で指定されていますね。これらがコンテンツの種類として"text/html"を、エンコーディングとして"UTF-8"をそれぞれ設定していたのです。Javaサーバは、これらのディレクティブを元に「このページはUTF-8で記述されたHTMLのファイルなんだな」ということを理解します。これらのディレクティブを忘れると、このファイルの種類がわからなくなったり、エンコーディングがわからなくて文字化けしたりといったトラブルにつながる可能性があります。
<%@page import="java.util.*" %>
<%@page import="java.text.*" %>
続いて、これらのPageディレクティブでは「import」という値を設定しています。これは、このページで記述されるJavaのソースコードで利用される「import文」を記述するものです。
Javaのソースコードでは、多用するクラスなどがあると、あらかじめimport文でそのパッケージやクラスを宣言しておきますね? そうすることで、クラス名だけで検索できるようにするわけですが、JSPでもこのようにPageディレクティブでimportを用意しておくことで、それらをクラス名だけで検索できるようにしてくれます。
さて、肝心の「Javaのソースコードを記述している部分」についてです。これは、<h1>JSP Page</h1>のタグの下にありますね。この部分をよく見ると、こんな具合に書かれていることがわかるでしょう。
<%
・・・Javaのソースコード・・・
%>
要するに、<%記号から%>記号までの間にJavaソースコードを記述しておくと、JavaサーバはこれをJavaのプログラムとして実行するようになっているのですね。ここでは、GregorianCalendarとSimpleDateFormatを使って今日の日付をフォーマットしたStringを作成しています。それぞれjava.utilとjava.textのパッケージに用意されているクラスですね。先にPageディレクティブでこれらのパッケージをimportしていたのは、これらのクラスを利用する必要があったからだった、というわけです。
この<% %>タグは、非常に面白い性質を持っています。同じページ内にいくつこのタグがあっても、そこに書かれているソースコードは「全部ひと続きにつながっている」ものとして処理されるのです。
<%
GregorianCalendar cal = new GregorianCalendar();
SimpleDateFormat format = new SimpleDateFormat("yyyy年M月d日 E曜日");
%>
<%
String datestr = format.format(cal.getTime());
out.println("今日は、" + datestr + "です。");
%>
たとえば、<% %>タグの部分をこんな具合に書いたとしましょう。2つの<% %>タグに分かれていますね。けれど、プログラムはまったく問題なく動きます。いくつ<% %>タグがあっても、それらはすべてひとつのJavaのソースコードとして認識されるのです。変数なども共有して使えますし、両者の間にHTMLのタグなどが挟まっていても問題なく動きます。
なお、ここでは複数の処理を実行するので<% %>というタグを使いましたが、単に「Javaの何らかの値を出力する」ということなら、<%= %>というタグを使うこともできます。たとえば、
<%="今日は、" + datestr + "です。" %>
こんな具合にすることで、そこに書かれた値をブラウザに出力できます。あわせて覚えておくとよいでしょう。