Web.xml
文件對于配置任何
Java Web
應用都是必須的
.
當配置
Struts
應用時
,
還應該在
web.xml
文件中配置和
Struts
相關的配置選項
.
一下講述配置
Struts
應用的必要步驟
.
?
1
·配置
Struts
的
ActionServlet
第一步用
<servlet>
元素來聲明
ActionServlet
。
在
<servlet>
的子元素中,經常用到的有:
??
·
<servlet-name>
元素用來定義
Servlet
的名稱。
??
·
<servlet-class>
元素用來置頂
Servlet
的完整類名。
??
·
<init-param>
元素用于配置
Servlet
初始化參數。
第二步為配置
<servlet-mapping>
元素,用來指定
ActionServlet
可以處理哪些
URL
。
有子元素
<servlet-name>
和
<url-pattern>
,注意,這里的
<servlet-name>
必須和
<servlet>
元素中的
<servlet-name>
匹配。
?
**
提示
**
?
不管應用中包含多少子應用,都只需要配置一個
ActionServlet
。有些開發者希望設置多個
ActionServlet
類來處理應用中不同的功能,其實這是不必要的,因為
Serlvet
本身支持多線程。而且,目前的
Struts
框架只允許在應用中配置一個
ActionSerlvet
。
?
2
·配置歡迎文件清單
<welcome-file-list>
元素中可以包含多個
<welcome-file>
子元素,當
Web
容器調用
Web
應用的歡迎文件時,首先尋找第一個
<welcome-file>
指定的文件。如果這個文件存在,將把這一個文件返回給客戶;如果這個文件不存在,
Web
容器將依次尋找下一個歡迎文件,直到找到為止;如果都不存在,服務器將向客戶返回“
HTTP 404 Not Found
”的出錯信息。
?
3
·配置錯誤處理
<error-page>
? <error-code></error-code>
? <location></location>
</error-page>
如果在
web.xml
文件中做了以上配置,當
Web
容器捕獲到錯誤時(如:
HTTP 404
、
HTTP 500
),將根據錯誤代碼減縮
<error-page>
的子元素
<error-code>
,如果有匹配項就返回
<location>
子元素指定的文件。
?
也可以為
Web
容器捕獲的
Java
異常配置
<error-page>
元素,這是需要設置
<exception-type>
子元素,它用于指定
Java
異常類。
Web
容器可能捕獲如下異常:
?
·
RuntimeException
或
Error
。
?
·
ServletException
或它的子類。
?
·
IOException
或它的子類。
這里的配置信息如下:
<error-page>
? <exception-type></exception-type>
? <location></location>
</error-page>
?
4
·配置
Struts
標簽庫
<taglib>
元素有兩個子元素:
<taglib-uri>
和
<taglib-location>
。
<taglib-uri>
元素指定標簽庫的相對或者絕對
URI
地址,
Web
應用將根據這一
URI
來訪問標簽庫;
<taglib-location>
元素指定標簽庫描述文件在文件資源系統中的物理位置。
如果
Web
應用中沒有使用
Struts
標簽庫,就沒有必要在
web.xml
文件中配置它。此外,也可以按以上方式在
web.xml
文件中配置用戶自定義的客戶化標簽庫
?
?
Struts配置文件簡介
Struts?framework根據配置文件使得ServletAction,ActionMapping,Action , ActionForm這幾個不同層次的組件相互交互,協調的工作。這些配置文件是在系統啟動的時候,讀入導內存中,供控制器使用的。
Struts?framework主要包括三部分的配置描述,一個是指定有關Struts?Controller及其相關的的配置描述(Initialization?Parameters),一個對struts?tag?lib的描述,一個是struts組件(ActionMapping,Action,ActionForm)之間相互映射協調的關系
有關Struts?Controller及其相關的的配置描述
????因為Struts?Controller的主要類ActionServlet是繼承自HttpServlet,所以必須像配置一個Servlet那樣在部署描述符(Web.xml)中配置ActionServlet類及其訪問映射。
????當您第一次創建基于Struts的Web應用程序時,將為您創建一個部署描述符,這通常就足夠了。該文件包括下列條目:
?????<servlet>條目定義用于Web應用程序的servlet(在本例中,這是唯一的servlet):
—??<servlet-name>?和<servlet-class>指示ActionServlet?(標識為“操作”)接收HTTP請求并確定如何響應。
—??<init-param>表示servlet初始化參數.
-????“config”指示ActionServlet的行為由指定的配置文件來指導,該配置文件通常具有以下名稱:
\WEB-INF\struts-config.xml
-????“debug”具有整數值,它指示將有關處理的詳細信息寫至控制臺的程度。
-????”detail”具有整數值,它指示將“映射”詳細信息(如后面所述)寫至控制臺的程度。
—??<load-on-startup>導致在啟動應用程序時裝入servlet。
?????<servlet-mapping>元素標識這樣的命名模式:當命名模式由URL進行匹配時,Web服務器就將控制權移交給ActionServlet。考慮下面各種情況:
—??訪問了ActionServlet,原因是“操作”(<servlet-mapping>中的<servlet-name>元素的內容)與“操作”(<servlet>中的<servlet-name>元素的內容)相匹配。
????—??<servlet-mapping>元素指定URL的結尾的命名模式。每個URL的開頭都是應用程序上下文路徑。按照慣例,ActionServlet調用對象以響應與命名模式“*do”(其中“*”是通配符)一致的URL。
?????<welcome-file-list>元素指示獲得初始控制權的特定于應用程序的代碼;在本例中,Web服務器直接從Web?Content目錄中調用index.jsp。
?????<error-page>元素指示顯示哪個JSP來響應錯誤;在本例中,錯誤為如下所示:
—??404??(找不到資源)
—??500??(Web服務器內部發生錯誤)
?????每個<taglib>元素都使相對URL(相對于Web.xml)與標記庫描述符(相對于Web應用程序根目錄)相關聯。每個JSP都可以使用同一個URL來表示給定的標記庫,而Web.xml確定引用了哪個文件。
有關struts?tag?lib的配置描述
????如果你的web?application打算使用Struts的taglib,那么你有必要在web.xml中對struts?taglib進行配置描述。
有關Struts?Action?Mapping的配置描述
???? 作為先前描述的web.xml設置的結果,Web應用程序服務器將請求的一個子集按路徑發送至ActionServlet,它通常調用一系列操作和JSP。ActionServlet的響應是基于配置文件struts-config.xml的內容的。有關其DTD文檔的描述,請參考http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd
????一般struts-config(version1.1)包含了如下幾個部分:
(1)form-bean
????(2)global-forwards
????(3)action-mappings
????(4)data-sources
????我們知道,對于這樣的一個請求(例如,表示為“/login.do”),執行下列步驟:
1、????尋找操作類對象(繼承org.?apache.struts.action.Action的類)
2、????ActionServlet調用操作類對象的執行方法
操作類中的執行方法的特征符為如下所示:
public?ActionForward??execute(
??????ActionMapping?mapping,
??????ActionForm?form,
??????HttpServletRequest?request,
??????HttpServletResponse?response)
?????映射對象(ActionMapping),它包含指示如何響應方法的每個可能結果的規則(“映射”)
?????Struts表單bean(ActionForm),它保存發送至HTML表單或接收自HTML表單的數據
?????請求和響應對象(HttpServletReques/?HttpServletResponse)
3、????從執行方法返回ActionForward對象,用于指導ActionServlet接著訪問哪個操作類或JSP
返回的ActionForward對象中的信息取決于兩個值:
?????方法的結果(如在“成功”或“故障”等字符串中所述)
?????映射對象,它包含從Struts配置文件中讀取的信息
要弄明白某些運行時關系,要明白struts-config.xml該文件包括下面的一組條目:
?????<form-beans>標記標識每個表單bean
?????<action-mappings>標記包括用于指導應用程序流的信息,每個<action>子標記都使相對URL與操作類和潛在的后續操作相關。
Form-bean元素
Struts配置文件中的一個示例<form-bean>子元素為如下所示:
<form-bean?name=“registerForm”??type=“strutscommon.RegisterForm”/>
每個<form-bean>子元素都包括下列屬性:
name
表單bean的名稱,稍后在配置文件中會用到。ActionServlet舉例說明了該bean(如果需要的話)并在將對bean的引用存儲在請求或會話對象中時將該名稱用作鍵。
type
類的全限定名稱,它繼承org.apache.struts.action.ActionForm該類必須在類路徑中。接受“Struts貿易樣本”中的注冊的表單bean包括HTML注冊表單中每個字段的getter?和setter方法。該bean還包括驗證方法,如下節“驗證”中所述。
Action元素
???Struts配置文件中的一個示例<action>元素為如下所示:
<action?path=“/register”
????????type=“strutsEGL.RegisterAction”
???????name=“registerForm”
???????input=“/register.jsp”
???????scope=“request”
???????<forward?name=“success”path=“/home.do”/>
???????<?forward?name=“failure”path=“/register.jsp”/>
?????</action>
每個<action>元素都包括下列屬性中的某些屬性或所有屬性:
?path
?????將請求指定為非限定URL,不帶文件擴展名(例如,“/register”)請求是根據<action>元素中的其它屬性來處理的,并且是用戶輸入的結果或者是在different<action>元素中標識的轉發的結果。
type
?????指定在發出請求時調用其執行方法的操作類的全限定名。該類必須在類路徑中。
注:不指定要實例化的類,可以通過使用forward屬性來轉發請求,該屬性在“Struts貿易樣本”中未使用,并且與后面描述的<forward>子元素不相同。
name
?????用于保存發送至HTML表單或接收自HTML表單的數據表單bean的名稱。
?input
?????指定相對URL(例如,“/register.do”或“/index.jsp”)必須包括后綴,
如果表單bean的驗證方法指示發生了輸入錯誤,則會調用URL;有關詳細信息,參見下節的“驗證”。
?scope
?????????指定將對表單?bean的引用存儲在哪個作用域中。其值為“會話”(缺省值)或“請求”。
?Struts配置文件中的每個<action>元素還包括子元素<forward>,它指定從方法結果至后續調用的映射。每個<forward>子元素都包括下列屬性
name?
指定導致在運行時使用當前映射的字符串(例如,“success”),但是
只限于以下情況:在?type?中引用的操作類的執行方法使用完全相同
的字符串來配置返回至ActionServlet的?ActionForward對象。下面
的執行方法不是很重要,但是會導致使用“success”映射:
??
?public?ActionForward?exectue(
???ActionMapping?mapping,
???ActoinForm?form,
???HttpServletRequest?request,
???HttpServletResponse?response)
???Throws?IOException,ServletException
{
???ActionForward?forward=new?ActionForward();
???Forward=mapping,findForward(“success”);
???return(forward);
}
?????path
??????????指定非限定URL(例如,“/home.do”?或“/index.jsp”)必須包括文件擴展名,僅當使用當前映射時才會調用該URL,轉發操作類是根據different<action>元素中的屬性來處理的,尤其是,在其path屬性標識相同URL的<action>元素中。
????有必要提一下的是,在struts1.1中,提出了對Multiple?Application?Support。在struts的早先版本中,只有一個struts配置文件,一般叫struts-config.xml。但是,對于越來越復雜的應用系統的發展,只有一個地方存放這個一個文件,對大型項目來說,使用和修改這個配置文件,使其成為了一個應用的瓶頸問題。在struts1.1中,你可以定義多了配置文件協同工作。
Struts
框架在啟動時會讀入其配置文件,根據它來創建和配置各種
Struts
組件。
Struts
配置文件使得開發者可以靈活地組裝和配置各個組件,提高了應用軟件的可擴展性和靈活性,可以避免硬編碼。
Struts
配置文件是基于
XML
的。
?
·
1
。
org.apache.struts.config
包
?
在
Struts1.1
中加入了
org.apache.struts.config
包。在
Struts
應用啟動時,會把
Struts
配置文件中的配置信息讀入到內存中,并把他們存放在
cofnig
包中相關
JavaBean
類的實例中。
org.apache.struts.config
包中的每一個類都和
Struts
配置文件中特定的配置元素對應。
在
Struts
框架完成了對配置文件的驗證和解析后,就把配置文件中的信息存放在這些類的實例中。這些類的實例可以充當配置信息的運行時容器,
Struts
組件可以方便地通過他們來獲取配置信息。
org.apache.struts.config.ModuleConfig
在
Struts
框架中扮演了十分重要的角色。它是整個
org.apache.struts.config
包的核心,在
Struts
應用運行時用來存放整個
Struts
應用的配置信息。如果有多個子應用,每個子應用都會有一個
ModuleConfig
對象。
ModuleConfig
和
Struts
配置文件的根元素
<struts-config>
對應。
<struts-config>
根元素中包含
<form-bean>
、
<action>
和
<forward>
等一系列子元素,因此
ModuleConfig
中包含了和每個子元素對應的配置類實例。
org.apache.struts.config.ConfigRuleSet
類的功能不同于其他類,它包含了解析
Struts
配置文件所需要的一組規則。在應用啟動時,該類負責構造
org.apache.struts.config
包中其他用于保存配置信息的
JavaBean
類的實例。
下面分別介紹
Struts
配置文件中每個元素的用法。
?
·
2
。
<struts-config>
元素
<struts-cofnig>
元素是
Struts
配置文件的根元素,和它對應的配置類為
org.apache.struts.config.ModuleConfig
類。
<struts-config>
元素有
8
個子元素。
在
Struts
配置文件中,必須按照它的
DTD
指定的先后順序來配置
<struts-config>
元素的各個子元素,如果顛倒了這些子元素在配置文件中的順序,在
Struts
應用啟動時就會生成
XML
解析錯誤。
?
·
3
。
<data-sources>
元素
<data-sources>
元素用來配置應用所需要的數據源。數據源負責建立和特定數據庫的連接,許多數據源采用連接池機制實現,以便提高數據庫訪問性能。
Java
語言提供了
javax.sql.DataSource
接口,所有的數據源必須實現該接口。許多應用服務器和
Web
容器提供了內在的數據源組件,很多數據庫廠商也提供了數據源的實現。
<data-sources>
元素包含零個,一個或多個
<data-source>
子元素。
<data-source>
元素用于配置特定的數據源,它可以包含多個
<set-property>
子元素。
<set-property>
元素用于設置數據源的各種屬性。
<data-source>
元素的
type
屬性用來指定數據源的實現類。開發者應該根據實際應用的需要來選用合適的數據源實現。
配置了數據源后,就可以在
Action
類中訪問數據源。在
org.apache.struts.action.Action
類中定義了
getDataSource(HttpRequest)
方法,它用于獲取數據源對象的引用。
也可以在配置文件中聲明多個數據源,此時需要為每一個數據源分配唯一的
key
值,通過該值來標識特定的數據源。
?
·
4
。
<form-beans>
元素
<form-beans>
元素用來配置多個
ActionForm Bean
。
<form-beans>
元素包含零個或多個
<form-bean>
子元素。每個
<form-bean>
元素又包含多個屬性。
<form-bean>
元素的屬性
屬性
|
描述
|
className
|
指定和
<form-bean>
元素對應的配置類,默認值為
org.apache.struts.config.FormBeanConfig
。如果在這里設置自定義的類,該類必須擴展
FormBeanConfig
類
|
name
|
指定該
ActionForm Bean
的唯一標識符,整個
Struts
框架用該標識符來引用這個
bean
。該屬性是必需的。
|
type
|
指定
ActionForm
類的完整類名(類的報名也包含在內),該屬性是必需的
|
?
?
如果配置動態
ActionForm Bean
,還必須配置
<form-bean>
元素的
<form-property>
子元素。
<form-property>
元素用來指定表單字段,它有四個屬性。
<form-property>
元素的屬性
屬性
|
描述
|
className
|
指定和
<form-property>
元素對應的配置類,默認值為
org.apache.struts.config.FormPropertyConfig
|
initial
|
以字符串的形式設置表單字段的初始值。如果沒有設置該屬性,則基本類型的表單字段的默認值為
0
,對象類型的表單字段的默認值為
null
|
name
|
指定表單字段的名字。該屬性是必需的
|
type
|
指定表單字段的類型。如果表單資源為
Java
類,必須給出完整的類名。該屬性是必需的。
|
?
·
5
。
<global-exceptions>
元素
<global-exceptions>
元素用于配置異常處理。
<global-exceptions>
元素可以包含零個或者多個
<exception>
元素。
<exception>
元素用來設置
Java
異常和異常處理類
org.apache.struts.action.ExceptionHandler
之間的映射。
<exception>
元素的屬性
屬性
|
描述
|
className
|
指定和
<exception>
元素對應的配置類。默認值為
org.apache.struts.config.ExceptionConfig
|
handler
|
指定異常處理類。默認值為
org.apache.struts.action.ExceptionHandler
|
key
|
指定在
Resource Bundle
中描述該異常的消息
key
|
path
|
指定當異常發生時的轉發路徑
|
scope
|
指定
ActionMessages
實例的存放范圍,可選值包括
request
和
session
,此項的默認值為
request
|
type
|
指定所需處理的異常類的名字。此項是必需的
|
bundle
|
指定
Resource Bundle
|
?
·
6
。
<global-forwards>
元素
<global-forwards>
元素用來聲明全局的轉發關系。
<global-forwards>
元素由零個或者多個
<forward>
元素組成。
<forward>
元素用于把一個邏輯名映射到特定的
URL
。通過這種方式,
Action
類或者
JSP
文件無需要指定實際的
URL
,只要指定邏輯名就能實現請求轉發或者重定向,這可是減弱控制組件和視圖組件之間的耦合,并且有助于維護
JSP
文件。
<forward>
元素的屬性
屬性
|
描述
|
className
|
和
<forward>
元素對應的配置類,默認值為
org.apache.struts.action.ActionForard
|
contextRelative
|
如果此項為
true
,表示當
path
屬性以“
/
”開頭時,給出的是相對于當前上下文的
URL
。此項的默認值為
false
|
name
|
轉發路徑的邏輯名。此項是必需的
|
path
|
指定轉發或重定向的
URL
。此項是必需的,必需以“
/
”開頭。當
contextRelative
屬性為
false
時,表示
URL
路徑相對于當前應用
(application-relative)
;當
contextRelative
屬性為
true
時,表示
URL
路徑相對于當前上下文
(context-relative)
|
redirect
|
當此項為
true
時,表示執行重定向操作;當此項為
false
時,表示執行請求轉發操作。此項默認值為
false
|
?
·
7
。
<action-mappings>
元素
<action-mappings>
元素包含零個或者多個
<action>
元素。
<action>
元素描述了從特定的請求路徑到相應的
Action
類的映射。
在
<action>
元素中可以包含多個
<exception>
和
<forward>
子元素,他們分別配置局部的異常處理及請求轉發僅被當前的
Action
所訪問。
在
<global-exceptions>
元素中定義的
<exception>
子元素代表全局的異常配置。在
<global-forwards>
元素中定義的
<forward>
子元素代表全局的請求轉發。在不同位置配置
<exception>
和
<forward>
元素的語法和屬性是一樣的。
<action>
元素的屬性
屬性
|
描述
|
attribute
|
設置和
Action
關聯的
ActionForm Bean
在
request
或
session
范圍內的屬性
key
。例如,假定
Form Bean
存在于
request
范圍內,并且此項為“
myBean
”,那么
request.getAttribute(“MyBean”)
就可以返回該
Bean
的實例。此項為可選項。
|
className
|
和
<action>
元素對應的配置元素。默認值為
org.apache.struts.action.ActionMapping
|
forward
|
指定轉發的
URL
路徑
|
include
|
指定包含的
URL
路徑
|
input
|
指定包含輸入表單的
URL
路徑。當表單驗證失敗時,將把請求轉發到該
URL
|
name
|
指定和該
Action
關聯的
ActionForm Bean
的名字。該名字必需在
<form-bean>
元素中定義過。此項是可選項
|
path
|
指定訪問
Action
的路徑,它以“
/
”開頭,沒有擴展名
|
parameter
|
指定
Action
的配置參數。在
Action
類的
execute()
方法中,可以調用
ActionMapping
對象的
getParameter()
方法來讀取該配置參數
|
roles
|
指定允許調用該
Action
的安全角色。多個角色之間以逗號隔開。在處理請求時,
RequestProcessor
會根據該配置項來決定用戶是否有調用
Action
的權限
|
scope
|
指定
ActionForm Bean
的存在范圍,可選值為
request
和
session
。默認值為
session
|
type
|
指定
Action
類的完整類名
|
unknown
|
如果此項為
true
,表示可以處理用戶發出的所有無效的
Action URL
。默認值為
false
|
validate
|
指定是否要先調用
ActionForm Bean
的
validate()
方法。默認值為
true
|
?
提示:
<action>
元素的
forward
、
include
和
type
屬性相互排斥,也就是說只能設置其中的一項。
forward
屬性的作用和
org.apache.struts.actions.ForwardAction
類相同。
Include
屬性的作用和
org.apache.struts.actions.IncludeAction
類相同。
?
如果在
<action>
元素中定義了局部的
<forward>
元素,它的優先級別高于全局的
<forward>
元素。
<Action>
的
forward
屬性和
<forward>
子元素是兩個不同的概念。
Forward
屬性指定和
path
屬性匹配的請求轉發路徑。
?
·
8
。
<controller>
元素
<controller>
元素用于配置
ActionServlet
。
<controller>
元素的屬性
屬性
|
描述
|
bufferSize
|
指定上載文件的輸入緩沖的大小。該屬性為可選項,默認值為
4096
。
|
className
|
指定和
<controller>
元素對應的配置類。默認值為
org.apache.struts.config.ControllerConfig
。
|
contentType
|
指定響應結果的內容類型和字符編碼。該屬性為可選項,默認值為
text/html
。如果在
Action
和
JSP
網頁中也設置了內容類型和字符編碼,將會覆蓋該設置
|
locale
|
指定是否把
Locale
對象保存到當前用戶的
Session
中。默認值為
false
|
processorClass
|
指定負責處理請求的
Java
類的完整類名。默認值為
org.apache.struts.action.RequestProcessor
。如果把此項設置為自定義的類,那么應該保持該類擴展了
org.apache.struts.action.RequestProcessor
類
|
tempDir
|
指定處理文件上傳的臨時目錄。如果此項沒有設置,將采用
Servlet
容器為
Web
應用分配的臨時工作目錄
|
nochache
|
如果為
true
,在響應結果中將加入特定的頭參數:
Pragma
,
Cache-Control
和
Expires
,防止頁面被存儲在客戶瀏覽器的緩存中。默認值為
false
|
?
如果應用包含多個子應用,可以在每個子應用的
Struts
配置文件中配置
<controller>
元素。這樣,盡管這些子應用共享同一個
ActionServlet
對象,但是它們可以使用不同的
RequestProcessor
類。
?
·
9
。
<message-resources>
元素
<message-resources>
元素用來配置
Resource Bundle
,
Resource Bundle
用于存放本地化消息文本。
<message-resources>
元素的屬性
屬性
|
描述
|
className
|
和
<message-resources>
元素對應的配置類。默認值為
org.apache.struts.config.MessageResourcesConfig
|
factory
|
指定消息資源的工廠類。默認值為
org.apache.struts.util.PropertyMessageResourcesFactory
類
|
key
|
指定
Resource Bundle
存放在
ServletContext
對象中時采用的屬性
key
。默認值為由
Globals.MESSAGES_KEY
定義的字符串常量。只允許有一個
Resource Bundle
采用默認的屬性
key
|
null
|
指定
MessageResources
類如何處理未知的消息
key
。如果此項為
true
,將返回空字符串。如果此項為
false
,將返回類似“
???global.label.missing???
”的字符串。該屬性為可選項,默認值為
true
|
parameter
|
指定
Resource Bundle
的消息資源文件名。
|
?
許多
Struts
客戶化標簽都通過
bundle
屬性來指定
Resource Bundle
,標簽的
bundle
屬性和
<message-resources>
元素的
key
屬性匹配。
?
·
10
。
<plug-in>
元素
<plug-in>
元素用于配置
Struts
插件。
<plug-in>
元素的屬性
屬性
|
描述
|
className
|
指定
Struts
插件類。插件類必需實現
org.apache.struts.action.PlugIn
接口
|
?
·
11
。配置多應用模塊
Struts 1.1
支持多應用模塊,即同一個應用包含多個子應用,每個子應用可以處理相關的一組功能。
所有的子應用都共享同一個
ActionServlet
實例,但每個子應用都有單獨的配置文件。把應用劃分成多個子應用模塊包含一下步驟:
(1)
??????
為每個子應用傳見單獨的
Struts
配置文件。
(2)
??????
在
web.xml
的
ActionServlet
的配置代碼中添加每個子應用信息。
(3)
??????
采用
<forward>
元素或
SwitchAction
類來實現子應用之間的切換
posted on 2007-02-07 08:23
???MengChuChen 閱讀(1422)
評論(0) 編輯 收藏 所屬分類:
struts