JSP/Servlet | JSP(Java Server Pages) | Java Server Pagesを作成する
「サーバーでJavaを動作させる」と聞くと、概念的にはよくわからなくても、普通のJavaよりはるかに難しいものだと思うかもしれない。もちろん本格的にJavaサーバー開発を行うなら、それなりに高度な知識が必要になるが、「高度な知識がなければサーバーサイドJavaは使えない」というわけではない。
Javaには「サーバーで簡単にJavaコードを実行する方法」が用意されている。それが「JSP(Java Server Pages)」である。
JSPは、最近のサーバー開発でよく使われるPHPのような感覚で、手軽にJavaコードを実行できる技術である。JSPでは「Javaソースコードを書いてコンパイルして……」といった作業は必要ない。動作原理は、ブラウザーに表示されるHTMLタグの中にJavaコードを書いて実行するというものである。
いずれにせよ、まず実際にやってみるほうがずっとわかりやすいので、とにかくJSPファイルを作って動かしてみよう。
-
[File]メニューの[New]から[Other …]という項目を選択する。
-
画面に「Select a wizard」というダイアログが表示される。ここで作成する項目を選択する。一覧から「Web」にある「JSP File」項目を選択し、次へ進む。
-
「JSP Create a new JSP File」画面へ移動する。ここで作成するファイルの場所とファイル名を入力する。配置場所には「MyGaeApp/war」を入力する。下にあるプロジェクト「MyGaeApp」アイコンを展開し、その中の「war」フォルダーをクリックしても設定できる。また、ファイル名はここでは「helo.jsp」とする。JSPファイルはこのように「.jsp」拡張子を指定する。
-
そして「Next>」ボタンを押して次へ進むと、「Select JSP Template」画面が表示される。ここで使用するテンプレートを選択する。ここでは一覧の上から4番目にある「New JSP File (html)」という項目を選択する。これが最も一般的なJSPの作成方法である。別のものを選んでも後でソースコードを編集すれば何とかなるので、実際には何でも構わない。
これで「Finish」ボタンで終了すると、「war」フォルダーに「helo.jsp」というJSPファイルが作成される。もし間違って別の場所に作成された場合は、そのままファイルのアイコンをドラッグして「war」フォルダーへ入れればよい。
JSPファイルの編集
まず、作成したJSPを編集してページを作ってみよう。最初にページのエンコーディングをUTF-8に変更する必要がある。
Project Explorerで「helo.jsp」を選択し、[File]メニューから[Properties]を選択する。画面にhelo.jspファイルの設定ウィンドウが表示される。
このウィンドウは左側に設定項目が一覧表示され、ここで項目を選択すると、その具体的な構成内容が右側に表示されるようになっている。この一覧から「Resource」を選択する。おそらくデフォルトで上部のこのメニューが選択されているはずだ。
画面にファイルの属性などの設定が表示される。ここで下部にある「Text file encoding」を見ると、「Default」ラジオボタンが選択されているはずだ。これを「Other」に変更し、右側のコンボボックスから「UTF-8」を選択する。これで「OK」ボタンを押してダイアログを閉じると、ファイルのエンコーディングが変更される。

すべてのソースコードのエンコーディングの「Default」を変更することもできる。まず環境設定を開き、[Preferences]画面が表示されたら、左側で[Content Types]を選択し、[JSP]項目を選択する。ここでファイルの「Default encoding」をUTF-8に変更すれば、デフォルトエンコーディングがUTF-8に変更される。

JSPタグを使ってみよう
それではhelo.jspをダブルクリックして開き、ソースコードを修正しよう。基本的に簡単なコードが書かれているが、これは「UTF-8」になっていないので、あちこち修正する必要がある。また、実際に表示される内容は何もないため、何か適当に書いてみよう。
次のように簡単な例を書いてみる。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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><%= java.util.Calendar.getInstance().getTime() %></p>
</body>
</html>
まずはこのように修正して保存する。ここでは見慣れないタグが2つ登場する。次のとおりである。
pageディレクティブ
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
最初にあるのは<%@ ... %>形式のタグである。この<%@で始まり%>で終わるタグは「ディレクティブ(directive)」と呼ばれる。これはJavaコードそのものではなく、ページに関する細かな指定を記述するために使う。
ここでは直後に「page」がある。これは「pageディレクティブ」と呼ばれ、ページの各種設定を記述するものである。ここではlanguage、contentType、pageEncodingといった属性がある。それぞれ、languageは使用する「言語」を意味し、contentTypeは「コンテンツタイプ」としてHTTPレスポンスの文字エンコーディング方式を意味する。これはブラウザーが受け取るレスポンスのヘッダーに設定される。pageEncodingはJSPページ自体のエンコーディングを意味する。ひとまず、必ずこのタグを入れる必要があると覚えておこう。
<%= %>タグ
<%= java.util.Calendar.getInstance().getTime() %>
この部分が実際にJavaコードを実行する部分である。<%=で始まり%>で終わるタグは、等号(=)の後に書かれたJavaコードを実行し、その結果をその場所に書き出す動作をする。ここではjava.util.Calendar.getInstance().getTime()の結果をページに出力している。
実際に確認してみるとわかるように、これはCalendar.getInstance().getTime()では動作しない。java.util.Calendarのように、パッケージを含めて正しく指定しなければならない。もちろん、パッケージを指定する方法もある。これは後で説明する。