【问题标题】:How do I include a jsp file located "above" the public_html folder如何包含位于 public_html 文件夹“上方”的 jsp 文件
【发布时间】:2011-08-05 20:24:13
【问题描述】:

首先,我来自 PHP 背景(这个问题可能很明显)。这是一个用 PHP 完成的简单任务,但我对如何用 jsp 完成这个任务感到非常困惑。

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

/home +
      |
      +-/user-+
            |
            +-/includes+
            |          |
            |          +/footer.jsp
            |
            +-/public_html+
                          |
                          +/index.jsp

public_html 是 Apache Tomcat 服务的目录。因此,如果有人浏览我的域 (sampledomain.com),他们会看到 index.jsp

我不希望通过网络直接访问“footer.jsp”。因此,它位于位于“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”。如何包含网页的 public_html 目录之外的文件。

在 php 中,我只是这样做

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

【问题讨论】:

    标签: jsp include


    【解决方案1】:

    关于问题的原因,Web 内容根目录之外的任何内容都不是 JSP/Servlet Web 应用程序上下文的一部分,因此不应被视为这样。您需要将 Web 文件保存在 Web 内容根目录中。多个(且独立的)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 :/),但不是那么

    【讨论】:

    • 好的。我得到它。但就糟糕的安全性实践而言……在 PHP 中,我只相信 Apache 会阻止人们直接访问我的页脚。它非常安全。没有人能够直接通过网络浏览器访问该脚本。似乎 JSP 添加了另一个不必要的层。 WEB-INF 文件夹让我想起了 PERL 的 cgi-bin/ 文件夹,这也让我很头疼。这是 2000 年前对不存在的安全问题的修复。还是,谢谢。似乎这样可以解决问题。
    【解决方案2】:

    这个 /user/includes/footer.jsp 应该在项目的 WebContent 文件夹中。

    【讨论】:

    • 如果它在 WebContent 文件夹中,那么它可以通过网络访问,这正是我不想要的。在发布之前,我在 Google 上搜索了很多可能的答案,似乎 Java 人不理解将文件存储在域根目录之外的“一个目录上”的概念。解决方法是将文件存放在WEB-INF目录下。这与将 PHP 文件存储在根目录之上的目录完全相同——只有 JSP 强制您使用它们的目录,而在 PHP 中您可以选择自己目录的名称。这只是 JSP 迫使您跳过的不必要的箍。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-26
      • 1970-01-01
      • 2013-04-09
      • 2012-12-30
      • 1970-01-01
      • 1970-01-01
      • 2011-10-08
      相关资源
      最近更新 更多