struts2配置文件詳解2
通常struts2加載struts2常量的順序如下:
1. struts-default.xml:該文件保存在struts2-core-2.0.6.jar文件中。
2. struts-plugin.xml:該文件保存在struts2-Xxx-2.0.6.jar等Struts2插件JAR文件中。
3. struts.xml:該文件是Web應用默認的Struts2配置文件。
4. struts.properties:該文件是Web應用默認的Struts2配置文件。
5. web.xml:該文件是Web應用的配置文件。
如果在多個文件中配置了同一個Struts2常量,則後一個文件中的配置的常量值會覆蓋前面文件中配置的常量值。
在不同文件中配置常量的方式是不一樣的,但不管哪個文件中,配置Struts2常量都要指定兩個屬性:常量name和常量value。
推薦在struts.xml文件中配置Struts2常量。
此處只加載了前三個配置文件,這是在常量struts.configuration.files中配置的。該屬性指定Struts 2框架默認加載的配置文件,如果需要指定默認加載多個配置文件,則多個配置文件的文件名之間以英文逗號(,)隔開。該屬性的默認值爲struts- default.xml,struts-plugin.xml,struts.xml,這就是上圖中加載的三個配置文件。
Struts2常量的具體用法實例
Xml代碼
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- 指定Web應用的默認編碼集,相當於調用HttpServletRequest的setCharacterEncoding方法 -->
<constant name="struts.i18n.encoding" value="UTF-8" />
<!--
該屬性指定需要Struts 2處理的請求後綴,該屬性的默認值是action,即所有匹配*.action的請求都由Struts2處理。
如果用戶需要指定多個請求後綴,則多個後綴之間以英文逗號(,)隔開。
-->
<constant name="struts.action.extension" value="do" />
<!-- 設置瀏覽器是否緩存靜態內容,默認值爲true(生產環境下使用),開發階段最好關閉 -->
<constant name="struts.serve.static.browserCache" value="false" />
<!-- 當struts的配置文件修改後,系統是否自動重新加載該文件,默認值爲false(生產環境下使用),開發階段最好打開 -->
<constant name="struts.configuration.xml.reload" value="true" />
<!-- 開發模式下使用,這樣可以打印出更詳細的錯誤信息 -->
<constant name="struts.devMode" value="true" />
<!-- 默認的視圖主題 -->
<constant name="struts.ui.theme" value="simple" />
<!-- spring 託管 -->
<constant name="struts.objectFactory" value="spring" />
<!--
指定加載struts2配置文件管理器,默認爲org.apache.struts2.config.DefaultConfiguration
開發者可以自定義配置文件管理器,該類要實現Configuration接口,可以自動加載struts2配置文件。
-->
<constant name="struts.configuration"
value="org.apache.struts2.config.DefaultConfiguration" />
<!-- 設置默認的locale和字符編碼 -->
<constant name="struts.locale" value="zh_CN" />
<constant name="struts.i18n.encoding" value="GBK" />
<!-- 指定Struts的工廠類 -->
<constant name="struts.objectFactory" value="spring"></constant>
<!--
指定spring框架的裝配模式,裝配方式有: name, type, auto, and constructor (name
是默認裝配模式)
-->
<constant name="struts.objectFactory.spring.autoWire" value="name" />
<!-- 該屬性指定整合spring時,是否對bean進行緩存,值爲true or false,默認爲true -->
<cosntant name="struts.objectFactory.spring.useClassCache" />
<!-- 指定類型檢查,包含tiger和notiger -->
<cosntant name="struts.objectTypeDeterminer" value="tiger" />
<!-- 該屬性指定處理 MIME-type multipart/form-data,文件上傳 -->
<constant name="struts.multipart.parser" value="cos" />
<constant name="struts.multipart.parser" value="pell" />
<constant name="struts.multipart.parser" value="jakarta" />
<!-- 指定上傳文件時的臨時目錄,默認使用 javax.servlet.context.tempdir -->
<constant name="struts.multipart.saveDir" value="/tmpuploadfiles" />
<!-- 該屬性指定Struts 2文件上傳中整個請求內容允許的最大字節數 -->
<constant name="struts.multipart.maxSize" value="2097152" />
<!--
該屬性指定Struts2應用加載用戶自定義的屬性文件,該自定義屬性文件指定的屬性不會覆蓋
struts.properties文件中指定的屬性。如果需要加載多個自定義屬性文件,多個自定義屬性文
件的文件名以英文逗號(,)隔開。(也就是說不要改寫struts.properties!)
-->
<constant name="struts.custom.properties"
value="application,org/apache/struts2/extension/custom" />
<!-- 指定請求url與action映射器,默認爲org.apache.struts2.dispatcher.mapper.DefaultActionMapper -->
<constant name="struts.mapper.class" value="org.apache.struts2.dispatcher.mapper.DefaultActionMapper" />
<!-- 指定action的後綴,默認爲action -->
<constant name="struts.action.extension" value="do" />
<!-- 被 FilterDispatcher使用指定瀏覽器是否緩存靜態內容,測試階段設置爲false,發佈階段設置爲true. -->
<constant name="struts.serve.static.browserCache" value="true" />
<!-- 設置是否支持動態方法調用,true爲支持,false不支持. -->
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<!-- 設置是否可以在action中使用斜線,默認爲false不可以,想使用需設置爲true. -->
<constant name="struts.enable.SlashesInActionNames" value="true" />
<!-- 是否允許使用表達式語法,默認爲true. -->
<constant name="struts.tag.altSyntax" value="true" />
<!-- 設置當struts.xml文件改動時,是否重新加載 -->
<cosntant name="struts.configuration.xml.reload" value="true" />
<!-- 設置struts是否爲開發模式,默認爲false,測試階段一般設爲true. -->
<cosntant name="struts.devMode" value="true" />
<!-- 設置是否每次請求,都重新加載資源文件,默認值爲false. -->
<cosntant name="struts.i18n.reload" value="false" />
<!-- 標準的UI主題,默認的UI主題爲xhtml,可以爲simple,xhtml或ajax -->
<cosntant name="struts.ui.theme" value="xhtml" />
<!-- 模板目錄 -->
<cosntant name="struts.ui.templateDir" value="template" />
<!-- 設置模板類型. 可以爲 ftl, vm, or jsp -->
<cosntant name="struts.ui.templateSuffix" value="ftl" />
<!-- 定位velocity.properties 文件. 默認velocity.properties -->
<cosntant name="struts.velocity.configfile" value="velocity.properties" />
<!-- 設置velocity的context. -->
<cosntant name="struts.velocity.contexts" value="...." />
<!-- 定位toolbox -->
<cosntant name="struts.velocity.toolboxlocation" value="...." />
<!-- 指定web應用的端口 -->
<cosntant name="struts.url.http.port" value="80" />
<!-- 指定加密端口 -->
<cosntant name="struts.url.https.port" value="443" />
<!-- 設置生成url時,是否包含參數.值可以爲: none,get or all -->
<cosntant name="struts.url.includeParams" value="get" />
<!-- 設置要加載的國際化資源文件,以逗號分隔. -->
<cosntant name="struts.custom.i18n.resources" value="application" />
<!-- 對於一些web應用服務器不能處理HttpServletRequest.getParameterMap(),
像 WebLogic,Orion, and OC4J等,須設置成true,默認爲false. -->
<cosntant name="struts.dispatcher.parametersWorkaround" value="false" />
<!-- 指定freemarker管理器 -->
<cosntant name="struts.freemarker.manager.classname" value="org.apache.struts2.views.freemarker.FreemarkerManager" />
<!-- 設置是否對freemarker的模板設置緩存,效果相當於把template拷貝到 WEB_APP/templates. -->
<cosntant name="struts.freemarker.templatesCache" value="false" />
<!-- 通常不需要修改此屬性. -->
<cosntant name="struts.freemarker.wrapper.altMap" value="true" />
<!-- 指定xslt result是否使用樣式表緩存.開發階段設爲true,發佈階段設爲false. -->
<cosntant name="struts.xslt.nocache" value="false" />
<!-- 設置struts自動加載的文件列表. -->
<cosntant name="struts.configuration.files" value="struts-default.xml,struts-plugin.xml,struts.xml" />
<!-- 設定是否一直在最後一個slash之前的任何位置選定namespace. -->
<cosntant name="struts.mapper.alwaysSelectFullNamespace" value="false" />
</struts>
<struts>
<!-- include節點是struts2中組件化的方式 可以將每個功能模塊獨立到一個xml配置文件中 然後用include節點引用 -->
<include file="struts-default.xml"></include>
<!-- 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
-->
<package name="com.kay.struts2" extends="struts-default" namespace="/test">
<interceptors>
<!-- 定義攔截器
name:攔截器名稱
class:攔截器類路徑
-->
<interceptor name="timer" class="com.kay.timer"></interceptor>
<interceptor name="logger" class="com.kay.logger"></interceptor>
<!-- 定義攔截器棧 -->
<interceptor-stack name="mystack">
<interceptor-ref name="timer"></interceptor-ref>
<interceptor-ref name="logger"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 定義默認的攔截器 每個Action都會自動引用
如果Action中引用了其它的攔截器 默認的攔截器將無效 -->
<default-interceptor-ref name="mystack"></default-interceptor-ref>
<!-- 全局results配置 -->
<global-results>
<result name="input">/error.jsp</result>
</global-results>
<!-- Action配置 一個Action可以被多次映射(只要action配置中的name不同)
name:action名稱
class: 對應的類的路徑
method: 調用Action中的方法名
-->
<action name="hello" class="com.kay.struts2.Action.LoginAction">
<!-- 引用攔截器
name:攔截器名稱或攔截器棧名稱
-->
<interceptor-ref name="timer"></interceptor-ref>
<!-- 節點配置
name : result名稱 和Action中返回的值相同
type : result類型 不寫則選用superpackage的type struts-default.xml中的默認爲dispatcher
-->
<result name="success" type="dispatcher">/talk.jsp</result>
<!-- 參數設置
name:對應Action中的get/set方法
-->
<param name="url">http://www.sina.com</param>
</action>
</package>
</struts>
二、Struts2配置元素說明<轉載>
Struts2核心的配置文件是缺省的struts.xml。
必要的時候,缺省的配置文件可以包含其它的配置文件;struts文件可以放入jar中,並自動插入應用程序,這樣每個模塊可以包含自己的配置文件並自動配置。在Freemarker和Velocity模塊中,模板也能從classpath中加載,所以整個模塊可以作爲一個簡單的jar文件被包含。
Struts.xml配置文件可以包含Interceptor、Action類和Results。
Struts.xml配置元素說明:
1、Packages
Packages:packages把actions、results、results types、interceptors
和interceptor-stacks組裝到一個邏輯單元中,從概念上講,packages就像一個對象,可以被其它子包從寫,而且可以擁有自己獨立的部分。
Name屬性是packages的必填元素,它作爲一個關鍵字被後邊的包引用;extends元素是可選的,它允許包擴展一個和多個前邊定義的包。注意,
struts.xml文件是至上而下處理的,所有被擴展的包,需要在擴展包前定義。
Abstract元素是可選的,它可以申明一個不包含actions的配置文件。
2、Namespace
Namespace元素把actions細分到邏輯模塊,每一個namespace都有自己的
前綴(prefix),namespace避免了action之間的名字衝突,當前綴出現在URI中時,這些標籤都是名字空間感知的(“namespace aware”),所以這些namespace prefix不必嵌入到表單或連接中。
Default的namespace是一個空字符串“”,如果在指定的配置文件中,沒有找到action,缺省的namespace也會被查找。Local/global策略允許應用程序在action “extends”元素層次結構之外,有全局的action配置。缺省的namespace也可以不在package中申明。
Namespace prefix可以註冊爲java的申明式安全,以確保授權的用戶才能訪問namespace的資源。
Root namespace(“/”)也被支持,root就是當直接請求context path的時候的namespace。
[個人理解:namespace的用法就像struts1.x中的path一樣,只不過它在package中什麼路徑,而在action中申明action名子罷了]
3、Include
Include元素使得框架能應用“divide and conquer”來配置文件。被include
的每個配置文件必須和struts.xml有一樣的格式,一個大的項目可以採用這樣方式來組織程序模塊。
Include元素也可以和package交替出現,框架將按照順序加載配置文件。
4、Interceptor configuration
Interceptor允許應用程序在Action方法執行前後定義執行代碼,
Interceptor在應用程序開發中十分重要,對於Interceptor有許多用例,如validation, property population, security, logging, 和profiling。
Interceptor被定義爲一個Java類,Interceptor也可以組裝成Interceptor-stack,他們將按照定義的順序執行。
在struts-default.xml中定義了一些缺省的Interceptor-stack,以便框架能很好地運行。
5、Action
Action是框架的“工作單元”。Action可以指定一個Interceptor-stack、
一序列的return type和一序列的異常處理,但只有name屬性是必須的。
一:配置struts2。
首先在web.xml文件中配置filter
Xml代碼
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
然後在classpath中創建struts.xml配置文件。
Xml代碼
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="struts.devMode" value=http://blog.soso.com/qz.q/"true" />
<constant name="struts.convention.default.parent.package" value=http://blog.soso.com/qz.q/"default-package" />
<constant name="struts.convention.package.locators" value=http://blog.soso.com/qz.q/"action" />
<package name="default-package" extends="convention-default">
<default-action-ref name="index" />
<action name="index" >
<result>/WEB-INF/content/index.jsp</result>
</action>
</package>
</struts>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="struts.devMode" value=http://blog.soso.com/qz.q/"true" />
<constant name="struts.convention.default.parent.package" value=http://blog.soso.com/qz.q/"default-package" />
<constant name="struts.convention.package.locators" value=http://blog.soso.com/qz.q/"action" />
<package name="default-package" extends="convention-default">
<default-action-ref name="index" />
<action name="index" >
<result>/WEB-INF/content/index.jsp</result>
</action>
</package>
</struts>
struts.devMode屬性,配置啓用調試,將有更多的錯誤信息輸出,便於排錯。struts.convention.default.parent.package屬性,指定使用註解標
注的控制器的默認包。可以在這個默認包中配置全局信息。
struts.convention.package.locators屬性,爲查找控制器包路徑的關鍵字。如com.mycompany.action,com.mycompany.action.user,都會被
struts2掃描。裏面有繼承至Action的類,或類名以Action結尾的類,都會做爲Action處理。
<default-action-ref name="index" />指定了默認action,如果指定的action不存在則訪問該action。
把struts2-spring-plugin-2.1.6.jar添加到classpath中,struts2會自動掃描struts-plugin.xml文件,該文件自動註冊了
com.opensymphony.xwork2.ObjectFactory,完成和spring的集成。
1. struts-default.xml:該文件保存在struts2-core-2.0.6.jar文件中。
2. struts-plugin.xml:該文件保存在struts2-Xxx-2.0.6.jar等Struts2插件JAR文件中。
3. struts.xml:該文件是Web應用默認的Struts2配置文件。
4. struts.properties:該文件是Web應用默認的Struts2配置文件。
5. web.xml:該文件是Web應用的配置文件。
如果在多個文件中配置了同一個Struts2常量,則後一個文件中的配置的常量值會覆蓋前面文件中配置的常量值。
在不同文件中配置常量的方式是不一樣的,但不管哪個文件中,配置Struts2常量都要指定兩個屬性:常量name和常量value。
推薦在struts.xml文件中配置Struts2常量。
此處只加載了前三個配置文件,這是在常量struts.configuration.files中配置的。該屬性指定Struts 2框架默認加載的配置文件,如果需要指定默認加載多個配置文件,則多個配置文件的文件名之間以英文逗號(,)隔開。該屬性的默認值爲struts- default.xml,struts-plugin.xml,struts.xml,這就是上圖中加載的三個配置文件。
Struts2常量的具體用法實例
Xml代碼
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- 指定Web應用的默認編碼集,相當於調用HttpServletRequest的setCharacterEncoding方法 -->
<constant name="struts.i18n.encoding" value="UTF-8" />
<!--
該屬性指定需要Struts 2處理的請求後綴,該屬性的默認值是action,即所有匹配*.action的請求都由Struts2處理。
如果用戶需要指定多個請求後綴,則多個後綴之間以英文逗號(,)隔開。
-->
<constant name="struts.action.extension" value="do" />
<!-- 設置瀏覽器是否緩存靜態內容,默認值爲true(生產環境下使用),開發階段最好關閉 -->
<constant name="struts.serve.static.browserCache" value="false" />
<!-- 當struts的配置文件修改後,系統是否自動重新加載該文件,默認值爲false(生產環境下使用),開發階段最好打開 -->
<constant name="struts.configuration.xml.reload" value="true" />
<!-- 開發模式下使用,這樣可以打印出更詳細的錯誤信息 -->
<constant name="struts.devMode" value="true" />
<!-- 默認的視圖主題 -->
<constant name="struts.ui.theme" value="simple" />
<!-- spring 託管 -->
<constant name="struts.objectFactory" value="spring" />
<!--
指定加載struts2配置文件管理器,默認爲org.apache.struts2.config.DefaultConfiguration
開發者可以自定義配置文件管理器,該類要實現Configuration接口,可以自動加載struts2配置文件。
-->
<constant name="struts.configuration"
value="org.apache.struts2.config.DefaultConfiguration" />
<!-- 設置默認的locale和字符編碼 -->
<constant name="struts.locale" value="zh_CN" />
<constant name="struts.i18n.encoding" value="GBK" />
<!-- 指定Struts的工廠類 -->
<constant name="struts.objectFactory" value="spring"></constant>
<!--
指定spring框架的裝配模式,裝配方式有: name, type, auto, and constructor (name
是默認裝配模式)
-->
<constant name="struts.objectFactory.spring.autoWire" value="name" />
<!-- 該屬性指定整合spring時,是否對bean進行緩存,值爲true or false,默認爲true -->
<cosntant name="struts.objectFactory.spring.useClassCache" />
<!-- 指定類型檢查,包含tiger和notiger -->
<cosntant name="struts.objectTypeDeterminer" value="tiger" />
<!-- 該屬性指定處理 MIME-type multipart/form-data,文件上傳 -->
<constant name="struts.multipart.parser" value="cos" />
<constant name="struts.multipart.parser" value="pell" />
<constant name="struts.multipart.parser" value="jakarta" />
<!-- 指定上傳文件時的臨時目錄,默認使用 javax.servlet.context.tempdir -->
<constant name="struts.multipart.saveDir" value="/tmpuploadfiles" />
<!-- 該屬性指定Struts 2文件上傳中整個請求內容允許的最大字節數 -->
<constant name="struts.multipart.maxSize" value="2097152" />
<!--
該屬性指定Struts2應用加載用戶自定義的屬性文件,該自定義屬性文件指定的屬性不會覆蓋
struts.properties文件中指定的屬性。如果需要加載多個自定義屬性文件,多個自定義屬性文
件的文件名以英文逗號(,)隔開。(也就是說不要改寫struts.properties!)
-->
<constant name="struts.custom.properties"
value="application,org/apache/struts2/extension/custom" />
<!-- 指定請求url與action映射器,默認爲org.apache.struts2.dispatcher.mapper.DefaultActionMapper -->
<constant name="struts.mapper.class" value="org.apache.struts2.dispatcher.mapper.DefaultActionMapper" />
<!-- 指定action的後綴,默認爲action -->
<constant name="struts.action.extension" value="do" />
<!-- 被 FilterDispatcher使用指定瀏覽器是否緩存靜態內容,測試階段設置爲false,發佈階段設置爲true. -->
<constant name="struts.serve.static.browserCache" value="true" />
<!-- 設置是否支持動態方法調用,true爲支持,false不支持. -->
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<!-- 設置是否可以在action中使用斜線,默認爲false不可以,想使用需設置爲true. -->
<constant name="struts.enable.SlashesInActionNames" value="true" />
<!-- 是否允許使用表達式語法,默認爲true. -->
<constant name="struts.tag.altSyntax" value="true" />
<!-- 設置當struts.xml文件改動時,是否重新加載 -->
<cosntant name="struts.configuration.xml.reload" value="true" />
<!-- 設置struts是否爲開發模式,默認爲false,測試階段一般設爲true. -->
<cosntant name="struts.devMode" value="true" />
<!-- 設置是否每次請求,都重新加載資源文件,默認值爲false. -->
<cosntant name="struts.i18n.reload" value="false" />
<!-- 標準的UI主題,默認的UI主題爲xhtml,可以爲simple,xhtml或ajax -->
<cosntant name="struts.ui.theme" value="xhtml" />
<!-- 模板目錄 -->
<cosntant name="struts.ui.templateDir" value="template" />
<!-- 設置模板類型. 可以爲 ftl, vm, or jsp -->
<cosntant name="struts.ui.templateSuffix" value="ftl" />
<!-- 定位velocity.properties 文件. 默認velocity.properties -->
<cosntant name="struts.velocity.configfile" value="velocity.properties" />
<!-- 設置velocity的context. -->
<cosntant name="struts.velocity.contexts" value="...." />
<!-- 定位toolbox -->
<cosntant name="struts.velocity.toolboxlocation" value="...." />
<!-- 指定web應用的端口 -->
<cosntant name="struts.url.http.port" value="80" />
<!-- 指定加密端口 -->
<cosntant name="struts.url.https.port" value="443" />
<!-- 設置生成url時,是否包含參數.值可以爲: none,get or all -->
<cosntant name="struts.url.includeParams" value="get" />
<!-- 設置要加載的國際化資源文件,以逗號分隔. -->
<cosntant name="struts.custom.i18n.resources" value="application" />
<!-- 對於一些web應用服務器不能處理HttpServletRequest.getParameterMap(),
像 WebLogic,Orion, and OC4J等,須設置成true,默認爲false. -->
<cosntant name="struts.dispatcher.parametersWorkaround" value="false" />
<!-- 指定freemarker管理器 -->
<cosntant name="struts.freemarker.manager.classname" value="org.apache.struts2.views.freemarker.FreemarkerManager" />
<!-- 設置是否對freemarker的模板設置緩存,效果相當於把template拷貝到 WEB_APP/templates. -->
<cosntant name="struts.freemarker.templatesCache" value="false" />
<!-- 通常不需要修改此屬性. -->
<cosntant name="struts.freemarker.wrapper.altMap" value="true" />
<!-- 指定xslt result是否使用樣式表緩存.開發階段設爲true,發佈階段設爲false. -->
<cosntant name="struts.xslt.nocache" value="false" />
<!-- 設置struts自動加載的文件列表. -->
<cosntant name="struts.configuration.files" value="struts-default.xml,struts-plugin.xml,struts.xml" />
<!-- 設定是否一直在最後一個slash之前的任何位置選定namespace. -->
<cosntant name="struts.mapper.alwaysSelectFullNamespace" value="false" />
</struts>
<struts>
<!-- include節點是struts2中組件化的方式 可以將每個功能模塊獨立到一個xml配置文件中 然後用include節點引用 -->
<include file="struts-default.xml"></include>
<!-- 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
-->
<package name="com.kay.struts2" extends="struts-default" namespace="/test">
<interceptors>
<!-- 定義攔截器
name:攔截器名稱
class:攔截器類路徑
-->
<interceptor name="timer" class="com.kay.timer"></interceptor>
<interceptor name="logger" class="com.kay.logger"></interceptor>
<!-- 定義攔截器棧 -->
<interceptor-stack name="mystack">
<interceptor-ref name="timer"></interceptor-ref>
<interceptor-ref name="logger"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 定義默認的攔截器 每個Action都會自動引用
如果Action中引用了其它的攔截器 默認的攔截器將無效 -->
<default-interceptor-ref name="mystack"></default-interceptor-ref>
<!-- 全局results配置 -->
<global-results>
<result name="input">/error.jsp</result>
</global-results>
<!-- Action配置 一個Action可以被多次映射(只要action配置中的name不同)
name:action名稱
class: 對應的類的路徑
method: 調用Action中的方法名
-->
<action name="hello" class="com.kay.struts2.Action.LoginAction">
<!-- 引用攔截器
name:攔截器名稱或攔截器棧名稱
-->
<interceptor-ref name="timer"></interceptor-ref>
<!-- 節點配置
name : result名稱 和Action中返回的值相同
type : result類型 不寫則選用superpackage的type struts-default.xml中的默認爲dispatcher
-->
<result name="success" type="dispatcher">/talk.jsp</result>
<!-- 參數設置
name:對應Action中的get/set方法
-->
<param name="url">http://www.sina.com</param>
</action>
</package>
</struts>
二、Struts2配置元素說明<轉載>
Struts2核心的配置文件是缺省的struts.xml。
必要的時候,缺省的配置文件可以包含其它的配置文件;struts文件可以放入jar中,並自動插入應用程序,這樣每個模塊可以包含自己的配置文件並自動配置。在Freemarker和Velocity模塊中,模板也能從classpath中加載,所以整個模塊可以作爲一個簡單的jar文件被包含。
Struts.xml配置文件可以包含Interceptor、Action類和Results。
Struts.xml配置元素說明:
1、Packages
Packages:packages把actions、results、results types、interceptors
和interceptor-stacks組裝到一個邏輯單元中,從概念上講,packages就像一個對象,可以被其它子包從寫,而且可以擁有自己獨立的部分。
Name屬性是packages的必填元素,它作爲一個關鍵字被後邊的包引用;extends元素是可選的,它允許包擴展一個和多個前邊定義的包。注意,
struts.xml文件是至上而下處理的,所有被擴展的包,需要在擴展包前定義。
Abstract元素是可選的,它可以申明一個不包含actions的配置文件。
2、Namespace
Namespace元素把actions細分到邏輯模塊,每一個namespace都有自己的
前綴(prefix),namespace避免了action之間的名字衝突,當前綴出現在URI中時,這些標籤都是名字空間感知的(“namespace aware”),所以這些namespace prefix不必嵌入到表單或連接中。
Default的namespace是一個空字符串“”,如果在指定的配置文件中,沒有找到action,缺省的namespace也會被查找。Local/global策略允許應用程序在action “extends”元素層次結構之外,有全局的action配置。缺省的namespace也可以不在package中申明。
Namespace prefix可以註冊爲java的申明式安全,以確保授權的用戶才能訪問namespace的資源。
Root namespace(“/”)也被支持,root就是當直接請求context path的時候的namespace。
[個人理解:namespace的用法就像struts1.x中的path一樣,只不過它在package中什麼路徑,而在action中申明action名子罷了]
3、Include
Include元素使得框架能應用“divide and conquer”來配置文件。被include
的每個配置文件必須和struts.xml有一樣的格式,一個大的項目可以採用這樣方式來組織程序模塊。
Include元素也可以和package交替出現,框架將按照順序加載配置文件。
4、Interceptor configuration
Interceptor允許應用程序在Action方法執行前後定義執行代碼,
Interceptor在應用程序開發中十分重要,對於Interceptor有許多用例,如validation, property population, security, logging, 和profiling。
Interceptor被定義爲一個Java類,Interceptor也可以組裝成Interceptor-stack,他們將按照定義的順序執行。
在struts-default.xml中定義了一些缺省的Interceptor-stack,以便框架能很好地運行。
5、Action
Action是框架的“工作單元”。Action可以指定一個Interceptor-stack、
一序列的return type和一序列的異常處理,但只有name屬性是必須的。
一:配置struts2。
首先在web.xml文件中配置filter
Xml代碼
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
然後在classpath中創建struts.xml配置文件。
Xml代碼
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="struts.devMode" value=http://blog.soso.com/qz.q/"true" />
<constant name="struts.convention.default.parent.package" value=http://blog.soso.com/qz.q/"default-package" />
<constant name="struts.convention.package.locators" value=http://blog.soso.com/qz.q/"action" />
<package name="default-package" extends="convention-default">
<default-action-ref name="index" />
<action name="index" >
<result>/WEB-INF/content/index.jsp</result>
</action>
</package>
</struts>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="struts.devMode" value=http://blog.soso.com/qz.q/"true" />
<constant name="struts.convention.default.parent.package" value=http://blog.soso.com/qz.q/"default-package" />
<constant name="struts.convention.package.locators" value=http://blog.soso.com/qz.q/"action" />
<package name="default-package" extends="convention-default">
<default-action-ref name="index" />
<action name="index" >
<result>/WEB-INF/content/index.jsp</result>
</action>
</package>
</struts>
struts.devMode屬性,配置啓用調試,將有更多的錯誤信息輸出,便於排錯。struts.convention.default.parent.package屬性,指定使用註解標
注的控制器的默認包。可以在這個默認包中配置全局信息。
struts.convention.package.locators屬性,爲查找控制器包路徑的關鍵字。如com.mycompany.action,com.mycompany.action.user,都會被
struts2掃描。裏面有繼承至Action的類,或類名以Action結尾的類,都會做爲Action處理。
<default-action-ref name="index" />指定了默認action,如果指定的action不存在則訪問該action。
把struts2-spring-plugin-2.1.6.jar添加到classpath中,struts2會自動掃描struts-plugin.xml文件,該文件自動註冊了
com.opensymphony.xwork2.ObjectFactory,完成和spring的集成。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.