<c:url>
はURLに使用できない文字をエンコードするJSP標準タグライブラリ(JSTL)である。
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>
タグには次の属性を指定する。
コンテキストパスを指定する。
WebサーバはWebアプリケーションをコンテキストと呼ばれる単位で管理している。下記URLの場合は「/app」の部分がコンテキストパスとなる。
https://localhost:8080/app/example/example.jsp
var属性で指定した変数の有効範囲(スコープ)を指定する。次のうちいずれかの値をscope属性に指定する。
スコープ | 変数の有効範囲 |
---|---|
page | JSPページ |
request | HTTPリクエスト |
session | HTTPセッション |
application | Webアプリケーション |
scope属性にpageスコープを指定すると、変数の有効範囲がそのJSPページになる。画面遷移がある場合、後続のJSPページで変数を参照することはできない。
scope属性にrequestスコープを指定すると、変数の有効範囲がそのHTTPリクエストになる。ひとつのHTTPリクエストを処理するモジュールが複数あった場合、それらすべてが有効範囲になる。
scope属性にsessionスコープを指定すると、変数の有効範囲がそのHTTPセッションになる。画面遷移がある場合、後続のJSPページでも変数を参照できる。
scope属性にapplicationスコープを指定すると、変数の有効範囲がウェブアプリケーション全体になる。HTTPリクエストやHTTPセッションに関わらず、すべてのJSPページから変数を参照できる。
エンコードするURLを指定する。必須属性で、省略できない。
エンコードした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>
JSP標準タグライブラリ(JSTL)には、他にも次のタグがある。