<c:url var="myUrl" value="/MyPath/${MyID}"/>
とホスト名を含む、完全なURLへのアクセス〜になる私は、(リンクをコピーするには、ユーザーを有効にするために)後で使用JSTL
http://myHost/my-app-name/MyPath/23
私は文字列を前に付けることができますが、方法をしたい積極的に正しいホスト名を取得する...?
<c:url var="myUrl" value="/MyPath/${MyID}"/>
とホスト名を含む、完全なURLへのアクセス〜になる私は、(リンクをコピーするには、ユーザーを有効にするために)後で使用JSTL
http://myHost/my-app-name/MyPath/23
私は文字列を前に付けることができますが、方法をしたい積極的に正しいホスト名を取得する...?
あなたがHttpServletRequest#getRequestURL()
とJSTL functionsの少しの助けに基づいて、それを自分で準備する必要があります:
<c:set var="req" value="${pageContext.request}" />
<c:set var="baseURL" value="${fn:replace(req.requestURL, fn:substring(req.requestURI, 1, fn:length(req.requestURI)), req.contextPath)}" />
...
<c:url var="myUrl" value="${baseURL}/${MyID}"/>
はすばやく、thnx、それはショットを与えるだろう。 – NimChimpsky
のTomcat 7.0.52では、部分文字列の先頭を1から0に変更する必要がありました。 'fn:substring(req.requestURI、0、fn:length(req.requestURI))など。 – cthiebaud
tomcat 7.0.52、単純化されたbaseURLが動作します: '
HttpServletRequestオブジェクトは、すべての詳細を持っています
getProtocol
getServerName
getContextPath
ので、私はあなたが使用することができると思う:
${request.protocol} :// ${request.serverName} ${request.contextPath} /etc
をあなたが望むものを構築します。
とポートtoo :) – helios
これは、指定されたプロトコルの既定のポートであるときはいつでも、ポートを非表示にするために、不器用なif-elseロジックフローで終わるだけです。 'getRequestURL()'に基づいて構築する方が簡単です。また、 'getServerName()'はクライアントが 'Host'リクエストヘッダを通して操作することができます。私はこれに依存しません。 – BalusC
私はポートを隠すことについては考えなかった。 OPがURLを変更したかったので、私はgetRequestURLの方法には行っていませんでした。一つの質問。私はservernameの操作を理解していませんでした。クライアントがホスト:www.other.comを送信してビルドされたURLに入るのでしょうか? – helios
Sidenote:アクティブにホスト名を取得すると、サーバーに到達するために使用されたホスト名が得られることに注意してください。 reverseProxyの背後にあるアプリケーション(たとえば、アプリケーションのサーバーへのApacheの再ルーティング要求)では、ユーザーに表示されるホスト名は持ちません。 – helios