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

首頁 > 編程 > JSP > 正文

JBuilder2005實戰JSP之切換控制(3)

2019-11-18 19:19:16
字體:
來源:轉載
供稿:網友
  由于在login.jsp的表單中通過action屬性指定switch.jsp為響應的JSP文件,當用戶在login.jsp中選定登錄用戶,輸入密碼提交表單后,客戶端將向服務器發送一個HTTP請求,服務器即調用switch.jsp來響應這個請求。

  表單中用戶名和密碼兩組件的數據將通過HTTP請求傳給服務器的switch.jsp,服務器將這些信息封裝在request對象中傳給switch.jsp,所以switch.jsp可通過request.getParameter(String paraName)來獲取這兩個值。

String userId = request.getParameter("userId");
String passWord = request.getParameter("password");

  試想如果login.jsp的表單有10個以上的數據組件,則在switch.jsp中必須通過相應數目的request.getParameter()方法獲取其值。此外,如果這些數據不是字段串類型,而是整數或浮點數,由于request.getParameter()方法返回的值都是String,還必須進行類型的轉換,這種工作不但單調乏味,還容易出錯。

  JSP允許你通過Bean以映射的方式接收網頁表單的數據,Bean以這個規則映射表單的數據:Bean屬性名=表單數據組件名,也即所有和Bean屬性名相同的表單數據域被自動填充到Bean中,并且完成數據類型的轉換。如login.jsp的表單中有兩個數據組件,一個名為userId,另一個是password,定義一個擁有相同名的userId和password屬性的User.java Bean,這個Bean將可以自動接收表單中的兩個數據組件值。

  編寫User.java

  我們先來編寫這個User.java的Bean,在工程中創建User.java,其代碼如下所示:

  代碼清單 7 User.java

1. package bookstore;
2.
3. public class User
4. {
5. PRivate String userId;//用戶Id
6. private String password;//密碼
7. private String userName;//用戶名
8. public String getPassword() {
9. return password;
10. }
11. public String getUserId() {
12. return userId;
13. }
14. public String getUserName() {
15. return userName;
16. }
17. public void setPassword(String password) {
18. this.password = password;
19. }
20. public void setUserId(String userId) {
21. this.userId = userId;
22. }
23. public void setUserName(String userName) {
24. this.userName = userName;
25. }
26. }

  除userId和password兩屬性名,還有一個用戶名屬性userName,這個屬性的值不是從login.jsp的表單接收的,當用戶名密碼驗證正確后,從數據表T_USER表中獲取用戶名保存在這個屬性中,以便其他地方引用,保存并編譯這個類。

  提示:

  你可以通過JBuilder的Bean Express工具快速創建User.java的代碼,在一般情況下,你應該通過Bean Express來創建Bean的屬性,這樣不但自動產生get/set的屬性訪問方法,還保證了Bean命名規范。


  編寫頁面程序

  在創建User.java 的Bean后,我們著手創建switch.jsp,在switch.jsp中引用這個Bean。

  通過File->New..->Web->雙擊JSP圖標啟動創建JSP向導。

  1.指定swith.jsp名字


圖 10 指定switch.jsp的名字

  一直按Next到向導的第3步。

  2.引用User.java Bean


圖 11 指定JSP中引用Bean

  點擊Add Bean...按鈕,彈出Select a Class對話框,在對話框中選擇bookstore.User類,如下圖所示:


圖 12 選擇類作為Bean

  按OK后,返回到向導第3步的對話框,此時對話框的Bean列表中多了一行記錄,可以在ID欄中為Bean指定一個名字,在Scope中指定Bean的作用域,如下圖所示:


圖 13 引用一個Bean

  我們為User的Bean取名為userBean,將其作用域設置為page域。page域即為頁面作用域,在當前頁面范圍作用域內可用,當JSP返回響應,或請求轉到其他的JSP頁面中時,都不可用了,其他3個作用域說明如下:

  ·request作用域:當一個請求產生直到返回響應的范圍內都是有效的,如a.jsp中聲明為request作用域的Bean,當a.jsp通過<jsp:forward>轉移請求到b .jsp頁面中時還是可用的。

  ·session作用域:在用戶會話的周期內都是可用的,會話周期為用戶登錄系統直到其退出系統為此。

  ·application作用域:這個作用域最長,表示Web容器啟動直到關閉都是有效的。

  按Next到下一步。

  3.設置運行配置項

  在向導的最后一步,你可以為創建的JSP產生一個運行配置項,雖然向導將創建一個運行配置項設置為默認選項,但筆者認為這并不是一個合理的默認值,建議取消create a runtime configuration設置項,不要創建JSP的運行配置項,如下圖所示:


  按Finish按鈕創建switch.jsp文件,其代碼如下所示:

  代碼清單 8 向導創建的switch.jsp

1. <%@ page contentType="text/html; charset=GBK" %>
2. <html>
3. <head>
4. ?。紅itle>
5.   switch
6. ?。?title>
7. </head>
8. <jsp:useBean id="userBean" scope="page" class="bookstore.User" />
9. <jsp:setProperty name="userBean" property="*" />

10. <body bgcolor="#ffffff">
11. <h1>
12.  JBuilder Generated JSP
13.?。?h1>
14. </body>
15. </html>

  第8行是引用Bean的JSP標簽,第9行用表單的數據填充Bean的屬性值,即以名字匹配的方式將request的參數填充到Bean的屬性中,同時完成類型轉換(只有基本數據類型或構造函數支持的才可以完成轉換)。在執行完第9行后,userBean中的userId和password屬性將被設置為login.jsp頁面中所發送過來的用戶名和密碼的值。

  因為switch.jsp只是用于控制,并不需要顯示內容到客戶端,所以我們去除switch.jsp中的HTML代碼,將switch.jsp調整為:

  代碼清單 9 去除靜態HTML代碼后的switch.jsp

1. <%@ page contentType="text/html; charset=GBK" %>
2. <jsp:useBean id="userBean" scope="page" class="bookstore.User" />
3. <jsp:setProperty name="userBean" property="*" />

  在switch.jsp中提供一段Scriptlet,將userId和password發送到數據庫和T_USER表中的用戶比較看是否是合法的用戶,根據驗證的結果轉向不同的頁面。switch.jsp的最終代碼如下所示:

  代碼清單 10 最終的switch.jsp

1. <%@page contentType="text/html; charset=GBK"%>
2. <%@page import="bookstore.*"%>
3. <%@page import="java.sql.*"%>

4. <jsp:useBean id="userBean" scope="session" class="bookstore.User"/>
5. <jsp:setProperty name="userBean" property="*"/>
6. <%
7. Connection conn = null;
8. try {
9.  conn = DBConnection.getConnection();
10. PreparedStatement pStat = conn.prepareStatement(
11.  "select USER_NAME from T_USER where USER_ID=? and password = ?");
12. pStat.setString(1, userBean.getUserId());
13. pStat.setString(2, userBean.getPassword());
14. ResultSet rs = pStat.executeQuery();
15. if (rs.next()) { //密碼正確
16.  userBean.setUserName(rs.getString(1));//設置用戶名
17.  session.setAttribute("ses_userBean", userBean);//將userBean放入Session對象中
18. %><jsp:forward page=" welcome.jsp "></jsp:forward>
19. <%} else { //密碼錯誤%>
20. <jsp:forward page="fail.jsp"></jsp:forward>
21. <%
22.  }} finally {
23.   if(conn != null) conn.close();
24.  }

25. %>

  ·在第2~3行中引入Scriptlet代碼中需要的類。

  ·第7~14行代碼向數據庫發送查詢SQL語句并返回結果。

  ·第15行通過檢查結果集的記錄數間接判斷用戶密碼是否正確。

  ·第16~18行是用戶密碼正確的響應代碼,首先用結果集的USER_NAME屬性填充userBean的userName屬性值,然后將userBean對象放入Session中,最后轉向welcome.jsp頁面。

  ·當用戶輸入密碼不正確時,結果集中將沒有記錄,此時rs.next()返回false,程序轉向第20行,第20行的代碼將頁面轉向到密碼輸入錯誤的處理頁面fail.jsp。

  ·第22~24行的代碼用于關閉數據庫的連接。

  也許大家已經發現雖然第9~21行會拋出SQLException異常,但我們并沒有相應的異常捕獲塊,在標準的Java程序中將導致一個編譯期的錯誤,但在JSP中卻可以順序通過編譯,這是因為JSP頁面本身會捕獲頁面中拋出的所有異常。

  假設第11行的SQL查詢語句發生有錯誤,如將用戶表名誤寫為User(正確為T_USER),當switch.jsp被調用后,第14行將拋出SQLException異常,此時switch.jsp將顯示出異常堆棧跡的跟蹤信息頁面,如下圖如示:


圖 14 可怕的錯誤處理頁面

  上圖所示的錯誤處理頁面可謂青面獠牙,面目猙獰,非常不友好,對于開發人員來說這種報錯頁面也許是適合的,因為它提供了許多錯誤跟蹤信息,但最終用戶是不可能接受這種粗野的出錯頁面的。JSP允許你通過<%@ page errorPage%>為頁面指定一個專門處理錯誤的JSP頁面,以便用一種友好、直觀的形式展現錯誤。在下一節里,我們將創建一個用于處理錯誤的JSP頁面,在創建之后,我們再來為switch.jsp指定錯誤處理JSP頁面。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国模私拍一区二区三区| 成人午夜两性视频| 精品性高朝久久久久久久| 国产精品高潮呻吟视频| 欧美精品一本久久男人的天堂| 日本国产一区二区三区| 日韩在线观看免费高清完整版| 热久久免费国产视频| 久久久久久久久久国产| 欧美在线观看www| 精品一区二区三区四区| 午夜精品久久久久久久男人的天堂| 日本高清不卡的在线| 日韩在线视频一区| 亚洲欧美中文日韩在线v日本| 欧美丝袜第一区| 欧美日韩中文字幕| 久久69精品久久久久久国产越南| 欧美性xxxxxx| 日韩精品免费在线视频观看| 91久久精品美女高潮| 欧美日韩亚洲天堂| 成人夜晚看av| 91国在线精品国内播放| 亚洲电影免费观看高清完整版在线观看| 欧美日韩国产中文精品字幕自在自线| 欧美最近摘花xxxx摘花| 亚洲3p在线观看| 国产日本欧美一区二区三区| 欧美精品少妇videofree| 国产精品黄色av| 精品毛片三在线观看| 精品偷拍一区二区三区在线看| 国产这里只有精品| 国产黑人绿帽在线第一区| 九九精品视频在线观看| 三级精品视频久久久久| 亚洲奶大毛多的老太婆| 欧美色视频日本高清在线观看| 久久成人国产精品| 欧美日韩在线视频首页| 亚洲综合在线小说| 亚洲欧洲av一区二区| 欧美裸身视频免费观看| 亚洲天堂开心观看| 欧美黄色片免费观看| 色综合伊人色综合网| 成人有码在线播放| 欧美在线免费看| 亚洲精品一区二区三区婷婷月| 韩日欧美一区二区| 精品亚洲国产成av人片传媒| 最近2019年好看中文字幕视频| 激情成人在线视频| 日韩精品日韩在线观看| 亚洲欧美日韩一区二区三区在线| 久久免费视频在线| 中文字幕在线看视频国产欧美在线看完整| 精品免费在线视频| 欧美自拍视频在线观看| 亚洲成人1234| 亚洲精品一区在线观看香蕉| 91精品久久久久久综合乱菊| 粗暴蹂躏中文一区二区三区| 91在线视频免费| 久久精品国产精品亚洲| 精品电影在线观看| 亚洲a在线观看| 国产成人激情视频| 久久在精品线影院精品国产| 精品国内自产拍在线观看| 国产精品一区二区三| 91香蕉电影院| 亚洲欧美日韩国产成人| 青青久久av北条麻妃黑人| 日韩在线视频线视频免费网站| 久久久成人的性感天堂| 成人国产亚洲精品a区天堂华泰| 日韩电影中文 亚洲精品乱码| 国产有码一区二区| 国产在线视频91| 国产激情综合五月久久| 国产一区二区三区在线看| 国产成人aa精品一区在线播放| 国产偷亚洲偷欧美偷精品| 久久在线免费观看视频| 精品视频在线播放色网色视频| 国产日韩av高清| 欧美日韩中文在线观看| 亚洲男人7777| 亚洲国语精品自产拍在线观看| 色一区av在线| 成人xvideos免费视频| 国产99久久精品一区二区| 欧美在线激情网| 国产成人中文字幕| 精品少妇一区二区30p| 九色精品美女在线| 久久免费在线观看| 国产日韩欧美视频| 中文字幕欧美日韩| 亚洲免费人成在线视频观看| 在线播放国产一区中文字幕剧情欧美| 欧美视频在线观看免费网址| 欧美日韩在线视频观看| 成人黄色影片在线| 欧美自拍视频在线| 欧美日韩亚洲系列| 国产日韩欧美一二三区| 成人免费淫片视频软件| 久久久精品网站| 中文字幕av一区中文字幕天堂| 亚洲人成在线一二| 亚洲午夜av电影| 欧美成人黑人xx视频免费观看| 亚洲精品小视频| 一区二区在线视频播放| 国产有码在线一区二区视频| 国产精品入口尤物| 国产亚洲欧美日韩美女| 国产日韩精品在线播放| 隔壁老王国产在线精品| 91国产高清在线| 日韩欧亚中文在线| 久热精品视频在线免费观看| 国内精品400部情侣激情| 日韩电影中文字幕在线观看| 久久国产色av| 国产欧美一区二区白浆黑人| 欧美丝袜美女中出在线| 国产精品99久久久久久www| 日韩成人xxxx| 97久久伊人激情网| 久99久在线视频| 亚洲图片在线综合| 国产精品久久久久久亚洲调教| 国产精品尤物福利片在线观看| 欧日韩在线观看| 色偷偷91综合久久噜噜| 欧美午夜激情视频| 国产日韩视频在线观看| 欧美日本高清视频| 精品久久中文字幕| 91精品久久久久久久久久入口| 亚洲一区二区免费在线| 欧美成人免费一级人片100| 日本国产精品视频| 欧美精品做受xxx性少妇| 91精品国产成人| 91精品国产免费久久久久久| 国产精品一区二区电影| 韩国福利视频一区| 伊人久久免费视频| 日韩中文字幕视频| 久久精品99久久久久久久久| 国产在线观看精品| 久久精视频免费在线久久完整在线看| 国产成人一区三区| 亚洲va久久久噜噜噜| 国产午夜一区二区| 亚洲一区av在线播放| 国产精品视频久| 国产中文字幕亚洲| 97在线观看免费高清|