見出し画像

職業訓練でJavaを学ぶ!29日目(1/3)「Javaプログラミング実習(JSP/Servlet編)」

職業訓練で、Javaを使ったWebシステム開発・Androidアプリ開発を学ぶことになりました。復習かねて情報発信をします!
これから職業訓練に通うことを検討している方の参考になれば嬉しいです。

↓↓職業訓練に通うことになった経緯はこちら
https://note.mu/yukoro/n/ned8d43b0110d

本日の授業

・JSTL概要 ←この記事
JSTLの基本機能
・JSTL出力フォーマット


JSTL概要

JSTLとはJSP Standard Tag Libraryの略で、JSP内でよく使われる処理をタグライブラリとしてまとめたものです。

このタグライブラリは、カスタムタグ(オリジナルで定義したアクションタグ)としてまとめることができます。

タグライブラリであるJSTLは、いくつかの「カテゴリ」に別れており、そのカテゴリごとに「名前空間」という各カテゴリに割り当てられた識別名が設定されています。


■JSTLのカテゴリ

Core
 - 変数操作、制御構文、URL管理などの機能

i18n (国際化)
 - メッセージの形式処理、通貨などに関するロケール処理、数値や日付の形式処理の機能

Functions
 - コレクション(List, Map, 配列など)の処理や文字列操作に関する機能

XML
 - XML用の制御構文やXML変換機能

Database
 - SQLに関する機能


■JSTLの導入
JSTLをインストールするには、下記のリンクよりJARファイルを2種類ダウンロードします。

https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl-api/1.2
https://mvnrepository.com/artifact/org.glassfish.web/jstl-impl/1.2

ページにアクセスしたら、「jarリンク」からダウンロードしてください。

ダウンロードしたjarファイルを、JSTLを使うプロジェクトのWEB-INF/lib フォルダ内に配置すると使えるようになります。簡単ですよね。


■JSTLの基本的な使い方
それではJSTLの使い方を簡単に見ていきましょう。

まずはJSPファイルにJSTLのライブラリを使うための宣言を「tagligディレクティブ」で行います。

1行目のUTF-8エンコーディングの後に、下記のように2行taglibの宣言を追加します。prefix="" の名前は任意ですが、「c」や「 fmt」とするのが一般的です。

例)ライブラリの宣言
この宣言によって
<c: >とすることで http://java.sun.com/jsp/jstl/coreのライブラリで定義されているタグが使えるようになり、
<fmt: >とすることでで http://java.sun.com/jsp/jstl/fmt で定義されているタグが使えるようになる

<%@ page pageEncoding="UTF-8" %>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

<!DOCTYPE html>
<html lang="ja">

taglibは今後JSPファイルを作成する際に、よく利用していくことになるため、テンプレートとしてEclipseに登録しておくと便利です。

(Windowsの場合)
Eclipseメニュー >> ウィンドウ >> 設定
 - Web >> JSPファイル >> エディタ >> テンプレート
 - 「新規JSPファイル(html 5)」を選択
 - 「編集」をクリック
 - パターンにtaglibの2行を追加


そしてこのタグライブラリを実際にコードの中で使って行くには、taglibディレクティブで宣言した接頭辞とタグの名前をコロンでつないで記述します。( <c:set /> <c:out /> など )

例)コード内でのJSTL利用例

<c:set var="price" value="200" />
<c:out value="${price}" />
<c:if test="${price > 1000}">
1000円を超えています
</c:if>

JSTLには下記のような共通する属性があります。
----------
value
 - そのタグで使用する値を指定する
var
 - そのタグでの処理結果を格納する変数名を指定する
scope var
 - 属性で指定する変数のスコープを指定する
----------


JSTLで変数の値を参照する場合は、JSP式を使用するのではなく、JSP式を単純化したEL式というものを使用していきます。
ではこのEL式についてもう少し詳しくみていきましょう。


■EL式について
EL式(Expression Language)は、JSP式を簡潔にした記法です。

例)JSP式とEL式の比較(結果はどちらも同じ)

<!-- JSP式 -->
<p><%= ((Item) request.getAttribute("item")).getName() %></p>
<!-- EL式 -->
<p>${item.name}</p>

このEL式ではitemオブジェクトのgetName()メソッドが呼び出されています。


EL式の書式はこのようになります。

書式:オブジェクトの参照
----------------
${オブジェクト名.プロパティ名}
----------------

書式:配列Listオブジェクトの参照
----------------
${オブジェクト名[インデックス]}
----------------

書式:Mapオブジェクトの参照
----------------
${オブジェクト名["キー"]}
----------------


◇EL式での演算
EL式では演算を行うこともできます。EL式で利用できる演算子は下記です。

・算術演算
 +, -, *, /, %, div, mod

・関係演算
 ==, !=, <, >, <=, >=
 eq, ne, lt, gt, le, ge

・論理演算
 &&, ||, !
 and, or, not

・検証
 empty


◇EL式の暗黙オブジェクト
EL式にはインスタンスを生成しなくても利用できる「暗黙オブジェクト」があります。「スコープ」については後術します。
--------------
pageScope
 - pageスコープのオブジェクト (JSPのpageオブジェクト)
requestScope
 - requestスコープのオブジェクト (JSPのrequestオブジェクト)
sessionScope
 - sessionスコープのオブジェクト (JSPのsessionオブジェクト)
applicationScope
 - applicationスコープのオブジェクト (JSPのapplicationオブジェクト)
pageContext
 - JSP内で使われる全てのオブジェクトを管理するオブジェクト
param
 - リクエストパラメータを格納したオブジェクト
paramValues
 - 複数の値を持つリクエストパラメータを格納したオブジェクト
header
 - HTTPヘッダを格納したオブジェクト
headerValues
 - 複数の値を持つHTTPヘッダを格納したオブジェクト
cookie
 - クッキーを格納したオブジェクト
--------------

スコープとはWebアプリケーション内での情報参照可能範囲をさします。
--------
application
 - 全ユーザ(Webクライアント)がWebアプリケーション全体で参照可能。アプリケーションの共通設定などの保存に使用する。
session
 - 1ユーザがアプリケーション全体で参照可能。ログインの状態などの保存に使用する。
request
 - リクエストを受けてからレスポンスを返すまでの間で参照可能。(フォワードやインクルードも含む)
page
 - 単独のJSPページ内でのみ参照可能。
--------

この暗黙オブジェクトに格納されているオブジェクトの参照する書式はこのようになります。

書式:
------------
${暗黙オブジェクト.名前}
------------

例)暗黙オブジェクトのrequestScopeに格納されているidオブジェクトを参照する場合

${requestScope.id}

ただし、pageScope、requestScope、sessionScope、applicationScope
pageContext に格納されているオブジェクトに関しては、暗黙オブジェクト名を省略して参照することができます。

例)上記の例の暗黙オブジェクト名を省略した場合

${id}



JSTL概要については以上です。

最後までお読みいただきありがとうございました!

この記事が気に入ったらサポートをしてみませんか?