JBuilder2005實戰JSP之日誌和部署

來源:互聯網
上載者:User
使用者登入和退出日誌

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

  我們利用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中屬性對象時的事件處理介面。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.