/WEB-INF 中的 JSP 返回“HTTP 状态 404 请求的资源不可用”

Posted

技术标签:

【中文标题】/WEB-INF 中的 JSP 返回“HTTP 状态 404 请求的资源不可用”【英文标题】:JSP in /WEB-INF returns "HTTP Status 404 The requested resource is not available" 【发布时间】:2011-01-24 01:39:26 【问题描述】:

我创建了一个 JSP 文件。

sample.jsp

<%@ page pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
  <head>
    <title>Insert title here</title>
  </head>
  <body>
    This is jsp program
  </body>
</html>

我把它放在samplejsp项目中。

samplejsp
 `-- WebContent
      `-- WEB-INF
           `-- sample.jsp

我在以下网址打开它。

http://localhost:8080/samplejsp/sample.jsp

但它在浏览器中显示以下错误。

404 错误

请求的资源 (/sample.jsp) 不可用。

【问题讨论】:

对不起,我今天解决了我的错误 7 天过去了,你什么也没接受... 【参考方案1】:

404 仅表示"Not Found"。

要么 URL 错误(注意:区分大小写!),要么资源不在您认为的位置。

只需验证 URL 和/或验证资源是否在您期望的位置。您将sample.jsp 放在/WEB-INF 文件夹中。这样,如果不通过前端控制器 servlet 调用,它就不能公开访问。

放在外面/WEB-INF

samplejsp
 `-- WebContent
      |-- WEB-INF
      `-- sample.jsp

如果你想把它保存在/WEB-INF,那么你需要创建一个前端控制器servlet,它在doGet()方法中转发给它,如下所示。

request.getRequestDispatcher("/WEB-INF/sample.jsp").forward(request, response);

最后通过调用 servlet 的实际 URL 而不是 JSP 的虚构 URL 来“打开”JSP。

另见:

What is WEB-INF used for in a Java EE web application? Calling servlet from JSP doGet and doPost in Servlets

【讨论】:

是的,我检查了,但它显示上述错误,程序中是否有任何错误 是的,要么 URL 错误,要么资源实际上不存在。错误信息没有说谎。 好的,我接受错误消息不是说谎,在 URL 中发生了错误我也明白了,我选择了 jsp 文件并从属性中复制了 URL,然后为什么它显示错误,如何解决这个问题? 提示:URL 应该是一个 URL,而不是磁盘文件系统路径。如果sample.html 位于http://localhost:8080/samplejsp/sample.html,那么sample.jsp 显然位于http://localhost:8080/samplejsp/sample.jsp。因此&lt;form action&gt; 应该是http://localhost:8080/samplejsp/sample.jsp 或者更好的是sample.jsp。在您的情况下,应该这样做:&lt;form action="sample.jsp"&gt;.【参考方案2】:

这主要与您的目录结构或包装有关。 你能添加你的目录结构吗? 类似于下面 -

src 
|-html\
|-jsp\

也许应该这样做

<form action="sample.jsp" method=get>
      <input type =submit value="submit">
</form>

编辑 - WEB-INF 不允许直接访问 JSP。

【讨论】:

快速修复 - 从 WEB-INF 文件夹中移动 HTML 和 JSP 文件并运行。 我的意思是将两个文件从 WEB-INF 移动到其他文件夹。【参考方案3】:

在我的带有 JSP 的 Spring Boot Web 应用程序中,直到我添加了这个依赖项,它才起作用

    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
        <scope>provided</scope>
    </dependency>

即使在配置视图解析器之后

spring.mvc.view.prefix: /WEB-INF/views/ 
spring.mvc.view.suffix: .jsp

如果你发现为什么这有效,请发表评论。

【讨论】:

tomcat-embed-jasper:提供对.jsp文件渲染的支持。

以上是关于/WEB-INF 中的 JSP 返回“HTTP 状态 404 请求的资源不可用”的主要内容,如果未能解决你的问题,请参考以下文章

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

eclipse WEB-INF下文件夹中的jsp文件无法运行

为啥 WEB-INF 文件夹中的 jsp 文件有效,但放在 WEB-INF 下的文件夹下无效?

从 WEB-INF 中的 JSP 访问资源 [重复]

JSP 中的问题:按钮 Click() 上的转发(当目标 jsp 在 web-inf 文件夹下时)

如何将我的 Spring URL 映射到 /WEB-INF/views 中的 JSP 文件?