如何在public_html文件夹"上方"包含一个jsp文件

mrb*_*000 1 jsp include

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

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

/home +
      |
      +-/user-+
            |
            +-/includes+
            |          |
            |          +/footer.jsp
            |
            +-/public_html+
                          |
                          +/index.jsp
Run Code Online (Sandbox Code Playgroud)

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

我不希望直接通过网络访问"footer.jsp".因此,它位于includes目录中,该目录位于"index.jsp"上方的一个目录中.您可以在浏览器中键入直接到达footer.jsp的URL.

这是footer.jsp的内容

<div id="footer">
    <p>This is a footer</p>
</div>
Run Code Online (Sandbox Code Playgroud)

这是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>
Run Code Online (Sandbox Code Playgroud)

我收到一个tomcat错误,说无法找到文件"/../includes.footer.jsp".如何包含网页的public_html目录之外的文件.

在PHP中,我只是这样做

<?php include("../includes/footer.php") ?>
Run Code Online (Sandbox Code Playgroud)

Bal*_*usC 5

至于问题的原因,Web内容根目录之外的任何内容都不是JSP/Servlet Web应用程序上下文的一部分,不应该被视为这样.您需要将Web文件保留在Web内容根目录中.多个(和独立的)JSP/Servlet Web应用程序很可能在webapp的父文件夹中一起运行.如果你尝试过的任何东西都可能是完整性泄漏.

至于功能要求:

我不希望直接通过网络访问"footer.jsp".

/WEB-INF文件夹用于此目的.将文件放在那里.

/home/user/ 
/home/user/public_html/index.jsp
/home/user/public_html/WEB-INF/includes/footer.jsp
Run Code Online (Sandbox Code Playgroud)

并相应地修复@include:

<%@ include file="/WEB-INF/includes/footer.jsp" %>
Run Code Online (Sandbox Code Playgroud)

最后但并非最不重要的是,请不要将PHP与JSP进行比较.PHP文化充斥着许多漏洞和糟糕的做法.JSP实际上也(如使用scriptlets:/),但不是那么多.