2008-10-09 31 views
2

我們爲客戶託管一個網站,他們希望我們將他們在服務器上的標題包含到我們託管的網頁中。所以,每當他們改變它,它會自動改變我們的網站。如何在我的外部託管的網站中包含標題?

我們正試圖在JSP代碼中使用「include」標籤。我們使用的代碼如下:

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

我們也嘗試

<%@ include文件= 「** HTTP://**www.CLIENT.com/CLIENT2/MiddlePageFiles/Vendor_header.html」 %>。

不幸的是,這些都不適合我們。似乎正在發生的事情是,代碼只是在本地查找此文件,並且似乎從不「去」尋找它。

當我們使用iframe時,我們能夠將頁眉拉入頁面,但由於頁眉的構造/編碼方式,鼠標懸停在下拉菜單上並不起作用 ,因爲它們應該在我們使用iframe時。下拉菜單在頁面上的其他內容下面「級聯」,我們無法將它們帶到「頂部」。

作爲臨時工作,我們在自己的服務器上託管了HTML。

任何想法?

回答

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

JSP包括不支持包括遠程文件,這就是爲什麼需要一個相對URL:http://java.sun.com/products/jsp/syntax/1.2/syntaxref1214.html

我建議編寫這將打開一個網頁的連接和下載內容的功能,然後將它們打印到您的擁有out流。然後你可以把這個函數放在一個本地文件中,只需要include即可。

-1

JSP包含並不意味着與外部服務器一樣工作。這是解決您的問題的完全可怕的方式,但對於類似的情況,這是我唯一的選擇。編寫一個類來實際解析來自該站點的html,然後將其打印出來。我會補充一點,無論你什麼時候要做這樣的事情,建立某種認證機制總是一個好主意。

1

如何使用JSTL核心庫和做:

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

這應該是能夠包括在請求時遠程內容。

+0

這很好,讓你啓動並運行,但考慮調用一個你自己的緩存頁眉和頁腳的方法。 – Cheekysoft 2008-10-14 13:34:58