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ページに出力される。よく使うので覚えておこう。