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>

前の記事

Tomcat

次の記事

サーブレット