GO BACK

JSP教室 その2


「スクリプトを実行する」


■スクリプトで表示をする

 さて、結局、第1回目はHTMLで表示をしただけで、具体的にJSPらしいことはやってませんでした。今回は、実際に「JSPならではの機 能」を使ってみることにしましょう。では、さっそくJSPファイルを作成しましょう。新たにJSPファイルを作成して「myJSP」フォルダの中に保存し てもいいですし、先のtest1.jspファイルをそのまま書き換えて使ってもよいでしょう。

<%@ page
contentType="text/html; charset=Shift_JIS"
pageEncoding="Shift_JIS" %>
<html>
<head>
<title>Test JSP</title>
</head>
<body>
<h2>
<%=new java.util.GregorianCalendar().getTime() %>
</h2>
</body>
</html>


 今回は、HTMLの中に2ヶ所、JSPのタグが追加されています。では、これをWebブラウザからアクセスしてみるとどのように表示されるで しょうか。



 ざっとこんな表示がされれば成功です。これは、アクセス時の日時を表示するサンプルだったのですね。――今回は、2つのタグを利用しました。まず、順番 に説明しておきましょう。

<%@ page>タグ

 まず、このようなタグが冒頭にあります。これは、「pageディレク ティブ」といって、ページの表示に関する設定を指定するのに用いるものです。ここでは「contentType」「pageEncoding」という2つのオプションが指定されていますね。前 者はコンテンツのタイプを指定するもので、後者は文字エンコーディング方式を指定するものです。ここでの指定は、text/htmlのコンテントタイプで シフトJISを使って書かれているのを指定するものです。これは、「こう書くもんだ」と思って丸写しするようにしておきましょう。ま、日本語を使わなけれ ば指定しなくてもだいたいは問題ないんですが。

<%= 実行する文 %>タグ

 もう1つのタグが、Javaの文を実行し、その結果を表示するためのものです。<%=の後に記述したJavaの文を評価し、その実行結 果(つまり評価して得られる値)をページに書き出すのです。これは、単純に1つの文を実行し書き出すだけのことしかできませんが、ちょっとした文の実行に は重宝します。

 注意点としては、まず「末尾にセミコロンを書かない」ということでしょう。Javaに慣れていると、つい無意識のうちに「最後にセミコロン」 を打ってしまいますが、ここでは打つとエラーになります。また、サンプルを見ればわかるように、import文などが使えるわけではないので、クラスは パッケージの階層まできっちりと記述して書かないとダメです。(importについては後述します)

 この<%=%>タグは、一言でいえば「OutputSreamのprintlnとおんなじ」といってよいです。ここでは GregorianCalendarのgetTimeでDateインスタンスを返してますね。「インスタンスなんか返して、何が出力されるんだ?」と思っ た人もいるかもしれませんが、ちゃんと日時が出力されました。J2SEで「System.out.println(new GregorianCalendar().getTime());」してどういう出力がされるか試してみましょう。これは、それと全く同じ動作をしている ことがわかります。

※ ちなみに、JSPの入門書とか見るとたいてい、<%= new Date() %>なんてサンプルが出てます。「それは違うだろ」ということで、わざとCalendar使った例にしてみました(笑)。


■Javaのコードをそのまま記述する

 さて、この<%=%>タグは、Javaの文を実行できるのはいいんですが、結局1文を出力するだけなのであまり複雑なことはでき ません。とりあえず「Javaのコードを簡単に実行させたい」という場合、考えないといけないのは次の2点です。

 この2点を解消する方法を考えてみます。とりあえず、先の「現在の日時を出力する」サンプルを、もう少し修正してみましょう。

<%@ page
contentType="text/html; charset=Shift_JIS"
pageEncoding="Shift_JIS" %>
<html>
<head>
<title>Test JSP</title>
</head>
<body>
<%@ page import="java.util.*" %>
<%@ page import="java.text.*" %>
<%
GregorianCalendar gr = new GregorianCalendar();
DateFormat df = DateFormat.getDateInstance(DateFormat.FULL);
String str = df.format(gr.getTime());
out.println("<h2>" + str + "</h2>");
%>
</body>
</html>

 これを保存し、またWebブラウザでアクセスしてみましょう。今度は、(日本語のWindowsでサーバを運用してるならば)日本語で現在の 日付が表示されますよ。



 ここでは、2つの新しい機能が使われています。1つは、既に登場したpageディ レクティブのタグです。

<%@ page import=クラスの指定 %>

ここでは、オプションに「import」というものを指定 していますね。このようにpageディレクティブでimportというのを指定することで、Javaのパッケージをimportすることができます。これ でimportすると、それ以後に記述されるJavaのコードでそれが適用されます。

<% 実行するコード %>

 もう1つは、<%で始まり%>で終わるタグです。これは、その間に記述された文をJavaのコードとして実行するものです。この 文は、複数行に渡っていてもかまいません。普通にJavaのメソッドを書く感覚で書けばよいのです。

 ただし、<%=と違い、「結果を自動的に出力する」なんて機能はありませんから、ページへの出力は自分でコードを書いて行なう必要があ ります。これは「out」と いうオブジェクトを利用します。これは、まあ「JSP版のSystem.outオブジェクトだ」と考えてしまっていいでしょう。J2SEでは何か結果を出 力するのによくSystem.out.printlnなんてしますが、あれと全く同じ感覚でout.printlnすればページにテキストを出力することができます。 JSPで利用可能なオブジェクトは他にもありますが、とりあえずoutだけ覚えておけばページへの出力だけはできるようになりますね。

 ちなみに、ここで作ったサンプルについても簡単に説明を。まず、GregorianCalendarインスタンスを作ります。それから、 java.textパッケージにあるDateFormatクラスからgetDateInstanceメソッドを使ってDateFormatインスタンスを 取得します。これは、日時のフォーマットに関するクラスで、getDateInstanceは日付を特定のフォーマットで表示したいときに使うものです。 で、このインスタンスのformatメソッドでDateインスタンスをフォーマットすれば、サーバマシンのシステム標準の形式(つまり日本語の形式)で フォーマットされた日付情報が得られる、というわけです。

 とりあえず、これで「JavaのコードをJSPファイルの中から直接実行し出力する」ということはできるようになります。実際に簡単なコードを動かして みると動作がよくわかりますよ。


GO NEXT


GO HOME