門戶站點靜態發布的設計與實現
之前寫過一片文章講述了門戶首頁靜態發布解決方案
(訪問**: 1、
門戶首頁 2、
二級頁面(或稱欄目頁) 3、
**頁面(或稱文章頁) 4、
全文檢索結果展示頁面 5、
控制台管理頁面
其中需要前面三種型別的頁面是需要發布成靜態的,另外發布還分兩種情況:
1、整站發布:從首頁開始發布整個站點。
2、單頁發布:根據指定的發布頁,發布其及其頁面上的所有鏈結,但頁面上鏈結發布出來的頁面上的鏈結不再繼續發布。單頁發布主要出於增量發布的需要,比如某欄目下新增加了文章,就可單獨對該欄目對應的頁面進行單獨發布,無需每次都整站發布。
為提高效能,避免對一些不變的頁面進行不必要的重新發布(比如文章頁),特定以下規則:
1、如果已存在的發布頁面列表不包含當前要發布的頁面,則發布該頁面
2、如果包含,且非文章頁,則發布該頁面
3、如果包含,且是文章頁,且非第乙個發布頁面,則不再發布該頁面
4、如果包含,且是文章頁,且是第乙個發布頁面(單個文章頁發布時),則發布該頁面12
3、如果是單頁發布,且當前發布頁是指定頁本身,則發布其上所有鏈結
4、如果是單頁發布,當前發布頁非指定頁本身,則不發布其上所有鏈結
具體的發布實現過程參照網路爬蟲的原理,具體如下: 1、
從首頁開始,使用
httpurlconnection模擬瀏覽器發起乙個請求,通過讀取請求響應的內容來抓取頁面內容,儲存到本地的靜態html
頁面裡; 2、
解析該新儲存的頁面內容(使用乙個叫htmlparser
的開源包),獲取頁面裡的所有鏈結,過濾出需要發布成靜態頁面的url
位址。
3、對這些url
位址逐個重複進行1
、2兩步的操作。 4、
將靜態頁面裡的動態url
位址替換成新發布出來的靜態html
頁面位址。
以上過程其實是個深度發布的過程,從首頁到欄目頁,再一直到文章頁,從而將整個站點的所有頁面都抓取下來。
門戶首頁靜態發布的解決方案
為了解決ajax方式portlet的問題,引進了模板引擎做portlet開發。在解析門戶結構生成頁面時候再用模板引擎 freemarker 解析一邊該生成的頁面,從而取到各個portlet的資料。這樣做法很好解決了上面ajax方式portlet的問題 雖然也犧牲了ajax方式單個重新整理portle...
遠端發布的設計和實現
遠端發布的設計和實現 在實施門戶部署時,部分客戶會有內外網都要的需求,即內容資訊維護在內網完成,內網使用者可以通過內網直接訪問門戶,但同時需要加門戶發布到外網,供internet 上使用者訪問,內外網的資訊需要保持同步。第一步需要將動態的門戶頁面全部發布成靜態html 頁面 可參考我的另外一篇日誌 ...
Redis 設計與實現 (六) 發布訂閱
發布訂閱 發布者 頻道 訂閱者 發布和訂閱都是客戶端頻道是服務端 1 publish subscribe 模式 開啟乙個命令窗體,redis訂閱者 redis cli 127.0.0.1 6379 subscribe channel 1 reading messages.press ctrl c t...