Struts2知识整理
生活随笔
收集整理的這篇文章主要介紹了
Struts2知识整理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
參考(http://www.cnblogs.com/wang-meng/) Struts2框架的大致處理流程如下: 1、加載類(FilterDispatcher)? 2、讀取配置(struts配置文件中的Action)? 3、派發請求(客戶端發送請求)? 4、調用Action(FilterDispatcher從struts配置文件中讀取與之相對應的Action?)? 5、啟用攔截器(WebWork攔截器鏈自動對請求應用通用功能,如驗證)? 6、處理業務(回調Action的execute()方法)? 7、返回響應(通過execute方法將信息返回到FilterDispatcher)? 8、查找響應(FilterDispatcher根據配置查找響應的是什么信息如:SUCCESS、ERROER,將跳轉到哪個jsp頁面)? 9、響應用戶(jsp--->客戶瀏覽器端顯示)? 10、struts2標簽庫(相比struts1的標簽庫,struts2是大大加強了,對數據的操作功能很強大) obj?=Class.forName("完整類名").newInstance(); Method?m?=Class.forName("完整類名").getMethod("execute"); m.invoke(obj);//通過反射 執行execute()方法 ②編寫Action實現Action接口 Action接口中,定義默認五種邏輯視圖名稱 // 數據處理成功 (成功頁面) publicstatic?final?String?SUCCESS?="success"; // 頁面不跳轉 return null; 效果一樣 publicstatic?final?String?NONE?="none"; // 數據處理發送錯誤 (錯誤頁面) publicstatic?final?String?ERROR?="error"; // 用戶輸入數據有誤,通常用于表單數據校驗 (輸入頁面) publicstatic?final?String?INPUT?="input"; // 主要權限認證 (登陸頁面) publicstatic?final?String?LOGIN?="login"; ③編寫Action繼承ActionSupport(推薦) 在Action中使用表單校驗、錯誤信息設置、讀取國際化信息三個功能 代理模式,控制目標對象訪問 /hello.action?請求時StrutsPrepareAndExecuteFilter的?doFilter一定執行 //判斷配置文件中有沒有對應Action ActionMapping?mapping?=?prepare.findActionMapping(request,?response,true); //根據配置創建代理對象 ActionProxy?proxy?=?config.getContainer().getInstance(ActionProxyFactory.class).createActionProxy(namespace,?name,?method,?extraContext,true,false); 執行時:先執行interceptor的intercept攔截方法,最后指向action的execute
??????? namespace="/"?????? :根名稱空間?
??????? namespace="/aa/"??? :帶有名稱空間的路徑
我們在書寫Action的時候有哪幾種方式?他們有什么區別?
有三種方式: ①普通POJO(簡單Java對象),這種方式我們不需要繼承任何父類,實現任何接口。Struts2框架讀取struts.xml文件,獲得完整的action類名。Action的相關配置?
1)必須要為<action>元素?配置<package>元素??(struts2?圍繞package進行Action的相關配置?)????配置package?三個常用屬性
?
<packagename="default"namespace="/"extends="struts-default"> ①name包名稱,在struts2的配置文件中,包名不能重復,name并不是真正包名,只是為了管理Action?
????②namespace和?<action>的name屬性,決定?Action的訪問路徑??(以/開始?)
namespace=""??????? :默認的名稱空間???????? namespace="/"?????? :根名稱空間?
??????? namespace="/aa/"??? :帶有名稱空間的路徑
????③extends繼承哪個包,通常開發中繼承struts-default包??(struts-default包在?struts-default.xml中定義?)【可以使用包中默認的攔截器和結果集】
????2)Action是通過<action>元素配置
?
<action name="hello"class="cn.itcast.struts2.demo1.HelloAction"?method="execute"> ①<action>的name和?<package>的namespace屬性共同決定?Action的訪問路徑 ②class:類全路徑? ③method:執行的方法,默認為execute()方法??
例如:
?
<package name="default"namespace="/user"?extends="struts-default"> ????<action name="hello"class="cn.itcast.struts2.demo1.HelloAction"> ????????<result name="success">/demo1/success.jsp</result> ????</action> </package>Action訪問Servlet API有哪幾種方式,簡單的介紹一下
①.方式一:使用ActionContext對象(在Action中解耦合方式間接訪問Servlet API) 在struts2中Action API已經與Servlet API 解耦合(沒有依賴關系),開發簡單,便于測試。 Servlet API 常見操作 :?表單提交請求參數獲取,向request、session、application三個范圍存取數據?? ②.方式二:使用接口注入的方式操作Servlet API(藕合) 通過Aware接口,在構造Action時,自動注入需要操作Servlet對象(需要哪個對象就實現哪個Aware接口) ③.方式三:在Action中直接通過?ServletActionContext?獲得Servlet API 靜態方法返回request,不會有線程問題(使用了ThreadLocal來實現的) 總結:理論來說,第一種方式最好,實現了解耦和,但是第三種我們使用最為簡單,企業中沒有很大的限制,自己熟悉哪種就使用哪種。如何防止表單重復提交?
哪些情況會導致重復提交? 服務器處理服務后,轉發頁面,客戶端點擊刷新(重定向) 客戶端網絡過慢,按鈕連續點擊(按鈕點擊一次后,禁用按鈕)? 使用令牌機制攔截器和過濾器有什么區別?
1、①攔截器是基于java的反射機制的,而過濾器是基于函數回調 2、②過濾器依賴與servlet容器,而攔截器不依賴與servlet容器 3、③攔截器只能對action請求起作用,而過濾器則可以對幾乎所有的請求起作用 4、④攔截器可以訪問action上下文、值棧里的對象,而過濾器不能 5、⑤在action的生命周期中,攔截器可以多次被調用,而過濾器只能在容器初始化時被調用一次 攔??攔截器 :是在面向切面編程的就是在你的service或者一個方法,前調用一個方法,或者在方法后調用一個方法比如動態代理就是攔截器的簡單實現,在你調用方法前打印出字符串(或者做其它業務邏輯的操作),也可以在你調用方法后打印出字符串,甚至在你拋出異常的時候做業務邏輯的操作。 Struts2請求流程 1、客戶端發送請求 2、請求先通過ActionContextCleanUp-->FilterDispatcher 3、FilterDispatcher通過ActionMapper來決定這個Request需要調用哪個Action 4、如果ActionMapper決定調用某個Action,FilterDispatcher把請求的處理交給ActionProxy,這兒已經轉到它的Delegate--Dispatcher來執行 5、ActionProxy根據ActionMapping和ConfigurationManager找到需要調用的Action類 6、ActionProxy創建一個ActionInvocation的實例 7、ActionInvocation調用真正的Action,當然這涉及到相關攔截器的調用 8、Action執行完畢,ActionInvocation創建Result并返回,當然,如果要在返回之前做些什么,可以實現PreResultListener。添加PreResultListener可以在Interceptor中實現。轉載于:https://www.cnblogs.com/applemy/p/6993305.html
總結
以上是生活随笔為你收集整理的Struts2知识整理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 类似度计算方法
- 下一篇: 2016 湖南省省赛B题《有向无环图》