JSP/Servlet | JSP(Java Server Pages) | 複数行のコードを実行する
これで、JSPではJavaコードがサーバーサイドで実行されることがわかった。しかし、<%= ~ %>でできるのは1つの式の結果を出力することだけだった。これしかできないとなると少し困る。もっと長い文のコードを実行しなければならない場合も多いだろう。
このような場合に使うのが<% ~ %>というタグである。これは<%から%>の間にJavaコードを書くと、その内容が実行される。結果を出力するものではなく、単に実行するだけなので、必要に応じて結果を出力する処理は自分で書く必要がある。
もう一つ知っておくべきものが「import」である。Javaでは、よく使うクラスをパッケージ名なしでクラス名だけで使えるように、先頭にimport文を追加するのが一般的である。JSPではpageディレクティブを使って指定する。
<%@ page import="クラス指定"%>
このように記述すると、指定されたクラスはパッケージを省略して使用できる。もちろんワイルドカード(*)も使用できる。
それでは、前の例を少し修正してみよう。
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ page import="java.util.Calendar" %>
<%@ page import="java.text.SimpleDateFormat" %>
<%
Calendar calendar = Calendar.getInstance();
SimpleDateFormat format = new SimpleDateFormat("yyyy年 MM月 dd日");
String result = format.format(calendar.getTime());
%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Sample jsp</title>
<style>
h1 {font-size:16pt; background:#AAFFAA; padding:5px; }
</style>
</head>
<body>
<h1>Sample jsp page</h1>
<p>このページはサンプルです。</p>
<p><% out.println(result); %></p>
</body>
</html>
上のように修正してから再度実行すると、今日の日付が表示されることを確認できる。今回はSimpleDateFormatを使ってDateを指定したフォーマットで表示している。
暗黙オブジェクト「out」について
今回の例では、フォーマット済みテキストを出力する箇所で<%= ~ %>を使わず、out.println(result);のようにすると出力される。この「out」とはいったい何だろうか。
これはJSP特有のもので、「暗黙オブジェクト」と呼ばれる。暗黙オブジェクトとは、JSPコードの中で何も宣言しなくても、とにかく自由に使えるオブジェクトである。
この「out」はJspWriterというクラスのインスタンスで、簡単に考えるとSystem.outのoutの仲間だと思えばよい。この中に含まれているprintやprintlnのような出力メソッドを呼び出すと、それがそのままWebページに出力される。よく使うので覚えておこう。