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.
なぜこれが発生するのか、どうすれば修正できますか?サンクスマーク
/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>
などのサーブレットコンテナによって暗黙的にディスパッチするサーブレットを介してのみアクセスできます。
ディレクトリ構造は次のようになります
/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>