Terry.Li-彬

          虛其心,可解天下之問;專其心,可治天下之學(xué);靜其心,可悟天下之理;恒其心,可成天下之業(yè)。

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            143 隨筆 :: 344 文章 :: 130 評論 :: 0 Trackbacks
          本文來自:http://springkingster.javaeye.com/blog/175114

          頁面靜態(tài)化(JSP動態(tài)頁面轉(zhuǎn)靜態(tài)化)

          urlrewritefilter 下載: http://tuckey.org/urlrewrite/#download

          所用基于動態(tài)的url http://www.nihaoblog.com/content.jsp?id=1&contentid=404按照各大搜索引擎的喜好,應(yīng)該美化成http://www.nihaoblog.com/content/1_404.html靜 態(tài)網(wǎng)頁的方式,盡管目前的google及幾大搜索引擎宣稱支持動態(tài)頁網(wǎng)的抓取,但與傳統(tǒng)的html文件相比較抓取率仍不在一個數(shù)量級。Apche的 mod_rewrite模塊具有此功能,但是對于租用虛擬主機的用戶來說就比較麻煩不太可能對所有運營商有更多的要求,需要條件依賴就不具通用性。

              目前有一個解決方法,通過UrlRewriteFilter可以完全實現(xiàn)動態(tài)URL表態(tài)化,你可以將它直接應(yīng)用到你的web應(yīng)用中,不管你用的是jsp+javabean還是struts.
              
          下面是使用方法:
              1、下載http://tuckey.org/urlrewrite/#download目前版本是1.2,解壓縮后將文件考到相應(yīng)的web-inf/lib和web-inf下,。
               2、配置web.xml
          xml 代碼
          1. <filter>   
          2.        <filter-name>UrlRewriteFilter</filter-name>   
          3.        <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>   
          4. </filter>   
          5. <filter-mapping>   
          6.        <filter-name>UrlRewriteFilter</filter-name>   
          7.        <url-pattern>/*</url-pattern>   
          8. </filter-mapping>  
          根據(jù)自己的需要,將相應(yīng)目錄下的url轉(zhuǎn)給UrlRewriteFilter來處理。
             3、配置urlwrite規(guī)則文件WEB-INF/urlrewrite.xml
          http://www.nihaoblog.com/content.jsp?id=1&contentid=404
          靜態(tài)化為:
          http://www.nihaoblog.com/content/1_404.html
          配置如下:
          1. <rule>   
          2.     <from>/content/([0-9]+)_([0-9]+).html</from>   
          3.     <to>/content.jsp?id=$1&amp;contentid=$2</to>   
          4. </rule>  
          xml 代碼
             
          注意:有多個參數(shù)時,中的連接符號&應(yīng)該是&
          熟悉正則表達式的朋友可能一看就是明白rule的匹配原理了。更多的配置可以參照http://tuckey.org/urlrewrite/manual/

          每個網(wǎng)頁或請求都是一個url地址,一般,這個地址可能是.do,.page,.action之類的并加上'?'號、'&'號查詢串等構(gòu)成的一個長長的的url。很urgly。

          一般的url----------------------------------------------------------較好的url
          http://www.xxx.net/user/profile.do?id=20001 ====> http://www.xxx.net/user/20001
          http://www.xxx.net/forum/board.do?name=java ====> http://www.xxx.net/forum/java
          http://www.xxx.net/forum/thread.do?id=29923 ====> http://www.xxx.net/thread/29923

          后者明顯較為直觀和漂亮。

          使用url rewrite可以很好的改善這個狀況。網(wǎng)站url rewrite應(yīng)用是非常廣泛的,良好的url設(shè)計給用戶帶來的非常好的體驗,同時也能吸引搜索引擎的注意。

          一 種rewrite稱為一個規(guī)則,上面的例子就是3個規(guī)則。rewrite技術(shù)可以在代理服務(wù)器實現(xiàn),或者可以在tomcat之類的java web服務(wù)器實現(xiàn)。 Apache HTTP Server 2.x 和 mod_proxy提供了不錯的Rewrite處理方法。so如果使用apache,則直接在apache中配置Rewrite即可。但是對于沒有使用代 理,或者不完全要在代理服務(wù)器配置Rewrite的web應(yīng)用,通過第三方Jar包也是可以實現(xiàn)很perfect的rewrite技術(shù)的。這是本帖的著重 點。

          這個第三方包的地址是:http://tuckey.org/urlrewrite/ (待會再去這個網(wǎng)站,現(xiàn)在先別去)

          這個包使用正則表達式仿照了apache rewrite的做法。而實現(xiàn)原理也是很明晰的:filter,forward,redirect機制組合:

          在 web.xml配置一個UrlRewriteFilter,攔截所有進來的請求,對服務(wù)要求的請求進行rewrite。比如,對 http://www.xxx.net/user/([0-9]+)請求,forward到/profile.do?id=$1。這就是一條規(guī)則。在這個 第三方包中的規(guī)則文件urlrewrite.xml中可以這樣定義:

          代碼
          1. <rule>  
          2.     <from>^/user/([0-9]+)/?$from>  
          3.     <totype="forward">/profile.do?id=$1to>  
          4. <rule>  
          <script>render_code();</script>

          對我來說,一般我會配置一個通用的rule,使所有沒有包含"."的url forward到.do的action上來(本人使用strut做系統(tǒng)較多)

          代碼
          1. <rule>  
          2.     <note>  
          3.          - 這是一個通用請求url rewrite   
          4.          - 將請求forword url加上“.do”的處理器上。   
          5.          - 例:   
          6.          -    請求 http://{domain}/user/login     將被forward到 http://{domain}/user/login.do   
          7.          -    請求 http://{domain}/user/login/    將被forward到 http://{domain}/user/login.do   
          8.          -    請求 http://{domain}/user/logout/   將被forward到 http://{domain}/user/logout.do   
          9.     note>  
          10.     <from>^/([_a-zA-Z]+[_0-9a-zA-Z-/]*[_0-9a-zA-Z]+)/?$from>  
          11.     <totype="forward">/$1.doto>  
          12. <rule>  
          <script>render_code();</script>

          上面只是介紹個大概,并不是urlrewriter這個jar包的使用指南。如果你覺得這種rewrite做法不錯的話,不如直接訪問這個網(wǎng)站吧 http://tuckey.org/urlrewrite/

          第一步:從http://tuckey.org/urlrewrite/ 上下載urlrewrite-3.0.3.jar包,放到webapp classpath下

          第二步:在web.xml配置UrlRewriteFilter:

          代碼
          1. <filter>  
          2.     <filter-name>UrlRewriteFilterfilter-name>  
          3.     <filter-class>  
          4.          org.tuckey.web.filters.urlrewrite.UrlRewriteFilter   
          5.     filter-class>  
          6.     <init-param>  
          7.         <param-name>logLevelparam-name>  
          8.         <param-value>WARNparam-value>  
          9.     init-param>  
          10. filter>  
          11. <filter-mapping>  
          12.     <filter-name>UrlRewriteFilterfilter-name>  
          13.     <url-pattern>/*url-pattern>  
          14. filter-mapping>  

          <script>render_code();</script>

          第三步:在web-inf下新建urlrewrite.xml文件,簡單填入以下內(nèi)容:

          代碼
          1. <!--sp-->xmlversion="1.0"encoding="utf-8"?>  
          2.      "http://tuckey.org/res/dtds/urlrewrite3.0.dtd">  
          3.   
          4. <urlrewrite>  
          5.     <rule>  
          6.         <note>  
          7.              - 這是一個通用請求url rewrite   
          8.              - 將請求forword url加上“.do”的處理器上。   
          9.              - 例:   
          10.              -    請求 http://{domain}/user/login     將被forward到 http://{domain}/user/login.do   
          11.              -    請求 http://{domain}/user/login/    將被forward到 http://{domain}/user/login.do   
          12.              -    請求 http://{domain}/user/logout/   將被forward到 http://{domain}/user/logout.do   
          13.         note>  
          14.         <from>^/([_a-zA-Z]+[_0-9a-zA-Z-/]*[_0-9a-zA-Z]+)/?$from>  
          15.         <totype="forward">/$1.doto>  
          16.     rule>  
          17.   
          18. urlrewrite>  

          <script>render_code();</script>

          第四步:啟動web應(yīng)用,將原來需要.do的請求改為去掉.do后請求,看看結(jié)果。

          第五步:更詳細的規(guī)則定義,請看http://tuckey.org/urlrewrite/manual/3.0/


          posted on 2009-01-23 14:54 禮物 閱讀(5660) 評論(7)  編輯  收藏

          評論

          # re: (轉(zhuǎn)載)頁面靜態(tài)化(JSP動態(tài)頁面轉(zhuǎn)靜態(tài)化) 2009-02-01 11:00 bigo
          直接包裝URL訪問的方式,頁面還是要動態(tài)生成的吧?
          有沒有可能直接生成的就是html呢?  回復(fù)  更多評論
            

          # re: (轉(zhuǎn)載)頁面靜態(tài)化(JSP動態(tài)頁面轉(zhuǎn)靜態(tài)化) 2009-02-10 21:37 禮物
          @bigo
          可以直接生成html,需要使用模板,但是模板策略適合實時交互不頻繁的網(wǎng)頁,例如新聞網(wǎng)頁  回復(fù)  更多評論
            

          # re: (轉(zhuǎn)載)頁面靜態(tài)化(JSP動態(tài)頁面轉(zhuǎn)靜態(tài)化) 2011-05-15 21:04 老胡
          haha 這個不是靜態(tài)化吧, 只是把url修飾了一下而已, 對性能什么的沒有提高.  回復(fù)  更多評論
            

          # re: (轉(zhuǎn)載)頁面靜態(tài)化(JSP動態(tài)頁面轉(zhuǎn)靜態(tài)化)[未登錄] 2012-06-11 17:40 Jerry
          這個貌似沒有靜態(tài)化,哈哈!  回復(fù)  更多評論
            

          # re: (轉(zhuǎn)載)頁面靜態(tài)化(JSP動態(tài)頁面轉(zhuǎn)靜態(tài)化) 2012-09-14 15:32 路人
          偽地址,沒提升性能。提高了用戶的感知度!這個動態(tài)頁面靜態(tài)化不科學(xué)。  回復(fù)  更多評論
            

          # re: (轉(zhuǎn)載)頁面靜態(tài)化(JSP動態(tài)頁面轉(zhuǎn)靜態(tài)化) 2014-08-26 16:45 靜態(tài)化
          這個不是靜態(tài)化,就不要用靜態(tài)化的標題嚇人!!!  回復(fù)  更多評論
            

          # re: (轉(zhuǎn)載)頁面靜態(tài)化(JSP動態(tài)頁面轉(zhuǎn)靜態(tài)化) 2014-08-27 17:31 libin2722
          @靜態(tài)化
          偽靜態(tài)化,應(yīng)該使用模板生成HTML  回復(fù)  更多評論
            


          只有注冊用戶登錄后才能發(fā)表評論。

          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 黑水县| 遵义市| 芜湖市| 洛隆县| 娄底市| 慈溪市| 来宾市| 姚安县| 临夏市| 临汾市| 双流县| 新龙县| 防城港市| 安顺市| 班玛县| 贵港市| 南召县| 邵阳县| 沂水县| 林口县| 博野县| 金平| 威远县| 安徽省| 格尔木市| 修武县| 新巴尔虎左旗| 鹰潭市| 石柱| 黄陵县| 冀州市| 桂阳县| 班戈县| 元江| 崇明县| 浙江省| 奉化市| 大丰市| 岱山县| 桦甸市| 瑞安市|