Struts、Ajax、Restful、Web Service 狂想曲

來源:互聯網
上載者:User

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

      項目一開始只是不滿 struts 龐大的體積,於是想自己根據其原理實現一個tiny 版。後來的開發中覺得,完全可以把上述的ajax、Restuful web service的一些思想加入進來。經過幾周的努力,便開發出了一個基本成型的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。架構奉行約定大於配置的思想,至於請求如何分發,這個不需要人工配置,架構自動解決。這裡要介紹兩個概念Action 和 Router,熟悉Struts的肯定都知道Action,Action替代Servlet、JSP時代的Servlet,所有提交的請求由struts分發給不同的Action來處理。這裡道理也是一樣的,Action就是經過架構處理後的請求接受者。再來說一下Router,字面意思路由器,學過電腦網路的都知道,ip資料包在網路上之所以能夠順利到達,就是因為路由器根據路由表來來確定出來傳輸的途徑。這裡Router也是這個作用,根據訪問伺服器的URL來制定分發策略。Router是完全可以自訂的,使用者可以定義自己的Router來制定URL分發的策略,並且使用者自訂的Router比系統預設的Router有更高的優先權。

二、URL上做文章

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

      先來介紹系統MethodRouter的處理方式。上面的url根據"/"分為三個部分,第一部分是請求的Action類,第二部分是類中的方法Method,第三部分是提交的參數Param。這一點受上篇文章優酷的架構裡URL設計的啟發。

      經過這樣的設計,就明白在上述設定檔中為何可以如此簡單了。

      當然也可以不以這樣的方式,架構提供自訂Router的支援。比如你想這樣處理URL:/前台頁面/子欄目/子欄目

      想實現上面的方式,就可以自己定義Router,在Router裡面擷取上述的URL,然後做處理、forward到相應的jsp頁面。

三、使用Json傳輸資料

      Ajax請求很容易處理json資料,ajax可以與系統輕鬆互動。

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

      資料的返回使用json格式,比SOAP更為輕量簡潔和優雅,而且有更多的平台直接支援。如在android平台,本身就支援json格式的處理, 如果使用web service 的SOAP,你可能還要匯入KSOAP的第三方庫。

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

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

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

 

      先簡單寫這麼多,之後的續篇詳細介紹。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.