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)航:
           
          主站蜘蛛池模板: 乳源| 治县。| 琼中| 府谷县| 拜城县| 墨竹工卡县| 丁青县| 佳木斯市| 句容市| 通许县| 家居| 双江| 宁安市| 东辽县| 偃师市| 井冈山市| 呼玛县| 洪江市| 洛宁县| 高安市| 宁河县| 鄂温| 芒康县| 铜梁县| 界首市| 龙井市| 博客| 监利县| 历史| 崇义县| 富宁县| 藁城市| 新密市| 新竹县| 德化县| 北碚区| 富宁县| 丁青县| 米脂县| 毕节市| 泾源县|