JBuilder2005实战JSP之日志和部署(7)
程序员文章站
2022-03-24 22:21:17
用户登录和退出日志 当用户登录时,在日志表中插入一条记录,记录用户登录的时间,在用户退出系统时记录用户退出系统的时间。 我们利用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
当用户登录时,在日志表中插入一条记录,记录用户登录的时间,在用户退出系统时记录用户退出系统的时间。
我们利用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. } |