タイトル: コンテキストパスの取得
JSPでコンテキストパス(アプリケーションのベースパス)を取得する方法を説明します。Webアプリ内のリソースを絶対URLで指す際に必須の処理です。
基本:EL式で取得
以下のコードを実装することでJSP側でコンテキストパスを取得することが可能。
|
${pageContext.request.contextPath} |
これがJSPで最も使われる書き方です。例えば /myapp としてデプロイされている場合、${pageContext.request.contextPath} は /myapp を返します。
典型的な利用例
CSS・JS・画像のパスを安全に書く際に使います。
スクリプトレットで取得する書き方
古い書き方ですが、スクリプトレットでも取得できます。新規実装ではEL式を推奨。
|
<%= request.getContextPath() %> |
JSTL の c:url を使う書き方
JSTLが使える環境では も選択肢です。コンテキストパスが自動補完され、セッションIDのURL書き換え(URL rewriting)にも対応します。
|
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> |
取得結果の例
| デプロイ状況 | contextPathの値 |
|---|---|
| ROOT.war としてデプロイ | ""(空文字) |
| myapp.war としてデプロイ | /myapp |
| 独自パス指定 (server.xml) | 指定したパス |
関連する取得
| 取得対象 | 書き方 |
|---|---|
| コンテキストパス | ${pageContext.request.contextPath} |
| リクエストURI | ${pageContext.request.requestURI} |
| リクエストURL | ${pageContext.request.requestURL} |
| サーバー名 | ${pageContext.request.serverName} |
| ポート | ${pageContext.request.serverPort} |
| プロトコル | ${pageContext.request.scheme} |
注意点
- 絶対パスのスラッシュに注意:
${pageContext.request.contextPath}は先頭にスラッシュを含むので、続けて書く相対パスは/css/...のように/で始める - ROOT配下にデプロイすると空文字になる。
${pageContext.request.contextPath}/css/...は/css/...になり問題ないが、自前で連結処理する場合は注意 - リバースプロキシ経由のときは、外部URLとコンテキストパスがズレることがある
関連
- 親カテゴリ: JSP
- Servlet: Servlet(サーブレット)
- JSPタグ: JSPのタグ一覧
