意味の取り扱いのにwebアプリケーション?
-
02-07-2019 - |
質問
Java webアプリを結束す。デフォルトでは、多くはservletコンテナの使用は戦争の名称としてコンテキスト名の願います。
このようにmyapp.戦争が展開される http://example.com/myapp.
問題は、ウエブアプを考慮し、その"根"が、"ルート"、"/"はHTMLを考慮に入れるルートのアプリケーション"/myapp".
サーブレットAPIおよびJSP施設の管理を支援するために。例えば、サーブレットです:に応じます。sendRedirect("/myページ.jspのコンテナ誤動作防止)のコンテキストのurl: http://example.com/myapp/mypage.jsp".
しかし、できない、と言うことになると、IMGタグはHTML.だ <img src="/myimage.gif" /> いがく404がかかった"/myapp/myimage.gif".
多くの枠組みにおいてJSPタグが文脈を意識して、さまざまな方法の正しいUrlの内JSPなし特に優雅).
このnitty問題コーダーをアジア太平洋における平和の使用の際は、"アプリの相対url、vs絶対url.
最後に、あのJavascriptコードを作成する必要Url、および組み込みUrl内のCSS(背景画像となりました。
私どの技術その他の使用を軽減する動作します。多くだpuntやハードコードでは、サーバ側ルートへいこう。私は既に分かっている答えは、そうはいかないよもやってみたいです。
どうしますか?
解決
利用できるJSTLをurlに対するものとなります。
例えば、 <c:url value="/images/header.jpg" />
まprefixのコンテキストルート.
CSS、通常ではないが問題でした。
私のウェブルート構造のようになります:
/css
画像
をCSSファイルは、単にそれを利用する必要が相対Url(../images/header.jpgでんを意識せざるを得なくなるのです。
としてJavaScript、作品というのはどの共通のJavaScriptのページのヘッダのようになります:
<script type="text/javascript">
var CONTEXT_ROOT = '<%= request.getContextPath() %>';
</script>
を利用することができ、コンテキストルートにすべてのスクリプト(または定義することができる機能をパスすることができる少す。
このように、すべてのお客様の利用日本学術振興会およびJSTLが、利用当財団とFaceletsにおける技術と類似のグアダラハラアセンブリでのコンテキストルート方法は異なります。
他のヒント
HTMLページ等により、セット、HTML <base>
タグです。全てのリンク(はじめの制度や /
となることを対比します。がないクリーンを掴んですぐに HttpServletRequest
, ので、そちのJSTLます。
<%@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">${req.requestURI}</c:set>
<!DOCTYPE html>
<html lang="en">
<head>
<base href="${fn:substring(url, 0, fn:length(url) - fn:length(uri))}${req.contextPath}/" />
<link rel="stylesheet" href="css/default.css">
<script src="js/default.js"></script>
</head>
<body>
<img src="img/logo.png" />
<a href="other.jsp">link</a>
</body>
</html>
これはしかし、問題点:アンカーの #identifier
URLとなることを対比でのベースとしてpathです。いずれにしてくださいというので相対的にリクエストURL(URI)です。うような変更があったときはいつも
<a href="#identifier">jump</a>
へ
<a href="${uri}#identifier">jump</a>
JSしたりすることも可能ですアクセス <base>
要素からDOMについ換えへの相対URLは絶対URL.
var base = document.getElementsByTagName("base")[0].href;
ただjQuery
var base = $("base").attr("href");
CSSでは、画像のUrlからの相対URLのスタイルシートそのものです。そして、僕らのように下の画像の一部のフォルダからの相対スタイルシートそのものです。E.g.
/css/style.css
/css/images/foo.png
参考として以下の
background-image: url('images/foo.png');
だりすることによって動くという、画像の一部のフォルダと同水準にCSSフォルダ
/css/style.css
/images/foo.png
その利用 ../
への共通の親フォルダ
background-image: url('../images/foo.png');
参照:
い tardate.については時ィもに解決のプロジェクト UrlRewriteFilter.の簡単な構成により以下のような:
<rule>
<from>^.+/resources/(.*)$</from>
<to>/resources/$1</to>
</rule>
促進すべての請求*/資源パス資源のパスを含むコンテキストパスの接頭).りできますので単に全てのマ 画像 や CSS ファイル 資源 フォルダとフォルダの使用が相対Url私のスタイルの背景画像、その他。
サーブレットAPIおよびJSPて 施設の管理を支援するために。のための 例えば、サーブレットです:に応じます。sendRedirect("/myページ.jsp"), の誤動作防止)コンテナンス のurl: http://example.com/myapp/mypage.jsp".
あっあ、そうでないかもしれない-によって異なりますので、お容器およびサーブレット仕様!
その後、長い議論により グループの専門家は、サーブレットAPI2.3 を明らかに一致 うに res.sendRedirect("/index.html"コ のためのサーブレットを実行以内 root以外のコンテキストの課題であること サーブレットAPI2.2が必要である不完全 パスのように"/index.html"する 翻訳サーブレットコンテナ 完全にパスがない どのような文脈路に対応しています。の場合 サーブレットの呼び出しは、 コンテキストパス"/contextpath," のURIへのリダイレクト翻訳 相対的にコンテナのルート (http://server:port/index.html 又は コンテキストルート (http://server:port/contextpath/index.html)?移植性を最大限で と定義する行動後の長い議論の専門家 選んだ訳の対比 コンテナです。したい方 文脈の対比ができ誤動作防止)の 出力からのgetContextPath()を URIです。
なので、2.3おパス ない 自動で翻訳され、コンテキストパス.
に使用しました ヘルパークラス 生imgタグ等このヘルパークラスの prefixingパス と、アプリケーションのcontextPath.(この作品がっていただいております。いずよりよい代替案について、お伝えくださいませ。)
のための経路によるcssファイル等を使用している Antビルドスクリプト を使用したサイトです。生産。cssのためのサイトです。cssの生産環境のサイトです。開発。cssの開発encironment.
あるいはあるもののAntスクリプトをその 置換@トークン@ トークンを適切なデータを異なるenvironents.この場合@contextPAth@トークンが置き換えられ、正しいコンテキストパス.
一つのオプションでは"フラット"アプリの構造と相対Urlとなりました。
による"平ら"というわけではありませんサブディレクトリの下の申請ルートかいディレクトリに静的コンテンツとしての"画像".すべてのJSPの、アクションUrl、サーブレット行きの直下にタイムをお過ごし下さい。
これは当てはまりません完全に解決の問題が簡単にできている。
Vilmantasいるのにも最適です。相対Urlに対するものとなります。
していますのでごIMGを使用
<img src="myimage.gif"/>
の代わりに
<img src="/myimage.gif"/>
とになるでしょう相対的にアプリのコンテキストとしてのブラウザの解釈をするのはURLに行き)
以外は、特段の事情がある場合されています。を使用は絶対Urlになります。ます。絶対Urlは良いの場合 他のウエブアプ が差しでもおwebapp.内部が一の資源が差しで第二の資源、同じコンテキストのリソースをか生でなければならないと考えて表現することのできる相対パスの資源です。
もちろん、書きモジュール部品は、非常に良いのではないかと思い資源を含む。例えば:
/myapp/user/email.jsp:
Email: <a href="../sendmail.jsp">${user.email}</a>
/myapp/browse/profile.jsp:
<jsp:include page="../user/email.jsp" />
/myapp/home.jsp:
<jsp:include page="../user/email.jsp" />
では、どのようなケース email.jsp
知らの相対パスの sendmail.jsp
?のリンクにより休憩には、 /myapp/browse/profile.jsp
たまの休憩に /myapp/home.jsp
.その答えは、すべてのUrlに対して同じ平filepathます。つまり、すべてのURLではなくスラッシュの後 /myapp/
.
イラストは、簡単に達成というマッピング間の行動履歴(アクセスしたUrl、実際のファイルを生成します。(例:春に使用DispatcherServletる地図UrlをJSPファイルはます。)
があります。例えばだ文書のブラウザ側での応用のJavascript、それが困難なものに維持平filepathます。その場合、またはその他の特別な場合、または個人の好みで大きな対応を利用 <%= request.getContextPath() %>
を絶対パスです。
利用できます。getContextPath()を絶対Urlでないハードコードされた特定のコンテキストとして以前の答えは、JavaScriptが利用できるようになります。変数のごJSP(または好ましくはテンプレート)との接頭辞として、コンテキスト
ることができないCSSの画像を交換しないといを動的に生成するCSSファイルの原因となる問題等が取り上げられる。っているCSSファイルに関する画像が取得でき離れの相対Urlに対するものとなります。
あっくIE取り扱い相対Urlをバックを表現JavaScriptの変数に設定し、コンテキストうに分割私の家の画像の交換オフは、自らのファイルを使用IEマクロプルに正しいです。んきっていなければいけなかったことに対透過Pngます。なかでも動きます。
に使用しましたこれらの技術を保存、XSLT建築)。
と思い世界(コンセンサス)の問題であり、サイトの可能性のある複数のディレクトリが入っています。
場合ディレクトリの深さ(がい)が一定できますので、その頼れる相対urlなどをCSS.
心のレイアウトする必要はありません完全に平らです。
例えばになってい階層のように/css/js/、/admin/user.を適切なページと資源の適切なディレクトリが入っています。構造を有するようなこの作品もコンテナに基づく認証を行います。
私もマップ*.css*.js、JSP、サーブレットを動的でごめんなさい...皆知ってたんでした。
どうしてそうなっちゃうんですかいがあったようがあります。
いよ no との主張のあるエレガントな問題です。実際、後から振り返ってみると、かすこの問題に(が)性能。
当社のウェブアプリの日本学術振興会が厳正にXMLデータを収集します。このrawデータを入XSL(サーバーサイド)の応用である右のCSSタグ、および吐き出のXHTML.
またシングルテンプレートを作成します。xslうに継承された複数のXSLファイルまた異なるコンポーネントをブ-サービスを提供しています。当社の経路はすべて定義されているXSLファイルと呼ばれpaths.xml:
<?xml version="1.0" encoding="UTF-8"?>
<paths>
<path name="account" parent="home">Account/</path>
<path name="css">css/</path>
<path name="home">servlet/</path>
<path name="icons" parent="images">icons/</path>
<path name="images">images/</path>
<path name="js">js/</path>
</paths>
内部リンクのXMLとして
<ilink name="link to icons" type="icons">link to icons</ilink>
この取得によりXSL:
<xsl:template match="ilink">
<xsl:variable name="temp">
<xsl:value-of select="$rootpath" />
<xsl:call-template name="paths">
<xsl:with-param name="path-name"><xsl:value-of select="@type" /></xsl:with-param>
</xsl:call-template>
<xsl:value-of select="@file" />
</xsl:variable>
<a href="{$temp}" title="{@name}" ><xsl:value-of select="." /></a>
</xsl:template>
$rootPath
たったそれぞれのファイル ${applicationScope.contextPath}
の後はXMLを利用したのではなくハード-コーディングでJSP/Javaファイルしないよ再コンパイル.
再度、溶液から良いですが----しかったで!
編集:実際には、複雑さに問題が生じていない使用できる日本学術振興会全体の。なぜな人にだけ使用 ${applicationScope.contextPath}
を取得するコンテキストパス?たところ、うまくいったのでキングスカレッジロンドンとセンした。
作成時サイトから、側@お支払いは現金のみとなりますの目的のための一貫性と予測可能なurlを構成できるように貼った相対参照です。
だかなくては知ることができない本当に得るもの乱れの場合は更新サイトが最初に建てられた成長を続けるリテール企業にて、下のサイトのルート"/"(一般的に簡単にJSPサイト)に正式な Java EE 包装(コンテキストルートがある道のルート。
できるので、内容はもちろんのコード変わります。
いようにしたい場合は延期のコードの変更が適正しいコンテキストルートを参照、思試験はサーブレットを使用する事が出来ます。のフィルターに落とすことができる既存のproejctを変更せずにものを除くweb.xmlは、remapのurlを参照のウHTMLに正しい道のりをするためリダイレクトが正しく登録されています。
例サイトに使用可能コードはこちらでご用意: EnforceContextRootFilter-1.0-src.zip ※実際のマッピング規則が施行されてregexサーブレットクラスを提供するかの一般キャッチすべてのもので修正が必要な場合もあるため、特定の状況です。
ちなみに、私は、鬼若干異なる質問へのアドレス 移動し、既存のコードベースから"/"でルートコンテキストパス
してしまいがちな書物の一環として私のコアのJavaScriptライブラリ内のmy.いと思うのだと思いま最もって管理を実現します。
まず、モジュールの一部のアプリとなるコアをご利用いただけ
(function (APP) {
var ctx;
APP.setContext = function (val) {
// protect rogue JS from setting the context.
if (ctx) {
return;
}
val = val || val.trim();
// Don't allow a double slash for a context.
if (val.charAt(0) === '/' && val.charAt(1) === '/') {
return;
}
// Context must both start and end in /.
if (val.length === 0 || val === '/') {
val = '/';
} else {
if (val.charAt(0) !== '/') {
val = '/' + val;
}
if (val.slice(-1) !== '/') {
val += '/';
}
}
ctx = val;
};
APP.getContext = function () {
return ctx || '/';
};
APP.getUrl = function (val) {
if (val && val.length > 0) {
return APP.getContext() + (val.charAt(0) === '/' ? val.substring(1) : val);
}
return APP.getContext();
};
})(window.APP = window.APP || {});
その後、使用タイルに共通ヘッダがいの内容は次のとおりです。
<script type="text/javascript">
APP.setContext('${pageContext.request['contextPath']}');
// If preferred use JSTL cor, but it must be available and declared.
//APP.setContext('<c:url value='/'/>');
</script>
現在私は初期化の文脈ビスの利用に際し、制限はありま getUrl(path)
どこからでも(jsファイル内にjsp/html)を返却する絶対パスで指定された入力文字列内のコンテキスト
なお、以下のも相当ないと価値がわかりません。 getUrl
常に戻し絶対パスと相対パスでなかのもの。
var path = APP.getUrl("/some/path");
var path2 = APP.getUrl("some/path");
こちらの最良の方法:文脈へのリダイレクトフィルター フィルターの適用を受けることがあげられ、マッチの拡張ポイントとアノテーションデータ使用@PreMatching.
ィルタはこのインタフェースを実装する必要含@プロバイダによって発見されたのJAX-RSを行います。コンテナ申フィルタのインスタンスも見出し、行動的に特定の資源ます。
説明とサンプルコード: