posts - 33, comments - 0, trackbacks - 0, articles - 0
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

                承接上篇的簡(jiǎn)單介紹,下面詳細(xì)介紹整個(gè)框架的大致結(jié)構(gòu)。

                先來(lái)看一下整個(gè)框架包的結(jié)構(gòu):

           

                可以看出框架包含的包很少,包的結(jié)構(gòu)也超簡(jiǎn)單。這里 涉及FilterActionSupportRouter等三個(gè)概念,他們之間的關(guān)系,通過(guò)下圖來(lái)表示:

           

                圖也不規(guī)范,說(shuō)不上來(lái)是哪個(gè)UML圖,不過(guò)通過(guò)它也能看出一個(gè)請(qǐng)求到達(dá)時(shí),框架基本的處理流程。首先由Filter攔截到所有請(qǐng)求,然后把請(qǐng)求交給所有注冊(cè)的Router類,如果請(qǐng)求的Url正好是一個(gè)Router要攔截的,則把此請(qǐng)求交給這個(gè)Router,框架不再把請(qǐng)求向下傳遞。Router得到請(qǐng)求后,分析Url,通過(guò)Url里的信息把請(qǐng)求交給對(duì)應(yīng)的ActionSupport的子類來(lái)處理。

                這里攔截采用Filter來(lái)處理,這跟多數(shù)的web框架一樣,使用FilterServlet有更多的能力進(jìn)行請(qǐng)求的分發(fā)。首先在一個(gè)web工程的web.xml文件中配置框架的UrlFilter類來(lái)攔截所有的請(qǐng)求。需要注意的一點(diǎn)是dispatcher 要設(shè)置為request,如果設(shè)置了forward的話,由框架內(nèi)部進(jìn)行的forward又會(huì)被框架攔截,從而造成無(wú)限的循環(huán)。Url-pattern設(shè)置為/*,表示所有的請(qǐng)求都會(huì)攔截,從而把對(duì)url分發(fā)的權(quán)利交由框架本身,而不是采用jsp規(guī)范里的url分發(fā)策略。框架在處理所有請(qǐng)求的url 時(shí),依次交給各個(gè)Router類來(lái)處理,如果Router類判斷是符合自己的url格式,則分發(fā)給 action 處理。如果不能處理再交給下一級(jí)的Router,最后url經(jīng)由所有Router處理完,剩下的資源文件的url,如http://xxx.xxx.xxx.jpg,則框架調(diào)用filterdoChain()方法,通過(guò)filter的過(guò)濾去訪問(wèn)web里的資源。

          <filter>

                <filter-name>unicornWeb</filter-name>

                <filter-class>com.mh.mvc.filter.UrlFilter</filter-class>

          </filter>

          <filter-mapping>

              <filter-name>unicornWeb</filter-name>

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

              <dispatcher>REQUEST</dispatcher>

          </filter-mapping>

                大致的原理就是這樣,在下篇介紹框架的詳細(xì)實(shí)現(xiàn)。


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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 乌拉特后旗| 崇仁县| 余江县| 井研县| 呼和浩特市| 梨树县| 香港| 尼木县| 吉木萨尔县| 永新县| 泰州市| 漳州市| 宁化县| 丹东市| 木里| 合水县| 云梦县| 秦皇岛市| 高阳县| 兴义市| 来凤县| 满城县| 桑日县| 绥中县| 合作市| 东港市| 布尔津县| 嵩明县| 五常市| 岳阳市| 千阳县| 盐山县| 赤峰市| 东源县| 资阳市| 周至县| 黄陵县| 达州市| 盐亭县| 石屏县| 合阳县|