- JavaWeb從入門到精通(視頻實戰版)
- 常倬林等編著
- 833字
- 2018-12-31 19:36:02
5.3 Struts2的配置文件
Struts2框架主要有兩個核心配置文件:struts.properties和struts.xml。struts.xml與Struts1版本中的struts-config.xml非常類似,主要負責管理應用中的Action映射,以及該Action包含的Result定義等,而struts.properties文件則定義了Struts2框架的全局屬性。所有的配置文件說明見表5.1。圖5.2展示了幾個配置文件所在位置和相互關系。
表5.1 Struts2的配置文件


圖5.2 配置文件關系圖
5.3.1 全局配置文件—struts.properties
struts.properties文件是一個標準的Properties文件,該文件包含了一系列的key-value對象,每個key就是一個Struts2屬性,該key對應的value就是一個Struts2屬性值。struts.properties文件通常放在Web應用的WEB-INF/classes路徑下,實際上,只要將該文件放在Web應用的CLASSPATH路徑下,Struts2框架就可以加載該文件。以下是一部分配置片段:
struts.enable.DynamicMethodInvocation=false" struts.devMode=false
還有一種方法是在struts.xml中以<constant name="" value=""></constant>的形式配置這些靜態屬性,效果與在struts.properties配置的效果是一樣的。采取這種方式的項目中可以不包含struts.properties文件而只有struts.xml。
<constant name="struts.enable.DynamicMethodInvocation" value="false" /> <constant name="struts.devMode" value="false" />
表5.2列出了struts.properties配置參數詳細情況。
表5.2 struts.properties配置參數

5.3.2 核心配置文件—struts.xml
struts.xml文件主要負責管理應用中的action映射,以及該action包含的result定義等。在struts.properties配置中有一項struts.configuration.files,從這里可以看出struts.xml這個文件名不一定是固定的,可以配置為其他文件名。struts.xml內容主要包括Action、Interceptor、Packages、Namespace等。后面的章節將詳細介紹如何配置這些元素。
在struts.xml中可以使用<include>標簽把內容分到幾個文件中去。這里非常像JSP中的<jsp:include>動作標簽,可以把其他文件的內容導入進來,被導入的每個配置文件必須和struts.xml文件有一樣的格式。<include>標簽的格式如下所示:
<!--引入其他文件--> <include file="example.xml"/> <include file="struts-tiles.xml" /> <include file="struts-xslt.xml" />
5.3.3 struts.xml的默認實現
struts-default.xml這個文件被包含在struts2-core.jar中,從文件名已經可以看出這個文件的作用是struts.xml的默認配置,它將自動被加載然后導入到struts.xml中去。實例5-1是struts-default.xml的部分片段。
【實例5-1】struts-default.xml片段
01 <struts> 02 <bean class="com.opensymphony.xwork2.ObjectFactory" 03 name="xwork" /> 04 <bean type="com.opensymphony.xwork2.ObjectFactory" 05 name="struts" 06 class="org.apache.struts2.impl.StrutsObjectFactory" /> 07 ...... 08 <package name="struts-default" abstract="true"> 09 <result-types> 10 <result-type name="chain" 11 12 class="com.opensymphony.xwork2.ActionChainResult" /> 13 <result-type name="dispatcher" 14 class="org.apache.struts2.dispatcher.ServletDispatcherResult" 15 default="true" /> 16 <result-type name="freemarker" 17 class="org.apache.struts2.views.freemarker.FreemarkerResult" 18 /> 19 <result-type name="httpheader" 20 class="org.apache.struts2.dispatcher.ServletActionRedirectRes 21 ult" /> 22 <result-type name="stream" 23 24 class="org.apache.struts2.dispatcher.StreamResult" /> 25 <result-type name="velocity" 26 class="org.apache.struts2.dispatcher.VelocityResult" /> 27 <result-type name="xslt" 28 29 class="org.apache.struts2.views.xslt.XSLTResult" /> 30 <result-type name="plainText" 31 class="org.apache.struts2.dispatcher.PlainTextResult" /> 32 </result-types> 33 <interceptors> 34 <interceptor name="alias" 35 class="com.opensymphony.xwork2.interceptor.AliasInterceptor" 36 /> 37 <interceptor name="chain" 38 class="com.opensymphony.xwork2.interceptor.ChainingInterceptor" 39 /> 40 </interceptors> 41 </package> 42 </struts>
【代碼剖析】在struts-default.xml中定義了很多默認的Bean和Interceptor棧,可以在程序中直接使用。
5.3.4 Velocity模板規則文件
如果在程序中使用了Velocity(一個基于Java的模板引擎,可以替代JSP作為顯示頁面)可以把文件velocity.properties放到classpath中去,系統將自動加載。同時還要配置struts-default.vm文件,如實例5-2和實例5-3所示。
【實例5-2】屬性文件:velocity.properties
01 # Velocity 資源定義. 02 velocimacro.library = action-default.vm, tigris-macros.vm, myapp.vm
【實例5-3】配置文件:struts-default.vm
01 #macro(bean $bean_name $name) 02 #set ($name = $action.bean($bean_name)) 03 #end 04 #macro(includeservlet $name) 05 $action.include($name, $req, $res) 06 #end 07 #macro(url $name) 08 #set ($name = $action.bean("org.apache.struts.util.URLBean")) 09 $name.setRequest($req) 10 $name.setResponse($res) 11 #end 12 #macro(property $object $property) 13 $!{ognl.findValue($property, $object)} 14 #end
- GAE編程指南
- Building a Game with Unity and Blender
- Ext JS Data-driven Application Design
- JMeter 性能測試實戰(第2版)
- Mastering matplotlib
- Python算法從菜鳥到達人
- Unreal Engine 4 Shaders and Effects Cookbook
- Lighttpd源碼分析
- Yii Project Blueprints
- Mastering Git
- Oracle GoldenGate 12c Implementer's Guide
- C++ System Programming Cookbook
- Python計算機視覺與深度學習實戰
- Mastering Machine Learning with scikit-learn
- Mastering Wireless Penetration Testing for Highly Secured Environments