門戶首頁靜態發布的解決方案

2021-08-29 16:43:38 字數 1266 閱讀 6332

為了解決ajax方式portlet的問題,引進了模板引擎做portlet開發。在解析門戶結構生成頁面時候再用模板引擎(freemarker)解析一邊該生成的頁面,從而取到各個portlet的資料。這樣做法很好解決了上面ajax方式portlet的問題(雖然也犧牲了ajax方式單個重新整理portlet的使用者體驗)。

結合模板引擎方式portlet,再對門戶進行靜態發布(可對整個門戶靜態發布,實現離線瀏覽的功能,但一般只需要對大併發量訪問的頁面比如首頁進行靜態發布即可),可極大提高頁面訪問的併發量。靜態發布方式這裡不詳細敘述,我採用的是通過httpclinet傳送頁面請求獲取響應資料並儲存為靜態html頁面的方法,可參考網上各種網路爬蟲的實現方式。

至此還有兩個問題需要解決,如何在使用者訪問門戶的時候自動轉向到靜態發布出來的html位址(我們的門戶位址一般發布為**.portal這樣的快捷訪問位址)?以及如何自動的更新靜態html(首頁內容會不時更新)?

第乙個問題好解決,只需配置乙個filter來過濾.portal結尾的請求位址,將他們重定向到對應的html頁面位址。比如有乙個gzcz.portal的快捷位址,則在靜態發布該快捷位址時將發布出來的html頁面儲存成名為gzcz.portal.html的html頁面。則使用者訪問gzcz.portal時通過過濾器很方便的可以轉向到gzcz.portal.html位址。

第二個問題相對不好解決,雖然簡單的可以通過定時靜態發布的方法來解決,但怎麼定時?定多長時間?以及使用者訪問時如果剛好趕上在定時重新發布怎麼辦?還有晚上、週末等門戶資訊不再有更新的時候再定時操作給機器帶來不必要的效能負荷。也許可以在資訊有更新的時候及時重新發布,但由於資訊更新是在文章內容管理系統(cms)裡,資訊的聚集和展示在門portal端,對cms裡的資訊來說,它只是被動的等待portlet來讀取,而沒法反過來作用portlet,所以這個方法也不行。最後決定由第乙個問題解決辦法裡的過濾器結合靜態發布機械人來處理,首先在機械人裡維護乙個池來記錄各個頁面位址的最後發布時間,然後每次過濾器過濾到.portal頁面請求的時候,呼叫機械人來檢查該頁面的發布時間是否已經超過了設定的定期時間(如果資訊更新頻繁,可適當調短定期時間),如果是,則重新呼叫靜態發布機械人進行發布後再訪問靜態html頁面;否則就直接訪問靜態html頁面。

通過效能測試,經過以上改進後門戶首頁的併發量得到了極大的提高。

作者簡介:jon.king(中文名苦行),男,從事軟體開發3.5年。目前主要從事j2ee平台下 

軟體開發。涉及過財政類軟體、門戶類、內容管理類、統一使用者管理類軟體產品等開發,剛涉  足工作流引擎領域。個人郵箱msn是[email protected]

,歡迎同道中人加我。

華為發布ATAE集群解決方案

隨著移動寬頻時代的到來,為了滿足使用者日益增長的通訊需求,由多頻譜構成的多制式 多層網路應運而生,其資源鏈條橫跨無線 傳輸和核心網,網路結構複雜,運維複雜度和工作量急劇上公升,oss系統的效能和可靠性也面臨著挑戰。同時,oss硬體也面臨成本高 占地空間大 服務響應不及時等困難。為此,華為推出atae...

前後端灰度發布解決方案

io.jmnarloch ribbon discovery filter spring cloud starter 2.1.0 內部通過threadlocal實現 final ribbonfiltercontext context ribbonfiltercontextholder.getcurre...

SpringMVC攔截靜態資源的解決方案

在使用springmvc來部署web專案時,在訪問靜態資源的時候,我們經常會出現404資源未找到的問題。這是因為其中的dispatcherservlet會對靜態資源進行攔截,導致了靜態資源無法訪問。方案一 在web.xml中設定defaultservlet,注意這個配置需要dispatcherser...