Java高并發(fā):靜態(tài)頁(yè)面生成方案
提升網(wǎng)站性能的方式有很多,例如有效的使用緩存,生成靜態(tài)頁(yè)面等等。今天要說(shuō)的就是生成靜態(tài)頁(yè)面的方式。這個(gè)也是我近期一直在搞的一個(gè)問(wèn)題,近期在做使用html + servlet做個(gè)人網(wǎng)站,為什么是這2個(gè)東西呢?
1、直接用servlet是為了保證網(wǎng)站能以最快的速度執(zhí)行命令..個(gè)人總感覺(jué)像Struts hibernate spring之類(lèi)的雖然方便但是效能帶來(lái)的損耗不太能接收
2、使用html同樣是為了保證最快的反應(yīng)速度,畢竟html 比jsp少了一層服務(wù)器執(zhí)行.速度上要快的多
一、在這里要先說(shuō)一下什么是頁(yè)面靜態(tài)化:
簡(jiǎn)單的說(shuō),我們?nèi)绻L問(wèn)一個(gè)鏈接 http://abc.com/test.do,服務(wù)器對(duì)應(yīng)的模塊會(huì)處理這個(gè)請(qǐng)求,轉(zhuǎn)到對(duì)應(yīng)的jsp界面,最后生成我們想要看到的數(shù)據(jù)。這其中的缺點(diǎn)是顯而易見(jiàn)的:因?yàn)槊看握?qǐng)求服務(wù)器都會(huì)進(jìn)行處理,如果有太多的高并發(fā)請(qǐng)求,那么就會(huì)加重應(yīng)用服務(wù)器的壓力,弄不好就把服務(wù)器 搞down 掉了。那么如何去避免呢?如果我們把對(duì) test.do 請(qǐng)求后的結(jié)果保存成一個(gè) html 文件,然后每次用戶(hù)都去訪問(wèn) http://abc.com/test.html ,這樣應(yīng)用服務(wù)器的壓力不就減少了?
那么靜態(tài)頁(yè)面從哪里來(lái)呢?總不能讓我們每個(gè)頁(yè)面都手動(dòng)處理吧?這里就牽涉到我們要講解的內(nèi)容了,靜態(tài)頁(yè)面生成方案... 我們需要的是自動(dòng)的生成靜態(tài)頁(yè)面,當(dāng)用戶(hù)訪問(wèn) http://abc.com/test.do,會(huì)自動(dòng)生成 test.html ,然后顯示給用戶(hù)。
二、下面我們?cè)诤?jiǎn)單介紹一下要想掌握頁(yè)面靜態(tài)化方案應(yīng)該掌握的知識(shí)點(diǎn)
1、 基礎(chǔ)— URL Rewrite
什么是 URL Rewrite 呢 ? URL 重寫(xiě)。用一個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明問(wèn)題:輸入網(wǎng)址http://www.abc.com/test.do ,但是實(shí)際上訪問(wèn)的卻是 http://www.abc.com/test.action,那我們就可以說(shuō) URL 被重寫(xiě)了。這項(xiàng)技術(shù)應(yīng)用廣泛,有許多開(kāi)源的工具可以實(shí)現(xiàn)這個(gè)功能。
2、 基礎(chǔ)— Servlet web.xml
如果你還不知道 web.xml 中一個(gè)請(qǐng)求和一個(gè) servlet 是如何匹配到一起的,那么請(qǐng)搜索一下 servlet 的文檔。這可不是亂說(shuō)呀,有很多人就認(rèn)為 /xyz/*.do 這樣的匹配方式能有效。
如果你還不知道怎么編寫(xiě)一個(gè) servlet ,那么請(qǐng)搜索一下如何編寫(xiě) servlet。這可不是說(shuō)笑呀,在各種集成工具漫天飛舞的今天,很多人都不會(huì)去從零編寫(xiě)一個(gè) servlet了。
三、基本的方案介紹
其中,對(duì)于 URL Rewriter的部分,可以使用收費(fèi)或者開(kāi)源的工具來(lái)實(shí)現(xiàn),如果 url不是特別的復(fù)雜,可以考慮在 servlet 中實(shí)現(xiàn),那么就是下面這個(gè)樣子: