freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內容

淘寶技術及webx3框架分析第一版-資料下載頁

2025-10-15 08:54本頁面

【導讀】八千萬的大型電子商務網站,是亞洲最大的購物網站。那么對于淘寶網這樣大規(guī)模的一個網。下面介紹一下淘寶網中應用的開源軟件。要和應用服務分開,有單獨的數據庫服務器。

  

【正文】 ges/$1 / /when otherwise ! 將控制交還給 servlet engine。 exit / /otherwise /choose ! 假如 ()被設置,則循環(huán),否則退出循環(huán)。 breakUnlessTargetRedirected / /loop /services:pipeline 從以上配置代碼不然發(fā)現(xiàn),這種 schema 還包含了流程控制的元素,除了各個 valve 的順序執(zhí)行,還可以進行循環(huán)和 條件控制。 整個 webx3 的處理核心體現(xiàn)在 valve 上,主要幾個 valve 如下所示: * PerformActionValve:執(zhí)行 action * PerformScreenValve:生成 screen * RenderTemplateValve:渲染 screen 模板 * SetLoggingContextValve:設置日志系統(tǒng)的上下文 第 21 頁 * AnalyzeURLValve:分析 URL,取得 target 另外還有些在特定情景下的特定 valve,比如 CheckCsrfTokenValve,用于處理 Csrf 安全問題。今后會對幾個核心的 valve 作進一步詳細分解,這樣才能有利于在具體開發(fā)中得心應手 。 . action 與 screen 從 pipeline 與 valve 可知 , action 與 screen 的處理都是通過 valve 來完成的,具體所說分別對應著: action 與 screen 是 web 框架中最核心的兩塊,分別對應著請求響應和返回渲染 。 透過細節(jié)看本質, webx3 在這兩塊的架構核心可以歸結為以下幾個點 。 下面具體解析一下這幾點: Module 與 Adapter 請求響應的 Action和返回渲染的 Screen都需要開發(fā)者根據具體 業(yè)務邏輯定制相應的類,勢必要解決如何管理、組織和調用這些類的問題。 webx 要達到的效果是開發(fā)者開發(fā)的 Action和 Screen 是簡單無累贅的 POJO,類似于 webwork。 webx 采用的方式是把所有 Action 和 Screen 抽象為一個個的需要執(zhí)行的動作,而把各種執(zhí)行器抽象為 Module, Module 非常簡單,代碼如下: public interface Module { /*執(zhí)行模塊 */ void execute() throws Exception。 } 不同的執(zhí)行器通過 Adapter 的模式統(tǒng)一為 Module, 實現(xiàn) execute 方法,完成對 Action 或Screen 的調用。主要有兩種 Adapter: webx 會在容器啟動時通過配置文件自動把開發(fā)者的各個 Action 和 Screen 初始化相應的 Module,配置如下例所示: services:moduleloader mlfactories:classmodules mlfactories:searchpackages type=$1 packages=.*/ /mlfactories:classmodules /services:moduleloader 如上所示,解析器 AbstractModuleFactoryDefinitionParser 會把包 . 第 22 頁 下的所有類基于默認規(guī)則初始各個 Module,并存儲到 AbstractBeanFactoryBasedModuleFactory 的 modules 里,這樣當 PerformActionValve 和 PerformScreenValve 調用 就能取到相應的 Module,如以下類結構: 初始為 module 的結構為: { screen = { Hello=Module { type:name = screen:Hello beanName = source = } }, action = { SimpleAction=Module { type:name = action:SimpleAction beanName = source = } } } 這樣在取 module 的時候,只用提供相應的 key 就能拿到類的完整信息了。 1) 類的反射與執(zhí)行 從上面分析可以得知,所有 Action 和 Screen 的調用都是通過 Module 來 execute 的,這樣勢必需要反射各個 Action 和 Screen, webx 通過構造 MethodInvoker 這個類來統(tǒng)一處理類的反射和執(zhí)行,它的核心方法是 invoke,源碼如下: public void invoke(Object moduleObject, Logger log) throws Exception { Object[] args = new Object[]。 for (int i = 0。 i 。 i++) { Object value。 第 23 頁 try { value = resolvers[i].resolve()。 } catch (SkipModuleExecutionException e) { if (skippable) { (: {}, {}, fastMethod, tMessage())。 return。 } value = ()。 } // 特別處理:防止對 primitive 類型設置 null Class? paramType = ().getParameterTypes()[i]。 if (value == null amp。amp。 ()) { value = getPrimitiveDefaultValue(paramType)。 } args[i] = value。 } try { (moduleObject, args)。 } catch (InvocationTargetException e) { throw (Exception) ()。 } } 以上代碼的結構還是非常清晰的,首先是解析出各個參數,然后基于 cglib 完成對 moduleObject 的反射調用。 2) action 參數自動注入 以上代碼可以看出,反射調用中最核心的是對各種方法所需參數的自動注入,比如一個 action 的方法: public void doGreeting(@FormGroup(simple) SimpleObject simple, Navigator nav) 第 24 頁 webx 可以自動通過用戶提交的 request 組裝成業(yè)務對象 SimpleObjec 和導航類 Navigator,這個特性非常神奇,也很實用。 webx 是通過一個個 DataResolver 來完成對各種參數的解析和注入, DataResolver 的源碼如下: public interface DataResolver{Object resolve()。 } 它的實現(xiàn)類有以下幾種: FormResolver:解析整個 Form GroupResolver:解析一個 group GroupsResolver:解析一組 group FieldResolver:用來解析 單個參數 FieldsResolver:用來解析一組字段 ParameterResolver:用來解析單個參數 ParametersResolver:用來解析一組參數 TurbineRunDataResolver:用來注入各種環(huán)境信息,比如 request 和 response 具體的實現(xiàn)的基本思路就是通過 Annotation 得到各個參數的結構和配置,然后從 request 里組裝成需要注入的對象,以 FiledResolver 為例,源碼如下: public FieldResolver(DataResolverContext context, Class? paramType, FormField fieldAnnotation) { super(FieldResolver, context)。 //確保 group 存在 groupName = getGroupConfig(()).getName()。 // 確保 field 存在 fieldName = getFieldConfig(groupName, ()).getName()。 groupInstanceKey = trimToNull(())。 skipIfInvalid = ()。 } public Object resolve() { Form form = ()。 Group group = (groupName, groupInstanceKey)。 Field field = (fieldName)。 boolean valid = ()。 if (().getRawType().isAssignableFr om()) { skipModuleExecutionIfNecessary(valid, field)。 return field。 } else { skipModuleExecutionIfNecessary(valid, null)。 if (valid) { try { return (().getRawType(), 第 25 頁 context .getExtraObject(), null)。 } catch (TypeMismatchException e) { if (!isConverterQuiet(form)) { throw e。 } } } return null。 } } 在構造函數里通過 Annotation 得到 groupName 和 fieldName,在 resolve 方法里,通過request 組裝成 form 對象,再通過 groupName 和 fieldName 取到相應的 Field。其他 Resolver 的實現(xiàn)類似,就不在累述。 WebX 基本的組合模式是: velocity+spring+ibits。 其開發(fā)分三部分,頁面層( web)、業(yè)務處理層 (biz)、數據處理層 (dao)。 WEB 層開發(fā)規(guī)范 作用和目的: web 層是直接和用戶交互的,包括界面展示,提交數據的處理,數據的獲取等功能塊;需開發(fā)的組件:在 web 層中,常見的有 Screen、 Control、 Action 這三類 web 端組件需要開發(fā),他們的職責只限于 web 端,比如提交組據的驗證,調用 biz 層程序來處理業(yè)務邏輯,并提供模板渲染需要的數據等。 Action 開發(fā) 作用: action 一般用于處理 form 提交,處理完之后再將結果給一個模板去進行渲染。在提交 form 的時候需要指定 action 的名字來執(zhí)行某一個 action, 如一個 form: form name=f1 action= method=post ul lispan類別名稱 /span:input name=catName size=20 maxsize=40/li liinput type=submit value=添加類別 / /ul input type=hidden name=action value=CategoryAction/ input type=hidden name=event_submit_do_add_post value=anything/ /form 說明: ( 1)指定要執(zhí)行的 action 類,代碼如下,表示提交這個 form 的時候先執(zhí)行 CategoryAction 類(包路徑,在配置文件里) 第 26 頁 input type=hidden name=action value=CategoryAction/ ( 2)指定要執(zhí)行的 action 類上的某個方法, input type=hidden name=event_submit_do_add value=anything/ ( 3) action 執(zhí)行完后顯示的頁面,在 form 的 action 中指定“ /”。 ( 4) Action 類的實現(xiàn)如下: package 。 import 。 import 。 import 。 import 。 import 。 import 。 import 。 import 。 import 。 /** * 類目相關操作的 action * * @author argan * */ public class CategoryAction extends TemplateAction {//0. 繼承基類 /**
點擊復制文檔內容
高考資料相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1