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

首頁 > 編程 > JSP > 正文

JBuilder2005實戰JSP之日志和部署(7)

2019-11-18 19:19:03
字體:
來源:轉載
供稿:網友
  用戶登錄和退出日志

  當用戶登錄系統時,在日志表中插入一條記錄,記錄用戶登錄的時間,在用戶退出系統時記錄用戶退出系統的時間。

  我們利用HttpsessionBindingListener接口來完成記錄登錄和退出日志的功能,該接口中定義了兩個方法:

  ·valueBound(HttpSessionBindingEvent event)

  ·valueUnbound(HttpSessionBindingEvent event)

  如果一個類實現了HttpSessionBindingListener接口,當對象通過session.setAttribute()被綁定到Session中時,則對象的接口方法valueBound()被自動調用,當對象從session中移出時(通過調用session.invalidate()、session.removeAttribute()或session自動過期時),valueUnbound()方法將被自動調用。

  下面我們使User.java類實現HttpSessionBindingListener接口,調整后的代碼如下所示:

  代碼清單 18 實現了HttpSessionBindingListener的User.java

1. package bookstore;
2. import javax.servlet.http.HttpSessionBindingListener;
3. import javax.servlet.http.HttpSessionBindingEvent;
4. import java.sql.*;
5. import java.text.SimpleDate表單at;
6. import java.util.Date;
7.
8. public class User implements HttpSessionBindingListener
9. {
10.  …
11.  PRivate String loginDatetime;//用戶登錄時間
12.  …
13.  public void valueBound(HttpSessionBindingEvent event)
14.  {
15.   Connection conn = null;
16.   String sqlStr = "insert into T_LOGIN_LOG(ID, USER_ID, DT_LOGIN) " +
17.       " values(SEQ_LOGIN_LOG_ID.NEXTVAL,?,? )";
18.   try
19.   {
20.    conn = DBConnection.getConnection();
21.    PreparedStatement pStat = conn.prepareStatement(sqlStr);
22.    loginDatetime = getCurrDatetimeStr(); //當前時間串
23.    pStat.setString(1, userId);
24.    pStat.setString(2, loginDatetime);
25.    pStat.executeUpdate();
26.
27.   } catch (SQLException e)
28.   {
29.    throw new RuntimeException(
30.     "用戶登陸日志寫入出錯");
31.   } finally
32.  {
33.  try
34.  {
35.   if (conn != null)
36.   {
37.    conn.close();
38.   }
39.  } catch (SQLException ex)
40.  {
41.   ex.printStackTrace();
42.  }
43.  }
44. }
45.
46. public void valueUnbound(HttpSessionBindingEvent event)
47. {
48.  Connection conn = null;
49.  String sqlStr = " update T_LOGIN_LOG set DT_LONOUT = ? " +
50.      " where USER_ID=? and DT_LOGIN = ?";
51.  try
52.  {
53.   conn = DBConnection.getConnection();
54.   PreparedStatement pStat = conn.prepareStatement(sqlStr);
55.   pStat.setString(1, getCurrDatetimeStr());
56.   pStat.setString(2, userId);
57.   pStat.setString(3, loginDatetime);
58.   pStat.executeUpdate();
59.
60.  } catch (SQLException e)
61.  {
62.   throw new RuntimeException(
63.    "用戶退出日志寫入出錯");
64.  } finally
65.  {
66.   try
67.   {
68.    if (conn != null)
69.    {
70.     conn.close();
71.    }
72.   } catch (SQLException ex)
73.   {
74.    ex.printStackTrace();
75.   }
76.  }
77. }
78.
79. //獲取當前時間字串,以yyyyMMddHHmmss格式返回,如20050505010101
80. private static String getCurrDatetimeStr()
81. {
82.  SimpleDate表單at sdf = new SimpleDate表單at("yyyyMMddHHmmss");
83.  return sdf.表單at(new Date());
84. }

85. }


  valueBound()方法向T_LOGIN_LOG表插入一條登錄日志,在valueUnbound()方法中更新日志表的退出時間,此外第80~84行提供了一個獲取當前時間串的方法getCurrDatetimeStr(),通過該方法獲取登錄和退出時間點的時間字符串。

  下面通過描述用戶登錄系統直到退出時所經歷的步驟說明程序如何記錄用戶的登錄和退出時間的:

  1.用戶通過login.jsp輸入密碼登錄后,程序轉向switch.jsp控制頁面。

  2.在switch.jsp中,我們通過session.setAttribute("ses_userBean", userBean)方法將User.java類的對象userBean綁定到session中。

  3.此時userBean對象的HttpSessionBindingListener接口方法valueBound()被調用,向T_LOGIN_LOG表插入一條登錄日志。

  4.switch.jsp轉向welcome.jsp頁面。

  5.用戶點擊welcome.jsp頁面中的鏈接退出系統時,轉向quit.jsp頁面。

  6.quit.jsp調用session.invalidate()方法,userBean對象從session中清除。

  7.此時userBean對象的HttpSessionBindingListener接口方法valueUnbound()方法被調用,更新日志的退出時間,關閉瀏覽器窗口。

  HttpSessionBindingListener接口是Web容器的事件接口,實現接口的類在某個事件發生時自動被調用,Web容器有多個這樣的事件接口,它們分別是:

  ·ServletContextListener 接口:Web容器啟動和銷毀的事件處理接口,接口中定義了兩個方法。

  ·ServletContextAttributeListener接口:Web上下文屬性發生更改時的事件處理接口。

  ·HttpSessionListener接口:Session創建和銷毀事件的事件處理接口。

  ·HttpSessionAttributeListener接口:Session會話中屬性對象更改的事件處理接口,該接口和我們在前面使用的HttpSessionBindingListener接口相似。

  此外在J2EE1.4中還提供了另外兩個事件處理接口,它們是:

  ·ServletRequestListener接口:Request請求對象創建和銷毀事件處理接口。

  ·ServletRequestAttributeListener接口:更改Request中屬性對象時的事件處理接口。

  程序部署

  在Web程序開發完成后,我們開始著手程序部署的工作,我們希望將這個Web應用程序部署到Tomcat5.0的Web應用服務器中。

  首先我們設置Web應用程序的默認首頁,然后再將整個Web程序打成一個WAR檔案文件包。

  1.設置默認訪問的頁面,雙擊工程窗格中的webModule節點,JBuilder在內容窗格顯示如下的頁面:


圖 26 設置Web程序默認訪問的頁面

  點擊Welcome files列表右邊的Add…按鈕,在彈出的對話框中錄入login.jsp并按確定按鈕,將login.jsp頁面作為默認頁面,這樣web.xml部署描述文件中將新增以下粗體的部署信息:

  代碼清單 19 Web應用程序默認頁面

1. …
2. <web-app>
3. <display-name>webModule</display-name>
4. <welcome-file-list>
5. <welcome-file>login.jsp</welcome-file>
6. </welcome-file-list>

7. …
8. </web-app>

  當用戶在URL中沒有指定具體的訪問文件名時,Web容器自動查看URI下是否有login.jsp文件,如果直接調出這個文件。

  2.在工程窗格中的資源樹中右擊webModule節點,Properties…->Build->在Build設置面中,將Build Web archive設置為When building project or module選項,如下圖所示:


圖 27 設置在Rebuild工程或Web模塊時創建WAR檔案文件

  3.在工程窗格中右擊chapter13.jpx,在彈出的菜單中選擇Rebuild編譯整個工程。

  4.編譯完成后,在工程根目錄下將產生一個webModule.war文件。

  5.拷貝webModule.war文件至<JBuilder2005安裝目錄>/thirdparty/jakarta-tomcat-5.0.27/webapps目錄下。

  這樣就完成Web應用程序的部署了,下面我們啟動Tomcat 5.0 Web應用程序服務器,并訪問剛才部署的webModule.war應用程序。

  1.雙擊<JBuilder2005安裝目錄>/thirdparty/jakarta-tomcat-5.0.27/bin下的startup.bat啟動Tomcat 5.0 Web應用服務器(請保證這時JBuilder中沒有運行Web應用程序,以免沖突)。

  2.打開IE,鍵入http://localhost:8080/webModule,將正確訪問到剛才部署的Web應用程序,如下圖所示:


圖 28 部署后login.jsp的訪問效果

  Tomcat 服務器默認工作于8080端口,所以在機器名后需要添加端口號,可以通過更改Tomca位于conf目錄下的server.xml配置文件可以更改這個端口號。

  由于我們的web應用程序的WAR文件名為webModule.war,web服務器啟動后,會自動將WAR文件解壓到webModule目錄下,所以必須通過http://localhost:8080/webModule訪問。此外,由于默認訪問頁面為login.jsp,所以沒有指定具體的頁面時,login.jsp頁面被調用訪問。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久国产成人精品| 欧美精品在线免费观看| 成人精品久久av网站| 全色精品综合影院| 亚洲第一福利网| 日本午夜精品理论片a级appf发布| 国产精品久久久久久久电影| 亚洲男人7777| 国产精品久久久久久久久久99| 91夜夜揉人人捏人人添红杏| 日韩av在线导航| 欧美乱大交xxxxx另类电影| 亚洲精品一区二区网址| 97在线视频观看| 日韩欧美中文字幕在线观看| 一区二区三区视频免费在线观看| 亚洲成人在线视频播放| 久久九九精品99国产精品| 麻豆乱码国产一区二区三区| 日韩中文字幕在线观看| 欧美在线观看视频| 精品视频www| 色综合久久精品亚洲国产| 欧美高清视频在线| 日韩av最新在线观看| 97视频在线观看网址| 久久成人精品视频| 日韩中文字幕视频在线观看| www.国产精品一二区| 国产亚洲一级高清| 国产精品 欧美在线| 欧美激情国产日韩精品一区18| 欧美性极品少妇精品网站| 国产日韩欧美视频| 欧美日韩国产123| 96国产粉嫩美女| 日韩精品免费综合视频在线播放| 国产精品老女人视频| 亚洲欧美中文日韩在线| 成人性生交大片免费看视频直播| 日韩欧美在线视频免费观看| 日韩av电影在线网| 欧美韩国理论所午夜片917电影| 狠狠久久五月精品中文字幕| 国产精品视频免费在线观看| 日韩av电影在线免费播放| 亚洲成人av在线| 欧美大人香蕉在线| 日本国产欧美一区二区三区| 欧美激情国产高清| 欧美精品videosex性欧美| 国产亚洲精品久久久久久777| 日韩欧美在线视频日韩欧美在线视频| 欧美激情视频一区二区三区不卡| 97在线精品国自产拍中文| 在线不卡国产精品| 555www成人网| 亚洲精品在线不卡| 欧美一级淫片丝袜脚交| 亚洲国产日韩欧美在线图片| 国产在线播放91| 成人免费大片黄在线播放| 亚洲人成网站免费播放| 亚洲欧美日韩在线高清直播| 91在线免费看网站| 欧美日韩国产综合视频在线观看中文| 在线视频欧美性高潮| 亚洲a一级视频| 欧美精品videos| 精品视频偷偷看在线观看| 91大神福利视频在线| 亚洲精品99999| 欧美激情xxxx| 亚洲美女性生活视频| 亚洲色图50p| 久热99视频在线观看| 亚洲国产日韩欧美综合久久| 亚洲视频视频在线| 伊人一区二区三区久久精品| 日韩专区在线播放| 久久久黄色av| 亚洲精品国产免费| 亚洲黄色www| 亚洲成人黄色在线| 国产一区欧美二区三区| 亚洲一区二区三区视频| 久久99国产综合精品女同| 国产成人福利网站| 久久久久久亚洲精品中文字幕| 日韩视频在线观看免费| 欧美裸体男粗大视频在线观看| 8090理伦午夜在线电影| 成人欧美一区二区三区在线| 在线观看欧美日韩国产| 69av成年福利视频| 色七七影院综合| xxxxxxxxx欧美| 亚洲精品久久久久国产| 亚洲最新中文字幕| yw.139尤物在线精品视频| 欧美美最猛性xxxxxx| 欧美高跟鞋交xxxxxhd| 精品视频在线播放免| 91在线国产电影| 精品国产91乱高清在线观看| 亚洲丝袜av一区| 一区二区福利视频| 欧美成人精品三级在线观看| 国产丝袜一区二区| 丁香五六月婷婷久久激情| 亚洲人成在线一二| 亚洲乱码一区av黑人高潮| 国模gogo一区二区大胆私拍| 亚洲国语精品自产拍在线观看| 色婷婷综合成人| 亚洲精品视频免费在线观看| 久久精品99久久香蕉国产色戒| 91免费版网站入口| 永久免费看mv网站入口亚洲| 欧美性猛交99久久久久99按摩| 久久av资源网站| 久久天天躁狠狠躁夜夜躁2014| 亚洲自拍偷拍一区| 欧洲一区二区视频| 欧美日韩免费区域视频在线观看| 久久香蕉频线观| 国产亚洲欧美一区| 欧美www视频在线观看| 欧美性开放视频| 91九色国产社区在线观看| 欧美激情亚洲综合一区| 国产精品第二页| 国产精品欧美日韩久久| 久久久久久香蕉网| 欧美日韩在线观看视频小说| 国产成人综合av| 日韩av网站电影| 国产精品扒开腿做| 国产精品久久久久久久久| 精品调教chinesegay| 日韩欧美在线视频观看| 国产综合久久久久| 中文字幕一区电影| 亚洲成人精品av| 日本欧美中文字幕| 91极品视频在线| 国产在线精品一区免费香蕉| 亚洲第一精品久久忘忧草社区| 亚洲男人天堂2023| 国产精品99久久久久久人| 欧美亚洲激情在线| 日韩成人av在线播放| 亚洲石原莉奈一区二区在线观看| 亚洲免费福利视频| 成人精品视频在线| 国产亚洲欧美日韩精品| 日韩av电影中文字幕| 久久精品一本久久99精品| 欧美激情一区二区三区高清视频| 国产91对白在线播放| 91亚洲精品一区二区| 国产精品自拍偷拍| 欧美成人高清视频| 欧美电影免费观看网站|