Java.Web學習筆記 Struts2

Struts2
1. Struts2是起源於Web Work框架另一個MVC框架,不是起源於Struts1的,兩個沒有直接關係。
2. Struts2的Action中就有JSP表單的屬性,然後要設置相應的getter和setter屬性,同樣Action中有execute但是不需要用request和response傳參了。
3. Struts2的配置文件也有很大的不同,多了一個包名,然後用標籤替代了struts1的標籤。如果是全局的標籤配置那麼任何頁面都可以使用這個頁面。
4. Struts2的標籤支持主題使用的是
5. 配置流程
(1) 新建一個web project
(2) 導入支持包
(3) 自己新建Action繼承ActionSupport
(4) 定義相關的屬性
(5) 然後自己重寫execute()方法
(6) 之後再struts.xml配置一下package,也配置一下
(7) 自己寫幾個JSP文件作爲顯示
(8) 配置一下web.xml
6. 工作流程

  1. 注意到最後工作流程會丟棄該Action實例,這說明了Struts2是線程安全的,每次都會新生成一個實例
    配置Struts2
  2. 程序的入口是FilterDispatcher,這個東西能夠截獲所有的URI,如果URI以.action結尾那麼Struts2會去查找對應的Action或者JSP。如果URI包含”/struts/”那麼Struts2會返回它集成的資源,例如
    http://localhost:8080/struts2/struts/xhtml/styles.css這個文件並不存在,而是位於Struts2的jar包中,所以配置的時候要把所有的URI都轉到Filter中,而不僅僅是.action結尾的URI
  3. Struts2的配置文件,常用的有web.xml, struts.properties, struts.xml等
    在web.xml配置Struts2的分發器,在struts.xml配置Struts2的Action,在struts.properties裏配置struts2的一些屬性,比如Struts2後綴,上傳文件大小,上傳文件夾等。
  4. 配置package,Struts2的Action、JSP等都配置在中,如果子package繼承了父package的東西,那麼可以引用父package中所有的資源。也可以配置namespace,如果配置了namespace那麼訪問的時候就可以加上namespace。
    Action
  5. 自定義的Action一般直接繼承ActionSupport類,定義變量,覆蓋execute()方法,變量的值會被Struts2的setter方法自動賦值,直接使用就可以了。返回值可以在struts.xml中的標籤配置。
  6. 也可自己定義一個Action接口裏面只有一個execute()方法,然後就是預置結果名稱。之後自己寫個類繼承這個Action然後定義屬性
  7. 也可以自己直接在POJO上寫一個public String execute()方法,這樣的話可以不予Struts2發生耦合,代碼不依賴於Struts2的類庫
  8. 執行非默認方法可以通過URL執行使用action!method.action的URL形式其中action是struts.xml中配置的Action名字,method是Action的方法名。
  9. 也可以將執行方法配置到Action,這時候Action名稱可以隨意指定,比如

    這樣的話那就可以通過loginPerson.action訪問login()方法了。
  10. 還可以直接用通配符配置這個方法

    /{1}.jsp

    Struts2的零配置
  11. 不通過struts.xml配置,而是通過@Annotation配置
  12. 實例
    AnnotationAction.java

@Namespace(value=”/test”) //命名空間
@Results( { //結果集
@Result(name=”success”,value=”/success.jsp”), //單個結果
@Result(name=”fail”,value=”/fail.jsp”)
} )

通過默認訪問名稱訪問,即去掉Action且類名首字母小寫 /struts2/annotation.action方式訪問。如果有namespace那就要 /struts2/test/annotation.action訪問
3. 零配置是必須在Filter中指定Action包所在位置,參數actionPackages指定被@註解標註的Action所在的Package。
4. 而且POJO在struts2的裏面不一定需要用new顯示創建一個POJO對象,可以只是聲明,如果沒有對象,會在運行時通過反射實例化一個對象,因此不會拋出NullPointerException。
5. 通配符配置Action,用*配置,{1}表示第一個通配符{2}表示第二個通配符
6. 使用Struts2的標籤顯示URL,<a href=”<struts:url action=”initAddBook”/> “/> 這時候會自動把.action加到後面,如果在struts.properties中修改了.action後綴,那該標籤也會自動添加新的後綴。
數據類轉換器
1. 如果覺得默認的數據類型轉換器不能滿足需求,可以自定義數據類型轉換器。
2. 一般直接繼承DefaultTypeConverter類,並且實現convertValue()方法就可以了。
3. convertValue(Map context, Object value, Class toType)方法有三個參數,value是待轉換的數據,toType是要轉換的類型。注意value是request.getParameterValues(String name)返回的String[]類型對象
4. 需要把轉換器配置到xwork-conversion.properties中,在這裏配置的話,key是要轉換的類型,value是你這個轉換器類,把這個資源放到/WEB-INF/classes/下。這是全局的
5. 還可以在struts.xml下只爲某個Action配置轉換器

<action name=”xxx” class=”xxx” converter=”xxxx”>
</action>

獲取request、response
1. 利用ServletActionContext類來維護Servlet對象,它是利用ThreadLocal來維護不同線程的Servlet對象。只要用靜態方法就可以獲得當前用戶、當前進程的request、response
2. 利用相關的Aware接口,Struts在實例化一個Action實例的時候,如果發現它實現了相應的Aware接口,會把相應的資源通過Aware接口方法注射進去,這種方法也叫注射方式(IoC方式)
3. Application,request,response, session對應的Aware接口分別是ServletContextAware,ServletRequestAware,ServletResponseAware,SessionAware,對應的方法就是setServletxxx()方法
使用Validator檢驗數據
1. 使用XML配置數據校驗Validator,使用XML配置時,需要在Action類所在的package內添加一個XML文件,文件名格式是Action類名-validation.xml或者Action類名-Action別名-validation.xml,而且支持校驗的Action必須實現Validateable接口,一般繼承ActionSupport就可以了。
2. 配置客戶端的Validator,也可以使用JS進行校驗。
再講JSP的標籤添加validatr=”true”屬性就可以了。
3. 使用@Java註解配置Validator

@Validations(
        requiredStrings={
            @RequiredStringValidator(),
            …
}
dateRangeFields={
    @DateRangeFieldValidator(),
    …
}
        …
)
  1. 利用註解Validator時候,如果某個方法不想被這樣校驗,那麼就使用@SkipValidation
    Struts 2.x標籤
  2. Struts2標籤和EL表達式,一開始是支持的從Struts2.0.11開始就不支持EL表達式
  3. Struts2標籤都是使用同一的前綴,都在Struts-tags.tld文件中。
    OGNL語言
    (1) OGNL全稱是Object-Graph Navigation Language
    (2) 優勢
     可以訪問對象的方法,例如list.size();
     能夠訪問靜態屬性和方法,在類名前和方法前加上@。比如@java.lang.Math@PI,@java.lang.String@format(‘foo%s’,’bar’);
     支持賦值操作和表達式串聯:賦值#value=5;
     訪問OGNL上下文(OGNL context)和ActionContext(也就是所有的Servlet資源)
     操作集合類對象。
    (3) “#”聲明OGNL表達式
  4. 能夠訪問OGNL上下文與ActionContext資源

  5. 用於過濾或者篩選集合 books.{?#this.price<20}

  6. 用於構造Map,如#{‘foo1’:’var1’ , ’foo2’:’var2’}
    (4) 用%顯示聲明OGNL表達式
    %表示某一個字符串爲OGNL表達式,這個會被執行
<struts:label label=”#request.account”></struts:label>       //輸出#request.account字符串
<struts:label label=”%{#request.account}”></struts:label>    
//輸出request的account屬性

(5) OGNLstruts.xml.propertiesValidation.require= {getText(fileName)} is required
在struts.xml中
ListPhotos.action?albumId=${albumId}
(6) 控制標籤if、elseif、else標籤控制流程
(7) Append標籤鏈接多個List,用於把多個list追加在原來的list後面連成一個list
(8) Generator標籤將字符轉化爲List
(9) Iterator標籤遍歷集合
(10) Merge標籤取集合的並集
(11) Subset標籤過濾集合元素
(12) Action標籤包含Action頁面
(13) Struts:bean用於引用某個Java Bean
(14) Struts:date用於輸出日期格式
(15) Struts2中的任何標籤都可以使用%{getText(‘resource.key’)}
(16) z這個可以把另一個JSP頁面的執行結果包含進來。相當於JSP中的
(17) 標籤傳遞參數
(18) 標籤設置變量的值
(19) Property標籤輸出變量的值
表單UI標籤
(1) form標籤輸出表單,標籤不僅生成標記還會生成table標記,
, ,等UI標籤也會生成標記,所以JSP中不需要寫任何佈局代碼
(2) textfield,textarea,file,checkbox,radio標籤,會生產HTML裏的標籤,同form一樣,這些標籤也會根據當前主題生產佈局代碼。
(3) select, autocomplete標籤下拉框
select標籤是標準的下拉框,生成的是HTML裏的標籤
autocomplete標籤具有自動完成功能的下拉框,必須使用Ajax主題,因爲用到DOJO的JavaScript庫
(4) checkboxlist標籤多選框組
(5) combobox標籤複合框
(6) datetimepicker標籤日期選擇器要使用DOJO標籤
(7) doubleselect標籤聯動選擇框
(8) optiontransferselect兩邊各有一個列表
(9) optgroup標籤選項組
非表單UI標籤
(1) debug標籤輸出調試信息
(2) fielderror,actionerror,actionmessage標籤錯誤信息
fielderror顯示數據校驗錯誤信息
actionerror顯示Action中的錯誤信息
actionmessage標籤用於顯示Action中的消息
(3) div,submit,a標籤實現無刷新獲取數據
(4) 無刷新實現登錄,註銷,主要使用Ajax
(5) tabbedPanel標籤頁,就是實現了標籤頁

(6) tree標籤輸出樹DOJO標籤

<sx:tree>
<sx:treenode.>
        <sx:treenode/>  
</sx:treenode>
</sx:tree>

(7) tree標籤動態加載
Struts 2.x攔截器
1. 攔截器類似於Filter,在執行Action方法前執行
2. Timer計時
3. Token防止重複提交攔截器
4. execAndWait執行等待攔截器
5. 自定義權限驗證攔截器,使用還有標籤設置自己的攔截器
Struts2文件上傳
1. 要獲取文件的原始名稱,還需要定義一個String類型的屬性,屬性名必須是xxxFileName,其中xxx爲File屬性的名稱。
2. 如果要獲取改文件的原始MIME類型,還需要定義一個xxxContentType,其中xxx也是File屬性的名稱。MIME類型是指文件內容類型
3. 還可以使用默認的fileUpload攔截器指定參數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章