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

我们正在尝试使用<!>“include <!>”;我们的JSP代码中的标记。我们使用的代码如下:

<!> lt;%@ include file = <!> quot; www.CLIENT.com/CLIENT2/MiddlePageFiles/Vendor_header.html <!> quot; %GT <!>; 。

我们也试过

<!> lt;%@ include file = <!> quot; ** http://**www.CLIENT.com/CLIENT2/MiddlePageFiles/Vendor_header.html <!> quot; %GT <!>; 。

不幸的是,这些对我们不起作用。似乎正在发生的事情是代码只在本地查找此文件,似乎永远不会出现<!> quot; outside <!> quot;寻找它。

当我们使用iframe时,我们能够将标题拉入页面,但是由于标题的构造/编码方式,鼠标悬停在下拉菜单中不起作用 当我们使用iframe时应该如此。下拉菜单是<!>“; cascading <!>”;在页面上的其他内容下面,我们无法带来 它们到<!>“顶部<!>”;

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

有什么想法吗?

有帮助吗?

解决方案

如果您选择在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 "";
  }
}

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

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

但是,您可能希望在适当的时间段内缓存字符串。您真的不希望为每个页面访问您的网站设置2个阻止外部http请求。

其他提示

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

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

如何使用JSTL核心库并执行:

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

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

JSP包含并不意味着与外部服务器一样工作。这是解决问题的完全可怕的方法,但在类似的情况下,这是我唯一的选择。编写一个类来实际解析该站点的html,然后将其打印出来。我想补充一点,无论何时你打算做这样的事情,都应该有一些认证机制。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top