JSP
目次
JSPとは?
JavaServerPage
Webサーバー上で動的にWebページを生成しクライアントに送信する技術。
HTML中にJavaプログラムを埋め込み、プログラムはサーバー上で動作する。
ASP(ActiveServerPage)のJava版
以下メリット
・処理結果はHTMLなのでブラウザにJava言語の解析機能を設ける事無くWebアプリケーションを構築できる。
・HTMLの動的生成が容易にできる。
・ASPがIIS専用であるのに対して、JSPは多くのWebサーバー上で動作する。
・ASPがASP専用のスクリプト言語で記述する必要があるのに対して、JSPはJavaで記述できる。
JSPにおけるJAVAプログラムは実際にはサーバー側のWEBアプリケーション(Tomcat等)によりコンパイルされてサーブレットとして動作する。
(初回実行時のみ、Servletファイル化の為に余分に時間が掛かる)
JSP要素
ディレクティブ
<%@ ~ %>
JSPプログラムの特性を定義
・サーバー側エンコード指定
(省略した場合はContent-type属性と同値)
<%@ page pageEncoding="Shift_JIS" %>
・Content-type
<%@ page contentType="text/html;charset=Shift_JIS" %>
・クラスのインポート
・タグライブラリの指定
・外部ファイルのインクルード指定
宣言
<%! ~ %>
JSPプログラムで使用する変数、メソッドを宣言
ここで定義した内容(インスタンス)はWEBサーバーに常駐し、ブラウザを閉じても残る。
異なるユーザーからのリクエストにも使用される。
=シングルインスタンス・マルチスレッド
スクリプトレット
<% ~ %>
Javaコードを記述
ここで定義した内容(インスタンス)はページ内でのみ有効。
式
<%= ~ %>
変数、算術式、戻り値のあるメソッドなどを記述し、実行結果を出力
EL式
<%
int i = 1000;
String s = "Java";
%>
言語:${s}
コスト:${i}
シンプルにhtmlとJavaコードを混ぜられる
アクション
<jsp:~ />
JSPプログラムで定義された処理を実行
(外部で定義したJavaプログラム関数を呼ぶ)
<jsp:forward>:指定したファイルにリクエストを転送する。
<jsp:getProperty>:指定したBeanオブジェクトのプロパティを表示する。
<jsp:include>:指定したファイルの処理を実行し、結果を表示する。
<jsp:param>:値を渡すパラメータを指定する。
<jsp:plugin>:クライアントブラウザを判別し、Javaプラグインを埋め込んだHTMLを生成するタグ
<jsp:setProperty>:指定したBeanオブジェクトのプロパティに値を設定する。
<jsp:useBean>:JavaBeansを、名前をつけて特定のスコープに定義する
「JavaBeans」参照
拡張ライブラリをインストールする事により、
・Strutsタグ
・JSTLタグ
等の使用も可能になる。
コメント
<%-- ~ --%>
JSPプログラム内のコメント
HTMLコメントやJavaコメントの入れ子も可能。
同じJSPコメントの入れ子は不可。
出力例
<HTML>
<BODY>
ディレクティブ:JSPプログラムの特性を定義
<%@ page
language="java"
contentType="text/html;charset=Shift_JIS"
%>
宣言:JSPプログラムで使用する変数、メソッドを宣言
<%! int x = 0; %>
スクリプトレット:Javaコードを記述
<%
for (int i = 0; i < 10; i++) {
x++;
}
%>
式:Javaプログラム変数の内容を出力
<H3>計算結果:<%= x %></H3>
</BODY>
</HTML>
JSP実行方法
アプリケーションサーバーTomcatの場合
アプリケーションルートにJSPファイル(~.jsp)を配置するのみ
「Tomcat/ディレクトリ構成」参照
暗黙オブジェクト
JSP内で宣言無しに使用できるオブジェクト(組み込みインスタンス)
一覧
オブジェクト名 | 概要 |
---|---|
out | コンテンツを出力 |
<% String s = request.getAttribute("prm"); out.println( "prm:" + s + "<br/>" ); %> |
|
request | リクエスト情報 |
response | レスポンス情報 |
session | セッション内での共有情報 |
application | ユーザー間での共有情報(コンテナ単位に生成) |
exception | JSPページ内で発生した例外情報 |
config | 初期化パラメータ情報 |
page | JSPページそのもの |
pageContext | 各暗黙オブジェクト |
暗黙オブジェクトのコンパイル
JSP呼び出し時に実行されるメソッド(抜粋)
public void _jspService(HttpServletRequest request, HttpServletResponse response)
throws java.io.IOException, ServletException {
暗黙オブジェクトをインスタンス化
JspFactory _jspxFactory = null;
PageContext pageContext = null;
HttpSession session = null;
ServletContext application = null;
ServletConfig config = null;
JspWriter out = null;
Object page = this;
PageContext _jspx_page_context = null;
_jspxFactory = JspFactory.getDefaultFactory();
pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true);
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();
response.setContentType("text/html;charset=Shift_JIS");
}
ディスパッチ
Dispatcher
「サーブレット ディスパッチ」参照
インクルード
<jsp:include page="/test.jsp" />
<jsp:include page="/test.jsp" flush="true | false" />
<jsp:include page="/test.jsp" flush="true | false">
<jsp:param name="prm1" value="value1"/>
<jsp:param name="prm2" value="value2"/>
</jsp:include>
フォワード
<jsp:forward page="/test.jsp" />
<jsp:forward page="/test.jsp">
<jsp:param name="prm1" value="value1"/>
<jsp:param name="prm2" value="value2"/>
</jsp:forward>
JavaScriptへのJava変数埋め込み
<%
String val1 = "aaa";
String val2 = "bbb";
%>
<a href="#" onclick='<% "func(" + val1 + "," + val2 + ")" %>'>リンク</a>
↓
<a href="#" onclick='func("aaa","bbb")'>リンク</a>