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ファイルを作って動かしてみよう。

  1. [File]メニューの[New]から[Other …]という項目を選択する。

  2. 画面に「Select a wizard」というダイアログが表示される。ここで作成する項目を選択する。一覧から「Web」にある「JSP File」項目を選択し、次へ進む。

  3. 「JSP Create a new JSP File」画面へ移動する。ここで作成するファイルの場所とファイル名を入力する。配置場所には「MyGaeApp/war」を入力する。下にあるプロジェクト「MyGaeApp」アイコンを展開し、その中の「war」フォルダーをクリックしても設定できる。また、ファイル名はここでは「helo.jsp」とする。JSPファイルはこのように「.jsp」拡張子を指定する。

  4. そして「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」ボタンを押してダイアログを閉じると、ファイルのエンコーディングが変更される。

properties_for_file

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

preference

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のように、パッケージを含めて正しく指定しなければならない。もちろん、パッケージを指定する方法もある。これは後で説明する。