[解決済み] ドメインURLとアプリケーション名を取得するには?
2023-01-23 19:39:06
質問
シナリオは以下の通りです。
私のJavaウェブアプリケーションは次のようなパスを持っています。
https://www.mywebsite.com:9443/MyWebApp
JSPファイルがあるとします。
https://www.mywebsite.com:9443/MyWebApp/protected/index.jsp
を取得する必要があります。
https://www.mywebsite.com:9443/MyWebApp
をこのJSPファイル内に記述します。
もちろん、単に URL を取得し、パスを辿って戻るという怠惰で愚かな方法もあります。
しかし、これを行うプログラム的な方法はあるのでしょうか。具体的には、ドメイン + ポートは取得できると思いますが、アプリケーション名 "MyWebApp" を実際に取得する方法はありますか?
どのように解決するのですか?
ウェブアプリケーション名(実際にはコンテキストパス)は
HttpServletrequest#getContextPath()
(したがって、NOT
getServletPath()
ではありません)。これをJSPで取り出すには
${pageContext.request.contextPath}
.
<p>The context path is: ${pageContext.request.contextPath}.</p>
もし、JSPページ内のすべての相対パスに対してこれを使うつもりなら(そうすれば、この質問はもっと意味のあるものになります)、HTMLの
<base>
タグを使用することができます。
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<c:set var="req" value="${pageContext.request}" />
<c:set var="url">${req.requestURL}</c:set>
<c:set var="uri" value="${req.requestURI}" />
<!doctype html>
<html lang="en">
<head>
<title>SO question 2204870</title>
<base href="${fn:substring(url, 0, fn:length(url) - fn:length(uri))}${req.contextPath}/">
<script src="js/global.js"></script>
<link rel="stylesheet" href="css/global.css">
</head>
<body>
<ul>
<li><a href="home.jsp">Home</a></li>
<li><a href="faq.jsp">FAQ</a></li>
<li><a href="contact.jsp">Contact</a></li>
</ul>
</body>
</html>
ページ内のすべてのリンクは、自動的に
<base>
への相対リンクとなり、コンテキストのパスをあちこちにコピーペーストする必要がなくなります。相対リンクが
/
で始まる場合は、相対リンクは
<base>
への相対パスではなく、ドメインルートへの相対パスとなります。
関連
-
Serious: End event threw exception java.lang.reflect.InvocationTargetException at sun.reflect.GeneratedM
-
[解決済み] JSPページでサーブレットを呼び出す方法
-
[解決済み] JSTLでのif-elseオプションの使用方法
-
[解決済み】Laravel: ベースURLの取得
-
[解決済み] クッキーとセッションの違い?
-
[解決済み] 別のJSPファイルをインクルードする
-
[解決済み] RequestDispatcher.forward()とHttpServletResponse.sendRedirect()の比較
-
[解決済み] JSP EL、JSF EL、Unified ELの違い【終了しました
-
[解決済み] ELで定数を参照するには?
-
[解決済み] ログアウト後に、以前に閲覧した保護されたページを表示しないようにする。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Serious: End event threw exception java.lang.reflect.InvocationTargetException at sun.reflect.GeneratedM
-
java オープンソースフレームワーク統合 Context initialization failed の共通エラー。
-
[解決済み] JSPページでサーブレットを呼び出す方法
-
[解決済み] htmlの<base>タグの推奨事項を教えてください。
-
[解決済み] JSTLでのif-elseオプションの使用方法
-
[解決済み] JSTLをインストールするには?絶対 URI: http://java.sun.com/jstl/core は解決できません。
-
[解決済み] 別のJSPファイルをインクルードする
-
[解決済み] RequestDispatcher.forward()とHttpServletResponse.sendRedirect()の比較
-
[解決済み] ELで定数を参照するには?
-
[解決済み] ログアウト後に、以前に閲覧した保護されたページを表示しないようにする。