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

                我承認有點標(biāo)題黨了,不過題目中所說的幾項技術(shù)確實有其相似之處,欲知事情原委,且聽我詳細道來。

                項目一開始只是不滿 struts 龐大的體積,于是想自己根據(jù)其原理實現(xiàn)一個tiny 版。后來的開發(fā)中覺得,完全可以把上述的ajax、Restuful web service的一些思想加入進來。經(jīng)過幾周的努力,便開發(fā)出了一個基本成型的web 框架,暫且起名為unicorn(獨角獸,吼吼)。下文開始便對這個自編寫的框架做一些列的介紹,并且初步打算是將其開源,希望能一起交流和完善它。

                首先,為了能快速了解它是什么,先來看一下配置文件:

          <?xml version="1.0" encoding="UTF-8" ?>
          <config>
          <routers>
          <router class="com.mh.router.MySessionCheckRouter"></router>
          </routers>
          <actions>
          <action class="com.mh.action.UserAction"></action>
          <action class="com.mh.action.InformationAction"></action>
          <action class="com.mh.action.MobileAction"></action>
          </actions>
          </config>

                上面就是整個工程的配置文件,可以看出需要配置的東西非常少,只需要制定action類 和 router類有哪些就Ok。框架奉行約定大于配置的思想,至于請求如何分發(fā),這個不需要人工配置,框架自動解決。這里要介紹兩個概念A(yù)ction 和 Router,熟悉Struts的肯定都知道Action,Action替代Servlet、JSP時代的Servlet,所有提交的請求由struts分發(fā)給不同的Action來處理。這里道理也是一樣的,Action就是經(jīng)過框架處理后的請求接受者。再來說一下Router,字面意思路由器,學(xué)過計算機網(wǎng)絡(luò)的都知道,ip數(shù)據(jù)包在網(wǎng)絡(luò)上之所以能夠順利到達,就是因為路由器根據(jù)路由表來來確定出來傳輸?shù)耐緩健_@里Router也是這個作用,根據(jù)訪問服務(wù)器的URL來制定分發(fā)策略。Router是完全可以自定義的,用戶可以定義自己的Router來制定URL分發(fā)的策略,并且用戶自定義的Router比系統(tǒng)默認的Router有更高的優(yōu)先權(quán)。

          二、URL上做文章

          /UserAction/login/username=admin&&password=admin

                先來介紹系統(tǒng)MethodRouter的處理方式。上面的url根據(jù)"/"分為三個部分,第一部分是請求的Action類,第二部分是類中的方法Method,第三部分是提交的參數(shù)Param。這一點受上篇文章優(yōu)酷的架構(gòu)里URL設(shè)計的啟發(fā)。

                經(jīng)過這樣的設(shè)計,就明白在上述配置文件中為何可以如此簡單了。

                當(dāng)然也可以不以這樣的方式,框架提供自定義Router的支持。比如你想這樣處理URL:/前臺頁面/子欄目/子欄目

                想實現(xiàn)上面的方式,就可以自己定義Router,在Router里面獲取上述的URL,然后做處理、forward到相應(yīng)的jsp頁面。

          三、使用Json傳輸數(shù)據(jù)

                Ajax請求很容易處理json數(shù)據(jù),ajax可以與系統(tǒng)輕松交互。

                當(dāng)初Web Service使用SOAP的xml格式傳輸數(shù)據(jù),如今也有人指責(zé)這是大費周折。Restful方式提倡遵循HTTP語義,完全使用URL結(jié)合GET、POST、PUT、DELETE來傳輸請求,結(jié)果在roil陣營里廣泛使用,認為是web service更優(yōu)雅的方式。所以本框架也吸取他們的優(yōu)點,也完全可以通過url傳輸請求的數(shù)據(jù),如上述URL中的Param部分。不過沒有遵循Restful強調(diào)的Http語義,全部使用Get和POST的請求方式,當(dāng)然也可以制定為其他,這完全看你的心情,因為這對功能實現(xiàn)無關(guān)緊要。而且我覺得統(tǒng)一使用一種,更避免了需要指定請求方式的麻煩。

                數(shù)據(jù)的返回使用json格式,比SOAP更為輕量簡潔和優(yōu)雅,而且有更多的平臺直接支持。如在android平臺,本身就支持json格式的處理, 如果使用web service 的SOAP,你可能還要導(dǎo)入KSOAP的第三方庫。

                在非瀏覽器的客戶端,可以借助編寫的工具類,來完成web service方式的操作,

          public interface IWebService {
          	public List<LiteInformationDTO> getInformationsOfOwnerApp(String ownerApp, int start, int limit) throws SocketTimeoutException;
          }
          

                經(jīng)過這樣的封裝,已經(jīng)與使用web service毫無差別,而且還會更加高效,因為處理json總比處理SOAP的xml要容易。

           

                先簡單寫這么多,之后的續(xù)篇詳細介紹。


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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 吴旗县| 迭部县| 上栗县| 白山市| 永城市| 孝义市| 清新县| 莱州市| 天柱县| 阿勒泰市| 衡阳市| 兰坪| 石嘴山市| 涟源市| 新津县| 垫江县| 鹤峰县| 祁连县| 永寿县| 广灵县| 弥勒县| 会东县| 平阳县| 中西区| 丁青县| 温州市| 肃南| 武平县| 承德县| 商丘市| 澜沧| 温州市| 德钦县| 教育| 湖北省| 郁南县| 萨嘎县| 图木舒克市| 岳阳市| 巧家县| 个旧市|