通過webx入門指南,相信大家都能開始嘗試添加自己的處理頁面了。基本上能夠完成簡單的頁面設計了。我們通常說網站是b/s架構的,那這種模式隻要掌握前後端的分工和互動,就能遊刃有餘。是以,本節就從前後端互動方式來說明如何實作高效的代碼設計。
這一節的詳細内容請參考http權威指南,這裡隻關注webx中如何實作互動。
網站的前後端互動,都是通過http協定實作的,是以網站的前後端互動也是在http協定下展開的,是以前端的互動模式也受限于通信協定,标準的協定中支援的請求方式有get、post、put、delete、head、options。webx架構中通過servlet來處理具體的業務邏輯處理。關于servlet的知識,後面講解webx原理時,再做說明。
get: 擷取資源,例如html網頁、圖檔、視訊等
head:本質上和get一樣,不過請求中不包含資料資訊
put: 送出請求,表單不支援,通常要指定資源的位址
post: 向服務端送出資料
delete: 用于删除資源檔案,很少用
options: 詢問服務端支援的請求方式,請求的結果儲存在allow的協定頭中。
每一次http請求,通常都有對應的http響應,消息傳回結果通常包含request處理的狀态資訊,以及傳回結果的格式資訊。
傳回結果支援的格式有(context-type)種類很多,常見的有:
常見的媒體格式類型如下:
以application開頭的媒體格式類型:
另外一種常見的媒體格式是上傳檔案之時使用的:
對一個http請求,使用者隻需要通過解析request請求,并傳回處理結果response。隻不過這裡的request和respose是滿足http協定的消息。是以,大家可以簡單地把這個過程了解成一個函數調用:
webx中處理請求是通過module來實作的,包括了screen、control以及action三類。具體的實作中是通過httpservletrequest、httpservletresponse以及httpservletsession對象來完成的。當然webx的實作中,對相關的servlet進行了其他的處理。後續的文章中再講解。
webx中請求響應處理時,之前的使用都是從頁面驅動來認識的。現在從request/response角度看下。隻需要在對應的module對象中注入servlet對象就可以使用了。關于對象注入可以去看下spring相關的知識。
舉例說明:
在講解代碼實作之前,對上述的url路徑做下解析,webx在處理該請求時,會對該路徑進行解析,擷取對應的target,用于加載對應的處理方法。這裡target字尾是.do,預設的會去查找對應的screen/action對象。查找時,對于該路徑可能的兩種解釋是 user下的getusername對象或者是user對象的dogetusername方法。webx會先按第一中方法解析,失敗後換第二種方法解析,如果再找不到對應的方法,報錯。在之前的screen對象中我們看到的對象方法往往隻有一個 execute()方法,實際上在調用一個對象時,如果不指定對象的方法名,預設采用的就是execute方法。
實作:/screen目錄下建立一個user對象,實作getusername(int userid)方法
可以看到以上兩種互動中和以往的頁面驅動設計是不同的,以往的頁面驅動的場景多是擷取頁面資源,而這兩個場景更多的是送出任務,回報結果,更類似于函數調用。具體的使用中這兩種場景多用于擷取對象資料,而不是資源檔案。
action主要用于表單的處理,本例使用了webx示例程式中的注冊來講解。一個典型的表單包括了一下幾部分:
對于 webx中典型的表單:
input action值用于表明action對象, submit按鈕中的event_submit_do_register注明處理該表單的方法是doregister()。$group變量是通過webx的form service提供的,需要通過表單配置完成。關于webx服務見後續的詳細講解。接下來設計對應的action對象,其實他和普通的對象也一樣:
這裡先不關注怎麼用,隻是說明調用的邏輯關系。調用之後,怎麼将結果傳回呢?這裡隻是用了界面跳轉,如果開發者想知道添加一個使用者是否成功怎麼辦呢?目前沒有發現好的方法,即使可以注入httpservletresponse。 這個和action的定位和設計應該是有關系的。action用于頁面表單資料和應用資料的傳遞,以及頁面的跳轉,是以在使用時也盡量以這種方式實作。而且在實際的應用中,大家多是以跳轉的方式來實作的。比如注冊、或者添加新的資料後通過,頁面跳轉回原頁面,重新整理頁面,進而驗證操作的結果,而不需要傳回一個成功的标志。這一點不知道讀者怎麼了解?
通過對action、control、screen的介紹中,相信基本的使用場景和場合都有所了解了。對于一般的get請求,使用templates和screen module就可以完成基本的頁面渲染。對于一些業務資料的處理和傳回,資料資源的查找可以通過screen傳回值或者response write的方式完成。對于設計資料的增、删、改操作,通過表單實作,這裡的缺陷是,如何将操作的結果傳回給用戶端。
好吧,這裡就不再總結各種場景了,上面的講解中都有涉及到,就不再贅述,讀者可以自己再整理整理。通過對互動場景的介紹,前後端的代碼互動就有了,接下來就單獨看看前後端開發的一些技術。