欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JBuilder2005实战JSP之日志和部署(7)

程序员文章站 2022-06-22 13:46:54
用户登录和退出日志  当用户登录时,在日志表中插入一条记录,记录用户登录的时间,在用户退出系统时记录用户退出系统的时间。  我们利用httpsessionbindinglistener接口来完成记录...
用户登录和退出日志

  当用户登录时,在日志表中插入一条记录,记录用户登录的时间,在用户退出系统时记录用户退出系统的时间。

  我们利用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. }