web-dev-qa-db-ja.com

JSPファイルのWEB-INFフォルダーに配置されたリソースを参照すると、リソースでHTTP404が返されます

Eclipseで作成したBookShopWebという動的なWebプロジェクトがあり、次のディレクトリ構造になっています。

/BookShopWeb/|
  |--src
  |---WebContent
                | 
                |---META-INF
                |----WEB-INF---web.xml
                            |
                            |--css--styles.css
                            |--jsp---index.jsp 

Web.xmlで、スタートページを次のように設定しました

<welcome-file-list>

<welcome-file>/WEB-INF/jsp/index.jsp</welcome-file>

Index.jspにcssを次のように含めています

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

ロードされたときのインデックスページにはcss情報が表示されません。firebugで要素を確認したところ、エラーレポートが表示されます。

Apache Tomcat/6.0.29 - Error report..
The requested resource (/css/styles.css) is not available.

なぜこれが発生するのか、どうすれば修正できますか?サンクスマーク

14
markjason72

/WEB-INFフォルダー内のファイルはパブリックアクセスできません。 CSSファイルを1つ上のレベルのWebContentフォルダーに置き、ブラウザーのアドレスバーにURLを直接入力してアクセスできるようにします。また、<link href>で指定するURLは、サーバーのディスクファイルシステム上の場所ではなく、リクエストURL(JSPを開いたときにブラウザのアドレスバーに表示されます)に関連している必要があります。最良のアプローチは、スラッシュ/で開始して、ドメイン相対にすることです。

<link rel="stylesheet" href="/BookShopWeb/css/styles.css" />

または、コンテキストパスを変更するたびにJSPを変更する必要がないように、もう少し動的に

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

JSPファイルは/WEB-INFに保持できますが、この方法では、HttpServletを拡張して自家製にするか、<welcome-file>などのサーブレットコンテナによって暗黙的にディスパッチするサーブレットを介してのみアクセスできます。

参照:

22
BalusC

ディレクトリ構造は次のようになります

/BookShopWeb/|
  |--src
  |---WebContent
                | 
                |---META-INF
                |----WEB-INF---web.xml
  |
  |--css--styles.css
  |--jsp---index.jsp 

また、cssにstyles.jspという名前を付けましたが、これはcssファイルを宣言する適切な方法ではありません。

Web.xmlの場合:

<welcome-file-list>

<welcome-file>index.jsp</welcome-file>

Jspファイル内:

<head>
<link rel="stylesheet" type="text/css" href="./css/styles.css" />
</head>
6
Harry Joy