一尘不染

如何使用JSP include或c:import或symlink加载应用程序上下文之外的HTML页面

jsp

我需要使用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不可用”。任何输入该怎么做。提前致谢。


阅读 279

收藏
2020-06-10

共1个答案

一尘不染

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

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

在您的特定情况下,您似乎在服务器的本地磁盘文件系统中的其他位置拥有了该文件,但真正的URL根本无法使用它。在这种情况下,您基本上有2个选择:

  1. 将该路径的根文件夹添加为服务器配置中的虚拟主机。如何做到这一点取决于服务器的制造商/版本,您对此一无所知。以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" />

  1. 创建一个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}" />
2020-06-10