如何包含位于“的jsp文件?”;“以上”;公共html文件夹

如何包含位于“的jsp文件?”;“以上”;公共html文件夹,jsp,include,Jsp,Include,首先,我有PHP背景(这一点可以从这个问题中看出)。这是一个用PHP完成的简单任务,但我对如何用jsp完成这一任务感到非常困惑 这是我在服务器上的文件夹结构: /home + | +-/user-+ | +-/includes+ | | | +/footer.jsp | +-/public_ht

首先,我有PHP背景(这一点可以从这个问题中看出)。这是一个用PHP完成的简单任务,但我对如何用jsp完成这一任务感到非常困惑

这是我在服务器上的文件夹结构:

/home +
      |
      +-/user-+
            |
            +-/includes+
            |          |
            |          +/footer.jsp
            |
            +-/public_html+
                          |
                          +/index.jsp
public_html是由apachetomcat提供服务的目录。因此,如果有人浏览我的域(sampledomain.com),他们会看到index.jsp

<!DOCTYPE html>
<html>
<head>
    <title>Test</title>
    <meta charset="UTF-8" />
</head>
<body>
    <h1>Hello World</h1>
    <%@ include file="../includes/footer.jsp" %>
</body>
</html>
我不希望通过web直接访问“footer.jsp”。因此,它位于includes目录中,该目录位于“index.jsp”上方的一个目录中。您不可能在浏览器中键入URL来直接访问footer.jsp

下面是footer.jsp的内容

<div id="footer">
    <p>This is a footer</p>
</div>

这是一个页脚

以下是index.jsp的内容

<!DOCTYPE html>
<html>
<head>
    <title>Test</title>
    <meta charset="UTF-8" />
</head>
<body>
    <h1>Hello World</h1>
    <%@ include file="../includes/footer.jsp" %>
</body>
</html>

测验
你好,世界
我收到一个tomcat错误,说明找不到文件“/../includes.footer.jsp”。如何包含网页公共html目录之外的文件

在php中,我只需要

<?php include("../includes/footer.php") ?>


此/user/includes/footer.jsp应位于project的WebContent文件夹中。

此/user/includes/footer.jsp应位于project的WebContent文件夹中。

至于问题的原因,web内容根目录之外的任何内容都不是jsp/Servlet web应用程序上下文的一部分,不应被视为jsp/Servlet web应用程序上下文的一部分。您需要将web文件保存在web内容根目录中。很有可能在webapp的父文件夹中同时运行多个(独立的)JSP/Servlet web应用程序。如果你所做的一切都有可能,那就是一次完整性泄漏

关于功能要求:

我不希望通过web直接访问“footer.jsp”

/WEB-INF
文件夹用于此目的。把文件放进去

/home/user/ 
/home/user/public_html/index.jsp
/home/user/public_html/WEB-INF/includes/footer.jsp
并相应地修复
@include

<%@ include file="/WEB-INF/includes/footer.jsp" %>


最后但并非最不重要的一点,请不要将PHP与JSP进行比较。PHP文化中充斥着许多漏洞和糟糕的实践。JSP实际上也一样(与使用scriptlets:/)但没有那么多。

至于问题的原因,web内容根以外的任何内容都不是JSP/Servlet web应用程序上下文的一部分,因此不应将其视为JSP/Servlet web应用程序上下文的一部分。您需要将web文件保存在web内容根目录中。很有可能在webapp的父文件夹中同时运行多个(独立的)JSP/Servlet web应用程序。如果你所做的一切都有可能,那就是一次完整性泄漏

关于功能要求:

我不希望通过web直接访问“footer.jsp”

/WEB-INF
文件夹用于此目的。把文件放进去

/home/user/ 
/home/user/public_html/index.jsp
/home/user/public_html/WEB-INF/includes/footer.jsp
并相应地修复
@include

<%@ include file="/WEB-INF/includes/footer.jsp" %>


最后但并非最不重要的一点,请不要将PHP与JSP进行比较。PHP文化中充斥着许多漏洞和糟糕的实践。JSP实际上也有(与使用scriptlets时一样:/),但没有那么多。

有这个问题,想要包含一个在另一个目录中的文件,可以通过父目录访问,我用这个解决了这个问题:

有这个问题,想要包含一个在另一个目录中的文件,可以通过父目录访问,我用这个解决了这个问题:

OK。我明白了。但就糟糕的服务实践而言。。。在PHP中,我相信Apache可以阻止人们直接访问我的页脚。它非常安全。没有人能够通过web浏览器直接访问该脚本。JSP似乎添加了另一个不必要的层。WEB-INF文件夹让我想起了PERL的cgi-bin/folder,这也是一个麻烦。这是2000年以前对一个不存在的安全问题的修复。不过,谢谢。看来这会解决问题的。好的。我明白了。但就糟糕的服务实践而言。。。在PHP中,我相信Apache可以阻止人们直接访问我的页脚。它非常安全。没有人能够通过web浏览器直接访问该脚本。JSP似乎添加了另一个不必要的层。WEB-INF文件夹让我想起了PERL的cgi-bin/folder,这也是一个麻烦。这是2000年以前对一个不存在的安全问题的修复。不过,谢谢。这似乎可以解决问题。如果它在WebContent文件夹中,那么它可以通过web访问,这正是我不想要的。在发布之前,我在谷歌上搜索了很多可能的答案,似乎Java用户不理解在域的根目录之外“向上一个目录”存储文件的概念。解决方案是将文件存储在WEB-INF目录中。这与将PHP文件存储在根目录上方的一个目录完全相同——只有JSP强制您使用它们的目录,在PHP中您可以选择自己目录的名称。这只是JSP强迫您跳过的一个不必要的环。如果它在WebContent文件夹中,那么它可以通过web访问,这正是我不想要的。在发布之前,我在谷歌上搜索了很多可能的答案,似乎Java用户不理解在域的根目录之外“向上一个目录”存储文件的概念。解决方案是将文件存储在WEB-INF目录中。这与将PHP文件存储在根目录上方的一个目录完全相同——只有JSP强制您使用它们的目录,在PHP中您可以选择自己目录的名称。这只是JSP强迫您跳过的一个不必要的环。