2

我需要使用 jsp include tag 将一些其他应用程序动态创建的 html 页面加载到我的应用程序 jsp 页面中<jsp:include page="${Htmlpath}" /> OR <jsp:include page="D:\MySharedHTML\test.html" />。我的想法是在服务器上创建一个共享文件夹,例如“MySharedHTML”,并让其他应用程序在那里创建 html 文件,我的应用程序将通过提供完整路径来访问。但是 jsp include 说“请求的资源 D:\MySharedHTML\test.html 不可用”。任何输入如何做到这一点。提前致谢。

4

3 回答 3

5

它必须通过 URL 可用。这D:\MySharedHTML\test.html绝对不是一个有效的 URL。一个有效的 URL 如下所示http://localhost:8080/MySharedHTML/test.html

是否使用<jsp:include><c:import>取决于 URL 是内部 URL 还是外部 URL。<jsp:include>仅适用于内部 URL(因此,同一个 webapp 中的资源,以及私下隐藏在 中的资源)/WEB-INF。此外,这些<c:import>工作还适用于外部 URL(因此,完全不同的 web 应用程序中的资源,但这些资源必须是可公开访问的;即,在浏览器的地址栏中复制粘贴 URL 时,您必须已经看到所需的包含内容)。

在您的特定情况下,您似乎在服务器的本地磁盘文件系统中的其他地方拥有它,而真正的 URL 根本不可用。在这种情况下,您基本上有 2 个选择:

  1. 将该路径的根文件夹作为虚拟主机添加到服务器配置中。如何做到这一点取决于您没有提供任何信息的服务器品牌/版本。以 Tomcat 为例,只需在 Tomcat 中添加以下条目即可/conf/server.xml

    <Context docBase="D:\MySharedHTML" path="/MySharedHTML" />
    

    这样,所有文件夹的内容都可以通过 使用http://localhost:8080/MySharedHTML/*,包括test.html. 这样你就可以<c:import>在上面使用(注意:<jsp:include>不适用,因为它不在同一个 webapp 中)。

    <c:import url="/MySharedHTML/test.html" />
    

  2. 创建一个 servlet,它充当本地磁盘文件系统的代理。假设您使用的是 Servlet 3.0 / Java 7 并且您可以更改${Htmlpath}变量以使其仅返回test.html,那么应该这样做:

    @WebServlet("/MySharedHTML/*")
    public class PdfServlet extends HttpServlet {
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            String filename = request.getPathInfo().substring(1);
            File file = new File("D:\\MySharedHTML", filename);
            response.setHeader("Content-Type", getServletContext().getMimeType(filename));
            response.setHeader("Content-Length", String.valueOf(file.length()));
            response.setHeader("Content-Disposition", "inline; filename=\"" + URLEncoder.encode(filename, "UTF-8") + "\"");
            Files.copy(file.toPath(), response.getOutputStream());
        }
    
    }
    

    (当尚未使用 Servlet 3.0 / Java 7 时,只需退回到明显的web.xml注册和InputStream/OutputStream循环样板)

    由于 servlet 在同一个 webapp 中运行,<jsp:include>应该可以正常工作:

    <jsp:include page="/MySharedHTML/${HtmlFilename}" />
    
于 2013-10-04T15:04:46.630 回答
0

或者,我们可以借助符号链接或短链接或软链接来实现,这样就不会有太多的编码。在我的案例中,我为 MySharedHTML 创建了一个软链接,它位于我的应用程序 Web 内容下,指向 D 驱动器中的某个路径。

由于默认情况下禁用符号链接以在您的 Tomcat 服务器中启用它们,您需要将以下配置添加到 context.xml,它位于Tomcat 服务器的conf文件夹下。

<Context allowLinking="true">
于 2013-10-08T09:53:33.280 回答
0

您不包含完整路径。MySharedHTML 文件夹需要位于您的应用程序文件夹下,并且您通过相对路径包含。

所以说你的网络应用程序在

 c:\Program Files\Apache Software Foundation\Tomcat\webapps\myapp\

你会把你的 MySharedHTML 放在那里

 c:\Program Files\Apache Software Foundation\Tomcat\webapps\myapp\MySharedHTML

然后通过相对路径包含:

 <jsp:include page="./MySharedHTML/test.html" />
于 2013-10-03T17:14:57.990 回答