天天看點

struts2頁面僞靜态

                                                    myeye1.1部落格系統簡介

     說明:

        系統使用 mysql+ssh架構搭建而成,其原型為www.iteye.com,本系統為模仿其部落格系統部分功能的練習作品,一方面是為了加強3

    大架構的組合運用能力,另一方面向給本人提供很多幫助的www.iteye.com網站緻敬.

   1.0版本實作功能。

        1、使用者可以通過登入頁面登入到自己的部落格首頁,首頁顯示資訊有使用者頭像、性别、昵稱、通路過我的使用者清單、使用者部落格

       标題等資訊清單、等。

        2、使用者可以釋出自己的部落格,發表部落格包括、标題、部落格類型(下拉框)、部落格分類(下拉框)、部落格正文、部落格标簽(标簽

        可使用多個,用“,”分割)。

        3、使用者可以通過部落格清單上方的管理部落格清單實作對部落格的管理,管理部落格頁面使用分頁顯示的方式顯示10條部落格标題的清單,

        使用者可以通過每一條部落格後邊的編輯,删除按鈕實作對每一個部落格的編輯。

        4、實作點選部落格标題清單顯示該條部落格的資訊 。 

        5、當其他使用者通路我的空間點選檢視文章内容後增加文章通路次數。

        6、 自己或者其他使用者通路文章都可以再文章下面的回複内實作文章的回複功能。   

        7、使用者可以編輯自定義部落格類型清單,實作對類型表的删除和添加。

        8、使用者可以對自己部落格的評論進行管理,仿iteye評論隻能檢視、删除,不能編輯修改。   

        9、實作使用者管理自己的資訊 ,注冊時隻提供填寫部分資訊,如使用者頭像(剛注冊使用預設頭像、使用者自我簡介等都未填寫,使用者都可以再 在這個

        子產品完善自己的資訊。         

        10、實作使用者注冊功能,使用javamail對使用者的注冊進行确認,目前隻支援qq郵箱。位址選擇使用ajax三級關聯,同時使用者名和

        驗證碼的檢測同樣使用ajax局部重新整理技術,避免使用者名重複和驗證碼老是出錯(當使用者輸完驗證碼如果錯誤,輸入框變紅);

-------------------------------------------------------------------------------------------------------------------------------------   

        11、所有的部落格展示頁面使用僞靜态第一便于SEO網絡收索,第二是位址更加美觀,由原來的/showblog?blogid=1123變成了/showblog/1123.html

        但是大量使用僞靜态會使得網頁加載速度不佳,并發量減少,所有隻有部落格展示頁面使用了僞靜态。

     struts2實作頁面僞靜态是使用urlrewrite這個開源架構,其原理就是Filter過濾器,首先urlrewrite會按照你在urlrewrite.xml的配置過濾一些指定位址的通路,比如你在urlrewrite.xml中配置隻攔截/xxxx/yyy.html,當然/xxxx/yyy.html是你想要的位址,事先寫到jsp中的,在未使用僞靜态前的位址是/xxxx?id=yyy當攔截到/xxxx/yyy.html後會根據一些規則(正規表達式)将位址映射成/xxxx?id=yyy然後轉發以便action處理,先前的?帶值得url就不存在了,這樣便于seo也較美觀,但是大量使用會使得網頁加載速度不佳,并發量減少。所有使用需謹慎。

     struts2實作僞靜态關鍵步驟如下:

         1、添加jar包,urlrewrite-3.1.0.jar

          2、在web.xml中配置UrlRewriterFilter,配置代碼如下

                <!--僞靜态配置  -->

    <filter>

        <filter-name>UrlRewriteFilter</filter-name>

        <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>

        <init-param>

            <param-name>logLevel</param-name>

            <param-value>WARN</param-value>

        </init-param>

    </filter>

    <filter-mapping>

        <filter-name>UrlRewriteFilter</filter-name>

        <url-pattern>/*</url-pattern>

       <dispatcher>REQUEST</dispatcher>

        <dispatcher>FORWARD</dispatcher>

    </filter-mapping>

         3、編寫urlrewrite.xml,名字必須一緻且放到WEB-INF/下,和web.xml同目錄格式如下

          <?xml version="1.0" encoding="utf-8"?>

          <!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 2.6//EN"

           "http://tuckey.org/res/dtds/urlrewrite2.6.dtd">

           <urlrewrite>

               <rule>

             <from>^/(\w+)/(\d+)\.html$</from>

             <to type="forward" >/$1?blogid=$2</to>

             </rule>

             </urlrewrite>

                需要攔截多種格式的url則添加多個  <rule>即可。

              <from>^/(\w+)/(\d+)\.html$</from>表示需要攔截的uir過濾器會通過這個正則比對通路的位址,如我的部落格标題的url為

            <a href="...../showblog/223.html" target="_blank" rel="external nofollow" >部落格标題</a>

              當攔截後映射成?帶參數的形式$1比對第一個正則即(\w+)$2比對第一個正則即(\d+)最後生産的位址為/showblog?blogid=222

              需要注意有:

                 urlrewrite的過濾器必須在struts之前,且struts的配置在 <filter-mapping>下加上 <dispatcher>REQUEST</dispatcher>

    <dispatcher>FORWARD</dispatcher>

    <dispatcher>INCLUDE</dispatcher>   

                即struts2的配置如下:<filter>

    <filter-name>struts2</filter-name>

    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

  </filter>

  <filter-mapping>

    <filter-name>struts2</filter-name>

    <url-pattern>/*</url-pattern>

    <dispatcher>REQUEST</dispatcher>

    <dispatcher>FORWARD</dispatcher>

    <dispatcher>INCLUDE</dispatcher> 

  </filter-mapping>

       疑問:第一次通路的時候感覺明顯速度很慢?不知道是我的問題還是大家都會有這樣的問題,之後通路就和沒有僞靜态之前的速度一樣了,求解。