okoba23 @ ウィキ
JSP基本
最終更新:
okoba23
-
view
JSPタグ
構成要素
ページ処理方式の指示をするディレクティヴ(directive)
- JSPを処理する方法をコンテナに指示するためのJSPタグ
javaコード記述のためのスクリプティング要素(scripting element)
- JSP内にjavaコードを記述するためのもの
JSPに注釈文を記述するためのコメント(comment)
タグに関連付けられたjavaコードを呼び出すアクションタグ(action tag)
- タグに関連づけられたjavaコードを呼び出すためのJSPタグ
| JSPタグ | 記述形式 |
| ディレクティブ | <%@ %> |
| JSP式 | <%= %> |
| スクリプレット | <% %> |
| JSP宣言 | <%! %> |
| コメント | <%-- --%> |
pageディレクティブ
<%@ page属性名1="属性値1" [page属性名2="属性値2・・・・・・] %>
example.)
<%@ page contentType="text/html; chareset=Shift_JIS"
pageEncoding="Shift_JIS" %>
<%@ page import="java.util.Date" %> -------------->importするパッケージの設定
| 分類 | 属性名 | 説明 |
| 返却データのコンテントタイプ | contentType | JSPが返却するデータのコンテントタイプ |
| JSPのエンコーディング方式 | pageEncoding | JSP自身のエンコーディング方式 |
| インポート | import | 外部クラスをimportする |
| セッション | session | セッションの有無を指定 |
| エラーページの表示 | errorPage | 例外発生時に表示するJSPを指定 |
| inErrorPage | JSPで発生した例外オブジェクトをJSPに引き渡す | |
| バッファ | buffer | bufferサイズを指定 |
| autoFlush | bufferサイズで指定されたサイズを超えた場合の振る舞い | |
| スクリプティング言語 | language | スクリプティング言語の指定 |
| ページ情報 | info | JSPの情報を指定 |
| 継承 | extends | JSPのスーパークラスを指定 |
| 同期 | isThreadSafe | 同じJSPに対する要求が同時に発生した場合の処理方式 |
JSP式
- JspWriterクラスのprintメソッドの引数として展開される。
- out.prin("○○○");のように。
<%= java式 %>
■example
<%@ page contentType="text/html; charaset=Shift_JIS" pageEncoding="Shift_JIS" %>
<html>
<head>
<title>test</title>
</head>
<body>
<%= "HelloWord!" %> -------------------------> 文字列
<br>
<%= Integer.parseInt("10") %> -----------------> 基本データ型
<br>
<%= new Object() %> --------------------------> java.lang.Objectオブジェクト
<br>
<%= new java.util.Date() %> -------------------> java.util.Dateオブジェクト
</body>
</html>
スクリプレット
- JSPにjavaのstatementを埋め込むには、スクリプレット(scriplet)を使用。
- javaコード記述は通常のjavaプログラムと同じなので、セミコロンが必要。
- <iscode>みたいに組み込み式。
- package文、import文は組み込めない。pageディレクティブで記述する事。
- _jspServiceメソッドの一部として展開される。
- _jspServiceメソッド内でのローカル変数となるので、JSPがリクエストされるたびに初期化される。
- 宣言する変数は初期化しておく必要がある。していないとエラー。
<% javaコード %>
■example
<%@ page contentType="text/html; charaset=Shift_JIS" pageEncoding="Shift_JIS" %>
<html>
<head>
<title>test1</title>
</head>
<body>
<% int i = 10;
i = 10*i;
%> ----------------------------> scripletの記述
10*10=
<%= i %> ----------------------------> JSP式を使って、表示出力
</body>
</html>
JSP宣言
- JSP内で変数やメソッドを宣言する時に使用。
- JSP宣言で宣言した変数はJSPが実行した後も値が保持される。
- JSP宣言ではプログラムがロードされた後に変更する事のない、読み取り専用の変数を宣言する。
- 更新する必要がある場合には、スレッドセーフにしておく。
- メソッドも宣言可能。
<%! %>
■example
<%@ page contentType="text/html; charaset=Shift_JIS" pageEncoding="Shift_JIS" %>
<html>
<head>
<title>test2</title>
</head>
<body>
<%! int x=0; %> --------------------> JSP宣言(変数の宣言)
<%
int y = 0;
x ++;
y ++;
%> --------------------> scriplet内で宣言した変数
<%= "JSP宣言で宣言した変数:" + x %>
<br>
<%= "scriplet内で宣言した変数:" + y %>
<%!
String aisatu(){
return "Hello!!";
} --------------------> JSP宣言(メソッドの宣言)
%>
<%= aisatu() %>
</body>
</html>
JSP実行時の動作
- ブラウザからのリクエスト受信
- JSPをservletへ変換
- 変換されたservletをcompile
- compileされたクラスファイルをロード
- クラスファイル実行
- JSP実行時には、変換->compile->ロードが行われるため実行時間が多少かかる。ただし、コンテナは、メモリにロードされたクラスファイルはできる限りメモリ上に残すので通常2回目以降はメモリにロードされているクラスファイルを使用する。
変換されたservlet
- JSPから変換されたservletは%CATALINA_HOME%/work/Catalina/localhost/[ディレクトリ]/org/apache/jsp配下にできる。
- .java拡張子のファイルがservletに変換されたJSPのjavaソースコード。
- 変換されたjavaソースコードは、org.apache.jasper.runtime.HttpJspBaseクラスを継承したクラスとして生成。(HttpJspBaseクラスは、JSPコンテナが生成するservletの抽象クラス)
- ブラウザからのリクエスト時にコンテナはservlet内の_jspServiceメソッドを呼び出す。