日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

struts配置

系統(tǒng) 1837 0

Action, ActionForm, ActionForward ,這三個對象構(gòu)成了Struts 的核心。
Struts 最核心的控制器是ActionServlet ,該Servlet 攔截用戶請求,井將用戶請求轉(zhuǎn)入到Struts 體系內(nèi)。
一、配置ActionServlet
ActionServlet 是一個標準的Servlet ,在web.xml 文件中配置,該Servlet 用于攔所有的HTTP 請求。因此,應(yīng)將該Servlet 配置成自啟動Servlet ,即為該Servlet 配置load-on-startup 屬性。
注意:在應(yīng)用Struts 的很多場景下,為Servlet 配直load-on-startup 屬性都是必需的。因此,筆者建議應(yīng)為ServletAction 配直load-an-startup 屬性。
在web.xml 文件中配置ActionServlet 應(yīng)增加如下片段:

Xml代碼 復(fù)制代碼
  1. <!--?將ActionServlet配置成自啟動的Servlet?--> ??
  2. < servlet > ??
  3. ???? <!--?指定Servlet?的名字?--> ??
  4. ???? < servlet-name > actionSevlet </ servlet-name > ??
  5. ???? <!--?指定該Servlet?的實現(xiàn)類?--> ??
  6. ???? < servlet-class > ??
  7. ????????org.apache.struts.action.ActionServlet ??
  8. ???? </ servlet-class > ??
  9. ???? <!--?配置自啟動的級別?--> ??
  10. ???? < load-on-startup > 2 </ load-on-startup > ??
  11. </ servlet > ??
  12. < servlet-mapping > ??
  13. ???? <!--?配置ActionServlet的URL?映射?--> ??
  14. ???? < servlet-name > actionSevlet </ servlet-name > ??
  15. ???? <!--?所有以.do?結(jié)尾的請求由ActionServlet攔截?--> ??
  16. ???? < url-pattern > *.do </ url-pattern > ??
  17. </ servlet-mapping > ??


該ActionServlet作為一個標準Servlet,配置在Web 應(yīng)用中,負責(zé)攔截用戶請求。該Servlet 還有加載Struts 配置文件的責(zé)任。但這里并未告訴它如何加載Struts 的配置文
件,以及Struts 的配置文件放在哪里及文件名是什么。ActionServlet默認加載WEB-INF 下的struts-config.xml文件。如果需要Struts 的配置文件不在WEB-INF路徑下,或者改變了文件名,則應(yīng)采用如下方式配置:

Xml代碼 復(fù)制代碼
  1. < servlet > ??
  2. ???? < servlet-name > actionSevlet </ servlet-name > ??
  3. ???? < servlet-class > ??
  4. ????????org.apache.struts.action.ActionServlet ??
  5. ???? </ servlet-class > ??
  6. ???? < init-param > ??
  7. ???????? < param-name > config </ param-name > ??
  8. ???????? < param-value > /WEB-INF/struts-config-user.xml </ param-value > ??
  9. ???? </ init-param > ??
  10. ???? < load-on-startup > 2 </ load-on-startup > ??
  11. </ servlet > ??


在上面的配置中,指定了ActionServlet 的配置文件: struts-config-user.xml文件,該文件作為init-param參數(shù)載入,載入時候指定了參數(shù)名:config ,config 是Struts 固定的參數(shù)名, struts負責(zé)解析該參數(shù),并加載該參數(shù)的指定的配置文件。Struts 支持使用多個配置文件,當(dāng)有多個配置文件時,應(yīng)將不同的配置文件配置成不同的模塊,并指定不同的URI。下面的片段配置了兩個配置文件:

Xml代碼 復(fù)制代碼
  1. < servlet > ??
  2. ???? <!--?ActionServlet?的名?--> ??
  3. ???? < servlet-name > actionSevlet </ servlet-name > ??
  4. ???? <!--?配置Servlet?的實現(xiàn)類?--> ??
  5. ???? < servlet-class > ??
  6. ????????org.apache.struts.action.ActionServlet ??
  7. ???? </ servlet-class > ??
  8. ???? <!--?指定Struts?的第一個配置文件?--> ??
  9. ???? < init-param > ??
  10. ???????? <!--?指定配置文件的映射?--> ??
  11. ???????? < param-name > config </ param-name > ??
  12. ???????? < param-value > /WEB-INF/struts-con工fgl.xml </ param-value > ??
  13. ???? </ init-param > ??
  14. ???? <!--?指定Struts?的第二個配置文件?--> ??
  15. ???? < init-param > ??
  16. ???????? <!--?指定配置文件的映射?--> ??
  17. ???????? < param-name > config/wawa </ param-name > ??
  18. ???????? < param-value > /WEB-INF/struts-config2.xml </ param-value > ??
  19. ???? </ init-param > ??
  20. ???? <!--?將ActionServlet配置成自啟動Servlet?--> ??
  21. ???? < load-on-startup > 2 </ load-on-startup > ??
  22. </ servlet > ??


上面的配置片段中指定了兩個配置文件:struts-config l.xml 和struts-config2.xml 文件。這兩個配置文件分別被配置到config 和config/wawa 的路徑下。表明將struts-config 1.xml 中的Action 映射到應(yīng)用的根路徑下,而struts-config2.xml 文件中的Action 則被映射到應(yīng)用的wawa 子路徑下。也就是說wawa 將作為系統(tǒng)的一個模塊使用。
二、配置ActionForm
配置ActionForm ,必須包含ActionForm 類才行。Struts 要求ActionForm 必須繼承Struts 的基類: org.apache.struts.action.ActionForm,ActionForm 的實現(xiàn)非常簡單,該類只是一個普通的JavaBean,只要為每個屬性提供對應(yīng)的setter 和getter 方法即可。根據(jù)前面的講解, ActionForm 用于封裝用戶的請求參數(shù),而請求參數(shù)是通過JSP 頁面的表單域傳遞過來的。因此應(yīng)保證ActionForm 的參數(shù)與表單域的名字相同。
注意: JavaB ean 的參數(shù)是根據(jù)getter 、setter 方法確定的。如果希望有一個A 的屬性,則應(yīng)該提供getA 和setA 的方法。
(1)ActionForm的實現(xiàn)
ActionForm 的屬性必須與JSP 頁面的表單域相同。本示例的表單包含如下兩個表單域:
? usemame
? password
因此, ActionForm 必須繼承org.apache.struts.action.ActionForm,并為這兩個域提供對應(yīng)的setter 和getter 方法,下面是ActionForm 的源代碼:

Java代碼 復(fù)制代碼
  1. import ?org.apache.struts.action.ActionForm; ??
  2. public ? class ?LoginForm? extends ?ActionForm?{ ??
  3. ???? private ?String?username; ??
  4. ???? private ?String?password; ??
  5. ??
  6. ???? //?表單域username對應(yīng)的setter?方法 ??
  7. ???? /** ?
  8. ?????*?@return?the?username ?
  9. ?????*/ ??
  10. ???? public ?String?getUsername()?{ ??
  11. ???????? return ?username; ??
  12. ????} ??
  13. ??
  14. ???? /** ?
  15. ?????*?@param?username ?
  16. ?????*????????????the?username?to?set ?
  17. ?????*/ ??
  18. ???? public ? void ?setUsername(String?username)?{ ??
  19. ???????? this .username?=?username; ??
  20. ????} ??
  21. ??
  22. ???? /** ?
  23. ?????*?@return?the?password ?
  24. ?????*/ ??
  25. ???? public ?String?getPassword()?{ ??
  26. ???????? return ?password; ??
  27. ????} ??
  28. ??
  29. ???? /** ?
  30. ?????*?@param?password ?
  31. ?????*????????????the?password?to?set ?
  32. ?????*/ ??
  33. ???? public ? void ?setPassword(String?password)?{ ??
  34. ???????? this .password?=?password; ??
  35. ????} ??
  36. ??
  37. }??


另外,該ActionForm 的兩個屬性名可以不是usemame 和password。只要提供了usemame 和password 的setter 和getter 方法即可。
注意: FormBean 類應(yīng)盡量聲明成public。
(2)ActionForm 的配置
所有的ActionForm 都被配置在struts-config.xml 文件中,該文件包括了一個form-beans 的元素,該元素內(nèi)定義了所有的ActionForm,每個ActionForm 對應(yīng)一個form-bean 元素。
為了定義LoginForm. 必須在struts-config.xml文件中增加如下代碼:

Xml代碼 復(fù)制代碼
  1. <!--?用于定義所有的ActionForm?--> ??
  2. < form-beans > ??
  3. ???? <!--?定義ActionForm,至少指定兩個屬性:?name?,?type--> ??
  4. ???? < form-bean ? name = "loginForm" ? type = "lee.LoginForm" ? /> ??
  5. </ form-beans > ??


配置ActionForm非常簡單,只需指定ActionForm 的name 屬性即可。該屬性定義了ActionForm的id. 用于標識該Form; 另外還需要一個type 屬性,該屬性定義了ActionForm的實現(xiàn)類。
下面將介紹Action 如何使用該ActionForm. 以及Action 如何與該ActionForm關(guān)聯(lián)。
三、配置Action
Action 的配置比ActionForm 相對復(fù)雜一點,因為Action 負責(zé)管理與之關(guān)聯(lián)的ActionForm. 它不僅需要配置實現(xiàn)類,還需要配置Action 的path 屬性,該屬性用于被用
戶請求。對于只需在本Action 內(nèi)有效的Forward. 還應(yīng)在Action 元素內(nèi)配置局部Forward。
(1)Action 的實現(xiàn)
通過ActionForm. 可使Action 無須從HTTP 請求中解析參數(shù)。因為所有的參數(shù)都被封裝在ActionForm中,下面是Action 從AcitionForm 取得請求參數(shù)的源代碼:

Java代碼 復(fù)制代碼
  1. import ?javax.servlet.http.HttpServletRequest; ??
  2. import ?javax.servlet.http.HttpServletResponse; ??
  3. import ?org.apache.struts.action.Action; ??
  4. import ?org.apache.struts.action.ActionForm; ??
  5. import ?org.apache.struts.action.ActionForward; ??
  6. import ?org.apache.struts.action.ActionMapping; ??
  7. public ? class ?LoginAction? extends ?Action?{ ??
  8. ???? //?必須重寫該核心方法,該方法actionForm?將表單的請求參數(shù)封裝成值對象 ??
  9. ???? public ?ActionForward?execute(ActionMapping?mapping,?ActionForm?form, ??
  10. ????????????HttpServletRequest?request,?HttpServletResponse?response) ??
  11. ???????????? throws ?Exception?{ ??
  12. ???????? //將ActionForm強制類型轉(zhuǎn)換為LoginForm ??
  13. ????????LoginForm?loginForm?=?(LoginForm)?form; ??
  14. ???????? //?從ActionForm中解析出請求參數(shù):?username ??
  15. ????????String?username?=?loginForm.getUsername(); ??
  16. ???????? //?從ActionForm中解析出請求參數(shù):?password ??
  17. ????????String?pass?=?loginForm.getUsername(); ??
  18. ???????? //后面的處理與前一個示例的Action?相同。 ??
  19. ????????... ??
  20. ????} ??
  21. }??


該Action 從轉(zhuǎn)發(fā)過來的ActionForm 中解析請求參數(shù),對應(yīng)的ActionForm 則由ActionServlet 在接收到用戶請求時,負責(zé)實例化。
實際的過程是: ActionServlet 攔截到用戶請求后,根據(jù)用戶的請求,在配置文件中查找對應(yīng)的Action , Action 的name 屬性指定了用于封裝請求參數(shù)的ActionForm; 然后ActionServlet 將創(chuàng)建默認的ActionForm 實例,并調(diào)用對應(yīng)的setter 方法完成ActionForm的初始化。
ActionServlet 在分發(fā)用戶請求時,也將對應(yīng)ActionForm 的實例一同分發(fā)過來。
(2)Action 的配置
Action 需要配置如下幾個方面。
? Action 的path: ActionServlet 根據(jù)該屬性來轉(zhuǎn)發(fā)用戶的請求,即將用戶請求轉(zhuǎn)發(fā)與之同名的Action 。同名的意思是:將請求的.do 后綴去掉,匹配Action 的path屬性值。
? Action 的name: 此處的name 屬性并不是Action 本身的名字,而是與Action 關(guān)聯(lián)的ActionForm。因此該name 屬性必須是前面存在的ActionForm 名。
? Action 的type: 該屬性用于指定Action 的實現(xiàn)類,也就是負責(zé)處理用戶請求的業(yè)
務(wù)控制器。
? 局部Forward: Action 的轉(zhuǎn)發(fā)并沒有轉(zhuǎn)發(fā)到實際的JSP 資源,而是轉(zhuǎn)發(fā)到邏輯名,即Forward 名。在Action 內(nèi)配置的Forward 都是局部Forward (該Forward 只在該Action 內(nèi)有效)。
下面是該Action 的配置代碼:

Xml代碼 復(fù)制代碼
  1. <!--?該元素里配置所有的Action?--> ??
  2. < action-mappings > ??
  3. ???? <!--?配置Action.?指定了path?,?name?,?type?等屬性?--> ??
  4. ???? < action ? path = "/login" ? type = "lee.LoginAction" ? name = "loginForm" > ??
  5. ???????? <!--?配置局部Forward?--> ??
  6. ???????? < forward ? name = "welcome" ? path = "/WEB-INF/jsp/welcome.jsp" ? /> ??
  7. ???????? < forward ? name = "input" ? path = "/login.jsp" ? /> ??
  8. ???? </ action > ??
  9. </ action-mappings > ??


四、配置Forward
正如前面所講, Forward 分局部Forw缸d 和全局Forward 兩種。前者在Action 里配置,僅對該Action 有效:后者單獨配置,對所有的Action 都有效。
配置Forward 非常簡單,主要需要指定以下三個屬性。
? name: 該Forward 的邏輯名。
? path: 該Forward 映射到的JSP 資源。
? redirect: 是否使用重定向。
局部Forward 作為Action 的子元素配置;全局Forward 配置在global-forwards 元素里。
下面是配置全局Forward 的代碼:

Xml代碼 復(fù)制代碼
  1. <!--?配置全局Forward?--> ??
  2. < global-forwards > ??
  3. ???? <!--?配置Forward對象的name?和path?屬性?--> ??
  4. ???? < forward ? name = "error" ? path = "/WEB-INF/jsp/error.jsp" ? /> ??
  5. </ global-forwards > ??


上面的配置代碼中,配置了一個全局Forward,該Forward 可以被所有的Action 訪問。通常,只將全局資源配置成全局Forward。當(dāng)每個Action 在轉(zhuǎn)發(fā)時,首先在局部Forward 中查找與之對應(yīng)的Forward,如果在局部Forward 中找不到對應(yīng)的Forward 對象,才會到全局Forward 中查找。因此,局部Forward 可以覆蓋全局Forward。
下面提供了該應(yīng)用的struts-config.xm1文件的全部源代碼:

Xml代碼 復(fù)制代碼
  1. <? xml ? version = "1.0" ? encoding = "UTF-8" ?> ??
  2. <!--?Struts?配置文件的文件頭,包含DTD?等信息?--> ??
  3. <!DOCTYPE?struts-config?PUBLIC?"-//Apache?Software?Foundation//DTD?Struts?Configuration?1.2//EN"?"http://struts.apache.org/dtds/struts-config_1_2.dtd" > ??
  4. <!--Struts?配置文件的根元素?--> ??
  5. < struts-config > ??
  6. ???? <!--配置所有的ActionForm?--> ??
  7. ???? < form-beans > ??
  8. ???????? <!--配置第一個ActionForm,指定ActionForm的name?和type?屬性?--> ??
  9. ???????? < form-bean ? name = "loginForm" ? type = "lee.LoginForm" ? /> ??
  10. ???? </ form-beans > ??
  11. ???? <!--配置全局Forward對象?--> ??
  12. ???? < global-forwards > ??
  13. ???????? <!--該Forward對象的name?屬性為error.?映射資源為/WEB-INF/jsp/error.jsp?--> ??
  14. ???????? < forward ? name = "error" ? path = "/WEB-INF/jsp/error.jsp" ? /> ??
  15. ???? </ global-forwards > ??
  16. ???? <!--此處配置所有的Action?映射--> ??
  17. ???? < action-mappings > ??
  18. ???????? <!--配置Action?的path.?type?屬性name?屬性配置Action?對應(yīng)的ActionForm--> ??
  19. ???????? < action ? path = "/login" ? type = "lee.LoginAction" ? name = "loginForm" > ??
  20. ???????????? <!--還配置了兩個局部Forward.?這兩個局部Forward僅對該Action有效--> ??
  21. ???????????? < forward ? name = "welcome" ? path = "/WEB-INF/jsp/welcome.jsp" ? /> ??
  22. ???????????? < forward ? name = "input" ? path = "/login.jsp" ? /> ??
  23. ???????? </ action > ??
  24. ???? </ action-mappings > ??
  25. </ struts-config > ??

?

struts配置


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 伊川县| 新河县| 南陵县| 宜川县| 临沭县| 乌兰浩特市| 武义县| 红安县| 清苑县| 潜山县| 奉贤区| 景谷| 上饶市| 丹东市| 米易县| 金秀| 莱阳市| 灵璧县| 泸定县| 张掖市| 青阳县| 丽水市| 黔西县| 徐州市| 连江县| 康保县| 清苑县| 马尔康县| 礼泉县| 精河县| 兴隆县| 巴塘县| 政和县| 天峻县| 石柱| 龙海市| 平武县| 徐水县| 惠安县| 金沙县| 务川|