本章將帶你通過一個Struts2應用程序所需的基本配置。在這裡,我們將看到什麼將被配置在一些重要的配置文件:
web.xml, struts.xml, struts-config.xml 和 struts.properties
接下來使用web.xml和struts.xml中的配置文件,並在前麵的章節中,你已經看到我們的例子中使用這兩個文件的工作,但讓我解釋一下其他文件,以及為你講解其它知識。
在web.xml配置文件是一個的J2EE配置文件,決定如何處理的HTTP請求的servlet容器的元素。它不是嚴格意義上的Struts2的配置文件,但它是一個文件,需要配置Struts2的工作。
正如前麵所討論的,此文件提供任何Web應用程序的入口點。Struts2的應用程序的入口點,將是一個部署描述符(web.xml)中定義的過濾器。因此,我們將FilterDispatcher排類在web.xml中定義的入口。需要創建文件夾的WebContent/ WEB-INF下的web.xml文件。
這是第一個配置文件將需要配置,如果你開始冇有產生它(例如Eclipse或者Maven2)模板或工具的幫助下。以下是web.xml文件中的內容,我們在我們的最後一個例子。
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>Struts 2</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.FilterDispatcher </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
需要注意的是,我們的Struts 2的過濾器映射到/*,但不到/*.action,而不是這意味著所有的URL將被解析的支柱過濾器。我們將介紹時,我們會通過的“注解”一章。
struts.xml文件中包含的配置信息,你將修改所采取的措施的開發。這個文件可以被用來覆蓋默認設置的應用程序,例如struts.devMode=false和其他設置中定義的屬性文件。這個文件可以創建文件夾WEB-INF/classes下。
讓我們一起來看看我們在struts.xml文件中創建Hello World的例子,就像我們在前麵的章節中的解釋。
<?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> <constant name="struts.devMode" value="true" /> <package name="helloworld" extends="struts-default"> <action name="hello" class="com.tutorialspoint.struts2.HelloWorldAction" method="execute"> <result name="success">/HelloWorld.jsp</result> </action> <-- more actions can be listed here -by www.gitbook.net/struts2 --> </package> <-- more packages can be listed here --> </struts>
首先要注意的是DOCTYPE。所有的Struts配置文件中需要有正確的DOCTYPE,在我們的小例子所示。 <struts>是根標記的元素,我們聲明使用不同的包<package>標簽。其中,<package>允許分離和模塊化的配置。這是非常有用的,當你有一個大的項目,項目被劃分成不同的模塊。
再說了,如果你的項目有三個域 - business_applicaiton,customer_application和staff_application,你可以創建三個包,在適當的包裝和存儲相關的動作。包裝標簽具有以下屬性:
Attribute | Description |
---|---|
name (required) | The unique identifier for the package |
extends | Which package does this package extend from? By default, we use struts-default as the base package. |
abstract | If marked true, the package is not available for end user consumption. |
namesapce | Unique namespace for the actions |
constant常量標簽name和value屬性將被用來覆蓋的default.properties中定義的屬性,就像剛才設置struts.devModeproperty。設置struts.devMode屬性,讓我們看到了更多的調試信息在日誌文件中。
我們定義動作標記對應的每一個URL,我們想訪問我們定義了一個類的execute()方法,將訪問時,我們將訪問相應的URL。
結果確定什麼被返回到瀏覽器的一個動作後執行。從操作返回的字符串應該是一個結果的名稱。結果如上配置的每次動作,或作為一個“global”的結果,在包中的每一個動作可。結果有可選的名稱和類型的屬性。默認名稱值是“success”。
隨著時間的推移,struts.xml文件可以做大,打破它包的模塊化是一種方式,但支柱提供了另一種模塊化的struts.xml文件。你可以將檔案分割成多個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> <include file="my-struts1.xml"/> <include file="my-struts2.xml"/> </struts>
我們還冇有涉及到的其他配置文件是struts-default.xml中。這個文件包含了Struts的標準配置設置,你的項目的99.99%不會碰這些設置。出於這個原因,我們不打算在這個文件太多的細節。如果有興趣,不妨看看在default.properties文件中struts2-core-2.2.3.jar文件。
struts-config.xml配置文件是一個在Web客戶端組件的視圖和模型之間的聯係,但你的項目的99.99%不會碰這些設置。基本的配置文件包含以下主要內容:
SN | Interceptor & Description |
---|---|
1 |
struts-config This is the root node of the configuration file. |
2 |
form-beans This is where you map your ActionForm subclass to a name. You use this name as an alias for your ActionForm throughout the rest of the struts-config.xml file, and even on your JSP pages. |
3 |
global forwards 本節映射在你的web應用的名稱。您可以使用這個名稱,是指實際的頁麵。這就避免了硬編碼在您的網頁的URL。 |
4 |
action-mappings This is where you declare form handlers and they are also known as action mappings. |
5 |
controller This section configures Struts internals and rarely used in practical situations. |
6 |
plug-in This section tells Struts where to find your properties files, which contain prompts and error messages |
下麵是示例struts-config.xml文件:
<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.0//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_0.dtd"> <struts-config> <!-- ========== Form Bean Definitions ============ --> <form-beans> <form-bean name="login" type="test.struts.LoginForm" /> </form-beans> <!-- ========== Global Forward Definitions ========= --> <global-forwards> </global-forwards> <!-- ========== Action Mapping Definitions ======== --> <action-mappings> <action path="/login" type="test.struts.LoginAction" > <forward name="valid" path="/jsp/MainMenu.jsp" /> <forward name="invalid" path="/jsp/LoginView.jsp" /> </action> </action-mappings> <!-- ========== Controller Definitions ======== --> <controller contentType="text/html;charset=UTF-8" debug="3" maxFileSize="1.618M" locale="true" nocache="true"/> </struts-config>
struts-config.xml文件的更多詳細信息,請查看Struts文檔。
此配置文件提供了一種機製來更改默認行為的框架。其實在struts.properties配置文件中包含的所有的屬性也可以被配置在web.xml中使用的init-param,以及在struts.xml中的配置文件中使用恒定的標簽。但如果你喜歡的東西保持獨立和多支柱的具體,那麼你可以創建此文件在folderWEB-INF/classes目錄下。
在這個文件中配置的值將覆蓋默認值配置在default.properties這是包含在Struts2的核心xyzjar的分布。還有幾個你可能會考慮改變使用struts.properties文件的屬性:
### When set to true, Struts will act much more friendly for developers struts.devMode = true ### Enables reloading of internationalization files struts.i18n.reload = true ### Enables reloading of XML configuration files struts.configuration.xml.reload = true ### Sets the port that the server is run on struts.url.http.port = 8080
任何與井號(#)開頭的行會被假定為注釋,將被Struts2忽略。