亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

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. ?。約elect name="userId">
  5.   <option value="" selected>--登錄用戶--</option>
  6.   ?。?=UserList.getUserListHTML()%>
  7. ?。?select>
  8.  密 碼:
  9. ?。糹nput 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的后綴。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
韩国视频理论视频久久| 日韩av免费在线播放| 国产精品pans私拍| 国产成人鲁鲁免费视频a| 国产一区二区精品丝袜| 久久精品亚洲热| 亚洲综合中文字幕在线观看| 国产午夜精品一区理论片飘花| 国产精品久久久久久一区二区| 亚洲欧美在线一区| 91精品国产777在线观看| 91精品国产自产在线老师啪| 欧美精品少妇videofree| 粉嫩av一区二区三区免费野| 亚洲字幕在线观看| 国产欧美日韩最新| 亚洲а∨天堂久久精品9966| 亚洲人成电影网站| 国产脚交av在线一区二区| 国产男女猛烈无遮挡91| 另类专区欧美制服同性| 久久精品成人欧美大片古装| 亚洲跨种族黑人xxx| 国产91精品久久久| 国产精品香蕉在线观看| 另类天堂视频在线观看| 国产日韩换脸av一区在线观看| 欧美日韩国内自拍| 国产成人精品在线播放| 亚洲精品一区二区在线| 亚洲欧美中文日韩v在线观看| 在线观看欧美成人| 亚洲精品一区二区在线| 夜夜嗨av色一区二区不卡| 成人在线视频网站| 国产成人午夜视频网址| 俺也去精品视频在线观看| 狠狠躁夜夜躁人人爽天天天天97| 欧美理论电影网| 欧美丝袜第一区| 国产精品自产拍在线观| 操人视频在线观看欧美| 日韩最新免费不卡| 欧美www视频在线观看| 国产成人精品在线视频| 久久久久亚洲精品成人网小说| 久久久久久久久国产精品| 久久综合色影院| 日韩亚洲国产中文字幕| 久久精品国产69国产精品亚洲| 国产日韩精品在线播放| 国产成人福利网站| 久久久久久久久久久免费| 久久久精品久久久| 亚洲国产欧美日韩精品| 欧美在线观看日本一区| 欧美日韩另类字幕中文| 97在线视频免费| 亚洲精品美女久久| 日本伊人精品一区二区三区介绍| 日韩在线欧美在线国产在线| 91国产高清在线| 国产精品自拍网| 亚洲国产精品嫩草影院久久| 国产精品日韩在线一区| 中文字幕亚洲一区二区三区| 美女啪啪无遮挡免费久久网站| 国产精品人人做人人爽| 91中文字幕在线观看| 在线视频免费一区二区| 国产成人精品最新| 国内外成人免费激情在线视频网站| 在线观看日韩欧美| 日韩中文字幕欧美| 日韩电视剧在线观看免费网站| 亚洲激情视频在线观看| 国产精品久久久久久av福利软件| 国产欧美欧洲在线观看| 91精品国产色综合久久不卡98| 国产精品海角社区在线观看| 国产欧美日韩精品丝袜高跟鞋| 成人免费视频网址| 伊人亚洲福利一区二区三区| 国产日韩欧美在线| 国产精品久久久久久久久粉嫩av| 人九九综合九九宗合| 欧美日韩国产精品一区二区三区四区| 日本中文字幕久久看| 国产91露脸中文字幕在线| 欧美巨猛xxxx猛交黑人97人| 亚洲精品一区久久久久久| 日韩精品免费在线视频观看| 亚洲久久久久久久久久久| 国产精品欧美日韩一区二区| 日韩精品欧美国产精品忘忧草| 色悠悠久久久久| 亚洲精品自产拍| 日韩中文字幕国产精品| 久久久999成人| 国产69精品99久久久久久宅男| 日韩av一区在线观看| 亚洲国产欧美日韩精品| 亚洲精品www久久久| 成人乱人伦精品视频在线观看| 久久久爽爽爽美女图片| 欧美成aaa人片在线观看蜜臀| 久久国产精品网站| 亚洲午夜性刺激影院| 久久人人97超碰精品888| 欧美大片在线影院| 狠狠色狠狠色综合日日五| 日韩美女激情视频| 日韩福利视频在线观看| 国产美女久久精品| 国产成人精彩在线视频九色| 国产一区二区丝袜高跟鞋图片| 国内精品400部情侣激情| 亚洲成年人在线| 69国产精品成人在线播放| 国产一区二区在线免费| 日韩av理论片| 69久久夜色精品国产69| 日韩av在线精品| 午夜免费久久久久| 亚洲欧美日韩国产精品| 国产精品久久久久久av| 亚洲一级免费视频| 欧美性受xxxx黑人猛交| 亚洲第一精品久久忘忧草社区| 国产精品亚洲视频在线观看| 国产成人在线视频| 欧美成年人视频| 精品国产成人在线| 日韩精品极品毛片系列视频| 日韩欧美在线视频观看| 成人在线激情视频| 国产午夜精品麻豆| 午夜精品久久久久久久男人的天堂| 亚洲欧美日韩一区二区在线| 国产欧美一区二区白浆黑人| 成人激情在线观看| 欧美高跟鞋交xxxxhd| 国产午夜精品免费一区二区三区| 国产精品极品尤物在线观看| 欧美日韩性生活视频| 久久天天躁狠狠躁夜夜躁| 国产精品国模在线| 欧美日韩国产激情| 欧美又大粗又爽又黄大片视频| 性欧美视频videos6一9| 538国产精品视频一区二区| 日韩av电影国产| 怡红院精品视频| 日韩av电影在线播放| 国产成人福利夜色影视| 中文字幕在线日韩| 久久国产精品电影| 亚洲激情视频在线| 亚洲a中文字幕| 欧美成aaa人片免费看| 日韩精品在线免费观看视频| 国产精品嫩草视频| 91国偷自产一区二区三区的观看方式| 精品久久久在线观看|