Struts2 學習筆記一

 

1.      Struts1 Struts2的區別

Struts2從字面上來看似乎是Struts1的升級,但實事上可以說Struts2Struts1幾乎沒有什麼關係,除了名字相同外;說實在的,Struts2可以看作是WebWork的升級,因爲無論從編程風格的相似性還是所引用到的jar包,到處可以看到WebWork的身影。下面就來比較下Struts1Struts2到底有哪些區別吧:

l         Struts1Action需要繼承ActionServlet是一種侵入式的編程,而Struts2Action完全是一個普通的POJO對象;

l         Struts1Action是單例模式並且必須是線程安全的(因爲只有一個Action實例來處理所有的請求),而Struts2Action會爲每一個請求創建一個實例,因而沒有線程安全性的問題;

l         Struts1依賴於Servlet API,如Action方法execute方式中必須有HttpServletRequestHttpServletResponse參數,而Struts2Action不再需要這兩個參數;

l         Struts1使用ActionForm來封裝用戶請求參數,且每個form必須繼承自ActionFormStruts2直接使用Action來封裝用戶請求的參數;

l         在表達式方面,Struts1整合了JSTL,而Struts2不僅可以使用JSTL,還可以使用OGNL

 

2Struts2的核心控制器

       Struts2的核心控制器爲FilterDispatcher,它是一個Filter,負責攔截所有的用戶請求。Struts2框架默認處理*.action的請求,當有請求到來時,Struts2框架將會根據*.action請求的前面部分決定調用相應的業務邏輯組件(用戶實現的Action類的實例)

       Struts2用於處理用戶請求的Action實例,並不是用戶實現的業務控制器,而是Action代理,而用戶實現的Action類僅僅是Struts2Action代理的代理目標。

 

3Struts2基本配置

 (1). 配置web.xml

       要使Struts2的核心控制器發揮作用,需在web.xml中配置FilterDispatcher

       <filter>

        <filter-name>struts2</filter-name>

        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>

    </filter>

 

    <filter-mapping>

        <filter-name>struts2</filter-name>

        <url-pattern>/*</url-pattern>

</filter-mapping>

配置filter時可以指定初始化參數,其中有3個具有特殊意義:

l         config:該值爲一系統以英文逗號隔開的字符串,每個字符串都是一個XML配置文件的位置;Struts2框架將自動加載該屬性指定的系列配置文件;

l         actionPackages:該值也爲一系統以英文逗號隔開的字符串,每個字符串都是一個包空間,Struts2將掃描這些包空間下的Action類;

l         configProviders:當自己實現ConfigurationProvider類後,可以在此配置;

 

 (2). 標籤的配置

       Struts2的標籤庫定義文件包含在struts2-core-xxx.jar文件META-INF下,文件名爲struts-tag.tld

       如果Web應用使用了Servlet2.3以前的規範,則必須在web.xml文件中配置加載Struts2標籤庫,如下:

       <taglib>

              <taglib-uri>/s</taglib-uri>

              <taglib-location>/WEB-INF/struts-tags.tld</taglib-location>

       </taglib>

       如果Web應用使用了Servlet2.4,則會自動加載該標籤文件,故不需要手動加載。

 

 (3). struts.xml配置文件

       Struts2的核心配置文件爲struts.xml,它主要負責管理業務控制器ActionStruts2框架會自動加載放在WEB-INF/classes路徑下的struts.xml文件;

       爲了避免struts.xml文件過大,可以將其分解成多個配置文件,然後在struts.xml文件中使用<include/>包含其他的配置文件,如下:

       <struts>

              <include file=”struts-part1.xml”/>

       </struts>

       struts-default.xml文件是Struts2框架的默認配置文件,Struts2框架每次都會自動加載該文件,它其中定義了Struts2內建的Result類型、攔截器以及攔截器棧等。

 

 (4). Eclipse方式的擴展

       Struts2還提供了一種“可插拔”的方式來安裝插件,如Struts2框架自帶的Spring/JSF等,都提供了一個類似struts2-xxx-plugin.jar的文件,將其解壓後可以看到其中包含struts-plugin.xml文件,該文件中配置了Struts2Spring/JSF框架整合必需的常量、攔截器等。只需要將strtus2-xxx-plugin.jar文件放在WEB-INF/lib路徑下,Struts2框架將自動加載該框架。

       故用戶自己開發屬於自己的Struts2插件,只要將對應的struts-plugin.xml文件放在JAR文件中,Struts2框架將會自動加載該文件。

 

 (5). struts.properties文件

       struts.properties文件用於配置Struts2框架的一些屬性值,它是一個標準的Properties文件,使用相應的key-value方式記錄;該文件只要放在Web應用的CLASSPATH路徑下,Struts2框架均可加載,但一般習慣將其放在WEB-INF/classes目錄下。

       下面列舉一些常用到的屬性:

l         struts.i18n.encoding:指定web應用的默認編碼集,如對於處理中文請求參數時,需要將其設置爲GBKGB2312

l         struts.action.extension:指定由Struts2框架處理的請求後綴,該屬性默認值是action,如需指定多個值,使用英文逗號隔開;

l         struts.enable.DynamicMethodInvocation:值爲true/false,用於指定Struts2是否支持動態方法調用,其默認值爲true

l         struts.tag.altSyntax:指定是否允許在Struts2標籤中使用表達式語法,默認爲true

l         struts.devMode:該屬性設置Struts2應用是否使用開發模式,如果設置爲true,則在應用出錯時會顯示更多的出錯提示,便於查找錯誤,默認值爲false

l         struts.i18n.reload:設置是否每次HTTP請求到達時,系統重新加載資源文件,屬性默認值爲false,在開發時建議將其設置爲true,這樣修改的資源文件後可以不用重啓應用;

l         struts.configuration.xml.reload:該屬性設置當struts.xml文件改變後系統是否重啓加載,其默認值爲false

l         struts.custom.i18n.resources:該屬性指定Struts2應用所需要的國際化資源文件,如有多個資源文件,中間用英文逗號隔開;

l         struts.configuration.files:指定Struts2默認加載的配置文件,如有多個文件,中間使用英文逗號隔開,該屬性默認值爲struts-default.xml, struts-plugin.xml,struts.xml

除了在struts.properties文件中配置屬性外,Struts2也支持在struts.xml文件中用<constant>元素來定義屬性,如下:

struts.properties

struts.custom.i18n.resources = ApplicationResource

……

 

struts.xml

<struts>

    <constant name=struts.custom.i18n.resources value=ApplicationResource />

    ……

</struts>

    注意:如果在值多個配置文件中配置了相同的屬性,則後一個文件中的配置常量值會覆蓋前一個文件中的常量值。

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