1. 程式人生 > >接觸struts--struts配置(1)

接觸struts--struts配置(1)

初學者入門:Struts中基本配置入門

   ChinaITLab收集整理  2005-12-7  

  1.為Struts應用配置Web.xml檔案
  
  第一步:配置ActionServlet
  
  <servlet>
  <servlet-name>action</servlet-name>
  <servlet-class>org.appache.struts.ActionServlet</servlet-class>
  </servlet>
  
  <servlet-mapping>
  <servlet-name>action</servlet-name>
  <uri-pattern>*.do</url-pattern>
  </servlet-mapping>
  
  注意:不管應用中包含多少個子應用,都只需配置一個ActionServlet,因為ActionServlet支援多執行緒,目前的Struts框架只允許在應用中配置一個ActionServlet。
  
  第二步:初始化引數對Servlet的執行環境進行初始化配置。
  
  <servlet>
  <servlet-name> action</servlet-name>
  <servlet-class> org.appache.struts.ActionServlet </servlet-class>
  <init-param>
  <param-name>config</param-name>
  <param-value>/WEB-INF/struts-config.xml</param-value>
  </init-param>
  </servlet>
  
  表2-1. Struts1.1中用到的初始化引數
  
  引數名       含義/預設值
  config     以相對路徑的方式指明Struts應用程式的配置檔案位置。如不設定,則預設值為/WEB-INF/struts-config.xml。
  config/sub1   以相對路徑的方式指明子應用程式的配置檔案位置,一般來說,很少用到子應用程式,在此不多描述。
  debug      設定Servlet的debug級別,控制日誌記錄的詳細程度。預設為0,記錄相對最少的日誌資訊。
  detail     設定Digester的debug級別,Digester是Struts框架所使用的用來解析xml配置檔案的一個框架,通過該設定,可以檢視不同詳細等級的解析日誌。預設為0,記錄相對最少的日誌資訊。
  
  第三步:配置歡迎清單
  
  當客戶訪問Web應用時,如果僅僅給出Web應用的Root URL,沒用指定具體的檔名,Web容器會自動呼叫Web應用的歡迎檔案。
  
  <welcome-file-list>
  <welcome-file>welcome.jsp</welcome-file>
  <welcome-file>index.jsp</welcome-file>
  </welcome-fiel-list>
  
  說明:<welcome-file-list>可以包含多個<welcome-file>子元素,首先查詢第一個<welcome-file>檔案。
  
  由於<welcome-file-list>元素中不能配置Servlet對映,因此不能直接把Struts的Action作為歡迎文 件,可以採用一種變通的方法來實現在歡迎檔案中呼叫Struts Action。首先,在Struts配置檔案中為被呼叫的Action建立一個全域性的轉 發項,例如:
  <global-forwards>
  <forward name=”welcome” path=”HelloWord.do”/>
  </global-forwords>
  
  建立一個welcome.jsp的檔案
  
  最後在web.xml檔案中把welcome.jsp檔案配置為歡迎檔案,程式碼如下:
  <welcome-file-list>
  <welcome-file>welcome.jsp</welcome-file>
  </welcome-file-list>
  
  第四步:配置錯誤處理
  
  <error-page>
  <error-code>404</error-code>
  <location>/commom/404.jsp</location>
  </error-page>
  <error-page>
  <error-code>505</error-code>
  <location>/commom/505.jsp</location>
  </error-page>
  
  也可以為Web容器捕獲的Java異常配置<error-page>,需要設定<exception-type>子元素,它用於指定Java異常類。Web容器可能捕獲如下異常:
  
  RuntimeException或Error  ServletException或它的子類 IOException或它的子類
  
  <error-page>
  <exception-type>java.io.IOException</exception-type>
  <location>/common/system_ioerror.jsp</location>
  </error-page>
  
  第五步:配置Struts標籤庫
  
  使用客戶化的標籤庫,要配置它們
  
  <taglib>
  <tag-uri>/WEB-INF/struts-html.tld<tag-uri>
  <taglib-location>/WEB-INF/struts-html.tld</taglib-location>
  </taglib>
  
  <tag-uri>用於指定標籤庫的相對或者絕對URI地址,Web應用根據這一URI來訪問標籤庫。
  
  <taglib-location>指定標籤描述檔案在檔案資源系統中的物理位置。
  
  2.Struts配置檔案
  
  Struts框架在啟動時會讀入其配置檔案,根據它來建立和配置各種Struts元件。
  
  1<Struts-config>元素
  
  <struts-config>元素是Struts配置檔案的根元素,<struts-cofig>元素有8個子元素。它的DTD定義如下:
  
  <!ELEMENT struts-config(data-sources?,formbean?,global-exeception?, global-forward?,action-mapping,controller?,message-resources*,plug-in*)>
  
  在Struts配置中,必須按照以上的DTD指定的先後順序來配置<Struts-config>元素的各個子元素,如果顛倒了這些元素的配置檔案中的位置,在Struts應用啟動時會生成錯誤。
  
  <data-sources>元素
  
  <data-sources>元素包含零個、一個或者多個<data-sources>子元素,<data- sources>用於配置特定的資料來源,它可以包含多個<set-property>子元素,用於設定資料來源的各種屬性。
  。。。
  
  配置了資料來源後,就可以在Action類中訪問資料來源,在org.apache.struts.action.Action類中定義了getDataSource(HttpRequrst)方法,它用於獲取資料來源物件的引用。
  
  DataSource dataSource;
  Connection connection;
  dataSource =getDataSource(request);
  connection=dataSource.getConnection();
  
  也可以在配置檔案中宣告多個數據源,此時需要為每一個數據源分配唯一的key值,通過改值來標識特定的資料來源。
  
  2<form-beans>元素
  
  <form-beans>元素用來配置多個ActionForm Bean,<form-beans>包含多個< forom-bean>子元素,,每個<from-bean>包含多個屬性,ClassName , name,type
  
  <form-beans>
  <form-bean name="HelloForm" type="hello.HelloForm"/>
  </form-beans>
  
  注意:配置動態ActionForm Bean,還必須配置<form-bean>元素的<form-property>元素。
  
  <form-beans>
  <form-bean name="HelloForm" type="hello.HelloForm"/>
  <form-bean name="userForm" type="org.apache.struts.action.DynaAction">
  <from-property name="firstname" type="java.lang.String"/>
  <form-property name="secondname" type="java.lang.String">
  <form-property name="age" type="java.Integer" initial="18">
  </form-beans>
  
  3<global-exception>元素
  
  <global-exception>用於配置異常處理,<global-exception>元素可以包含零個或者多個<exception>元素。
  
  <exception>元素用來設定java異常和異常處理類org.apache.struts.action,Exception Hander之間的對映。
  
  4<gloable-forwards>元素
  
  <global-forwards>元素用來宣告全域性的轉發關係,<global-forwards>有零個或多個<forward>元素組成。<forward>元素用於把一個邏輯對映到特定的URL
  
  屬性      描 述
  
  className  和<forward>元素對應的配置類,預設為org.apache.struts.action.ActionForWard
  
  name     轉發路徑的邏輯名,此項時必須的
  
  path     指定或者重定向的URI。此項時必須的,必須以”/”開頭
  
  redirect   此項是true,表示是執行重定向的****作,此項是false時,表示請求轉發。
  
  <global-forwards>
  <forward name="forward1" path="/Action1.do"/>
  <forward name="forward1" path="/Action2.do"/>
  </global-forwards>
  
  如果jsp1.jsp把請求轉發給Action1,可以使用以下程式碼:
  
  <html:link forward=”forward1”>
  
  或者<logic:forward name=”forward1”>
  
  如果Action1的execute()方法把請求轉發給JSP2.jsp,可以使用一下程式碼:
  
  return(mapping.findForward(“forward2”))
  
  5<action-mapping>元素
  
  <action-mapping>元素包含零個或者多個<action>元素。<action>元素描述了從特定的請求路徑到相應的Action類的對映。
  
  6<controller>元素
  
  <controller>元素用於配置ActionServlet。
  
  7< message-resources>元素
  
  <message-resources>元素用於配置Resource Bundle,Resource Budle用於存放本地化訊息檔案。
  
  Struts標籤
  
  HTML標籤
  
  標籤名        描述
  base         包裝HTML的base元素
  button        包裝HTML的 button型別的input元素
  cancel        包裝HTML cancel 按鈕
  checkbox       包裝HTML checkbox 型別的輸入域
  errors        有條件地顯示一些error訊息,顯示ActionErrors資訊
  file         包裝HTML檔案上傳輸入域
  form         定義HTML form 元素
  frame        包裝HTML frame 元素
  hidden        包裝HTML hidden 輸入域
  html         包裝 HTML中的 html 元素
  image        包裝 "image"型別的輸入域
  img         包裝HTML的 img 元素
  javascript      包裝根據ValidatorPlugIn提供的校驗規則所提供的javascript校驗指令碼
  link         包裝超連結
  messages       有條件地顯示一些提示資訊,顯示ActionMessages資訊
  multibox       包裝多選輸入框
  option        包裝一個選擇輸入框
  options       包裝一批選擇輸入框
  optionsCollection  包裝一批選擇輸入框集
  password       包裝密文輸入框
  radio        包裝單選輸入框
  reset        包裝“重置”功能的按鈕
  rewrite       包裝一個URL
  select        包裝一個選擇輸入框
  submit        包裝一個提交按鈕
  text         包裝一個文字輸入框
  textarea       包裝一個備註輸入框
  
  ActionForm
  ActionForm 的要求
  
  建立一個ActionForm 並不困難,但是你的類必須符合一些要求:
  
  ActionForm 必須擴充套件自org.apache.struts.ActionForm。基類ActionForm 是不能例項化的。
  
  ActionForm 必須為每個應該從請求中收集的HTML控制元件定義一個公共屬性。
  
  (Struts 1.0 要求每個屬性都要mutator 和accessor 。Struts 1.1 則沒有如此嚴格)
  
  ActionForm還可能要符合一些可選的要求:
  
  如果你要求ActionForm 在傳遞屬性到Action之前校驗它們,你就必須實現validate
  
  方法;
  
  如果想在組裝前初始化屬性,必須實現reset , 它在ActionForm 組裝前被呼叫;
  
  動態ActionForm
  
  ActionForm 作為型別轉換器
  
  ActionForm的一個強制點是應該使用String 和boolean屬性。實際上,這意味著屬性
  
  必須得從一種轉換到另一種型別。大部分應用也需要一些屬性,比如電話號碼或者數量,以
  
  一種格式化的方式出現。核心Java 包提供一些工具來做這種事情,但是要清楚地將他們集
  
  成到應用中仍然是一個挑戰。
  
  Struts 開發人員經常在ActionForm中包含helper方法,來進行型別轉換。helper 方法
  
  可以有很多種實現方式,這我們在5.6種敘述。
  
  5.2.6 ActionForm 作為防火牆
  
  當請求提交時,ActionServlet 使用一個自動組裝機制來從請求引數中設定請求的
  
  ActionForm屬性。這讓你可以通過控制哪個ActionForm 屬性被暴露來控制哪個請求引數
  
  是可接受的。這也意味著如果你的ActionForm 的粗心設計你可能失去控制哪個引數可以接
  
  受的能力。ActionForm 一定不能包含看起來像是一個JavaBean 屬性,但不能從HTTP 請
  
  求設定的屬性方法。
  
  5.3.4 ActionForm 可以巢狀其它bean
  
  因為Struts 標籤擴充套件和自動組裝機制都支援點號語法來從ActionForm訪問其它
  
  bean。這是一個方便的方式,可以通過ActionForm來組裝存在的bean。在JSP 頁面, 你可
  
  以象這樣引用一個巢狀的bean:
  
  <html:text
  propety="values.telephoneText"
  size="14"
  maxlength="14"/>
  
  5.7.2 分發(Dispatch )
  
  Struts 開發人員通常使用同一個Action處理相關的****作。一個通常做法來選擇****作是在HTML表單中使用隱藏屬性。BaseForm 的dispatch 屬性也可用作這個目的:
  public void setDispatch(String dispatch);
  public String getDispatch();
  
  Struts 配置提供連個級別巢狀的ActionForward:
  
  Global (全域性) ActionForward對整個應用中的所有Action 物件均有效;
  
  Local (區域性) ActionForward 則在ActionMapping 元素中定義。僅對那些在這個
  
  ActionMapping中呼叫的Action物件有效。
  
  從Action 物件內部來看,forward 通常像這樣來選擇:
  ActionForward forward = mapping.findForward("continue");