JBuilder2005實戰JSP之特殊頁面
最後更新:2017-02-28
來源:互聯網
上載者:User
js|頁面 歡迎頁面welcome.jsp
當使用者錄入正確的密碼後,switch.jsp控制JSP頁面導向welcome.jsp歡迎頁面,在這節裡,我們來開發這個welcome.jsp頁面。因為welcome.jsp需要使用到一個第三方的標籤庫,所以在開發welcome.jsp之前需要在JBuilder中作一些配置引入這個標籤庫。
將第三方標籤庫配置到JBuilder中
Apache開源組織提供了許多有用標籤庫,歡迎頁面welcome.jsp需要使用一個來源於Apache的datetime標籤庫,可以用這個標籤庫在JSP中提供各種時間的顯示,下載的地址是:http://apache.justdn.org/jakarta/taglibs/datetime/binaries/jakarta-taglibs-datetime-1.0.1.zip。
標籤庫一般包括兩個檔案,其一是類包JAR檔案,其二是以.tld為副檔名的標籤符描述檔案。從下載的壓縮文檔中解壓後,我們將taglibs-datetime.jar和taglibs-datetime.tld檔案放到<工程目錄>/datetimeTag目錄下。
要在工程中使用第三方的標籤庫,必須事先在JBuilder中配置這個標籤庫,並在工程中引用它。配置標籤庫和配置類庫相似,也是通過Configure Libraries對話方塊來完成。JBuilder類庫及標籤庫都列在Configure Libraries對話方塊中左邊的樹中,類庫顯示為 表徵圖,而標籤庫顯示為 表徵圖。下面我們來將datetime標籤庫配置到JBuilder中。
1.Tools->Configure->Libraries->Configure Libraries對話方塊。
點擊Configure Libraries對話方塊的左下角的Add...按鈕,彈出New Library Wizard對話方塊,如下圖所示:
圖 17新庫嚮導對話方塊
在Name中給這個庫取一個名字:datetimeTag,按OK返回Configure Libraries對話方塊。
2.指定標籤庫檔案。
在返回Configure Libraries對話方塊後,datetimeTag節點出現在左邊的樹中,因為還沒有為其指定類庫檔案,有別於其他節點顯示為顯目的紅色,點選datetimeTag並將Library Settings設定頁切換到Framework標籤頁中,如下圖所示:
圖 18 切換到Framework中
在Framework下拉框中選擇User-Defined JSP Tag Library選項,點擊標籤頁右下方的Add...按鈕,彈出Define New Tag Library對話方塊,如下圖所示:
圖 19 指定標籤庫的描述檔案
在Define New Tag Library對話方塊中,點擊TLD file後的…按鈕,導航到<工程目錄>/datetimeTag/taglibs-datetime.tld檔案中,確認後JBuilder自動填滿其餘的設定項,一般不需要更改JBuilder這些自動補充的設定。其中Prefix為這個標籤庫指定了一個引用首碼。點擊OK按鈕返回Configure Libraries對話方塊,datetimeTag節點顯示為正常的顏色如下圖所示:
圖 20 正確配置標籤庫後的效果
點擊Configure Libraries對話方塊的OK按鈕完成datetime標籤庫的配置。
3.在當前工程中引用這個新配置的標籤庫。
Project->Project Properties...->Paths->切換到Required Libraries標籤頁中->點擊Add...按鈕從JBuilder類庫中選擇datetimeTag。配置成功後,Project Properties對話方塊如下所示:
圖 21 工程引用庫
建立歡迎JSP頁面
1.File->New…->Web->雙擊JSP表徵圖,啟動建立JSP嚮導,指定JSP檔案名稱為welcome,點擊Next到下一步。
2.在welcome.jsp頁面中引用datetimeTag標籤庫。
在嚮導的第2步中允許你選擇JBuilder中的各種標籤庫,我們在上一節中配置的datetimeTag標籤庫也出現在Tag Libraries列表中,如下圖所示:
圖 22 引用標籤庫
展開datetime Tag並勾選taglibs-datetime,按Next到一下步。
3.引用在switch.jsp中放入session域的userBean對象。
圖 23 引用switch.jsp中放入session的userBean
點擊Add Bean...選擇bookstore.User類,在ID欄中指定Bean的名字為ses_userBean,Scope欄中選擇session範圍。ses_userBean即是在switch.jsp為userBean所指定的名字,Web容器將根據這個名字到session中尋找對象,如果找不到才建立bookstore.User對象,因為welcome.jsp在switch.jsp之後才被調用,所以除非session對期,否則都可以找到userBean對象。
直接點擊Finish建立welcome.jsp檔案,其代碼如下所示:
代碼清單 15 welcome.jsp歡迎頁面
1. <%@ page contentType="text/html; charset=GBK" %>
2. <%@ taglib uri="http://jakarta.apache.org/taglibs/datetime-1.0" prefix="dt" %>
3. <html>
4. <head>
5. <title>
6. welcome
7. </title>
8. </head>
9. <jsp:useBean id="ses_userBean" scope="session" class="bookstore.User" />
10. <jsp:setProperty name="ses_userBean" property="*" />
11. <body bgcolor="#ffffff">
12. <h1>
13. JBuilder Generated JSP
14. </h1>
15. </body>
16. </html>
在嚮導第2步所引用的標籤庫設定對應第2行的引用標籤庫聲明代碼。而在第3步中設定的Bean對應第9~10行代碼,因為在welcome.jsp中無需填充Bean的值,所以應該手工去除第10行的代碼。
下面我們在welcome.jsp檔案中引用datetime標籤庫,用它產生一個目前時間格式化串。開啟welcone.jsp檔案並切換到Source視圖頁中。首先清除<body></body>中JBuilder所產生的代碼,在<body></body>中輸入"<dt:",JBuilder將使用TagInsight功能顯示出這個標籤庫中所有可用的標籤項,如下圖所示:
圖 24 利用TagInsight錄入標籤庫
使用TagInsight可以非常方便地錄入標籤庫中的可用標籤,大大加速標籤庫的代碼錄入並保證正確性。在welcome.jsp中我們使用標籤庫獲得一個當前的格式化時間串,此外我們還通過ses_userBean擷取使用者的名字。welcome.jsp的最終代碼如下所示:
代碼清單 16 welcome.jsp 引用標籤庫和Session對象
1. <%@page contentType="text/html; charset=GBK" errorPage="error.jsp"%>
2. <%@taglib uri="http://jakarta.apache.org/taglibs/datetime-1.0" prefix="dt"%>
3. <html>
4. <head>
5. <title>welcome</title>
6. </head>
7. <jsp:useBean id="ses_userBean" scope="session" class="bookstore.User"/>
8. <body bgcolor="#ffffff">你是
9. <%=ses_userBean.getUserName()%>,歡迎登入。<br>
10. 現在的時間是<dt:表單at pattern="MM/dd/yyyy hh:mm"><dt:currentTime/></dt:表單at>
11. <br>點擊<a href="quit.jsp">這兒</a>退出系統
12. </body>
13. </html>
此外,JBuilder將datetime標籤庫描述檔案taglibs-datetime.tld拷貝到WEB-INF下,並對web.xml檔案動了手腳,聲明taglibs-datetime.tld所在的地址:
代碼清單 17 web.xml中聲明標籤描述檔案
1. <?xml version="1.0" encoding="UTF-8"?>
2. …
3. <web-app>
4. <taglib>
5. <taglib-uri>http://jakarta.apache.org/taglibs/datetime-1.0</taglib-uri>
6. <taglib-location>/WEB-INF/taglibs-datetime.tld</taglib-location>
7. </taglib>
8. </web-app>
如上所示,web.xml的第4~7行,JBuilder自動加入了datetime標籤庫的描述檔案,以便Web容器正確找到所需的資訊。
在編譯工程產生Web目錄時,JBuilder會將datetime標籤庫的JAR檔案taglibs-datetime.jar拷貝到WEB-INF/lib目錄下。
當使用者登入成功後,將轉向welcome.jsp頁面,其頁面效果如下圖所示:
圖 25 welcome.jsp效果頁面
當使用者點擊"這兒"的連結時,將連結到quit.jsp,quit.jsp頁面負責清除session,清除session後,將引用session中的對象解除綁定並釋放資源。
quit.jsp退出處理頁面
由於HTTP協議以請求/響應的方式工作,所以用戶端退出系統時需要主動往Web伺服器發送一個請求,通知Web伺服器及時銷毀會話,否則Web伺服器只會等到會話到期時才會銷毀它。
我們用一個quit.jsp來處理使用者退出系統的操作,quit.jsp負責登出session,及時釋放資源。
·登出session。
·關閉瀏覽器視窗。
其代碼如下所示:
1. <%@ page contentType="text/html; charset=GBK" %>
2. <%
3. session.invalidate();
4. %>
5. <script language="javaScript" >
6. window.opener = null;
7. window.close();
8. </script>
其中第3行負責登出session,原先放入session的對象將解除綁定定,等待記憶體回收以釋放資源。對於本例而言,session中有一個名為ses_userBean的userBean對象(它是在switch.jsp中放入session的),調用session.invalidate()後,userBean從session中解除綁定定,它的valueUnbound()方法會被觸發調用,然後再等待記憶體回收。
第5~8行是一段JavaScript指令碼程式,負責關閉視窗,如果網頁不是通過指令碼程式開啟的(window.open()),調用window.close()指令碼關閉視窗前,必須先將window.opener對象置為null,如第6行所示,否則瀏覽器會彈出一個確定關閉的對話方塊,筆者發現這個問題困擾了不少的Web程式員,故特別指出。
實戰經驗:
在使用者退出系統時,需要登出session,否則只有等到session在伺服器中到期後,session對象才會被清除。假設一個session的不活動最大時間為30分鐘(預設的時間),如果不手工清除session對象,則當一個使用者退出系統後再過30分鐘,這些對象所佔用的系統資源才會被釋放。