Struts2.xml 中Constant的配置

struts2加載常量的順序
struts-default.xml
struts-plugin.xml
struts.xml
struts.properties
web.xml
後面的會覆蓋掉前面的常量,最好在struts.xml中定義

 

怎麼由.action改爲.do
<constant name="struts.action.extension" value="do"/>
do或action
<constant name="struts.action.extension" value="do,action"/>


Struts 2框架有兩個核心配置文件,其中struts.xml文件主要負責管理應用中的Action映射,以及該Action包含的Result定義等。除此之外,Struts 2框架還包含一個struts.properties文件,該文件定義了Struts 2框架的大量屬性,開發者可以通過改變這些屬性來滿足應用的需求。
配置web.xml文件
任何MVC框架都需要與Web應用整合,這就不得不藉助於web.xml文件,只有配置在web.xml文件中Servlet纔會被應用加載。
通常,所有的MVC框架都需要Web應用加載一個核心控制器,對於Struts 2框架而言,需要加載FilterDispatcher,只要Web應用負責加載FilterDispatcher,FilterDispatcher將會加載應用的Struts 2框架。
因爲Struts 2將核心控制器設計成Filter,而不是一個普通Servlet。故爲了讓Web應用加載FilterDispacher,只需要在web.xml文件中配置FilterDispatcher即可。
配置FilterDispatcher的代碼片段如下:

<!– 配置Struts 2框架的核心Filter –>
<filter>
<!– 配置Struts 2核心Filter的名字 –>
<filter-name>struts</filter-name>
<!– 配置Struts 2核心Filter的實現類 –>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher </filter-class>
<init-param>
<!– 配置Struts 2框架默認加載的Action包結構 –>
<param-name>actionPackages</param-name>
<param-value>org.apache.struts2.showcase.person</param-value>
</init-param>
<!– 配置Struts 2框架的配置提供者類 –>
<init-param>
<param-name>configProviders </param-name>
<param-value>com.javachen.MyConfigurationProvider</param-value>
</init-param>
</filter>
正如上面看到的,當配置Struts 2的FilterDispatcher類時,可以指定一系列的初始化參數,爲該Filter配置初始化參數時,其中有3個初始化參數有特殊意義:
config:該參數的值是一個以英文逗號(,)隔開的字符串,每個字符串都是一個XML配置文件的位置。Struts 2框架將自動加載該屬性指定的系列配置文件。
actionPackages:該參數的值也是一個以英文逗號(,)隔開的字符串,每個字符串都是一個包空間,Struts 2框架將掃描這些包空間下的Action類。
configProviders:如果用戶需要實現自己的ConfigurationProvider類,用戶可以提供一個或多個實現了ConfigurationProvider接口的類,然後將這些類的類名設置成該屬性的值,多個類名之間以英文逗號(,)隔開。
除此之外,還可在此處配置Struts 2常量,每個<init-param>元素配置一個Struts 2常量,其中<param-name>子元素指定了常量name,而<param-value>子元素指定了常量value。
提示  關於Struts 2常量的講解,請參閱本書的4.1.2節。
在web.xml文件中配置了該Filter,還需要配置該Filter攔截的URL。通常,我們讓該Filter攔截所有的用戶請求,因此使用通配符來配置該Filter攔截的URL。
下面是配置該Filter攔截URL的配置片段:

<!– 配置Filter攔截的URL –>
<filter-mapping>
<!– 配置Struts 2的核心FilterDispatcher攔截所有用戶請求 –>
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

配置了Struts 2的核心FilterDispatcher後,基本完成了Struts 2在web.xml文件中的配置。
如果Web應用使用了Servlet 2.3以前的規範,因爲Web應用不會自動加載Struts 2框架的標籤文件,因此必須在web.xml文件中配置加載Struts 2標籤庫。
配置加載Struts 2標籤庫的配置片段如下:

<!– 手動配置Struts 2的標籤庫 –>
<taglib>
<!– 配置Struts 2標籤庫的URI –>
<taglib-uri>/s</taglib-uri>
<!– 指定Struts 2標籤庫定義文件的位置 –>
<taglib-location>/WEB-INF/struts-tags.tld</taglib-location>
</taglib>

在上面配置片段中,指定了Struts 2標籤庫配置文件物理位置:/WEB-INF/struts- tags.tld,因此我們必須手動複製Struts 2的標籤庫定義文件,將該文件放置在Web應用的WEB-INF路徑下。
如果Web應用使用Servlet 2.4以上的規範,則無需在web.xml文件中配置標籤庫定義,因爲Servlet 2.4規範會自動加載標籤庫定義文件。
提示  Struts 2的標籤庫定義文件包含在struts2-core-2.0.6.jar文件裏,在struts2-core-2.0.6.jar文件的META-INF路徑下,包含了一個struts-tag.tld文件,這個文件就是Struts 2的標籤庫定義文件,Servlet 2.4規範會自動加載該標籤庫文件。
對於Servlet 2.4以上的規範,Web應用自動加載該標籤庫定義文件。
配置標籤庫定義文件如下:
<taglib>
<!– 定義標籤庫的版本 –>
<tlib-version>2.2.3</tlib-version>
<!– 定義標籤庫所需的JSP版 –>
<jsp-version>1.2</jsp-version>
<short-name>s</short-name>
<!– 定義Struts 2標籤庫的URI –>
<uri>/struts-tags</uri>

</taglib>

因爲該文件中已經定義了該標籤庫的URI:struts-tags,這就避免了在web.xml文件中重新定義Struts 2標籤庫文件的URI。
struts.properties文件

struts.properties文件是一個標準的Properties文件,該文件包含了系列的key-value對象,每個key就是一個Struts 2屬性,該key對應的value就是一個Struts 2屬性值。
struts.properties文件通常放在Web應用的WEB-INF/classes路徑下。實際上,只要將該文件放在Web應用的CLASSPATH路徑下,Struts 2框架就可以加載該文件。

現在的問題是,struts.properties文件的哪些key是有效的?即struts.properties文件裏包含哪些屬性是有效的Struts 2屬性。下面列出了可以在struts.properties中定義的Struts 2屬性。
—  struts.configuration:該屬性指定加載Struts 2配置文件的配置文件管理器。該屬性的默認值是org.apache.Struts2.config.DefaultConfiguration,這是 Struts 2默認的配置文件管理器。如果需要實現自己的配置管理器,開發者則可以實現一個實現Configuration接口的類,該類可以自己加載Struts 2配置文件。
—  struts.locale:指定Web應用的默認Locale。
—  struts.i18n.encoding:指定Web應用的默認編碼集。該屬性對於處理中文請求參數非常有用,對於獲取中文請求參數值,應該將該屬性值設置爲GBK或者GB2312。
提示  當設置該參數爲GBK時,相當於調用HttpServletRequest的setCharacterEncoding方法。
—  struts.objectFactory:指定Struts 2默認的ObjectFactory Bean,該屬性默認值是spring。
—  struts.objectFactory.spring.autoWire:指定Spring框架的自動裝配模式,該屬性的默認值是name,即默認根據Bean的name屬性自動裝配。
—  struts.objectFactory.spring.useClassCache:該屬性指定整合Spring框架時,是否緩存Bean實例,該屬性只允許使用true和false兩個屬性值,它的默認值是true。通常不建議修改該屬性值。
—  struts.objectTypeDeterminer:該屬性指定Struts 2的類型檢測機制,通常支持tiger和notiger兩個屬性值。
—  struts.multipart.parser:該屬性指定處理multipart/form-data的MIME類型(文件上傳)請求的框架,該屬性支持cos、pell和jakarta等屬性值,即分別對應使用cos的文件上傳框架、pell上傳及common-fileupload文件上傳框架。該屬性的默認值爲jakarta。

注意  如果需要使用cos或者pell的文件上傳方式,則應該將對應的JAR文件複製到Web應用中。例如,使用cos上傳方式,則需要自己下載cos框架的JAR文件,並將該文件放在WEB-INF/lib路徑下。
—  struts.multipart.saveDir:該屬性指定上傳文件的臨時保存路徑,該屬性的默認值是javax.servlet.context.tempdir。
—  struts.multipart.maxSize:該屬性指定Struts 2文件上傳中整個請求內容允許的最大字節數。
—  struts.custom.properties:該屬性指定Struts 2應用加載用戶自定義的屬性文件,該自定義屬性文件指定的屬性不會覆蓋struts.properties文件中指定的屬性。如果需要加載多個自定義屬性文件,多個自定義屬性文件的文件名以英文逗號(,)隔開。
—  struts.mapper.class:指定將HTTP請求映射到指定Action的映射器,Struts 2提供了默認的映射器:org.apache.struts2.dispatcher.mapper.DefaultActionMapper。默認映射器根據請求的前綴與Action的name屬性完成映射。
—  struts.action.extension:該屬性指定需要Struts 2處理的請求後綴,該屬性的默認值是action,即所有匹配*.action的請求都由Struts 2處理。如果用戶需要指定多個請求後綴,則多個後綴之間以英文逗號(,)隔開。
—  struts.serve.static:該屬性設置是否通過JAR文件提供靜態內容服務,該屬性只支持true和false屬性值,該屬性的默認屬性值是true。
—  struts.serve.static.browserCache:該屬性設置瀏覽器是否緩存靜態內容。當應用處於開發階段時,我們希望每次請求都獲得服務器的最新響應,則可設置該屬性爲false。
—  struts.enable.DynamicMethodInvocation:該屬性設置Struts 2是否支持動態方法調用,該屬性的默認值是true。如果需要關閉動態方法調用,則可設置該屬性爲false。
—  struts.enable.SlashesInActionNames:該屬性設置Struts 2是否允許在Action名中使用斜線,該屬性的默認值是false。如果開發者希望允許在Action名中使用斜線,則可設置該屬性爲true。
—  struts.tag.altSyntax:該屬性指定是否允許在Struts 2標籤中使用表達式語法,因爲通常都需要在標籤中使用表達式語法,故此屬性應該設置爲true,該屬性的默認值是true。
—  struts.devMode:該屬性設置Struts 2應用是否使用開發模式。如果設置該屬性爲true,則可以在應用出錯時顯示更多、更友好的出錯提示。該屬性只接受true和flase兩個值,該屬性的默認值是false。通常,應用在開發階段,將該屬性設置爲true,當進入產品發佈階段後,則該屬性設置爲false。
—  struts.i18n.reload:該屬性設置是否每次HTTP請求到達時,系統都重新加載資源文件。該屬性默認值是false。在開發階段將該屬性設置爲true會更有利於開發,但在產品發佈階段應將該屬性設置爲false。

提示  開發階段將該屬性設置了true,將可以在每次請求時都重新加載國際化資源文件,從而可以讓開發者看到實時開發效果;產品發佈階段應該將該屬性設置爲false,是爲了提供響應性能,每次請求都需要重新加載資源文件會大大降低應用的性能。
—  struts.ui.theme:該屬性指定視圖標籤默認的視圖主題,該屬性的默認值是xhtml。
—  struts.ui.templateDir:該屬性指定視圖主題所需要模板文件的位置,該屬性的默認值是template,即默認加載template路徑下的模板文件。
—  struts.ui.templateSuffix:該屬性指定模板文件的後綴,該屬性的默認屬性值是ftl。該屬性還允許使用ftl、vm或jsp,分別對應FreeMarker、Velocity和JSP模板。
—  struts.configuration.xml.reload:該屬性設置當struts.xml文件改變後,系統是否自動重新加載該文件。該屬性的默認值是false。
—  struts.velocity.configfile:該屬性指定Velocity框架所需的velocity.properties文件的位置。該屬性的默認值爲velocity.properties。
—  struts.velocity.contexts:該屬性指定Velocity框架的Context位置,如果該框架有多個Context,則多個Context之間以英文逗號(,)隔開。
—  struts.velocity.toolboxlocation:該屬性指定Velocity框架的toolbox的位置。
—  struts.url.http.port:該屬性指定Web應用所在的監聽端口。該屬性通常沒有太大的用戶,只是當Struts 2需要生成URL時(例如Url標籤),該屬性才提供Web應用的默認端口。
—  struts.url.https.port:該屬性類似於struts.url.http.port屬性的作用,區別是該屬性指定的是Web應用的加密服務端口。
—  struts.url.includeParams:該屬性指定Struts 2生成URL時是否包含請求參數。該屬性接受none、get和all三個屬性值,分別對應於不包含、僅包含GET類型請求參數和包含全部請求參數。
—  struts.custom.i18n.resources:該屬性指定Struts 2應用所需要的國際化資源文件,如果有多份國際化資源文件,則多個資源文件的文件名以英文逗號(,)隔開。
—  struts.dispatcher.parametersWorkaround:對於某些Java EE服務器,不支持HttpServlet Request調用getParameterMap()方法,此時可以設置該屬性值爲true來解決該問題。該屬性的默認值是false。對於 WebLogic、Orion和OC4J服務器,通常應該設置該屬性爲true。
—  struts.freemarker.manager.classname:該屬性指定Struts 2使用的FreeMarker管理器。該屬性的默認值是 org.apache.struts2.views.freemarker.FreemarkerManager,這是Struts 2內建的FreeMarker管理器。
—  struts.freemarker.wrapper.altMap:該屬性只支持true和false兩個屬性值,默認值是true。通常無需修改該屬性值。
—  struts.xslt.nocache:該屬性指定XSLT Result是否使用樣式表緩存。當應用處於開發階段時,該屬性通常被設置爲true;當應用處於產品使用階段時,該屬性通常被設置爲false。
—  struts.configuration.files:該屬性指定Struts 2框架默認加載的配置文件,如果需要指定默認加載多個配置文件,則多個配置文件的文件名之間以英文逗號(,)隔開。該屬性的默認值爲struts- default.xml,struts-plugin.xml,struts.xml,看到該屬性值,讀者應該明白爲什麼Struts 2框架默認加載struts.xml文件了。
struts.xml

在有些時候,開發者不喜歡使用額外的struts.properties文件,Struts 2允許在struts.xml文件中管理Struts 2屬性,在struts.xml文件中通過配置constant元素,一樣可以配置這些屬性。

struts.xml配置片段如下:
<?xml version=”1.0″ encoding=”UTF-8″ ?>
<!– 指定Struts 2的DTD信息 –>
<!DOCTYPE struts PUBLIC
“-//Apache Software Foundation//DTD Struts Configuration 2.0//EN”
“http://struts.apache.org/dtds/struts-2.0.dtd”>
<struts>
<!– 通過constant元素配置Struts 2的屬性 –>
<constant name=” struts.custom.i18n.resources ” value=”mess” />

</struts>

上面代碼片段配置了一個常用屬性:struts.custom.i18n.resources,該屬性指定了應用所需的國際化資源文件的baseName爲mess。

  1. <span style="color:#ddbb00">&lt;</span> !DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd" <span style="color:#ddbb00">&gt;</span>  
  2.    
  3.     <span style="color:#808080; font-style:italic"><!-- include節點是struts2中組件化的方式 可以將每個功能模塊獨立到一個 xml配置文件中 然後用include節點引用 --></span>  
  4.    
  5.     <span style="color:#808080; font-style:italic"><!-- package提供了將多個Action組織爲一個模塊的方式         package的名字必須是唯一的 package可以擴展 當一個package擴展自         另一個package時該package會在本身配置的基礎上加入擴展的package         的配置 父package必須在子package前配置          name:package名稱         extends:繼承的父package名稱         abstract:設置package的屬性爲抽象的 抽象的package不能定義action 值true:false         namespace:定義package命名空間 該命名空間影響到url的地址,例如此命名空間爲/test那麼訪問是的地址爲 http://localhost:8080/struts2/test/XX.action      --></span>  
  6.    
  7.             <span style="color:#808080; font-style:italic"><!-- 定義攔截器                  name:攔截器名稱                 class:攔截器類路徑              --></span>  
  8.    
  9.             <span style="color:#808080; font-style:italic"><!-- 定義攔截器棧 --></span>  
  10.    
  11.         <span style="color:#808080; font-style:italic"><!-- 定義默認的攔截器 每個Action都會自動引用          如果Action中引用了其它的攔截器 默認的攔截器將無效 --></span>  
  12.    
  13.         <span style="color:#808080; font-style:italic"><!-- 全局results配置 --></span>  
  14.    
  15.             /error.jsp  
  16.    
  17.         <span style="color:#808080; font-style:italic"><!-- Action配置 一個Action可以被多次映射(只要action配置中的 name不同)              name:action名稱              class: 對應的類的路徑              method: 調用Action中的方法名         --></span>  
  18.    
  19.             <span style="color:#808080; font-style:italic"><!-- 引用攔截器                 name:攔截器名稱或攔截器棧名稱              --></span>  
  20.    
  21.             <span style="color:#808080; font-style:italic"><!-- 節點配置                 name : result名稱 和Action中返回的值相同                 type : result類型 不寫則選用superpackage的type struts- default.xml中的默認爲dispatcher              --></span>  
  22.          /talk.jsp  
  23.          <span style="color:#808080; font-style:italic"><!-- 參數設置               name:對應Action中的get/set方法           --></span>  
  24. http://www.sina.com  

提示  Struts 2提供了兩種方式來管理Struts 2的屬性:既可以通過struts.properties文件來配置Struts 2屬性,也可通過在struts.xml文件中配置constant元素來配置Struts 2屬性。

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