Servlet/JSP 第5回ではJSPの学習にはいります。
JSPもWebアプリケーション作成において欠かせない技術となります。
前回のじゃんけんServletでは、ServletクラスにHTMLコードを書いていましたが、実際の開発ではJSPファイルに分けて開発を進めます。ここでは、JSPの書き方について解説しています。ここでも実際にコードを写して理解を深めていきましょう。
JSPとは?
JSP(Java Servlet Pages)
Servletと同じサーバーサイドプログラムの技術です。
「Servletクラスの実装と実行」で作ったじゃんけんプログラムで、HTMLの入力をServletクラスで行っていましたが、JSPファイルを別で作り、JSPファイルの内容がブラウザにレスポンスされます。
JSPファイルを使うと、楽にHTMLを出力できます。
もう少し詳しく言うと・・・
①JSPファイルを作成する。
②ブラウザがJSPファイルをリクエストする。
③アプリケーションサーバーがJSPファイルをサーブレットクラスに変換・コンパイルする。
④そのインスタンスを生成して実行する。
JSPファイルの例
実際のJSPファイルのコードを見てみましょう。
説明するよりコードを見たほうが理解が早いと思います。
<%
String name = "山田 太郎";
int age = 23;
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSPのサンプル</title>
</head>
<body>
私の名前は<%= name%>。 年齢は<%= age %>歳です。
</body>
</html>
見慣れない記号を含んでいますが、1~4行目<% %>の中と13行目<%= %>の中に記述はJavaのコード、それ以外はHTMLで記述されています。このようにJSPファイルはHTMLの中にJavaのコードを埋め込んで作成します。
このJSPファイルをリクエストして実行すると、次のコードのHTMが出力されます。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSPのサンプル</title>
</head>
<body>
私の名前は山田太郎。 年齢23歳です。
</body>
</html>
HTMLの部分はそのまま出力され、さらにnameとageは具体的な値で出力されています。
このようにJSPファイルを用いれば、Servletクラスのようにprintln()でHTMLを1つ1つ出力する必要はありません。
JSPの構成要素
JSPファイルの構成要素
先ほどのコードでみたようにJSPファイルはHTMLとJavaのコードで構成されています。
JSP ファイルを構成する要素には名前が付いており、HTMLで書かれた部分をテンプレート、Javaのコード部分をスクリプトと呼びます。
コード | 要素 |
<%@ page … %> | pageディレクティブ ・JSPファイルの設定 |
<% … %> | スクリプトレット ・Javaコード埋め込み |
<%– … –%> | JSPコメント |
<!DOCTYPE html> <html> <head> </head> <body> | テンプレート |
<%= … %> | スクリプト式 ・Javaコード埋め込み ・変数の出力 |
</body> </html> | テンプレート |
スクリプトレット
スクリプトレットは1つのJSPファイル内の任意の箇所に複数記述できます。
スクリプトレット内で宣言した変数やインスタンスは、宣言した箇所とは別にそれ以降で記述する同じJSPファイルのスクリプトレットで使用できます。
<% int x = 10; int y = 20; %>
...
<% int z = x+y; %>
for文やif分のような{}を使う分は次のように複数のスクリプトレットに分けて記述します。
<% for (int i = 0; i<5; i++) { %>
<p>こんにちは</p>
<% } %>
スクリプト式
スクリプト式は、変数やメソッドの戻り値などを出力できます。
<%= 変数名 %>
<%= 演算式 %>
<%= オブジェクト.メソッド() %>
JSPコメント
JSPコメントを使うと、JSPファイルにコメントを記述できます。
コメントはプログラムをわかりやすく説明するために欠かせません。
下記コードのようにスクリプトレット内にコメントをする場合は、Javaと同じ記述になるので注意してください。
<%-- この文はコメントです -->
<%
//スクリプトレット内のコメントはJavaと一緒
int x;
%>
pageディレクティブ
JSPファイルに対して様々な設定をする際はpageディレクティブを使って記述します。
属性名 | 設定内容 |
contentType | レスポンスのcontent-typeヘッダ |
import | インポートするクラスまたはインターフェース |
pageEncoding | JSPファイルの文字コード |
languege | 使用する言語 |
この中では、contentType属性とimport属性をよく使うのでこの2つをまずは覚えておきましょう。
pageディレクティブ contentTypeヘッダを指定
JSPファイルもServletクラスのように出力する内容をcontent-typeヘッダで指定する必要がります。
その指定を行うのがpageディレクティブのcontenType属性です。
文字コードが「UTF-8」のHTMLをレスポンスする場合、次のように記述します。
<%@ page contentType=”text/html; charset=UTF-8″ %>
この記述はEclipseでJSPファイルを作成した際に自動で記述されます。
pageディレクティブ クラス、インターフェースをインポート
pageディレクティブのimport属性を使用すると、クラス、インターフェースをインポートできます。
例① 単一のクラスをインポート
<%@ page import = "java.util.ArrayList" %>
例② 複数のクラスをインポートする場合
・カンマで区切る
<%@ page import = "java.util.Date , java.util.ArrayList" %>
・複数に分ける
<%@ page import = "java.util.Date" %>
<%@ page import = "java.util.ArrayList" %>
例③ 1つのpageディレクティブに複数の設定をまとめる場合
<%@ page contentType="text/html; charset=UTF-8" import = "java.util.ArrayList" %>
※インポートするクラスはパッケージへの所属が必須です。
コメント