1.過去的開發模式是:一,創建表,二,創建實體類(pojo),三,建立DAO,四,JSP/Servlet,但是有了struts2框架後就使用MVC模式,model層包括entity實體bean,dao和service,view層只是簡單地不含邏輯代碼的jsp頁面,controler層即控制層有actionservlet、action以及struts2的核心控制器filterdispatcher,控制層是連接model層和view層之間的橋梁。 2.Struts2的MVC框架工作流程是:當請求到達時,請求會交給前端的控制器actionservlet,actionservlet維護了一個配置文件,即struts.xml,該文件指明了不同的請求對應的不同的action,然後根據不同的請求分發給不同的action,action再調用業務層的dao,dao到數據庫去查找相應的數據後將數據與request綁定,再將綁定後的數據發送到客戶端頁面(顯示層jsp),即response回去。 3.為什麼要用struts2? 因為struts2已經將MVC思想封裝好了。 4.ognl表達式訪問對象的格式是:Ognl.getValue(“ognl表達式”,“root對象”),“root對象”為要操作的目標對象,標准的ognl涉及三個概念:ognl引擎、root對象、context對象,當給一個ognl引擎字符串時,實際上這個字符串就是ognl表達式,ognl引擎就會用這個字符串(ognl表達式)對root對象(即要操作的目標對象)去取值或者設值,context對象其實就是一個map,上下文對象context這個map中存儲的是和整個系統相關的公共數據信息,在訪問root對象時(即目標對象)有些數據每次都要用到,這些數據就會被存放到context對象中。 5.Valuestack值棧的核心概念:當請求到達時,會先創建一個valuestack,並將當前的action對象放置棧頂,struts2會把valuestack放到request中(struts.valuestack),所以標簽庫可以訪問到valuestack中的內容,棧頂的內容即為要顯示的內容。 6.Struts2中的action與struts1中的action不同的是struts2中的action不是單例模式,當請求到達時會為請求創建一個action,並且會為每一個請求創建一個action,所以不用考慮線程安全問題,並且此時的action對象會被置於棧頂,action的業務方法(默認是execute())會根據輸入給出相應的輸出。 7.Action訪問session和application的方法一: Actioncontext ctx=ActionContext.getContext(); Map session=ctx.getSession(); Map application=ctx.getApplication(); Session和application將存在valuestack值棧中的context中,若是將其從值棧中取出可以是:<s: property value="#session" /> <s:property value="#application" /> 方法二:通過實現SessionAware接口訪問session(更好): 首先是創建BaseAction implements SessionAware,然後是session的XXXAction extends BaseAction,類似的還有ServletRequestAware、ServletResponseAware、ServletContextAware。 8.配置文件中(struts.xml)多個action的class屬性可以指向同一個action,只要這個action有多個方法就可以,多個方法可以決定具體可以返回哪些界面,這樣做同時也節約了action的數量。 9.在配置文件中可以使用parameter標簽指定pojo中的屬性的值,這樣的話struts2一啟動pojo類中的成員變量(屬性)就有值了。 10.配置文件(struts.xml)中的result標簽主要是負責生成視圖(jsp、json、freemaker、報表等),其實result本身也是一個類,從struts-default.xml文件中可以查到result結果類型有10種,但result的type屬性如果不進行設定的話默認就是dispatcher(對應ServletDispatcherResult),result的常用類型是:dispatcher、redirect、redirectAction、stream、json,這五個。 11.Struts2封裝MVC的具體體現是:model層包括entity(實體bean,如action,pojo),dao(數據訪問對象,主要提供對數據庫中數據的增刪改查方法),service(業務層,主要由spring負責);view層主要由jsp頁面負責收集、展現數據;control控制層主要由actionservlet(以及控制器)和action(二級控制器)來負責。 12.用struts2來開發項目的步驟習慣是:先寫struts.xml配置文件,再寫action類,最後寫jsp顯示頁面,在編程過程中也是要一層一層的寫,先構建和定義好方法,最後再實現這些方法,比如Dao可以放到最後來實現,在寫項目前最好將定義的屬性的名字和含義都記住,這樣在項目中可以快速、避免一些問題。如果有些方法定義好了,若擔心以後忘記了就可以增加 // TODO xxx的注釋,並且可以通過windows--show view--tasks來跟蹤這些只定義沒有實現的方法,雙擊這些“TODO”就可以定位到沒有定義的方法處。 13.Struts2的標簽有通用標簽、控制標簽、UI標簽、AJAX標簽,UI標簽有8個:form(封裝元素)、textfield(普通文本標簽)、password(密碼框)、submit(提交)、textarea(文本域)、checkbox(多選)、radio(單選)、select(下拉菜單); <s:from></s:form>屬性有theme(主題),namespace(命名空間),action,method;<s:textfield>和<s:password>屬性有maxlength,size,readonly;<s:textarea>有rows,cols;<s:checkbox>屬性有name(name相同即為一組)和fieldValue;<s:radio>屬性有name,label,list(OGNL需要迭代的集合);listValue(作用於每個選項的提示);listKey(作用於每個要提交的值);<s:select>屬性有listValue對應每一個option的文本,listKey對應每一個option提交的值,headerValue提示頭的文字,headKey提示頭對應的提交值。 14.在default.xml配置文件中可以看到,basicStack中包含了8個攔截器,是struts2的核心攔截器。 15.Struts2的控制流程: ①請求到來 ②創建valueStack,並將當前action放置棧頂,進行初始化 ③調用攔截器,在攔截器中是可以訪問valueStack的 ④調用action,執行業務方法,默認是execute() ⑤調用result,result分組生成界面展示數據給用戶 ⑥最後到頁面,通過標簽庫取出數據 16.struts2共有五大組件:值棧valueStack,OGNL,攔截器,action,result,另外還有資源國際化。