我们正在为客户托管网站,他们希望我们将他们在服务器上的标头包含在我们托管的网页中。因此,无论何时更改,它都会在我们的网站上自动更改。
我们正在尝试在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。
有什么想法吗?
答案 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,然后将其打印出来。我想补充一点,无论何时你打算做这样的事情,都应该有一些认证机制。