転職を繰り返したサラリーマンの多趣味ブログ

30才未経験でSEに転職した人の多趣味ブログ

【技術書メモ】基礎からのサーブレット㉒

JSTL

JSTL・・・タグライブラリーの一種で、JavaEEに採用されている標準的なタグライブラリ。

JSTLを利用するには、JSTLのJARファイルを入手する必要がある。
ダウンロードは、以下から行う。(impl、spec、jstlel、compactすべてダウンロードする)
Apache Tomcat® - Apache Taglibs Downloads
ダウンロード後は、WEB-INF/libフォルダーに配置する。
f:id:uuc1h:20190105132018p:plain

TLDファイル

TLDファイル・・・カスタムタグの動作を定義するXML形式のファイル。
JARファイルにTLDファイルが含まれている場合、別途配置する必要はないが、配置する必要がある場合は以下方法がある。
パスを直接指定
TLD(mytag.tldファイル)をWEB-INFフォルダ配下に配置した場合、taglibディレクティブのURIに、TLDのパスを直接指定する。

<%@taglib prefix="mytag" uri="/WEB-INF/mytag.tld"%>

web.xmlマッピング

<jsp-config>
    <taglib>
        <taglib-uri>myuri</taglib-uri>
        <taglib-location>/WEB-INF/mytag.tld</taglib-location>
    </taglib>
</jsp-config>
<%@taglib prefix="mytag" uri="myuri" %>

リストの要素を取り出すサンプル

JSTLに含まれるカスタムタグ群は、機能別に分類されている。
タグの分類には、Core(繰り返しなど)、XMLXMLドキュメントの操作)、I18N(国際化機能のサポート)、Database(データベースの操作)、Functions(文字列の加工)がある。

@WebServlet(urlPatterns={"/chapter22/jstl"})
public class JSTL extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

		PrintWriter pw = resp.getWriter();
		try {

			// DBから取得
			ProductDAO dao = new ProductDAO();
			List<Product> list = dao.search("");

			// リクエスト属性に設定
			req.setAttribute("list", list);

			// JSPファイルにフォワード
			req.getRequestDispatcher("jstl.jsp").forward(req, resp);

		} catch (Exception e) {

			e.printStackTrace(pw);

		}

	}

}
<!-- taglibディレクティブ -->
<!-- %@taglib prefix="接頭辞" uri="URI" -->
<!-- 以下はCoreタグの場合のtaglibディレクティブの記述 -->
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!-- リストの要素を取り出す -->
<c:forEach var="p" items="${list }">
	${p.id }:${p.name }:${p.price }<br>
</c:forEach>

数値を出力するサンプル

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

<c:forEach var="i" begin="1" end="9">
	${i }<br>
</c:forEach>

セレクトボックスを使ったサンプル

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

<p>購入数を選択してください。</p>
<form action="/book/chapter6/select" method="post">

	<select name="count">

		<c:forEach var="i" begin="1" end="9">

			<option value="${i }">${i }</option>

		</c:forEach>

	</select>

	<p><input type="submit" value="確定"></p>

</form>

タグを使ったサンプル

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

抽選結果:
<c:if test="${Math.random()<0.5 }">

	あたり

</c:if>

if-else文に相当するタグを使ったサンプル

条件が成立した場合の処理はタグ、成立しなかった場合の処理はタグを使って記述。

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

<c:forEach var="i" begin="101" end="200">

	<c:choose>

		<!-- iを10で割った余りが1のとき -->
		<c:when test="${i%10==1}">(${i},</c:when>

		<!-- iを10で割った余りが0のとき -->
		<c:when test="${i%10==0}">${i})<br></c:when>

		<!-- その他の場合 -->
		<c:otherwise>${i },</c:otherwise>

	</c:choose>

</c:forEach>

その他のCoreタグ

c:setタグ
変数に値を設定するタグ。

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

<c:set var="message" value="Hello" />
<p>message:${message }</p>

<c:set var="message2">Welcome</c:set>
<p>message2 : ${message2 }</p>

<c:set var="result" value="${1+2 }"/>
<p>result : ${result }</p>

<jsp:useBean id="product" class="bean.Product"/>
<c:set target="${product }" property="name" value="サンマ"/>
<p>product.name : ${product.name }</p>

<jsp:useBean id="map" class="java.util.HashMap"/>
<c:set target="${map }" property="apple" value="りんご"/>
<p>map.apple : ${map.apple }</p>

c:removeタグ
変数を削除するタグ

<c:remove var="変数名"/>

c:forTokensタグ
指定した区切り文字で、文字列を分割し、1つ1つ出力できる。

<c:forTokens items="黒、青、赤、緑、黄、白" delims="、" var="color">
    <p>${color}</p>
</c:forTokens>

その他に、
c:importタグ
c:redirectタグ
c:urlタグ
c:catchタグ
c:outタグ
などがある。