1. librería de paquetes; 2. importar javax.servlet.http.HttpSessionBindingListener; 3. importar javax.servlet.http.HttpSessionBindingEvent; 4. importar java.sql.*; 5. importe el formulario java.text.SimpleDate en; 6. importar java.util.Date; 7. 8. El usuario de clase pública implementa HttpSessionBindingListener 9. { 10.… 11. cadena privada loginDatetime // Hora de inicio de sesión del usuario; 12.… 13. valor vacío públicoBound (evento HttpSessionBindingEvent) 14. { 15. Conexión de conexión = nula; 16. Cadena sqlStr = "insertar en T_LOGIN_LOG(ID, USER_ID, DT_LOGIN) " + 17. "valores(SEQ_LOGIN_LOG_ID.NEXTVAL,?,?)"; 18. intentar 19. { 20. conexión = DBConnection.getConnection(); 21. PreparedStatement pStat = conn.prepareStatement(sqlStr); 22. loginDatetime = getCurrDatetimeStr(); //Cadena de hora actual 23. pStat.setString(1, ID de usuario); 24. pStat.setString(2, fecha y hora de inicio de sesión); 25. pStat.executeUpdate(); 26. 27. } captura (SQLException e) 28. { 29. lanzar una nueva RuntimeException ( 30. "Error al escribir el registro de inicio de sesión del usuario"); 31. } finalmente 32. { 33. intentar 34. { 35. si (conexión! = nulo) 36. { 37. conexión.cerrar(); 38. } 39. } captura (SQLException ex) 40. { 41. ex.printStackTrace(); 42. } 43. } 44. } 45. 46. valor nulo público sin límites (evento HttpSessionBindingEvent) 47. { 48. Conexión de conexión = nula; 49. Cadena sqlStr = "actualizar T_LOGIN_LOG establecer DT_LONOUT =?" + 50. "donde USER_ID=? y DT_LOGIN =?"; 51. intenta 52. { 53. conexión = DBConnection.getConnection(); 54. PreparedStatement pStat = conn.prepareStatement(sqlStr); 55. pStat.setString(1, getCurrDatetimeStr()); 56. pStat.setString(2, ID de usuario); 57. pStat.setString(3, fechahora de inicio de sesión); 58. pStat.executeUpdate(); 59. 60. } captura (SQLException e) 61. { 62. lanzar una nueva RuntimeException ( 63. "Error al escribir el registro de salida del usuario"); 64. } finalmente 65. { 66. intentar 67. { 68. si (conexión! = nulo) 69. { 70. conexión.cerrar(); 71. } 72. } captura (SQLException ex) 73. { 74. ex.printStackTrace(); 75. } 76. } 77. } 78. 79. //Obtiene la cadena de tiempo actual y la devuelve en formato aaaaMMddHHmmss, como 20050505010101 80. Cadena estática privada getCurrDatetimeStr() 81. { 82. Formulario SimpleDate en sdf = nuevo formulario SimpleDate en("yyyyMMddHHmmss"); 83. devolver el formulario sdf en (nueva fecha()); 84. } 85. } |
El método valueBound() inserta un registro de inicio de sesión en la tabla T_LOGIN_LOG y actualiza la hora de salida de la tabla de registro en el método valueUnbound(). Además, las líneas 80 a 84 proporcionan un método getCurrDatetimeStr() para obtener la cadena de tiempo actual. Este método se utiliza para obtener el inicio de sesión y la cadena de tiempo del punto de tiempo de salida.
A continuación se describe cómo el programa registra el tiempo de inicio y cierre de sesión del usuario describiendo los pasos que sigue un usuario hasta que cierra la sesión:
1. Después de que el usuario ingresa la contraseña para iniciar sesión a través de login.jsp, el programa cambia a la página de control switch.jsp.
2. En switch.jsp, vinculamos el objeto userBean de la clase User.java a la sesión mediante el método session.setAttribute("ses_userBean", userBean).
3. En este momento, se llama al método de interfaz HttpSessionBindingListener valueBound() del objeto userBean y se inserta un registro de inicio de sesión en la tabla T_LOGIN_LOG.
4. switch.jsp cambia a la página de bienvenida.jsp.
5. Cuando el usuario hace clic en el enlace de la página bienvenido.jsp para salir del sistema, se le redirige a la página quit.jsp.
6. quit.jsp llama al método session.invalidate() y el objeto userBean se borra de la sesión.
7. En este momento, se llama al método valueUnbound () del método de interfaz HttpSessionBindingListener del objeto userBean, se actualiza la hora de salida del registro y se cierra la ventana del navegador.
La interfaz HttpSessionBindingListener es la interfaz de eventos del contenedor web. La clase que implementa la interfaz se llama automáticamente cuando ocurre un evento. El contenedor web tiene varias interfaces de eventos.
·Interfaz ServletContextListener: interfaz de procesamiento de eventos para el inicio y destrucción del contenedor web. Se definen dos métodos en la interfaz.
·Interfaz ServletContextAttributeListener: interfaz de procesamiento de eventos cuando cambian los atributos del contexto web.
·Interfaz HttpSessionListener: interfaz de procesamiento de eventos para eventos de creación y destrucción de sesiones.
·Interfaz HttpSessionAttributeListener: la interfaz de procesamiento de eventos para cambios de objetos de atributos en la sesión de sesión. Esta interfaz es similar a la interfaz HttpSessionBindingListener que utilizamos anteriormente.
Además, en J2EE1.4 se proporcionan otras dos interfaces de procesamiento de eventos:
·Interfaz ServletRequestListener: interfaz de procesamiento de eventos de creación y destrucción de objetos de solicitud de solicitud.
·Interfaz ServletRequestAttributeListener: interfaz de procesamiento de eventos al cambiar el objeto de atributo en Request.
Implementación del programa
Una vez completado el desarrollo del programa web, comenzamos a trabajar en la implementación del programa. Esperamos implementar esta aplicación web en el servidor de aplicaciones web Tomcat5.0.
Primero, configuramos la página de inicio predeterminada de la aplicación web y luego empaquetamos todo el programa web en un archivo WAR.
1. Configure la página de acceso predeterminada, haga doble clic en el nodo webModule en el panel del proyecto, JBuilder muestra la siguiente página en el panel de contenido:
Figura 26 Establecer la página predeterminada a la que accede el programa web
Haga clic en el botón Agregar... en el lado derecho de la lista de archivos de bienvenida, ingrese login.jsp en el cuadro de diálogo emergente y presione el botón Aceptar para configurar la página login.jsp como la página predeterminada. La siguiente implementación en negrita se agregará a la información de descripción de la implementación web.xml:
Listado de Código 19 Página predeterminada de la aplicación web
1.…
2. <aplicación web>
3. <nombre-para mostrar>módulo web</nombre-para mostrar>
4. <lista-de-archivos-de-bienvenida>
5. <archivo-de-bienvenida>login.jsp</archivo-de-bienvenida>
6. </lista-de-archivos-de-bienvenida>
7.…
8. </aplicación web>
Cuando el usuario no especifica un nombre de archivo de acceso específico en la URL, el contenedor web verifica automáticamente si hay un archivo login.jsp en el URI y, de ser así, llama directamente a este archivo.
2. Haga clic con el botón derecho en el nodo webModule en el árbol de recursos en el panel del proyecto, Propiedades...->Construir->En el panel Configuración de compilación, configure Construir archivo web en la opción Al compilar el proyecto o módulo, como se muestra en la siguiente figura:
Figura 27 Configura el archivo WAR que se creará al reconstruir el proyecto o módulo web
3. Haga clic derecho en el capítulo 13.jpx en el panel del proyecto y seleccione Reconstruir en el menú emergente para compilar todo el proyecto.
4. Una vez completada la compilación, se generará un archivo webModule.war en el directorio raíz del proyecto.
5. Copie el archivo webModule.war en el directorio <directorio de instalación de JBuilder2005>/thirdparty/jakarta-tomcat-5.0.27/webapps.
Esto completa la implementación de la aplicación web. A continuación, iniciamos el servidor de aplicaciones web Tomcat 5.0 y accedemos a la aplicación webModule.war que acabamos de implementar.
1. Haga doble clic en startup.bat en <directorio de instalación de JBuilder2005>/thirdparty/jakarta-tomcat-5.0.27/bin para iniciar el servidor de aplicaciones web Tomcat 5.0 (asegúrese de que no se esté ejecutando ninguna aplicación web en JBuilder en este momento para evitar conflictos) .
2. Abra IE, escriba http://localhost:8080/webModule y accederá correctamente a la aplicación web que acaba de implementar, como se muestra en la siguiente figura:
Figura 28 Efecto de acceso de login.jsp después de la implementación
El servidor Tomcat funciona en el puerto 8080 de forma predeterminada, por lo que debe agregar el número de puerto después del nombre de la máquina. Puede cambiar este número de puerto cambiando el archivo de configuración server.xml de Tomca ubicado en el directorio conf.
Dado que el archivo WAR de nuestra aplicación web se llama webModule.war, una vez que se inicia el servidor web, el archivo WAR se descomprimirá automáticamente en el directorio webModule, por lo que se debe acceder a él a través de http://localhost:8080/webModule . Además, dado que la página de acceso predeterminada es login.jsp, cuando no se especifica ninguna página específica, se llama a la página login.jsp.