我需要使用 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 不可用”。任何输入如何做到这一点。提前致谢。
3 回答
它必须通过 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 个选择:
将该路径的根文件夹作为虚拟主机添加到服务器配置中。如何做到这一点取决于您没有提供任何信息的服务器品牌/版本。以 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" />
创建一个 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}" />
或者,我们可以借助符号链接或短链接或软链接来实现,这样就不会有太多的编码。在我的案例中,我为 MySharedHTML 创建了一个软链接,它位于我的应用程序 Web 内容下,指向 D 驱动器中的某个路径。
由于默认情况下禁用符号链接以在您的 Tomcat 服务器中启用它们,您需要将以下配置添加到 context.xml,它位于Tomcat 服务器的conf文件夹下。
<Context allowLinking="true">
您不包含完整路径。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" />