如何在外部托管的网站中加入标题?

时间:2008-10-09 13:12:01

标签: java jsp include jspinclude

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

我们正在尝试在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。

有什么想法吗?

4 个答案:

答案 0 :(得分:3)

如果您选择在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请求。

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:-1)

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