JSP(JavaServer Pages)
|
|
JSPとは
JSPはダイナミック(動的)コンテントをユーザに返すに際し、ロジカルな処理はサーブレットに、スタティック(静的)な部分はJSPと分担させることにより、見栄え(ルック・アンド・フィール)のよいコンテントを、より効率的に提供しようとするものである。JSPは基本的には拡張されたHTMLドキュメントと考えても良い。JSPの作成にあたっては、使い慣れたHTMLエディタ(WordやPoerpointなども含まれる)を使ってまず静的な部分を作成し、それに必要な要素を追加することになる。例えばsomedocument.htmlというHTMLファイルをHTMLエディタで作成したとし、これの拡張子をjspに変更してsomedocument.jspとし、しかるべきディレクトリに配置し、ブラウザでこれを呼び出すと、サーブレット・コンテナはこれをサーブレットに変換して実行する。
例えば次のようなHTMLドキュメントを作成し、これをStaticJspExample.jspという名前でTomcat_home\webapps\examples\jspのフォルダに保存する。
<HTML> <HEAD><TITLE>Static
JSP Sample</TITLE> <META
HTTP-EQUIV="cache-control" CONTENT="no-cache"> <META
HTTP-EQUIV="content-type"
CONTENT="SHIFT_JIS"></HEAD> <BODY><H1>静的JSPのサンプル</H1> Hello
from CRESC </BODY></HTML> |
この状態でTomcatを開始し、皆さんのブラウザから下記のようにこれを呼び出す。
http://localhost:8080/examples/jsp/StaticJspExample.jsp
ブラウザには次のようにこのJSPページからの応答が表示される。(IEの場合、但し表示>エンコードでShift_JISを選択のこと。Netscapeでは文字化けは直せない)
この表示はTomcat_home\webapps\examples\jsp\StaticJspExample.jspというファイルを直接開いた結果(ブラウザによっては.jspを開くとエディタが起動する場合がある。このときは拡張子を.htmに変更して開く)とは同じではあるが、これはサーブレット・コンテナが生成したサーブレットの出力である。作られたサーブレットのjavaとclassファイルはエンジンの作業用ディレクトリに存在することを確認されたい。
つまりサーブレット・コンテナはこのJSPページの要求を受理したら、このファイルの構文解析、javaコードの生成、それをコンパイルしたclassファイルの作成、実行の一連の作業を行ったのである。このようにJSPページは最終的にはサーブレットに変換され実行されるのであり、サーブレットがきちんと理解されていなければならない。勿論実際のアプリケーションではサーブレットとJSPが連携されるので、JSPはサーブレットの一種として捉えたほうが良かろう。
さて文字化けの件であるが、これはTomcatがエンコーディングをISO-8859(インターネットの標準)としてHTTPパケットのヘッダを作ってしまうためである。したがってこのJSP(といってもHTMLそのもの)の先頭に次のような行を追加する。(その意味は後ほど説明する)
<%@ page
contentType="text/html; charset=Shift_JIS" %>
もうひとつ皆さん試していただきたいのは、このファイルをTomcat_home\webapps\examples\jsp\ではなくて、その上のTomcat_home\webapps\examples\においてもTomcatはちゃんとサーブレットに変換してくれることである。勿論その場合は、呼び方は次のようになる。
http://localhost:8080/examples/StaticJspExample.jsp
JSPとして必要な機能
それではHTMLがJSPとして機能するために必要な追加すべき要素とは何であろうか?
まずサーブレットの構成を考えると以下ようなものがまず必要であることわかる。
・ サーブレットの最初の部分に記述するもの:
import文、HTTPヘッダ指定、セッション、getServletInfo等
JSP固有のものとしてエラーページ、スレッド安全性の指示、include、JavaBeansの使用
・ サーブレットのロジック部分のコードを含めるタグ
・ サブレットや他のJSPとの連携
これらの機能はタグを使って実現されているが、ここではJSPのタグについてどのようなものがあるかを以下に簡単に列記する。タグは”<%”で始まり”%>”で終了する。
1. ディレクティブ(directives、指示項目、他のタグよりも前に置くこと)<%@….%>
これはページ全体に効果を及ぼす1度だけの設定である
(ア) Page
<%@ page language=”java” session=”true”….
Import=”java.util.*” %>
(イ) Include
<%@ include file=”copyright.html” %>
2. コメント<%--…..%>
<%-- このコメントはHTMLとしてブラウザに渡されない --%>
<!--このコメントはHTMLのコメントだが<%= expression %>など含めても可 -->
3. 宣言(declarations)<%!…..%>
JSPのなかで後で使用する変数やメソッドを宣言する
<%! private int count = 0;
private String getInfo(){
return “This is JSP”; } %>
4. スクリプトレット<%…..%>
Javaコードのフラグメント
<% if (count == 0) { %>
<h3> いらっしゃいませ </h3>
<% } else { %>
<h3> お戻りですか </h3>
<% } %>
5. 記述(expressions)<%=…..%>
・ StringかStringに変換可能な値を返すJavaコード
・ JavaBeansのプロパティ値
・ メソッド呼び出しの結果
<%= count %>
<%= getInfo() %>
<%= myBean.getName() %>
6. Bean宣言<jsp:useBean…../>
<jsp: useBean id = “myBean”
scope = page | request | session | application
class = “itso.stuvaj.MyBean” type = “itso.stuvaj.MyBean”/>
7. Beanの使用
プロパティ <jsp: getProperty ….. />
メソッド
<% myBean.execute() %>
<P> Employee number: <%= myBean.getEmpno() %>
本章ではこれらの機能を簡単に紹介していくことにする。
参考資料: http://developer.java.sun.com/developer/Books/javaserverpages/