麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

JBuilder2005 Struts深度體驗之改造

2019-11-18 12:54:31
字體:
來源:轉載
供稿:網友

  用ActionForm截獲登錄表單數據
  
  原登錄模塊用bookstore.User描述login.jsp登錄頁面表單的數據,在switch.jsp程序中通過<jsp:useBean>標簽獲取login.jsp表單的數據。其實User類相當于Struts框架中的模型,我們將通過一個ActionForm更好地實現這個功能。
  
  ActionForm和Bean一樣以屬性名匹配的映射機制從HTTP請求中填充對象數據,但ActionForm比一般的Bean提供了更多的功能,Struts答應ActionForm通過validate()方法進行自校驗,當數據不合法時自動轉向到輸出界面,此外還可以通過reset()方法,在數據填充前復位屬性值。
  
  下面我們就來創建UserActionForm,替換User的功能,建立起Struts框架中的"數據模型"。
  
  1.指定ActionForm的Web模塊及類信息
  
  File->New...->Web->在Web頁中雙擊ActionForm圖標,彈出如圖 6所示的對話框:
   JBuilder2005 Struts深度體驗之改造(圖一)
  圖 6 創建UserActionForm
  
  ·Struts config:我們前面有提到Struts1.1支持多個配置文件,所以你在這兒可以選擇使用哪個Struts配置文件。因為我們現在還沒有定義多個Struts配置文件,所以只得使用struts-config.xml。在開發新增圖書的功能時,我們將定義另一個配置文件。
  
  ·ActionForm:ActionForm的類名,這里我們填入UserActionForm。
  
  按Next到下一步。
  
  2.定義ActionForm屬性
   JBuilder2005 Struts深度體驗之改造(圖二)
  圖 7 定義ActionForm屬性
  
  通過Add...按鈕為UserActionForm增加4個屬性,如圖 7所示。非凡的,假如這個ActionForm所對應的入口頁面已經創建,你也可以直接通過Add from JSP...按鈕,選擇一個JSP頁面,JBuilder會分析這個頁面的表單,并將表單的數據組件名抽取為ActionForm的屬性。
  
  按Next到下一步。
  
  3.一些附加功能的定義
   JBuilder2005 Struts深度體驗之改造(圖三)
  圖 8 附加功能定義
  
  在FormBeanName中為UserActionForm指定一個名字,一般接受JBuilder所提供的默認名即可。這個名字將在struts-config.xml文件用來命名UserActionForm。
  
  ActionForm比一般javaBean強大的地方在于它可以進行數據檢驗,還可以進行數據復位。假如這個ActionForm最終要放到session中的,那么最好實現reset()方法,以復位ActionForm的數據,否則屬性可能不會反映最新的值。這里, UserActionForm無需進行數據有效性校驗,但由于UserActionForm最終需要放到session中,所以我們需要實現reset()方法。故此我們勾選Create/replace reset() method body選項。
  
  直接按Finish創建UserActionForm,再將User類的代碼拷貝過來,整改后的最終代碼如下所示:
  
  代碼清單 6 以ActionForm實現的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.  //復位所有屬性值
  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相關聯,因為HTTP請求通過Struts總控制器轉發給Action,Struts控制器一旦發現Action有一個對應的ActionForm時,就用HTTP請求的數據填充這個ActionForm。
  
  用Action代替switch.jsp的控制轉換功能
  
  我們在前面已經數落用switch.jsp實現請求轉換控制的缺點,Struts框架的Action是實現請求轉換控制的最適合替代者。
  
  在這節里,我們就來創建一個名為LoginAction的Action,讓其完美的接替switch.jsp的工作。
  
  File->New...->Web->在Web頁中雙擊Action圖標,啟動創建Action的向導。
  
  1.指定Action名字及Web模塊
   JBuilder2005 Struts深度體驗之改造(圖四)
  圖 9 指定Web模塊及Action名字
  
  在Action中鍵入LoginAction作為Action的類名,其中Base class的下拉框中有許多Action基類可供選擇,它們用于不同的場合,這些選項是:
  
  ·org.apache.struts.action.Action:標準的Action。
  
  ·org.apache.struts.actions.ForwardAction:相當于JSP的<jsp:forward>,方便Struts控制器進行預處理。此外,從學究的角度上來說,在JSP頁面直接通過<jsp:forward>違反了MVC的分層原則,控制器無法干預。
  
  ·org.apache.struts.actions.IncludeAction:出于ForwardAction相似的原因,Struts推薦用IncludeAction代替JSP的<jsp:include>。
  
  ·org.apache.struts.actions.LookupDispatchAction:假如一個表單有多個提交按鈕,不同的提交按鈕執行不同的業務操作,用DispatchAction最為合適。
  
  ·org.apache.struts.actions.SwitchAction:用SwitchAction可在不同的Struts模塊間轉換。
  
  由于我們的Action需要完成用戶密碼驗證的業務,并根據結果轉換到不同的頁面中,所以這個LoginAction是一個普通的Action,故我們選擇org.apache.struts.action.Action。
  
  按Next到下一步。
  
  2.設置Action的配置信息
   JBuilder2005 Struts深度體驗之改造(圖五)
  圖 10 設置LoginAction的配置信息
  
  ·Action path:訪問這個Action的URI,接受默認的/loginAction,這樣我們將通過類似這樣的URL:http://127.0.0.1:8080/webModule/loginAction.do來訪問這個Action。
  
  ·FormBean name:下拉框中列出Web模塊中所有的ActionForm,我們選擇前一小節中所創建的userActionForm。這樣客戶端的HTTP請求訪問LoginAction時,HTTP請求所帶的數據就會被Struts總控制器自動填充到userActionForm中了。
  
  ·Scope:Action有兩個選擇:request和session。表示ActionForm在填充后將放在request對象中還是session對象中,由于我們需要在通過密碼驗證后,才使用戶登錄系統。這樣就不能使userActionForm在數據填充時就放入session中,而應該在通過密碼驗證后,手工將其綁定到session中(UserActionForm一旦綁定到session中,其valueBound()方法就會被調用,記錄用戶登錄日志),故此,我們選擇request。
  
  ·input JSP:輸入的JSP頁面。在ActionForm需要進行數據有效性自校驗的情況下,假如校驗失敗,Struts框架總控制器將請求返回到這個輸入頁面上。因為UserActionForm無需進行有效性校驗(在3.1的第3步我們沒有為UserActionForm實現自校驗功能),所以無需指定輸入的JSP。
  
  按Finish按鈕直接創建LoginAction,JBuilder自動打開Struts Config Editor,生動形象地展現用戶登錄模塊Struts框架下的處理流程,如圖 11所示:
   JBuilder2005 Struts深度體驗之改造(圖六)
  圖 11 Struts Config Editor
  
  位于中心的/loginAction是訪問LoginAction的URI,它是登錄業務的控制器。Struts總控制器創建一個UserActionForm實例,并用HTTP請求的數據填充UserActionForm實例,然后將其傳給LoginAction的execute()方法。
  
  3.定義訪問入口
  
  現在我們需要調整login.jsp表單的提交地址,使用LoginAction來處理用戶登錄的請求,調整后的代碼如所示:
  
  代碼清單 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.   <option 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",由于我們需要將整個應用部署于/webModule的URI下,所以需要在Action訪問的地址前加上/webModule。假如通過Struts的<html:form>標簽來指定表單提交的地址,則無需添加/webModule,標簽將自動進行轉換,你將在本專題后續內容中學習到這種方法。
  
  注重:
  
  Struts框架總控制器Servlet通過路徑匹配的方式截獲HTTP請求,其匹配串是*.do,表示URL以.do結束的HTTP請求才會被Struts框架處理,否則Struts忽略之。所以在寫鏈接地址時千萬不要忘了調用地址后加一個.do的后綴。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 日本一区视频在线观看 | 成人午夜在线免费视频 | 免费视频www在线观看 | 久久久久九九九女人毛片 | 欧美人与牲禽动交精品一区 | 日韩不卡一区二区 | 亚洲电影在线观看高清免费 | 激情小说图 | 亚洲第一激情 | 精品一区二区三区欧美 | 日韩精品二区 | 红杏亚洲影院一区二区三区 | 天天色宗合 | 久久精品小短片 | 免费在线中文字幕 | 欧美性受xxx黑人xyx性爽 | 久久www视频 | 久久国产精品成人免费网站 | 成年免费网站 | 欧美精品一区自拍a毛片在线视频 | 香蕉久草视频 | 亚洲国产精久久久久久久 | 国产91九色视频 | 欧美一级黄 | 精品视频在线免费看 | 精品一区二区久久久久久按摩 | 香蕉国产9| 国产无遮挡一区二区三区毛片日本 | 曰批全过程40分钟免费视频多人 | 成人免费观看av | 亚洲精品欧美二区三区中文字幕 | 第一区免费在线观看 | 天天撸日日夜夜 | 国产精品99久久久久久大便 | 久久久久久久久久久国产精品 | 色阁五月| 亚洲电影在线播放 | 日韩精品中文字幕一区二区三区 | 国内精品久久久久久久久久 | 在线a亚洲视频播放在线观看 | av在线免费看片 |