Struts應用采用兩個(gè)基于XML的配置文件來(lái)配置,分別是web.xml和struts-cofig.xml文件.web.xml文件是配置所有web應用的而struts-config.xml文件是struts專(zhuān)用的配置文件,事實(shí)上也是可以根據需要給這個(gè)配置文件起其他名稱(chēng)的.
Web應用的發(fā)布描述文件:web應用發(fā)布描述文件可以在應用開(kāi)著(zhù)者,發(fā)布者和組裝者之間傳遞配置信息,Web容器在啟動(dòng)的時(shí)候從該文件中讀取配置信息,根據它來(lái)裝載和配置web應用.文檔類(lèi)型定義DTD對XML文檔的格式做了定義,DTD吧XML文檔劃分為元素,屬性,實(shí)體每一種XML文檔都有獨自的DTD文件.可以從網(wǎng)上下載.<web-app>元素是web.xml的根元素,其他元素必須嵌入在<web-app>元素之內.要注意的是子元素也是有順序的比如必須是首先<servlet>,然后<servlet-mapping>最后<taglib>.
為Struts應用配置Web.xml文件:首先最重要的一步是配置ActionServlet,這個(gè)用<servlet>標簽的servlet-name屬性起一個(gè)名字叫action,然后用servlet-class屬性指定ActionServlet的類(lèi).然后用<servlet-mapping>標簽的servlet-name屬性指定action,在用url-pattern指定接收范圍是*.do的請求.不管應用中包含了多少子應用,都只需要配置一個(gè)ActionServlet,類(lèi)來(lái)出來(lái)應用中的不同的功能,其實(shí)者就是不必要的,因為Servlet本身就是多線(xiàn)程的,而且目前Struts只允許配置一個(gè)ActionServlet.聲明ActionServlet的初始化參數:<servlet>的<init-param>子元素用來(lái)配置Servlet的初始化參數.param-name設置config參數名.param-value設置struts-config.xml的路徑參數值.
配置歡迎使用清單:如果客戶(hù)訪(fǎng)問(wèn)Web的時(shí)候值是訪(fǎng)問(wèn)了WEB應用的根目錄URL.沒(méi)有具體的指定文件,Web會(huì )自動(dòng)調用Web的歡迎文件.<welcome-file-list>元素來(lái)配置的.通過(guò)其中的<welcome-file>歡迎頁(yè)面</welcome-file>來(lái)配置.
配置錯誤處理:盡管Struts框架功能強大的錯誤處理機制,但是不能保證處理所有的錯誤或者異常.當錯誤發(fā)生時(shí),如果框架不能處理這種錯誤,把錯誤拋棄給Web容器,在默認的情況下web容器會(huì )想客戶(hù)端返回錯誤信息.如果想避免讓客戶(hù)看到原始的錯誤信息,可以在Web應用發(fā)布描述文件中配置<error-page>元素.通過(guò)<error-code>404來(lái)定義錯誤的類(lèi)型.然后通過(guò)<location>要處理錯誤的JSP頁(yè)面來(lái)對錯誤進(jìn)行處理.還可以用<exception-type>來(lái)設置異常,然后通過(guò)<location>來(lái)處理異常的JSP頁(yè)面來(lái)處理異常.
配置Struts標簽庫:這個(gè)就和以前學(xué)到的JSP自定義標簽類(lèi)似,配置元素為<taglib>來(lái)配置.<taglib-uri>這個(gè)指定標簽庫的uri,類(lèi)似起一個(gè)名稱(chēng).<taglib-location>這個(gè)是標簽庫的位置也就是實(shí)際所在的路徑.通過(guò)這樣的方法引入一個(gè)標簽庫,然后在前臺JSP頁(yè)面就可以通過(guò)自己定義的URI來(lái)調用標簽.
Struts配置文件:struts-config.xml文件.首先研討一下org.apache.struts.config包,在struts應用啟動(dòng)的時(shí)候會(huì )把Struts配置文件信息讀取到內存中,并把它們存放在config包中相關(guān)的JavaBean類(lèi)的實(shí)例中.包中的每一個(gè)類(lèi)都和struts配置文件中特定的配置元素對應,ModuleConfig在Struts框架中扮演了十分重要的角色,它是整個(gè)config包的核心,在Struts運行時(shí)來(lái)存放整個(gè)應用的配置信息.如果有多個(gè)子應用都會(huì )有一個(gè)ModuleConfig對象,它和Struts文件根元素的<struts-config>對應.根元素中包含<form-bean><action><forward>等元素.
<struts-config>元素:時(shí)Struts配置文件的根元素,和它對應的配置類(lèi)ModuleConfig類(lèi),<struts-config>元素有8個(gè)子元素.他們的DTD定義是data-sources?form-bean? global-exception?global-forwards?action-mapping?controller?message-resources?plug-in*在Struts配置文件中,必須按照DTD指定的先手順序來(lái)配置<struts-config>元素的各個(gè)子元素,如果顛倒了這些子元素的順序,會(huì )產(chǎn)生錯誤.
<data-sources>元素:用來(lái)配置應用所需要的數據源,數據源負責創(chuàng )建和特定的數據庫的連接.許多數據源采用連接池的機制實(shí)現.以便提高數據庫訪(fǎng)問(wèn)的性能.JAVA語(yǔ)言提供了javax.sql.DataSource接口,所有的數據源都必須實(shí)現這個(gè)接口.許多應用服務(wù)器和Web服務(wù)器都提供了數據源組件.很多數據庫廠(chǎng)商也提供了數據源的實(shí)現.<data-sources>元素包含多個(gè)<data-source>子元素永遠配置特定的數據源.他們可以包含多個(gè)<set-property>子元素用于設置數據源的各種屬性.配置了數據源以后,就可以在A(yíng)ction類(lèi)中訪(fǎng)問(wèn)數據源,在A(yíng)ction中定義了getDataSource(HttpRequest)方法,用于獲取數據源對象的引用.然后可以利用DataSource對象調用getConnection獲取一個(gè)連接對象對數據庫進(jìn)行操作.在配置文件中聲明多個(gè)數據源的時(shí)候需要為每一個(gè)數據源分配唯一的Key值,通過(guò)這個(gè)來(lái)表示特定的數據源.獲取特定的數據源的時(shí)候可以用dataSource = getDataSource(reqeust,”A”);
<form-beans>元素:用來(lái)配置多個(gè)ActionForm,包含一個(gè)或者N個(gè)<form-bean>子元素.每個(gè)<form-bean>元素都包含多個(gè)屬性.className指定和<form-bean>匹配的類(lèi).name指定該ActionForm的唯一標識符,這個(gè)屬性是必須的以后作為引用使用.type指定ActionForm類(lèi)的完整類(lèi)名,這個(gè)屬性也是必須的.注意包名也要加上.<form-property>是指定動(dòng)態(tài)的Form的元素,以后會(huì )深入了解.
<global-exception>元素:用于配置異常處理,元素可以包含一個(gè)或者多個(gè)<exception>元素,用來(lái)設置JAVA異常和異常處理類(lèi)ExceptionHandler之間的映射.className指定和元素對應的配置類(lèi),默認的不用動(dòng).handler指定異常處理類(lèi)默認是ExceptionHandler.key指定在本地資源文件中異常的消息Key,path指定當前異常發(fā)生的時(shí)候轉發(fā)的路徑.scope指定ActionMessages實(shí)例存放的范圍.type指定需要處理異常類(lèi)的名字,必須的.bundle指定Resource Bundle.
<global-forwards>元素:用來(lái)聲明全局轉發(fā),元素可以有一個(gè)或者N個(gè)<forward>元素組成,用于把一個(gè)邏輯名映射到特定的URL,通過(guò)這種方法Action類(lèi)或者JSP頁(yè)面無(wú)需指定URL,只要指定邏輯名稱(chēng)就可以實(shí)現請求轉發(fā)或者重定向.這樣可以減少控制組件和視圖的聚合.易于維護.className對應的配置類(lèi).contextRelative如果為true表示當path屬性以/開(kāi)頭的時(shí)候,給出的是對應的上下文URL默認是false.name轉發(fā)路徑的邏輯名,必須寫(xiě).path轉發(fā)或者重定向的URL,必須寫(xiě)必須是以/開(kāi)頭.redirect設置為true的時(shí)候表示執行重定向操作,此項為false的時(shí)候,表示執行請求轉發(fā)操作.重定向與請求轉發(fā)的區別以后就是重定向是把請求生成應答給客戶(hù)端然后在重新發(fā)送給定向的URL,瀏覽器地址欄會(huì )有顯示.而轉發(fā)就是直接把請求轉發(fā)給本應用的另一個(gè)文件,不生成應答所以客戶(hù)端IE沒(méi)顯示.
<action-mapping>元素:包含一個(gè)或者N個(gè)<action>元素,描述了從特定的請求路徑到響應的Action的映射.在<action>元素中可以包含多個(gè)<exception>和<forward>子元素,他們分別配置局部異常處理和局部轉發(fā).attribute設置Action關(guān)聯(lián)的ActionForm在request或者session范圍內的key.就是在request或者session共享內的名稱(chēng).className對應配置元素的類(lèi).默認的是ActionMapping.forward指定轉發(fā)URL路徑include指定包含URL路徑.input指定包含表單的URL,當表單驗證失敗的時(shí)候發(fā)送的URL.name,指定和該Action關(guān)聯(lián)的Form名字.該名字必須是在form-bean中定義過(guò)的,可寫(xiě)可不寫(xiě).path必須/開(kāi)頭的方位Action的路徑.parameter指定Action配置參數.在A(yíng)ction的execute()方法中可以調用ActionMapping的getParameter()方法來(lái)讀取匹配的參數.roles指定允許調用該Action的安全角色,多個(gè)角色之間逗號格開(kāi).scope指定Form的存在范圍.默認是session.tyep指定Action的完整類(lèi)名.unknown如果是true表示可以處理用戶(hù)發(fā)出的所有的無(wú)效的ActionURL默認是false.validate指定是否調用ActionForm的validate方法.
<controller>元素:用于配置ActionServlet.buffreSize指定上載文件的輸入緩沖大小.該屬性為可選默認4096.className指定元素對應的配置類(lèi),ControllerConfig.然后是contentType指定響應結果內容類(lèi)型和字符編碼,該屬性為可選,默認是text/html如果在A(yíng)ction或者JSP網(wǎng)頁(yè)也設置了類(lèi)型內容,會(huì )覆蓋這個(gè).locale指定是否把Locale對象保存到當前用戶(hù)的session中默認false.tempDir指定處理文件上載的臨時(shí)工作目錄.nochache如果是true在響應結果中加入特定的頭參數.
<message-resources>元素:用來(lái)配置Resource Bundle.用于存放本地文本消息文件.className元素對應的配置類(lèi).MessageResourcesConfig.factory指定消息的工廠(chǎng)類(lèi).key指定文件存放的Servlet對象中采用的屬性Key.null指定如何處理未知消息.parameter指定消息的文件名.
<plug-in>元素:用于配置Struts插件.
配置多應用模塊:所有的子應用都可以共享同一個(gè)ActionServlet實(shí)例,但是每個(gè)子應用都有單獨的配置文件.把應用劃分為多個(gè)子應用模塊.首先為每個(gè)應用創(chuàng )建單獨的Struts配置文件,在web.xml的ActionServlet配置代碼中添加幾個(gè)子應用信息.采用<forward>元素來(lái)實(shí)現應用之間的切換.
Digester組件:是一個(gè)Apache的另一個(gè)開(kāi)源代碼項目.當Struts被初始化的時(shí)候,首先會(huì )讀取并解析配置文件,框架采用Digester組件來(lái)且西配置文件.然后創(chuàng )建config包中的對象.者對象用于存放配置信息.
其實(shí)配置文件不難,只要都理其中的原理就OK了.真正實(shí)際的項目開(kāi)發(fā)中,采用的工具例如Eclipse系列,提供了相應的插件,在創(chuàng )建一個(gè)Struts工程的時(shí)候配置文件的標簽都是自動(dòng)生成的,而我們只需要往里面填寫(xiě)屬性就OK了. (網(wǎng)友們的支持,是我繼續寫(xiě)技術(shù)文章的動(dòng)力!)
聯(lián)系客服