1. 程式人生 > >struts2的配置檔案

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