JBuilder2005實戰JSP之特殊頁面(5)

來源:互聯網
上載者: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分鐘,這些對象所佔用的系統資源才會被釋放。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.