JSTL <c:url>

<c:url> はURLに使用できない文字をエンコードするJSP標準タグライブラリ(JSTL)である。

URLには次の文字を使用できる。

これら以外の文字をURLに含める場合は、URLをエンコードする必要がある。

URLエンコードの例
文字 エンコード後の文字列
(空白) +
" %22
# %23
< %3C
> %3E
` %60
{ %7B
} %7D
%E3%81%82

タグの使い方

<c:url url="" />

<c:param> タグを使用して、URLにリクエストパラメータを含めることもできる。

<c:url url="">
  <c:param name="" value="" />
</c:url>

属性

<c:url> タグには次の属性を指定する。

context

コンテキストパスを指定する。

WebサーバはWebアプリケーションをコンテキストと呼ばれる単位で管理している。下記URLの場合は「/app」の部分がコンテキストパスとなる。

https://localhost:8080/app/example/example.jsp

scope

var属性で指定した変数の有効範囲(スコープ)を指定する。次のうちいずれかの値をscope属性に指定する。

scope属性
スコープ変数の有効範囲
pageJSPページ
requestHTTPリクエスト
sessionHTTPセッション
applicationWebアプリケーション

scope属性にpageスコープを指定すると、変数の有効範囲がそのJSPページになる。画面遷移がある場合、後続のJSPページで変数を参照することはできない。

page
Figure 1. page scope

scope属性にrequestスコープを指定すると、変数の有効範囲がそのHTTPリクエストになる。ひとつのHTTPリクエストを処理するモジュールが複数あった場合、それらすべてが有効範囲になる。

request
Figure 2. request scope

scope属性にsessionスコープを指定すると、変数の有効範囲がそのHTTPセッションになる。画面遷移がある場合、後続のJSPページでも変数を参照できる。

session
Figure 3. session scope

scope属性にapplicationスコープを指定すると、変数の有効範囲がウェブアプリケーション全体になる。HTTPリクエストやHTTPセッションに関わらず、すべてのJSPページから変数を参照できる。

application
Figure 4. application scope
url

エンコードするURLを指定する。必須属性で、省略できない。

var

エンコードしたURLを格納する変数を指定する。

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
  <head>
    <title>Core out tag</titile>
  </head>
  <body>
    <a href="<c:url url="/query?q=JSTL" />">検索</a>
  </body>
</html>

リクエストパラメータを含めてエンコードすることもできる。

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
  <head>
    <title>Core out tag</titile>
  </head>
  <body>
    <c:url url="/query" var="u">
      <c:param name="q" value="日本語" />
    </c:url>
    <a href="${u}">検索</a>
  </body>
</html>

JSTL (JavaServer Pages Standard Tag Library)

JSP標準タグライブラリ(JSTL)には、他にも次のタグがある。