JSP(JavaServer Pages)(更新中) - user000422/0 GitHub Wiki

テンプレート … HTMLで書かれた部分 、スクリプト … Javaで書かれた部分

スクリプトレット … Javaのコードを埋め込む(記述箇所は自由)
1つのJSP内で分けて記述することができ、変数は複数のスクリプトレット内で使用可

<% int x = 10, y = 20; %>
<% int z = x + y; %> <%-- 前述の変数の値を保持している --%>

スクリプト式(単に式と呼ぶことも) … 変数や戻り値などを出力(セミコロンは不要)
戻り値のないメソッドなどは使用できない

<%= sample %> <%-- 変数に代入されている値を出力 --%>
<%= 演算式 %> <%-- 演算結果 --%>
<%= オブジェクト.メソッド() %> <%-- メソッドの戻り値 --%>

pageディレクティブ … JSPファイルに関するさまざまな設定
属性は半角スペースで区切ることで複数設定可
contentTypeimport がよく使われる属性
EclipseでJSPファイル作成時に自動で書かれる

<%@ page 属性名 = "値" %>
<%@ page contentType="text/html; charset=UTF-8" %> <%-- レスポンスのContent-Typeヘッダ --%>
<%@ page import="java.util.ArrayList" %> <%-- インポートするクラス、インターフェース --%>

JSPコメントと、HTMLコメントについて … 基本JSPコメント推奨 <%-- x --%>
HTMLコメント <!-- x --> は、ブラウザから閲覧可能なのでセキュリティに気をつけること

JSPファイルの実行方法
URL http://サーバ名/アプリケーション(Webプロジェクト)名/WebContentからのパス
例) http://localhost:8080/example/index.jsp

if

<% if(color = red) { %>
  赤色です。
<% } else { %>
  赤色ではないです。
<% } %>

JSTL… JSPでよく使われる標準的なカスタムタグをまとめたライブラリ
Webサイトよりダウンロードしたライブラリを WEB-INF\lib に格納する

<%-- coreタグ定義(プレフィックスは慣習的に「 c 」が使われる)--%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>

<c:set var="color" value="red" /> <%-- set 変数宣言(変数名をvarに、値をvalueに) --%>
<c:set var="food" value="<% sample.getFood(); %>" /> <%-- javaのコードも利用可能 --%>

include … 共通で使い回せるjspファイルなどを呼び出す
動的includeタグは、終了タグの省略ができないため /> で終わらせる必要がある

<%-- 静的includeタグ インクルード先の内容(Java変数など)を利用できる --%>
<%@ include file="/common.jsp" %>

<!DOCTYPE html>

<%-- 動的includeタグ インクルード先の内容を利用できない --%>
<jsp:include page="/footer.jsp" />

EL式 … スコープに保存されたインスタンスを簡潔な記述で利用
仕組みはgetterが自動的に実行され、値を取得
スコープを指定しない場合の探査の順番 … 「Page」->「Request」->「Session」->「App」
EL式の暗黙のオブジェクトを利用しスコープを指定することができる

<%-- スコープを指定せず属性名とプロパティで指定 --%>
${monster.name}

<%-- sessionScope セッションスコープから取得 --%>
${sessionScope.id}

<%-- requestScope リクエストコープから取得 --%>
${requestScope.name}

<%-- requestScope リクエストパラメータから取得 --%>
${param.userId}

%{ ・・・ }(OGNL式) value="%{ ・・・ }"
%{ ・・・ }をつけないとvalue内の文字列がそのまま表示される
submit クリック後に error で入力欄の入力文字が消えるのを阻止

<!--- 入力欄 に session.key の 値 が 表示される --->
<s:textfield name="" value="%{#session.key}">

Eclipceの文法チェックで、エラーの無い箇所にも関わらず文法エラー扱いされてしまう
該当箇所を 切り取り -> 貼り付け -> 上書き保存

※エラーJSP画面表示で文字化け
原因:設定で文字コードがUTF-8になっていないため
ウインドウ -> 設定 -> 一般 -> コンテンツ・タイプ -> テキスト -> JSPビュー
デフォルトエンコードを UTF-8 に
ウインドウ -> 設定 -> Web -> JSPファイル
エンコードを UTF-8 に

⚠️ **GitHub.com Fallback** ⚠️