0

いくつかのサブフォルダーを含む小さなサイトを構築しています。jspページがいくつのサブフォラーになるか分からないので、次のようなことをするために、私のWebアプリケーションの本当のパスを知る方法が必要です:

<link rel="stylesheet" type="text/css" href="<%=realpath%>/Style.css" >

そしてこれをしない

<link rel="stylesheet" type="text/css" href="../Style.css" >
<link rel="stylesheet" type="text/css" href="../../Style.css" >
<link rel="stylesheet" type="text/css" href="../../../Style.css" >

これを使いました。

ServletContext context = session.getServletContext();
String path = getServletContext().getRealPath("/");

しかし、パスが正しいように見えても (画面に印刷すると)、jsp ページを開くと、CSS が見つかりません。

4

1 に答える 1

2

あなたは概念的な間違いを犯しています。CSS ファイルは、取得した HTML 出力を解析しながら URL を介して Web ブラウザーによってダウンロードされます。HTML 出力を生成するときにディスク ファイル システム パスを介して Web サーバーによって魔法のようにインライン化されるわけではありません。したがって、「リアルパス」アプローチ全体が間違っています。有効な URL を準備する必要があります。HttpServletRequest#getContextPath()コンテキスト パスの動的性が問題になる場合は、コンテキスト パスを動的に出力するために使用します。

<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/Style.css" >

とは言うものの、私が Java EE を扱ってきた 10 年以上の間、 を使用する合理的なビジネス上の理由は 1 つもありませんでしたServletContext#getRealPath()。まったく使わないでください。そうしようとする試みは、結局のところ、明らかに間違っている可能性が高いです。

以下も参照してください。

于 2013-10-03T12:48:33.677 に答える