struts2的配置檔案
struts2的配置檔案:
整個配置我們可以分為兩大塊,一個是在web.xml檔案中的配置,另一塊是Struts2框架中的配置。框架中的配置又有執行環境的配置和Struts2元件配置
web.xml配置
框架執行環境配置(全域性配置選項):struts.properties檔案
元件配置檔案:struts-default. xml, struts-plugin.xml, strtus.xml
1.web.xml配置:
FilterDispatcher是一個過濾器。注意,在Struts2.0.X的時候,使用的是
org.apache.struts2.dispatcher.FilterDispatcher作為核心控制器,而Struts2.1 中改成了org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter。它是整個web應用的配置項,需要在web.xml中進行配置.
web.xml中的配置:
<!-- 配置struts2的核心過濾器 --> <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>/*</url-pattern> </filter-mapping>
如果是一個基本的web應用,這樣就足夠了,剩下的就是配置web應用的一些執行環境配置(全域性配置)和web應用中使用到的元件的配置,如action配置,攔截器的配置。
web應用的執行環境主要是通過struts.properties來完成。應用中的元件配置主要是通過strtus.xml來完成。
2. struts.properties 檔案
這個檔案提供了一種更改框架預設行為方式的機制。在一般情況下,如果不是打算讓除錯更加方便的話,我們沒有必要更改這個檔案。哪麼這些預設的屬性在哪裡存放呢?
在專案的src目錄中可以自己編寫一個名稱為struts.properties檔案,編譯以後就放到了/WEB-INF/classes中,Struts2框架在啟動的時候,會自動讀取這個檔案,但是在讀取這個檔案之前,會先到struts2-core-xxx.jar包中載入名為default.properties檔案,這個檔案中定義了預設的配置,所以我們可以在strtus.properties中定義一些配置覆蓋default.properties中的配置,如果沒有struts.properties檔案,則採用預設配置。
開啟default.properties檔案我們會看到如下部分類容:
開啟該檔案,可以看到一些全域性的配置選項,在這些選項中,我們發現了有一些這樣的配置,其中struts.action.extension 配置的就是Struts預設的請求字尾名。關於更多的配置的含義,後面用到了再講解,現在暫時不必理會這些配置的含義.
### Used by the DefaultActionMapper
### You may provide a comma separated list, e.g. struts.action.extension=action,jnlp,do
### The blank extension allows you to match directory listings as well as pure action names
### without interfering with static resources.
struts.action.extension=action,,
### This can be used to set your default locale and encoding scheme
# struts.locale=en_US
struts.i18n.encoding=UTF-8
因為default.properties檔案是存放在jar包中的,struts2啟動的時候自動會尋找到。我們不能直接修改這個檔案,但是我們可以使用struts.properties檔案來覆蓋default.properties檔案中的內容。
在web專案的src的根目錄中新建一個struts.properties,然後將想要修改的屬性新增到該檔案中,就可以覆蓋掉原來的配置.注意:這個檔案存放在src的根目錄中(編譯之後放到了/WEB-INF/classes根目錄中):
##啟用重新載入國際化檔案的功能
struts.i18n.reload=true
##修改請求字尾為action或者do
struts.action.extension=action,do
##開啟開發者模式,開啟之後,我們修改配置檔案之後不用重新啟動伺服器
struts.devMode =true
3. struts-default.xml
這個檔案用來載入預設啟動的元件。它存放在struts2-core-xxx.jar包的根目錄下,系統啟動的時候會載入這個檔案。這個檔案中配置的元件有型別轉換元件,攔截器元件還有結果型別元件等等,關於這些元件的概念後面將會講到,這裡只需要瞭解。
4. struts-plugin.xml
可以在struts2中使用外掛,Struts2在啟動的時候,會自動搜尋classpath中的jar包中的struts-plugin.xml檔案來載入外掛。關於外掛的應用,將會在後面講到。
5. struts.xml
struts.xml檔案中包含的是我們開發的Action的配置。如前面登入例子中的配置:
<?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>
<!-- 配置常量,覆蓋default.properties中的配置 -->
<constant name="struts.action.extension" value="do" />
<!-- struts2的Action必須放在指定的包空間下 -->
<package name="com.wq" extends="struts-default">
<!-- 定義action -->
<action name="login" class="com.wq.web.action.LoginAction">
<!-- 定義處理結果和資源之間的對映關係 -->
<result name="success">/welcome.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
</structs>
5.1在struts.xml中覆蓋default.properties中的全域性配置
我們修改全域性配置的時候,使用struts.properties檔案來覆蓋default.properties檔案中的內容。實際上我們可以不用建立struts.properties檔案也可以做到覆蓋default.properties檔案中的配置,就是直接在strtuts.xml檔案中使用<constant>配置:見上面的例子中
5.2將struts.xml拆分成多個配置檔案
可以想象,在web應用中還會不斷的有action需要定義,這樣struts.xml的配置會越來越多,檔案會越來越大。
為了避免struts.xml檔案過於龐大,臃腫,提高strtus.xml檔案的可讀性,我們可以將一個struts.xml檔案分解成多個配置檔案,然後在strtus.xml檔案中包含其它配置檔案.這樣struts2就可以使用模組化的方式來管理struts.xml配置檔案了。
我們可以在配置中使用<include> 來包含另外一個配置檔案.下面我們新建一個struts-hello.xml檔案,然後在struts.xml檔案中包含該檔案
在structs2中配置檔案中
Structs標籤中:<include file="struts-hello.xml" /> 來引入structs-hello.xml檔案實現模組化管理。
6. 配置檔案載入順序
配置檔案的載入順序從上到下依次是:我們可以開啟struts的原始碼,設定斷點來跟蹤啟動順序。通過分析原始碼,得到如下結論:
1.default.properties:
該檔案存放在strtus2-core-XXX.jar中的org.apache.struts2包中,預設全域性配置
2.struts-default.xml
該檔案存放在strtus2-core-XXX.jar中的根目錄下,載入預設的元件,這些元件包括一系列的攔截器和轉換器等
3.struts-plugin.xml
如果為應用配置了外掛,則外掛的jar檔案中會存在這個檔案,它會被自動載入
4.struts.xml
自己建立的配置檔案,不能改名,用於存放自定義的元件如Action或者攔截器等。這個檔案中也可以覆蓋default.properties檔案中的預設配置
5.struts.properties
自己建立的配置檔案,不能改名,用於修改全域性配置,一般我們將要修改的全域性配置放到了struts.xml檔案中,所以不需要配置這個檔案.如果在struts.xml和struts.properteis中同時配置,則以strtus.properties中的為準
7. struts.xml—包配置:
在strtuts2中,核心元件就是Action,攔截器等,struts2 框架使用包來管理Action和攔截器等。每個包就是多個Action,多個攔截器等的集合.package中有下面幾個屬性:
name:這是一個必填屬性,該屬性指定該包的名字,該名字是該包被其它包引用的key
extends:可選屬性。指定該包繼承其它包。繼承其它包,可以繼承其它包中的Action定義。
abstract:可選屬性。指定該包是不是一個抽象包。抽象包中不能包含Action定義。
在前面的配置中:繼承了stuts2的預設包struts-default,那麼這個預設包在哪裡定義的呢?我們可以檢視struts2-core-XXX.jar包中有一個struts-default.xml檔案
這個檔案中配置了很多的<bean> 標籤和一個<package>標籤,<package>標籤的name就是struts-default.這個預設的包空間中定義了struts2內建的Result型別,攔截器等。Struts2 框架每次都會自動載入該檔案。我們在strtus.xml檔案中繼承了預設的包空間,所以struts-default.xml檔案一定比strtus.xml檔案先載入.
只有繼承了正確的父Package,才能用到所需的預先配置好的特性。在大多數情況下,我們都應該繼承“struts-default.xml”配置檔案中的“strust-default”Package
8.struts.xml—Action配置:
Action只是一個控制器,它並不直接對請求者生成任何響應。因此,Action處理完使用者請求後,Action需要將指定的檢視資源呈現給使用者。因此,配置Action的時候,應該配置邏輯檢視和物理檢視資源之間的對映。
配置邏輯檢視和物理檢視之間的對映關係是通過<result>來定義的,每個<result> 元素定義邏輯檢視和物理檢視之間的一次對映,如下面的配置:
<struts>
<constant name="struts.action.extension" value="do"></constant>
<package name="com.wq" extends="struts-default">
<action name="login" class="com.wq.web.action.LoginAction">
<result name="success">/welcome.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
</struts>
下面是Action配置中屬性的說明:
name:提供了執行Action所對應的URL地址,上面是“login.do” (我們已經將請求路徑的字尾改成了*.do) ,預設是 login.action。
class: Action類的完整的類名
下面我們再看看<result>標記:
我們可以看到在result節點中多了“name”屬性,實際上這個屬性是一直都存在的,如果開發人員沒有顯式指定它的值,那麼它的預設值就是“success”,所以上面的配置可以改成:
<action name="login" class="com.wq.web.action.LoginAction">
<result >/welcome.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
</struts>
使用萬用字元匹配Action:
先看一個domo:
<?xml version="1.0"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
<constant name="s" value=""></constant>
<!-- 設定開發模式 -->
<constant name="struts.devMode" value="true" />
<constant name="struts.action.extension" value="action,do" />
<!-- 此三行為了解決不換行問題而加上的 -->
<constant name="struts.ui.theme" value="simple" />
<constant name="struts.ui.templateDir" value="template" />
<constant name="struts.ui.templateSuffix" value="ftl" />
<package name="cn.ouuo.action" extends="struts-default" >
<action name="SearchUser_*" class="searchAction" method="{1}">
<result name="listResult">/listResult.jsp</result>
<result name="listData">/more.jsp</result>
<result name="wordPre">/officePre.jsp</result>
<result name="manager">/manager.jsp</result>
<result name="success">/success.jsp</result>
</action>
</package>
</struts>
在這裡我主要是想說一下自己以前比較迷惑的地方,主要就是在action配置的幾個引數,其實name屬性就是要訪問的Url地址,method中的1就是與 name裡的* 進行匹配的,方法就是你在action中定義的各個方法,result裡的name屬性就是你action裡返回的字串,根據這個屬性來確定跳轉頁面
比如要訪問:http:localhost:8080/ouuo/SearchUser_Manager.action
更多訪問:https://blog.csdn.net/perfect2011/article/details/7463624,
介紹struts2比較不錯的地址:
https://blog.csdn.net/eagleuniversityeye/article/details/78792000,
https://blog.csdn.net/gopain/article/details/40790523,
https://blog.csdn.net/shuaicihai/article/details/54233230