1. librairie à forfait ; 2. importer javax.servlet.http.HttpSessionBindingListener ; 3. importer javax.servlet.http.HttpSessionBindingEvent ; 4. importer java.sql.* ; 5. importer le formulaire java.text.SimpleDate à l'adresse ; 6. importer java.util.Date ; 7. 8. public class L'utilisateur implémente HttpSessionBindingListener 9. { 10.… 11. private String loginDatetime; //Heure de connexion de l'utilisateur 12.… 13. public void valueBound (événement HttpSessionBindingEvent) 14. { 15. Connexion conn = null ; 16. String sqlStr = "insérer dans T_LOGIN_LOG(ID, USER_ID, DT_LOGIN) " + 17. "valeurs(SEQ_LOGIN_LOG_ID.NEXTVAL,?,? )"; 18. essayez 19. { 20. conn = DBConnection.getConnection(); 21. PreparedStatement pStat = conn.prepareStatement(sqlStr); 22. loginDatetime = getCurrDatetimeStr(); //Chaîne d'heure actuelle 23. pStat.setString(1, userId); 24. pStat.setString(2, loginDatetime); 25. pStat.executeUpdate(); 26. 27. } catch (SQLException e) 28. { 29. lancez une nouvelle RuntimeException ( 30. "Erreur d'écriture du journal de connexion de l'utilisateur"); 31. } enfin 32. { 33. essayez 34. { 35. si (conn != null) 36. { 37. conn.close(); 38. } 39. } catch (SQLException ex) 40. { 41. ex.printStackTrace(); 42. } 43. } 44. } 45. 46. public void valueUnbound (événement HttpSessionBindingEvent) 47. { 48. Connexion conn = null ; 49. String sqlStr = " update T_LOGIN_LOG set DT_LONOUT = ? " + 50. "où USER_ID=? et DT_LOGIN = ?"; 51. essayez 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. } capture (SQLException e) 61. { 62. lancez une nouvelle RuntimeException ( 63. "Erreur d'écriture du journal de sortie de l'utilisateur"); 64. } enfin 65. { 66. essayez 67. { 68. si (conn != null) 69. { 70. conn.close(); 71. } 72. } catch (SQLException ex) 73. { 74. ex.printStackTrace(); 75. } 76. } 77. } 78. 79. //Obtenir la chaîne d'heure actuelle et la renvoyer au format aaaaMMjjHHmmss, tel que 20050505010101 80. Chaîne statique privée getCurrDatetimeStr() 81. { 82. Formulaire SimpleDate à sdf = nouveau formulaire SimpleDate à("aaaaMMjjHHmmss"); 83. renvoie le formulaire sdf à (nouvelle date ()); 84. } 85. } |
La méthode valueBound() insère un journal de connexion dans la table T_LOGIN_LOG et met à jour l'heure de sortie de la table journal dans la méthode valueUnbound(). De plus, les lignes 80 à 84 fournissent une méthode getCurrDatetimeStr() pour obtenir la chaîne d'heure actuelle. Cette méthode est utilisée pour obtenir la chaîne de connexion et l’heure du moment de sortie.
Ce qui suit décrit comment le programme enregistre l'heure de connexion et de déconnexion de l'utilisateur en décrivant les étapes qu'un utilisateur suit jusqu'à ce qu'il se déconnecte :
1. Une fois que l'utilisateur a saisi le mot de passe pour se connecter via login.jsp, le programme passe à la page de contrôle switch.jsp.
2. Dans switch.jsp, nous lions l'objet userBean de la classe User.java à la session via la méthode session.setAttribute("ses_userBean", userBean).
3. A ce moment, la méthode d'interface HttpSessionBindingListener valueBound() de l'objet userBean est appelée et un journal de connexion est inséré dans la table T_LOGIN_LOG.
4. switch.jsp bascule vers la page Welcome.jsp.
5. Lorsque l'utilisateur clique sur le lien de la page Welcome.jsp pour quitter le système, il est redirigé vers la page Quit.jsp.
6. quit.jsp appelle la méthode session.invalidate() et l'objet userBean est effacé de la session.
7. À ce stade, la méthode valueUnbound() de la méthode d'interface HttpSessionBindingListener de l'objet userBean est appelée, l'heure de sortie du journal est mise à jour et la fenêtre du navigateur est fermée.
L'interface HttpSessionBindingListener est l'interface d'événement du conteneur Web. La classe qui implémente l'interface est automatiquement appelée lorsqu'un événement se produit. Le conteneur Web possède plusieurs interfaces d'événement de ce type.
·Interface ServletContextListener : interface de traitement d'événements pour le démarrage et la destruction du conteneur Web. Deux méthodes sont définies dans l'interface.
·Interface ServletContextAttributeListener : interface de traitement d'événements lorsque les attributs du contexte Web changent.
·Interface HttpSessionListener : interface de traitement d'événements pour les événements de création et de destruction de session.
· Interface HttpSessionAttributeListener : l'interface de traitement des événements pour les modifications d'objet d'attribut dans la session de session. Cette interface est similaire à l'interface HttpSessionBindingListener que nous avons utilisée précédemment.
De plus, deux autres interfaces de traitement d'événements sont fournies dans J2EE1.4, à savoir :
·Interface ServletRequestListener : interface de traitement des événements de création et de destruction d'objet de demande.
·Interface ServletRequestAttributeListener : interface de traitement d'événements lors de la modification de l'objet attribut dans Request.
Déploiement du programme
Une fois le développement du programme Web terminé, nous commençons à travailler sur le déploiement du programme. Nous espérons déployer cette application Web sur le serveur d'applications Web Tomcat5.0.
Tout d’abord, nous définissons la page d’accueil par défaut de l’application Web, puis regroupons l’intégralité du programme Web dans un fichier d’archive WAR.
1. Définissez la page d'accès par défaut, double-cliquez sur le nœud webModule dans le volet projet, JBuilder affiche la page suivante dans le volet contenu :
Figure 26 Définir la page par défaut accessible par le programme Web
Cliquez sur le bouton Ajouter... sur le côté droit de la liste des fichiers de bienvenue, entrez login.jsp dans la boîte de dialogue contextuelle et appuyez sur le bouton OK pour définir la page login.jsp comme page par défaut. Le déploiement en gras suivant sera ajouté aux informations du fichier de description de déploiement web.xml :
Liste de codes 19 Page par défaut de l'application Web
1.…
2. <application Web>
3. <nom d'affichage>webModule</nom d'affichage>
4. <liste-de-fichiers-de-bienvenue>
5. <fichier-bienvenue>login.jsp</fichier-bienvenue>
6. </liste-de-fichiers-de-bienvenue>
7.…
8. </application web>
Lorsque l'utilisateur ne spécifie pas de nom de fichier d'accès spécifique dans l'URL, le conteneur Web vérifie automatiquement s'il existe un fichier login.jsp sous l'URI et, si c'est le cas, appelle directement ce fichier.
2. Cliquez avec le bouton droit sur le nœud webModule dans l'arborescence des ressources du volet projet, Propriétés...->Construire->Dans le panneau Paramètres de construction, définissez Créer une archive Web sur l'option Lors de la création d'un projet ou d'un module, comme indiqué dans la figure suivante :
Figure 27 Définit le fichier d'archive WAR à créer lors de la reconstruction du projet ou du module Web
3. Cliquez avec le bouton droit sur Chapter13.jpx dans le volet projet et sélectionnez Reconstruire dans le menu contextuel pour compiler l'intégralité du projet.
4. Une fois la compilation terminée, un fichier webModule.war sera généré dans le répertoire racine du projet.
5. Copiez le fichier webModule.war dans le répertoire <répertoire d'installation JBuilder2005>/thirdparty/jakarta-tomcat-5.0.27/webapps.
Ceci termine le déploiement de l'application Web. Ensuite, nous démarrons le serveur d'applications Web Tomcat 5.0 et accédons à l'application webModule.war qui vient d'être déployée.
1. Double-cliquez sur startup.bat sous <répertoire d'installation JBuilder2005>/thirdparty/jakarta-tomcat-5.0.27/bin pour démarrer le serveur d'applications Web Tomcat 5.0 (veuillez vous assurer qu'aucune application Web n'est en cours d'exécution dans JBuilder pour le moment pour éviter les conflits) .
2. Ouvrez IE, tapez http://localhost:8080/webModule et vous accéderez correctement à l'application Web qui vient d'être déployée, comme le montre la figure suivante :
Figure 28 Effet d'accès de login.jsp après le déploiement
Le serveur Tomcat fonctionne par défaut sur le port 8080, vous devez donc ajouter le numéro de port après le nom de la machine. Vous pouvez modifier ce numéro de port en modifiant le fichier de configuration server.xml de Tomca situé dans le répertoire conf.
Étant donné que le fichier WAR de notre application Web s'appelle webModule.war, après le démarrage du serveur Web, le fichier WAR sera automatiquement décompressé dans le répertoire webModule, il doit donc être accessible via http://localhost:8080/webModule . De plus, la page d'accès par défaut étant login.jsp, lorsqu'aucune page spécifique n'est spécifiée, la page login.jsp est appelée.