国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

JBuilder2005 Struts深度體驗(yàn)之改造

2019-11-18 12:54:31
字體:
供稿:網(wǎng)友

  用ActionForm截獲登錄表單數(shù)據(jù)
  
  原登錄模塊用bookstore.User描述login.jsp登錄頁面表單的數(shù)據(jù),在switch.jsp程序中通過<jsp:useBean>標(biāo)簽獲取login.jsp表單的數(shù)據(jù)。其實(shí)User類相當(dāng)于Struts框架中的模型,我們將通過一個ActionForm更好地實(shí)現(xiàn)這個功能。
  
  ActionForm和Bean一樣以屬性名匹配的映射機(jī)制從HTTP請求中填充對象數(shù)據(jù),但ActionForm比一般的Bean提供了更多的功能,Struts答應(yīng)ActionForm通過validate()方法進(jìn)行自校驗(yàn),當(dāng)數(shù)據(jù)不合法時自動轉(zhuǎn)向到輸出界面,此外還可以通過reset()方法,在數(shù)據(jù)填充前復(fù)位屬性值。
  
  下面我們就來創(chuàng)建UserActionForm,替換User的功能,建立起Struts框架中的"數(shù)據(jù)模型"。
  
  1.指定ActionForm的Web模塊及類信息
  
  File->New...->W(wǎng)eb->在Web頁中雙擊ActionForm圖標(biāo),彈出如圖 6所示的對話框:
   JBuilder2005 Struts深度體驗(yàn)之改造(圖一)
  圖 6 創(chuàng)建UserActionForm
  
  ·Struts config:我們前面有提到Struts1.1支持多個配置文件,所以你在這兒可以選擇使用哪個Struts配置文件。因?yàn)槲覀儸F(xiàn)在還沒有定義多個Struts配置文件,所以只得使用struts-config.xml。在開發(fā)新增圖書的功能時,我們將定義另一個配置文件。
  
  ·ActionForm:ActionForm的類名,這里我們填入UserActionForm。
  
  按Next到下一步。
  
  2.定義ActionForm屬性
   JBuilder2005 Struts深度體驗(yàn)之改造(圖二)
  圖 7 定義ActionForm屬性
  
  通過Add...按鈕為UserActionForm增加4個屬性,如圖 7所示。非凡的,假如這個ActionForm所對應(yīng)的入口頁面已經(jīng)創(chuàng)建,你也可以直接通過Add from JSP...按鈕,選擇一個JSP頁面,JBuilder會分析這個頁面的表單,并將表單的數(shù)據(jù)組件名抽取為ActionForm的屬性。
  
  按Next到下一步。
  
  3.一些附加功能的定義
   JBuilder2005 Struts深度體驗(yàn)之改造(圖三)
  圖 8 附加功能定義
  
  在FormBeanName中為UserActionForm指定一個名字,一般接受JBuilder所提供的默認(rèn)名即可。這個名字將在struts-config.xml文件用來命名UserActionForm。
  
  ActionForm比一般javaBean強(qiáng)大的地方在于它可以進(jìn)行數(shù)據(jù)檢驗(yàn),還可以進(jìn)行數(shù)據(jù)復(fù)位。假如這個ActionForm最終要放到session中的,那么最好實(shí)現(xiàn)reset()方法,以復(fù)位ActionForm的數(shù)據(jù),否則屬性可能不會反映最新的值。這里, UserActionForm無需進(jìn)行數(shù)據(jù)有效性校驗(yàn),但由于UserActionForm最終需要放到session中,所以我們需要實(shí)現(xiàn)reset()方法。故此我們勾選Create/replace reset() method body選項(xiàng)。
  
  直接按Finish創(chuàng)建UserActionForm,再將User類的代碼拷貝過來,整改后的最終代碼如下所示:
  
  代碼清單 6 以ActionForm實(shí)現(xiàn)的User類
  
  1. package bookstore;
  2.
  3. import java.sql.*;
  4. import java.text.*;
  5. import java.util.Date;
  6. import javax.servlet.http.*;
  7. import org.apache.struts.action.*;
  8.
  9. public class UserActionForm
  10. extends ActionForm
  11. {
  12.  PRivate String userId;
  13.  private String passWord;
  14.  private String userName;
  15.  private String loginDatetime;
  16.  public String getPassword() {
  17.   return password;
  18.  }
  19.
  20.  …
  21.  //復(fù)位所有屬性值
  22.  public void reset(ActionMapping actionMapping,HttpServletRequest servletRequest) {
  23.   this.userId = null;
  24.   this.userName = null;
  25.   this.password = null;
  26.   this.loginDatetime = null;
  27. }
  
  此外,JBuilder自動在struts-conf.xml文件中通過<form-bean>描述ActionForm。UserActionForm必須和一個Action相關(guān)聯(lián),因?yàn)镠TTP請求通過Struts總控制器轉(zhuǎn)發(fā)給Action,Struts控制器一旦發(fā)現(xiàn)Action有一個對應(yīng)的ActionForm時,就用HTTP請求的數(shù)據(jù)填充這個ActionForm。
  
  用Action代替switch.jsp的控制轉(zhuǎn)換功能
  
  我們在前面已經(jīng)數(shù)落用switch.jsp實(shí)現(xiàn)請求轉(zhuǎn)換控制的缺點(diǎn),Struts框架的Action是實(shí)現(xiàn)請求轉(zhuǎn)換控制的最適合替代者。
  
  在這節(jié)里,我們就來創(chuàng)建一個名為LoginAction的Action,讓其完美的接替switch.jsp的工作。
  
  File->New...->W(wǎng)eb->在Web頁中雙擊Action圖標(biāo),啟動創(chuàng)建Action的向?qū)А?br />  
  1.指定Action名字及Web模塊
   JBuilder2005 Struts深度體驗(yàn)之改造(圖四)
  圖 9 指定Web模塊及Action名字
  
  在Action中鍵入LoginAction作為Action的類名,其中Base class的下拉框中有許多Action基類可供選擇,它們用于不同的場合,這些選項(xiàng)是:
  
  ·org.apache.struts.action.Action:標(biāo)準(zhǔn)的Action。
  
  ·org.apache.struts.actions.ForwardAction:相當(dāng)于JSP的<jsp:forward>,方便Struts控制器進(jìn)行預(yù)處理。此外,從學(xué)究的角度上來說,在JSP頁面直接通過<jsp:forward>違反了MVC的分層原則,控制器無法干預(yù)。
  
  ·org.apache.struts.actions.IncludeAction:出于ForwardAction相似的原因,Struts推薦用IncludeAction代替JSP的<jsp:include>。
  
  ·org.apache.struts.actions.LookupDispatchAction:假如一個表單有多個提交按鈕,不同的提交按鈕執(zhí)行不同的業(yè)務(wù)操作,用DispatchAction最為合適。
  
  ·org.apache.struts.actions.SwitchAction:用SwitchAction可在不同的Struts模塊間轉(zhuǎn)換。
  
  由于我們的Action需要完成用戶密碼驗(yàn)證的業(yè)務(wù),并根據(jù)結(jié)果轉(zhuǎn)換到不同的頁面中,所以這個LoginAction是一個普通的Action,故我們選擇org.apache.struts.action.Action。
  
  按Next到下一步。
  
  2.設(shè)置Action的配置信息
   JBuilder2005 Struts深度體驗(yàn)之改造(圖五)
  圖 10 設(shè)置LoginAction的配置信息
  
  ·Action path:訪問這個Action的URI,接受默認(rèn)的/loginAction,這樣我們將通過類似這樣的URL:http://127.0.0.1:8080/webModule/loginAction.do來訪問這個Action。
  
  ·FormBean name:下拉框中列出Web模塊中所有的ActionForm,我們選擇前一小節(jié)中所創(chuàng)建的userActionForm。這樣客戶端的HTTP請求訪問LoginAction時,HTTP請求所帶的數(shù)據(jù)就會被Struts總控制器自動填充到userActionForm中了。
  
  ·Scope:Action有兩個選擇:request和session。表示ActionForm在填充后將放在request對象中還是session對象中,由于我們需要在通過密碼驗(yàn)證后,才使用戶登錄系統(tǒng)。這樣就不能使userActionForm在數(shù)據(jù)填充時就放入session中,而應(yīng)該在通過密碼驗(yàn)證后,手工將其綁定到session中(UserActionForm一旦綁定到session中,其valueBound()方法就會被調(diào)用,記錄用戶登錄日志),故此,我們選擇request。
  
  ·input JSP:輸入的JSP頁面。在ActionForm需要進(jìn)行數(shù)據(jù)有效性自校驗(yàn)的情況下,假如校驗(yàn)失敗,Struts框架總控制器將請求返回到這個輸入頁面上。因?yàn)閁serActionForm無需進(jìn)行有效性校驗(yàn)(在3.1的第3步我們沒有為UserActionForm實(shí)現(xiàn)自校驗(yàn)功能),所以無需指定輸入的JSP。
  
  按Finish按鈕直接創(chuàng)建LoginAction,JBuilder自動打開Struts Config Editor,生動形象地展現(xiàn)用戶登錄模塊Struts框架下的處理流程,如圖 11所示:
   JBuilder2005 Struts深度體驗(yàn)之改造(圖六)
  圖 11 Struts Config Editor
  
  位于中心的/loginAction是訪問LoginAction的URI,它是登錄業(yè)務(wù)的控制器。Struts總控制器創(chuàng)建一個UserActionForm實(shí)例,并用HTTP請求的數(shù)據(jù)填充UserActionForm實(shí)例,然后將其傳給LoginAction的execute()方法。
  
  3.定義訪問入口
  
  現(xiàn)在我們需要調(diào)整login.jsp表單的提交地址,使用LoginAction來處理用戶登錄的請求,調(diào)整后的代碼如所示:
  
  代碼清單 7 login.jsp 使用LoginAction處理用戶登錄
  
  1. <%@page contentType="text/Html; charset=GBK" import="bookstore.UserList" %>
  2. …
  3. <form name="form1" method="post" action="/webModule/loginAction.do">用戶名:
  4.  <select name="userId">
  5.   <o(jì)ption value="" selected>--登錄用戶--</option>
  6.    <%=UserList.getUserListHTML()%>
  7.  </select>
  8.  密 碼:
  9.  <input name="password" type="password">
  10.   <input type="submit" name="Submit" value="登錄">
  11. </form>
  12. </body>
  13. </html>
  
  如第3行所示,將原來action="switch.jsp"改為"/webModule/loginAction.do",由于我們需要將整個應(yīng)用部署于/webModule的URI下,所以需要在Action訪問的地址前加上/webModule。假如通過Struts的<html:form>標(biāo)簽來指定表單提交的地址,則無需添加/webModule,標(biāo)簽將自動進(jìn)行轉(zhuǎn)換,你將在本專題后續(xù)內(nèi)容中學(xué)習(xí)到這種方法。
  
  注重:
  
  Struts框架總控制器Servlet通過路徑匹配的方式截獲HTTP請求,其匹配串是*.do,表示URL以.do結(jié)束的HTTP請求才會被Struts框架處理,否則Struts忽略之。所以在寫鏈接地址時千萬不要忘了調(diào)用地址后加一個.do的后綴。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 韶关市| 壶关县| 武清区| 苍南县| 恩施市| 和顺县| 镇康县| 滕州市| 勃利县| 鹰潭市| 黄石市| 奈曼旗| 高要市| 沾益县| 庄河市| 金山区| 恩施市| 成安县| 冷水江市| 周宁县| 道孚县| 松原市| 青冈县| 双辽市| 亚东县| 遂川县| 龙里县| 留坝县| 巨野县| 陕西省| 房山区| 穆棱市| 龙井市| 崇明县| 梨树县| 特克斯县| 昂仁县| 泾川县| 辽阳县| 三门峡市| 二连浩特市|