【问题标题】:How do I include a header into my site that is hosted externally?如何在外部托管的网站中包含标题?
【发布时间】:2010-09-16 06:37:47
【问题描述】:

我们正在为客户托管一个网站,他们希望我们将他们在其服务器上的标头包含到我们托管的页面中。因此,无论何时他们更改它,它都会在我们的网站上自动更改。

我们试图在我们的 JSP 代码中使用“include”标签。我们使用的代码如下:

<%@ include file="www.CLIENT.com/CLIENT2/MiddlePageFiles/Vendor_header.html" %>

我们也试过了

<%@ include file="**http://**www.CLIENT.com/CLIENT2/MiddlePageFiles/Vendor_header.html" %>

很遗憾,这些对我们不起作用。似乎正在发生的事情是代码仅在本地查找此文件,并且似乎从不去“外部”查找它。

当我们使用 iframe 时,我们可以将标题拉入我们的页面,但由于标题的构造/编码方式,鼠标悬停在下拉菜单上不起作用 就像我们使用 iframe 时一样。下拉菜单在页面上的其余内容下方“层叠”,我们无法带来 他们到“顶”。

作为临时工作,我们将 HTML 托管在我们自己的服务器上。

有什么想法吗?

【问题讨论】:

    标签: java jsp include jspinclude


    【解决方案1】:

    如果您选择在 Java 中执行此操作,那么使用 Apache Commons 的 HttpClient 会非常方便。

    public static String fetchSourceHtml( String urlString ) {
    
      try {
        HttpClient httpClient = new HttpClient();
        GetMethod getMethod = new GetMethod( urlString );
        getMethod.setFollowRedirects( true );
    
        int httpStatus = httpClient.executeMethod( getMethod );
    
        if (httpStatus >= 400) {
          return "";
        }
    
        String sourceHtml = getMethod.getResponseBodyAsString();
        return sourceHtml;
      }
      catch (IOException e) {
        return "";
      }
    }
    

    为了快速而肮脏的解决方案,您的 JSP 可以直接调用此方法。如果您愿意,当然可以创建一个 taglib 标记来调用该方法。

    您可能想要更改 HttpClient 的超时和重试机制。默认情况下,它会自动尝试最多 3 次,每次尝试在 30 秒后超时。

    但是,您可能希望研究将字符串缓存一段合适的时间。您真的不想为访问您网站的每个页面创建 2 个阻止外部 http 请求。

    【讨论】:

      【解决方案2】:

      JSP 包含不支持包含远程文件,这就是为什么需要相对 URL:http://java.sun.com/products/jsp/syntax/1.2/syntaxref1214.html

      我建议编写一个函数来打开与该页面的连接并下载内容,然后将它们打印到您自己的out 流中。然后你可以把这个函数放在一个本地文件中,然后include那个。

      【讨论】:

        【解决方案3】:

        使用JSTL核心库如何做:

        <c:import url="http://www.CLIENT.com/CLIENT2/MiddlePageFiles/Vendor_header.html" />
        

        这应该能够在请求时包含远程内容。

        【讨论】:

        • 这可以让您启动并运行,但请考虑调用您自己的方法来缓存页眉和页脚。
        【解决方案4】:

        JSP 包含并不意味着像外部服务器那样工作。这是解决您的问题的一种完全可怕的方法,但它是我在类似情况下的唯一选择。编写一个类来实际解析来自该站点的 html,然后将其打印出来。我要补充一点,每当您要执行此类操作时,建立某种身份验证机制总是一个好主意。

        【讨论】:

          猜你喜欢
          • 2017-10-25
          • 2016-02-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-05-25
          • 2023-02-01
          相关资源
          最近更新 更多