大大毛 的筆記

            DDM's Note

          哪怕沒有辦法一定有說法,
          就算沒有鴿子一定有烏鴉,
          固執(zhí)無罪 夢想有價(jià),
          讓他們驚訝.

          posts - 14, comments - 23, trackbacks - 0, articles - 58
             :: 首頁 ::  :: 聯(lián)系 ::  :: 管理

          精通Struts筆記--04.01

          Posted on 2006-08-02 11:42 大大毛 閱讀(772) 評(píng)論(0)  編輯  收藏 所屬分類: Struts

          ???Struts應(yīng)用的配置
          ??????Struts的配置是兩個(gè)文件web.xml以及struts配置文件

          ?????? 1.web.xml
          ?????????配置ActionServlet,其方法與配置普通的Servlet一致,涉及的元素是<servlet> (名稱,類,參數(shù)),<servlet-mapping> (servlet所要處理的URL),<taglib> (客戶化標(biāo)簽庫)
          這里 ActionServlet配置
          ??????可以看到,<servlet>標(biāo)簽與<servlet-mapping>相對(duì)應(yīng),由于Struts只支持配一個(gè)ActionServlet,因此只能出現(xiàn)一對(duì)。
          ??????ActionServlet支持用戶類,只需要改變這里的<servlet-class>即可使用自定義類;
          ??????<servlet>/<init-param>標(biāo)簽中,config代表Struts配置文件所在的位置,這里需要注意 config/moduleA的寫法,它代表著一個(gè)模塊moduleA以及支持該模塊的配置文件
          ??????<init-param>可以具有多個(gè),在這里可以保存一些客戶化的參數(shù),使用servlet.getInitParameter("paramname")的方式即可以取得。
          ??????<url-parttern>代表該servlet所要處理的URL,支持通配符,*.do代表所有以 .do 為后綴的請求都交由該servlet來處理

          標(biāo)簽庫配置
          ??????<taglib-uri>:指定標(biāo)簽庫的相對(duì)或絕對(duì)URI地址,即在JSP頁面中引用標(biāo)簽時(shí),需與之對(duì)應(yīng);
          ??????<taglib-location>:指定標(biāo)簽庫的物理位置,即實(shí)際存放在什么地方。

          歡迎文件配置
          ??????<welcome-file>:web應(yīng)用的歡迎文件,即只輸入了應(yīng)用的根目錄時(shí)響應(yīng)的文件,按先后順序查找;
          ??????該元素不能被配置成Action,如果有此需要的話則應(yīng)在這里配置一個(gè)JSP,并在JSP里面<logic:forward name="key" />進(jìn)行跳轉(zhuǎn)

          錯(cuò)誤代碼配置
          ??????<error-page>:指定web出錯(cuò)后的處理頁面,常見的錯(cuò)誤多是404:找不到目錄或文件,500:服務(wù)器內(nèi)部錯(cuò)誤;
          ??????<error-code>:指定需要處理的錯(cuò)誤號(hào);
          ??????<location>:指定出錯(cuò)后跳轉(zhuǎn)的處理頁面,這里可以設(shè)置JSP頁面。

          異常捕獲配置
          ??????捕獲的異常:
          ?????????RuntimeException 或 Error
          ?????????ServletException
          ?????????IOException


          ??????
          2.Struts配置文件
          ?????????Struts配置的相關(guān)類位于org.apache.struts.config包中,其中ModuleConfig接口是整個(gè)樹的頂點(diǎn),各種配置信息都放入ModuleConfig的實(shí)現(xiàn)類中(由于存在著多模塊,因此會(huì)有多個(gè)實(shí)現(xiàn))。因此從ModuleConfig接口中可以取得各種配置信息,當(dāng)然需要先通過selectModule()來選擇需要操作的具體實(shí)現(xiàn)。
          ?????????還需要注意的一點(diǎn)就是在Struts配置文件里面DTD文件嚴(yán)格定義了各個(gè)元素出現(xiàn)的先后順序。
          datasources元素
          ??????<data-sources>:配置應(yīng)用的數(shù)據(jù)源,可以包含多個(gè)<data-source>子標(biāo)簽
          ??????<data-source>:數(shù)據(jù)源的參數(shù),由于可以有多個(gè)數(shù)據(jù)源,因此<data-source>有一個(gè)屬性 key 用于區(qū)分,如果沒有 key 屬性,Struts將此做為缺省的數(shù)據(jù)源,該缺省數(shù)據(jù)源實(shí)際上也是有 key 值的,對(duì)應(yīng)于Globals.DATA_SOURCE_KEY的值,實(shí)際值是 "org.apache.struts.action.DATA_SOURCE"字串。
          ?????????:key 屬性的值不允許重復(fù),自行指定key屬性后,在Action中操作為 this.getDataSource(request,key),在其它地方則需要從ServletContext(application范圍)中用 (DataSource)getAttribute(key),參數(shù)key的值與該屬性值完全相同,因此在配置文件中該屬性應(yīng)該具有一定的區(qū)別性,如"datasource.other"等,以避免在引用時(shí)出現(xiàn)麻煩,另外如果在配置文件中各個(gè)data-source都配置了key屬性,那么在應(yīng)用僅能通過對(duì)應(yīng)的key值進(jìn)行調(diào)用,而不會(huì)存在著缺省數(shù)據(jù)源("org.apache.struts.action.DATA_SOURCE");
          ?????????:使用Myeclipse插件配DBCP時(shí)還需要手工修改
          幾處

          這里 form-beans元素(普通)
          ??????<form-beans>:配置ActionForm,可以包含多個(gè)<form-bean>子標(biāo)簽
          ??????<form-bean>:ActionFormBean的參數(shù)。
          ?????????className:該標(biāo)簽對(duì)應(yīng)的配置類,Struts中與之對(duì)應(yīng)的類是"org.apache.struts.config.FormBeanConfig",有需要時(shí)也可自行指定
          ?????????name:該ActionForm的唯一標(biāo)識(shí)符
          ?????????type:ActionForm的類名

          form-bean元素(動(dòng)態(tài))
          ??????<form-bean>:動(dòng)態(tài)的ActionForm的type="org.apache.struts.action.DynaActionForm"或子類;
          ??????<form-property>:配置ActionForm的成員屬性
          ?????????name:屬性名稱
          ?????????type:屬性類型,必須是對(duì)象類型。如果是Java簡單數(shù)據(jù)類型需要使用包裝類
          ?????????inital:初始值,可缺省,與類的屬性可以不用初始化的特性相同
          ??????另:這個(gè)動(dòng)態(tài)ActionForm還很有些名堂,現(xiàn)在只能逐步推進(jìn)了

          這里 global-exceptions元素
          ??????<global-exception>:配置全局異常處理,可以包含多個(gè)<exception>子標(biāo)簽,其配置方法與局部(Action)異常配置相同,但是作用域不同,類似于Java類的成員屬性與同名方法形參作用域之間的關(guān)系,對(duì)照想想setter就清楚了
          ??????<exception>:配置異常處理
          ?????????className:與<exception>標(biāo)簽對(duì)應(yīng)的配置類,缺省是"org.apache.struts.config.ExceptionConfig";
          ?????????handler:異常處理類,缺省是"org.apache.struts.action.ExceptionHandler";
          ?????????key:描述異常的消息在資源文件中的key;
          ?????????bundle:資源文件,可缺省;
          ?????????path:Struts捕獲到指定類型的異常后,轉(zhuǎn)發(fā)的處理路徑;
          ?????????scope:ActionMessages實(shí)例的存放范圍,缺省為"request",還可取值"session";
          ?????????type:異常的類型

          這里 global-forwards元素
          ??????<global-forwards>:配置全局forward,可包含多個(gè)<forward>子標(biāo)簽。
          ??????<forward>:配置forward
          ?????????className:與<forward>標(biāo)簽對(duì)應(yīng)的配置類,缺省為"org.apache.struts.action.ActionForward";
          ?????????contextRelative:缺省值為"false",表示path相對(duì)于應(yīng)用;當(dāng)取值為"true"時(shí),表示path屬性給出的是相對(duì)于當(dāng)前上下文的URL,如果配置用于子模塊之間切換的forward,則此項(xiàng)需設(shè)為"true";
          ?????????name:名稱;
          ?????????path:轉(zhuǎn)發(fā)的路徑,必須以"/"打頭
          ?????????redirect:缺省值為"false",表示請求轉(zhuǎn)發(fā),取值"true"時(shí),表示重定向,子模塊切換用的forward,此項(xiàng)需設(shè)為"true"?

          action-mappings元素
          ??????<action-mappings>:配置Action,可包含多個(gè)<action>子標(biāo)簽
          ??????<action>:配置Action
          ?????????className:標(biāo)簽對(duì)應(yīng)的配置類,缺省為"org.apache.struts.action.ActionMapping"
          ?????????attribute:name屬性所對(duì)應(yīng)的ActionForm實(shí)例的 key ,通過這個(gè)attribute操作它,如 (LoginForm)request.getAttribute("loginForm"); ;
          ?????????input:輸入U(xiǎn)RL,轉(zhuǎn)發(fā)到該 Action 時(shí)如果 ActionForm.validate() 檢驗(yàn)失敗,Action 將把請求轉(zhuǎn)發(fā)到該URL,請看?;
          ?????????name:與Action對(duì)應(yīng)的ActionForm的 name ,與<form-bean>標(biāo)簽的name屬性相匹配;
          ?????????path:Action的訪問路徑,必須以"/"打頭,不需要后綴
          ?????????scope:與Action對(duì)應(yīng)的ActionForm的存在范圍,缺省是"session",可取值"request";
          ?????????validate:是否需要調(diào)用ActionForm的 validate() 方法進(jìn)行檢驗(yàn),缺省是"true",可取值"false",ActionForm將不會(huì)對(duì)提交的數(shù)據(jù)進(jìn)行表單校驗(yàn);
          ?????????parameter:可附加的參數(shù),在Action中可以用 mapping.getParameter() 來獲取;
          ?????????roles:指定允許調(diào)用該Action的安全角色,與容器設(shè)置的安全角色匹配,由容器來判斷;
          ?????????unknown:表示是否處理用戶發(fā)出的所有無效的Action URL,默認(rèn)為"false";
          ?????????type:Action的類名;
          ?????????forward:指定轉(zhuǎn)發(fā)的URL,相當(dāng)于使用ForwardAction
          ?????????include:指定包含的URL,相當(dāng)于使用IncludeAction
          ?????????<exception>:Action局部異常捕獲,參看<global-exceptions>小節(jié)
          ?????????<forward>:Action局部forward,參看<global-forwards>小節(jié)
          ??????注意:
          ?????????<action>標(biāo)簽的type,forward,include三種屬性互斥。

          controller元素
          ??????<controller>:配置ActionServlet
          ?????????className:標(biāo)簽的配置類,缺省為"org.apache.struts.config.ControllerConfig";
          ?????????contentType:指定響應(yīng)結(jié)果的內(nèi)容類型和字符編碼,如果在Action和JSP中設(shè)置將會(huì)覆蓋掉該設(shè)置;
          ?????????locale:指定是否把 Locale 對(duì)象保存到session中,默認(rèn)值為"false";
          ?????????nochache:是否在客戶端緩存,缺省為"false",可選"true",struts將在響應(yīng)中加入特定的頭參數(shù)以防止頁面被緩存
          ?????????processorClass:指定負(fù)責(zé)處理 Request 的類,缺省為"org.apache.struts.action.RequestProcessor",如果有多模塊則應(yīng)在各模塊指定自己的處理類;
          ?????????bufferSize:指定上傳文件的輸入緩沖,默認(rèn)為"4096";
          ?????????tempDir:指定處理上傳文件的臨時(shí)工作目錄,Servlet容器可以自行分配。

          message-resources元素
          ??????<messge-resources>:配置資源文件,這個(gè)標(biāo)簽與以上的幾個(gè)有點(diǎn)不同,他本身可以存在多個(gè)
          ?????????className:標(biāo)簽的配置類,缺省為"org.apache.struts.config.MessageResourcesConfig";
          ?????????factory:資源的工廠類,缺省為"org.apache.struts.util.PropertyMessageResourcesFactory";
          ?????????key:指定 Resource Bundle 存放在 ServletContext 中的 key,缺省為Globals.MESSAGES_KEY的值 "org.apache.struts.MESSAGE" ,可以自行指定key,使用如resource.bundle01加以區(qū)別,可通過 (MessageResources)servletContext.getAttribute(key) 拿到,Struts提供的客戶化標(biāo)簽中常常可以見到一個(gè) bundle 屬性,該屬性即對(duì)應(yīng)于這里的 key 值;
          ?????????null:指定如何處理未知的消息,缺省為"true",返回空字串,可選"false",將返回類似"???key???"的字串;
          ?????????parameter:資源文件的存放路徑。

          plug-in元素
          ??????<plug-in>:配置插件,className屬性指定具體的插件類,struts配置文件中可配置多個(gè)插件,初始化順序由書寫順序決定
          ??????<set-property>:設(shè)置插件的屬性,可具有多個(gè),該插件類必須實(shí)現(xiàn)與本屬性對(duì)應(yīng)的setter/getter,在Struts初始化時(shí)自動(dòng)set。
          ??????插件必須實(shí)現(xiàn) org.apache.struts.action.PlugIn 接口,該接口具有兩個(gè)方法:
          public?void?init(ActionServlet?servlet,ApplicationConfig?config)?throws?ServletException;
          ??????init方法將于Struts應(yīng)用啟動(dòng)時(shí)被調(diào)用,是一個(gè)初始化客戶資源的接口,而且由Struts傳入的參數(shù)也便于設(shè)置各種環(huán)境。

          public?void?destroy();
          ??????destroy方法于Struts應(yīng)用關(guān)閉時(shí)調(diào)用,是一個(gè)釋放客戶資源的接口。


          ??????多應(yīng)用模塊的配置
          ??????多應(yīng)用模塊的劃分有助于應(yīng)用的并行開發(fā),提高效率。
          ??????步驟:
          ?????????1.為每個(gè)子應(yīng)用創(chuàng)建單獨(dú)的 Struts 配置文件;
          ?????????2.在 web.xml 中配置每個(gè)子應(yīng)用的信息,參看 這里
          ?????????3.應(yīng)用中實(shí)現(xiàn)切換:<forward> 或 在<action>標(biāo)簽中使用 SwitchAction 來實(shí)現(xiàn)切換

          i am ddm

          主站蜘蛛池模板: 大姚县| 嫩江县| 曲阳县| 彝良县| 满洲里市| 大安市| 遂宁市| 冕宁县| 绥中县| 新龙县| 宁波市| 丰县| 迭部县| 花莲县| 阿坝县| 遂川县| 舟山市| 甘洛县| 山西省| 普安县| 玉山县| 新泰市| 富蕴县| 东安县| 嘉黎县| 旬阳县| 东兰县| 桂林市| 贵南县| 丰都县| 通海县| 永靖县| 肥乡县| 洪洞县| 太康县| 尤溪县| 东乡族自治县| 宜丰县| 鲜城| 密云县| 昆山市|