在 JSP 文件中引用放置在 WEB-INF 文件夹中的资源会在资源上返回 HTTP 404

Posted

技术标签:

【中文标题】在 JSP 文件中引用放置在 WEB-INF 文件夹中的资源会在资源上返回 HTTP 404【英文标题】:Referencing a resource placed in WEB-INF folder in JSP file returns HTTP 404 on resource 【发布时间】:2011-08-10 18:27:42 【问题描述】:

我有一个名为 BookShopWeb 的动态 Web 项目,它是在 eclipse 中创建的,具有以下目录结构

/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.

知道为什么会发生这种情况吗?我该如何纠正这个问题? 谢谢 标记

【问题讨论】:

【参考方案1】:

/WEB-INF 文件夹中的文件不可公开访问。将 CSS 文件放在上一层,在 WebContent 文件夹中,并确保可以通过直接在浏览器地址栏中输入其 URL 来访问它们。此外,您在&lt;link href&gt; 中指定的 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 中,但这样它们只能通过调度 servlet 访问,要么通过扩展 HttpServlet 自行开发,要么由 servlet 容器隐式访问,例如 &lt;welcome-file&gt;

另见:

Browser can't access/find relative resources like CSS, images and links when calling a Servlet which forwards to a JSP JSP in /WEB-INF returns "HTTP Status 404 The requested resource is not available"

【讨论】:

如果JSP文件保存在/WEB-INF中,href中的字段应该怎么写? @shirley:只需指定调度 servlet 的 URL。如果您完全不熟悉 servlet,请阅读 ***.com/tags/servlets/info 我也有同样的问题。我将css 文件夹放在webapp 中,而我的jspWEB-INF 中...我仍然无法获得工作参考。在web.xmlservelet 调度程序中是否也有一些配置?【参考方案2】:

你的目录结构应该是

/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>

【讨论】:

css 文件是 styles.css。我在输入问题时出错了。 好的。但是你的目录结构应该和我的回答一样。

以上是关于在 JSP 文件中引用放置在 WEB-INF 文件夹中的资源会在资源上返回 HTTP 404的主要内容,如果未能解决你的问题,请参考以下文章

frame 标记 引用一个jsp文件应该怎么写??

JSP 中的 tag 文件

毕设:高校考试信息数字化平台——WEB-INF内部的jsp文件引用css

WEB-INF简介

在 WEB-INF 文件夹下包含 JSP 文件

JSP开发中对jstl的引用方式(标签库引用)