JavaServer Pages (JSP)は、HTMLのソースに、特殊なタグとJavaプログラムを埋め込んだものです。
さっそく、JSPの例を見てみましょう。<%と%>のタグに囲まれた部分と、<%=と%>に囲まれた部分にJavaのコードが埋め込まれています。
<%@ page pageEncoding="Shift_JIS"
contentType="text/html; charset=Shift_JIS" %>
<html>
<head>
<title>JSP: for 文を使ったサンプル</title>
</head>
<body>
<%
for (int i = 1; i <= 5; i++) {
%>
<p>サンプル<%= i %></p>
<%
}
%>
</body>
</html>
<%と%>の間に、for文の一部が挟まれています。そして、for文のコードは途中で途切れ、HTMLタグが書かれています。もっとも、よく見ると<%= i %>のようにJavaプログラムの断片が埋め込まれています。その後に、<% } %>という部分があります。これは、先のfor文の始まりとなる中括弧"{"に対応した、閉じの中括弧"}"なのです。
<%= Javaの式%>の形は、式の取る値にtoString()メソッドを適用して得られる文字列に置き換わります。ここでの<%= i %>では、for文の変数iが1から5までの値になるので、それぞれ"1", "2", "3", "4", "5"という文字列に置き換わります。
このJSPページをloop.jspという名前で保存し、TomcatなどのWebコンテナに置いておきます。クライアント側のブラウザからこのJSPページにアクセスがあると、WebコンテナはJSPページに埋め込まれたコードを処理して、HTMLを生成します。この例では、次のようなHTMLが生成されます。
<html> <head> <title>JSP: for 文を使ったサンプル</title> </head> <body> <p>サンプル1</p> <p>サンプル2</p> <p>サンプル3</p> <p>サンプル4</p> <p>サンプル5</p> </body> </html>
ブラウザでは、次のように表示されます。
出力例: サンプル1 サンプル2 サンプル3 サンプル4 サンプル5
ここでは、JSPで使われる要素について説明しましょう。
JSPページ全体に関わることについて定義します。
構文:
<%@ ディレクティブ名 属性とその値 %>
例:
<%@ page pageEncoding="Shift_JIS"
contentType="text/html; charset=Shift_JIS" %>
<%@ page import="java.util.Date" %>
<%@ page import="java.text.DateFormat" %>
まず1行目で、JSPページそのもののエンコーディングを指定しています。この例では、Shift_JISにしています。2行目で、生成されるページがHTMLであり、文字コードがShift_JISであることを指定しています。さらに、3行目と4行目で、java.util.Dateとjava.text.DateFormatの2つのクラスをインポートしています。
JSPページで利用される変数を宣言します。
構文: <%! 宣言 %> 例: <%! int i = 0; %> <%! int a, b, c; %> <%! Circle c = new Circle(2.0); %>
最後のセミコロンを忘れないようにしましょう。
JSPページで使われる式を記述します。<%= Javaの式%>の形は、式が返す値にtoString()メソッドを適用して得られる文字列に置き換わります。セミコロンは付けません。
構文: <%= Javaの式 %> 例: いまは <br /> <%= df.format(d) %> <br />です。
JSPページで使われるプログラムを記述します。
構文:
<% プログラム %>
例:
<%
String name = null;
if (request.getParameter("name") == null) {
%>
<p>not found!</p>
<%
} else {
foo.setName(request.getParameter("name"));
}
%>
現在の日時を表示するJSPページです。
<%@ page pageEncoding="Shift_JIS"
contentType="text/html; charset=Shift_JIS" %>
<%@ page import="java.util.Date" %>
<%@ page import="java.text.DateFormat" %>
<html>
<head>
<title>JSP: 現在の日時を示すサンプル</title>
</head>
<body>
<%
Date d = new Date();
DateFormat df = DateFormat.getDateTimeInstance();
%>
<p>
いまは
<br />
<%= df.format(d) %>
<br />です。
</p>
</body>
</html>
JSPページをTomcat上で動かすには、次のようにします。
Tomcatをインストールしているディレクトリを%CATALINA_HOME%とします。まず、%CATALINA_HOME%/webappsディレクトリの中に新たなディレクトリを作成します。ここでは、testという名前のディレクトリを作成します。JSPページは、testディレクトリの中に配置します。
testディレクトリ以下は、.warという拡張子を持つファイルにまとめることもできます。warファイルは、jarファイルと同じフォーマットのファイルです。
testディレクトリにloop.jspを追加したときのファイル構成は、次のようになります。
%CATALINA_HOME% -- webapps/ -- test/
|
|-- WEB-INF/ --- web.xml
| |- classes/
| |- lib/
|-- loop.jsp
WEB-INF/classesディレクトリには、Webアプリケーションが直接利用するファイルが入ります。Servletはこのディレクトリに格納されます。
WEB-INF/libディレクトリには、Webアプリケーションが利用するライブラリが入ります。
WEB-INF/web.xmlファイルは、WebアプリケーションのDeployment Descriptor (DD)ファイルです。Webアプリケーションの動作に必要な情報が記述されています。次のような、XMLのファイルです。Servletを利用するなら、もっと複雑になります。
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>JSP_Samples</display-name>
<description>
JSP Samples
</description>
</web-app>
まず、Tomcatを起動します。
Tomcatがlocalhost上の8080番ポートで動いているならば、この例のloop.jspには次のようなURLでアクセスします。
http://localhost:8080/test/loop.jsp
testディレクトリ以下のファイル構成に変更があったり、修正を加えたりしたら、Tomcatの再起動が必要になります。