Action映射(action-mappings)
Struts使用action標記來將表單、aciton以及轉發連線在一起。他們被捆綁在action-mappings之內。
Action標記的屬性
type=”stocktrack.struts.action.newAccountAction”
name=”blankForm”/*BeanName
scope=”request”
input=”/home.jsp”>/*ReuestPath
path=”/newUserName.jsp”/>/*ReauestPath
type=”stocktrack.struts.action.LoginAction”
name=”loginForm”
scope=”request”
input=”/home.jsp”/>
屬性path被用於同action的請求相匹配,action的路徑應該沒有任何後綴。如,在表單中指定action=”/my/regist.do”,他將匹配path為/my/regist;
屬性forward和include可以用來將控制權直接傳遞到新路徑,而不是直接處理action。通過指定他的路徑,屬性input允許將action屬性重定向回用以輸入表單值的表單;
屬性name用於指定FormBean的名字;
屬性forward,exception和set-property標記可以在action的內部局部使用;他們歸屬與所定義的action。Set-property標記對於“向action傳遞信息”非常有用。例如,如果一個單獨的action類可被用來處理若干不同的表單,可以使用set-property標記來告訴action要處理的是哪一個表單
主要元素
<?xmlversion=”1.0”encoding=”ISO-8859-1”?>
<!DOCTYPEstruts-configPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration1.1//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>
<data-sources>
<data-source>
</data-source>
</data-sources>
<form-beans>
<form-bean/>
</form-beans>
<global-forwards>
<forward/>
</global-forwards>
<action-mappings>
<action/>
</action-mappings>
<controller/>
<message-resources/>
<plug-in/>
</struts-config>
與struts其它元素的相互連線
可以從jsp頁面的角度開始考慮。當頁面使用帶有action屬性的標記時,
使用該屬性從config檔案中找到相應的標記。這個標記接下來定義了表單類,他允許jsp頁面使用以及其他表單輸入標記和表單bean相關聯;還有action類,用來處理驗證之後的結果。
Struts標記
Struts標記是一組定製的jsp自定義標記,由struts的作者開發,能夠簡化jsp開發者的工作。
struts html標記頁面構造和表單處理
這些標記被用來在jsp檔案中產生html元素、協調錶單處理、並將jsp頁面(view組建)連結到strut框架的其他部分。
使用struts html標記渲染html基本元素:
--渲染HTML元素
--渲染HTML元素
用來幫助瀏覽器正確的組成路徑;
--渲染HTML錨點標記元素
可以在URL中傳遞參數,或當用戶的cookies被禁止時,用來維護會話的狀態。
--僅渲染標記中的URL部分
--渲染HTML元素
子元素
1.<icon/>子元素
它包含<small-icon/>及<large-icon/>,它的作用是圖形化其父元素,
<small-icon/>的內容是一個16x16的圖像檔案,而<large-icon/>的內容是一個32x32的圖像檔案。如下例子:
<icon>
<small-icon>
/images/smalllogo.gif
</small-icon>
<large-icon>
/images/largelogo.gif
</large-icon>
</icon>
2.<display-name/>子元素
它提供對父元素的短文字(shorttextual)描述信息,如下:
<display-name>
shorttextualdiscriptionofitsparentelement
</display-name>
3.<description/>子元素
它提供對父元素的完全(full-lengthtextual)的描述信息,如下:
<description>
full-lengthtextualdiscriptionofitsparentelement
</description>
4.<set-property/>子元素
它用來設定它的父元素中設定的JavaBean的屬性值,它一般用在指定的GenericDataSource屬性,
擴展的ActionMappings以及擴展的globalforwards。如下:
<set-propertyproperty="nameofbeanproperty"value="valueofbeanproperty"/>
例如:
<set-propertyproperty="driverClass"value="org.gjt.mm.mysql.Driver"/>
<set-propertyproperty="user"value="admin"/>
<set-propertyproperty="maxCount"value="4"/>
<set-propertyproperty="minCount"value="2"/>
<set-propertyproperty="password"value=""/>
<set-propertyproperty="url"value="jdbc:mysql://localhost:3306/struts"/>
配置JDBC數據源
其配置形式如下:
<data-sources>
<data-source>
<set-propertyproperty="driverClass"value="fullyqualifiedpathofJDBCdriver"/>
<set-propertyproperty="url"value="datasourceURL"/>
<set-propertyproperty=”mincount”value="theminimumnumberofconnectionstoopen"/>
<set-propertyproperty="password"value="thepasswordusedtocreateconnections"/>
<set-propertyproperty="user"value="theusernameusedtocreateconnections"/>
</data-source>
</data-sources>
<data-source>的屬性及其描述信息如下:
屬性描述信息
Key綁定在ServletContext上的DataSource實例的索引鍵,
若不設定則預設為Action.DATA_SOURCE_KEY,如果在應用程式中有多於一個的DataSource,
則必須設定Key的值。
DriverClass所用的JDBC驅動類(必須的)如:com.microsoft.jdbc.sqlserver.SQLServerDriver
url所用的JDBC的URL(必須的)如:jdbc:microsoft:sqlserver://xg088:1433
MaxCount同時打開的最大連結數,預設值為2(可選的)
MinCount同時打開的最小連結數,預設值為1(可選的)
User連結到資料庫的用戶名(必須的)
Password連結到資料庫的密碼(必須的)
Description關於DataSource的描述信息(可選的)
ReadOnly如果設為true,則表示該連結是唯讀的,預設為false。(可選的)
LoginTimeout創建連結的最大允許時間,以秒為單位。(可選的)
AutoCommit如果為true,則每次execute之後會強制回滾。預設為true。(可選的)
舉例說明:
<data-sources>
<data-source>
<set-propertyproperty=”key”value=”value="WILEY_DATA_SOURCE"/>
<set-propertyproperty="driverClass"value="org.gjt.mm.mysql.Driver"/>
<set-propertyproperty="url"value="jdbc:mysql://localhost/wileyusers"/>
<set-propertyproperty="maxCount"value="5"/>
<set-propertyproperty="minCount"value="1"/>
<set-propertyproperty="user"value="sa"/>
<set-propertyproperty="password"value="yourpassword"/>
</data-source>
</data-sources>
配置FormBean
<form-bean/>用來定義將要綁定到Action的FormBean的實例。語法如下:
<form-beans>
<form-beanname="nameusedtouniquelyidentifyaFormBean"
type=”fullyqualifiedclassnameofFormBean"/>
</form-beans>
例:
<form-beans>
<form-beanname="lookupForm"type="wiley.LookupForm"/>
</form-beans>
配置全局轉發
全局轉發可以定義幾個<forward/>子元素,struts首先會在<action-mappings>元素中找對應的<forward>,
若找不到,則到全局轉發配置中找。語法如下:
<global-forwards>
<forwardname="uniquetargetidentifier"path="context-relativepathtotargettedresource"/>
</global-forwards>
除了name及path屬性之外,還有一個redirect屬性,如果redirect設為true的時候,則用 HttpServletResponse.sendRedirect()方法,否則用RequestDispatcher.forward()方法,預設為false。
註:如果為true,則用HttpServletResponse.sendRedirect()方法,此時存儲在原來的HttpServletRequest中 的值將會丟失。
例子:
<global-forwards>
<forwardname="success"path="/welcome.jsp"/>
<forwardname="failure"path="/index.jsp"/>
</global-forwards>
配置action-mappings
它可以定義幾個<action/>子元素,它主要是定義Action實例到ActionServlet類中,語法如下:
<action-mappings>
<actionpath="context-relativepathmappingactiontoarequest"
type="fullyqualifiedclassnameoftheActionclass"
name="thenameoftheformbeanboundtothisAction">
<forwardname="forwardname1"path="context-relativepath"/>
<forwardname="forwardname2"path="context-relativepath"/>
</action>
</action-mappings>
<action/>屬性及其描述信息如下:
屬性描述信息
Path在瀏覽器的URL中輸入的字元(必須的)
Type連結到本映射的Action的全稱(可選的)
Name與本操作關聯的ActionBean在<form-bean/>中定義name名(可選的)
Scope指定ActionFormBean的作用域(session和request),預設為session。(可選的)
Input當Bean發生t誤時返回的控制。(可選的)
ClassName指定一個調用這個Action類的ActionMapping類的全名。預設用
org.apache.struts.action.ActionMapping,(可選的)
Forward指定處理相應請求所對應的JSP頁面。(可選的)
Include如果沒有forward的時候,它起forward的作用。(可選的)
Validate若為true,則會調用ActionForm的validate()方法,否則不調用,預設為true。(可選的)
例子:
<action-mappings>
<actionpath="/lookupAction"type="wiley.LookupAction"name="LookupForm"
scope="request"
validate="true"
input="/index.jsp">
<forwardname="success"path="/quote.jsp"/>
<forwardname="faliue"path="/index.jsp"/>
</action>
</action-mappings>
配置RequestProcessor
在struts-config.xml檔案中用<controller/>子元素來定義RequestProcessor,其語法格式如下:
<controllerprocessorClass="fullyqualifiedclassname"/>
<controller/>元素屬性及其描述信息如下:
屬性描述
processorClass指定自定義的RequestProcessor類的全名
BufferSize指定用來下載所用的快取大小。預設是4096位元組。
contentType定義response文本類型,預設是text/html
Debug定義當前系統的除錯級別,預設是0
Locale如果是true,則在用戶的session中存放Locale對象,預設為true
maxFileSize指定下載檔案最大的大小。預設是250M
multipartClass指定去代替org.apache.struts.upload.DiskMultipartRequestHandler類的類的全名。
Nocache如果是true,則會關閉每個response的快取功能。預設是false
TempDir指定上載檔案所用的臨時目錄。預設值由容器決定
例子:
①<controllerprocessorClass="wiley.WileyRequestProcessor"/>
②<controller
contentType="text/html;charset=UTF-8"
debug="3"
locale="true"
nocache="true"
processorClass="org.apache.struts.action.RequestProcessor"/>
配置Message Resources
在struts-config.xml檔案中用<message-resources/>元素來定義訊息資源。其語法如下:
<message-resourcesparameter="wiley.ApplicationResources"/>
<message-resources/>元素屬性及其描述信息如下:
屬性描述
Parameter給定資源檔案全名
ClassName定義處理訊息資源的類名的全名,預設是org.apache.struts.config.MessageResourcesConfig
Factory定義MessageResourcesFactory類的全名,預設是
org.apache.struts.util.property.MessageResourcesFacotry
Key定義綁定在這個資源包中的ServletContext的屬性主鍵,預設值是Action.MESSAGES_KEY.
Null如果為true,則找不到訊息key時,則返回null,預設是true.
例子:
①<message-resourcesparameter="wiley.ApplicationResources"/>
②<message-resources
parameter="StorefrontMessageResources"
null="false"/>
<message-resources
key="IMAGE_RESOURCE_KEY"
parameter="StorefrontImageResources"
null="false"/>
注意:設定key的目的如下:
<html:imgaltKey="navbar.home.image.alt"bundle="IMAGE_RESOURCE_KEY"
pageKey="navbar.home.image"width="125"height="15"border="0"/>
這裡說明要到StorefrontImageResources.properties資源檔案中找主鍵值是”navbar.home.image”所對應的值。