インクルード・・・JSPの中で行われることが多い。
【2種類のインクルード】
1.アクション(動的なインクルード)・・・依頼先の処理結果を依頼元に反映。
2.ディレクティブ(静的なインクルード)・・・依頼先のソースコードを依頼元に返し、依頼元で全ての処理をする。
《アクションによるインクルード》
1 |
<jsp:include page="相対パス"/> |
<include_action.jsp>
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <jsp:include page="header.jsp"/> <p>ないよう</p> </body> </html> |
<header.jsp>
1 2 |
<%@page contentType="text/html; charset=UTF-8" %> <p>へっだ</p> |
《ディレクティブによるインクルード》
1 |
<%@ include file="置き換えるファイル名" %> |
<include_directive.jsp>
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ include file="common.jsp" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <%=new Date() %> </body> </html> |
<common.jsp>
1 |
<%@page import="java.util.Date" %> |
【JSPの構成要素】
1. コア要素
JSPの文法のコアとなる要素。
宣言 | <%! 〜 %> | フィールドやメソッド |
スクリプトレット | <% 〜 %> | 処理記述部分 |
式 | <%= 〜 %> | 出力する式 |
コメント | <%– 〜 –%> | コメント |
EL式 | ${ 〜 } | ELを利用した記述 |
2.ディレクティブ
JSPからサーブレットへの変換時の設定やオプションを記述。
ディレクティブ | <%@ 〜 %> | JSP変換時のコマンド |
3. アクション
JSPの実行時に呼び出されるJSPのタグ。
標準アクション | 〜 | 標準で利用できるアクション |
カスタムアクション | アクションのユーザー拡張 |
《暗黙オブジェクト》
定義はしていないが使えるオブジェクト。
オブジェクト名 | 説明 |
---|---|
request | クライアントからのリクエストを取得する |
response | クライアントへのレスポンスを設定する |
out | JSPの実行結果をクライアントへの出力する |
pageContext | JSPのオブジェクトを管理する |
session | セッション情報を管理する |
application | アプリケーションデータを管理する |
page | JSPページ自身を表す。「this」と同じ。 |
config | JSPページのパラメータを設定する |
exception | 例外発生時のエラー情報を取得する |
【4つのスコープ】
スコープ | 変数の有効範囲 |
---|---|
page | JSPページ |
request | HTTPリクエスト |
session | HTTPセッション |
application | Webアプリケーション |
*JSPだけ「pageスコープ」ある。
*pageスコープ・・・JSPの処理が完了するまで値を保存。
*JSP上で宣言された変数は基本psgeスコープに保存。
【EL(Expression Language)式】
JSP式を簡略可能(コードではEL式を基本利用する)。
*スコープの名前と一致するものを取得。
EL式のスコープを探す順:探す対象のし指定ない場合↓
1ページ → 2.リクエスト → 3.セッション → 4.アプリケーション
<記入例1:JSP式 → EL式>
1 2 3 4 5 |
<%= ((UserBean)request.getAttribute("user")).getName() %> ↓ ${user.name} |
<helo2.jsp>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% request.setAttribute("message", "こんにちは"); %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> ${message} </body> </html> |
JavaBeans:ある機能を一つにまとめたクラスのこと。
「getterメソッド」
1 |
getフィールド名 |
「setterメソッド」
1 |
setフィールド名 |
<User.java>:JavaBeans例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
package el; public class User { private String name; private boolean male; public String getName() { return name; } public void setName(String name) { this.name = name; } //boolean型の場合「isフィールド名」 public boolean isMale() { return male; } public void setMale(boolean male) { this.male = male; } } |
【集合や配列の要素へのアクセス】
配列、リスト、マップの要素へアクセス可能
*マップの要素・・・JavaのHashMapクラスを使用
*HashMap・・・(別名:連想配列)要素を格納する時に要素に対応するキーを合わせて登録
《配列やListの場合》
1 |
${スコープ名(省略可).オブジェクト名[インデックス]} |
《Mapを扱う場合》
1 2 3 4 5 |
${スコープ名(省略可).オブジェクト名["キー名"]} //または「.」でつなぐ↓ ${スコープ名(省略可).オブジェクト名.キー名} |
【EL式での演算子】
分類 | 演算子 | 説明 |
算術 | + | 加算 |
– | 減算 | |
* | 乗算 | |
/ (div) | 除算 | |
% (mod) | 剰余 | |
比較 | == (eq) | 等しい |
!= (ne) | 等しくない | |
< (lt) | 小さい | |
> (gt) | 大きい | |
<= (le) | 以下 | |
>= (ge) | 以上 | |
empty | nullまたは空文字 | |
論理 | && (and) | 集合積 |
|| (or) | 集合和 | |
! (not) | 否定 | |
3項 | a ? b : c | 「a」の場合は「b」、「a」以外の場合は「c」 |
※演算子の括弧内は、別名です。
【EL式の暗黙オブジェクト】
オブジェクト | 説明 |
---|---|
pageContext | ページコンテキストオブジェクト |
pageScope | ページスコープのMap |
requestScope | リクエストスコープのMap |
sessionScope | セッションスコープのMap |
applicationScope | アプリケーションスコープのMap |
param | リクエストパラメータのMap |
paramValue | 複数の値を持つリクエストパラメータのMap |
header | ヘッダのMap |
headerValue | 複数の値を持つヘッダのMap |
initParam | 初期パラメータのMap |
cookie | クッキーの名前と値のMap |
1 |
${sessionScope.スコープ内で指定した名前} |
探すスコープの指定(上記の表内で「 ~Scope」と書かれているもの適用)
《コンテキストパス取得》
1 2 3 4 5 |
<%= request.getContextPath()%> ↓ ${pageContext.request.contextPath} |
《EL式の無効化》
各ファイルに指定する場合
1 |
<%@page isELIgnored=”true” %> |
「web.xml」で全てのJSPに対して無効化設定
1 2 3 4 5 6 |
<jsp-config> <jsp-property-group> <url-pattern>/* </url-pattern> <el-ignored>true</el-ignored> </jsp-property-group> </jsp-config> |
【カスタムタグ・JSTL】
JSTLの入手(下記2種類のファイル取得)
1.jstl-api-1.2.jar :JSTLのAPI
2.jstl-impl-1.2.jar :JSTLの実装
*Eclipseに実装する!「WebContent」→「WEB-INF」→「lib」にコピー。
カスタムタグの使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> //カスタムタグを呼出すための記述↓ prefix="任意だが習慣的に「C」とつけよう" <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <h2>JSTLの利用</h2> <c:out value="こんにちわ"/> </body> </html> |
【JSTLで扱うCoreタグ】
タグ | 説明 |
<c:set> | 変数をセットする |
<c:remove> | 変数を削除する |
<c:out> | 出力する |
<c:if> | 単一の条件分岐 |
<c:choose> <c:when><c:otherwise> |
複数の条件分岐 |
<c:forEach> | 繰り返し(ループ) |
<c:forTokens> | 文字列を区切り文字で分割する |
<c:import> | ファイルをインポートする |
<c:redirect> | リダイレクトする |
<c:url> | URLを生成する。URLエンコードも行う。 |
<c:catch> | 例外処理の定義 |
<c:param> | パラメータを指定する |
setタグ:スコープ変数(pageスコープの変数)に値を指定。
1 2 3 4 5 6 7 8 |
<c:set var=”変数名” value=”値”> //値にEL式を指定可能 <c:set var=”変数名” value=”${変数名}”> ↓ <%=pageContext.setAttribute(“変数名”, “値”) %> |
EL式ではsetタグで定義した変数名を取得できる
1 |
${変数名} |
スコープの削除
1 |
<c:remove var="変数名" scope="探すスコープ場所"> |
【Ifタグ】・・・条件を満たす場合の処理しか指定できない。
1 2 3 4 5 |
<c:if 変数名= “${条件式}”> 条件を満たす場合の処理 </c:if> |
【chooseタグ(whenタグ、otherwiseタグ)】・・・条件分岐の処理
1 2 3 4 5 6 7 8 9 10 11 |
<c:choose> <c:when 変数名= “${条件式}”> 表示:処理1 </c:when> <c:when 変数名= “${条件式}”> 表示:処理2 </c:when> <c:otherwise> 条件をみたさない時表示 </c:otherwise> </c:choose> |
【forEachタグ】・・・for文処理
1 2 3 4 5 6 7 8 9 10 11 |
<%=pageContext.setAttribute("変数名", "値") %> <% List<String> list = new ArrayList<String>(); list.add("値1"); list.add("値2"); list.add("値3"); request.setAttribute("スコープ内での変数名", 値); %> <c:forEach var="変数名A" items="${スコープ内での変数名}"> ${変数名A} </c:forEach> |