用户登录和退出日志
当用户登录系统时,在日志表中插入一条记录,记录用户登录的时间,在用户退出系统时记录用户退出系统的时间。
我们利用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. } |
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器