1. Paketbuchhandlung; 2. import javax.servlet.http.HttpSessionBindingListener; 3. import javax.servlet.http.HttpSessionBindingEvent; 4. java.sql.* importieren; 5. Importieren Sie das Formular java.text.SimpleDate unter; 6. java.util.Date importieren; 7. 8. Der Benutzer der öffentlichen Klasse implementiert HttpSessionBindingListener 9. { 10.… 11. private String loginDatetime; //Benutzeranmeldezeit 12.… 13. public void valueBound(HttpSessionBindingEvent event) 14. { 15. Verbindung conn = null; 16. String sqlStr = "insert into T_LOGIN_LOG(ID, USER_ID, DT_LOGIN) " + 17. „values(SEQ_LOGIN_LOG_ID.NEXTVAL,?,? )“; 18. Versuchen Sie es 19. { 20. conn = DBConnection.getConnection(); 21. PreparedStatement pStat = conn.prepareStatement(sqlStr); 22. loginDatetime = getCurrDatetimeStr(); //Aktuelle Zeitzeichenfolge 23. pStat.setString(1, userId); 24. pStat.setString(2, loginDatetime); 25. pStat.executeUpdate(); 26. 27. } Catch (SQLException e) 28. { 29. werfen Sie eine neue RuntimeException( 30. „Fehler beim Schreiben des Benutzer-Anmeldeprotokolls“); 31. } endlich 32. { 33. Versuchen Sie es 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. Verbindung conn = null; 49. String sqlStr = " update T_LOGIN_LOG set DT_LONOUT = ? " + 50. „wo USER_ID=? und DT_LOGIN = ?“; 51. Versuchen Sie es 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. werfen Sie eine neue RuntimeException( 63. „Fehler beim Schreiben des Benutzer-Exit-Protokolls“); 64. } endlich 65. { 66. Versuchen 67. { 68. if (conn != null) 69. { 70. conn.close(); 71. } 72. } Catch (SQLException ex) 73. { 74. ex.printStackTrace(); 75. } 76. } 77. } 78. 79. //Erhalten Sie die aktuelle Zeitzeichenfolge und geben Sie sie im Format jjjjMMttHHmmss zurück, z. B. 20050505010101 80. privater statischer String getCurrDatetimeStr() 81. { 82. SimpleDate-Formular bei sdf = neues SimpleDate-Formular bei("yyyyMMddHHmmss"); 83. SDF-Formular zurückgeben unter (neues Datum()); 84. } 85. } |
Die Methode valueBound() fügt ein Anmeldeprotokoll in die Tabelle T_LOGIN_LOG ein und aktualisiert die Ausgangszeit der Protokolltabelle in der Methode valueUnbound(). Darüber hinaus stellen die Zeilen 80 bis 84 eine Methode getCurrDatetimeStr() bereit, um die aktuelle Zeitzeichenfolge zu erhalten. Diese Methode wird verwendet, um die Anmelde- und Zeitzeichenfolge des Ausstiegszeitpunkts abzurufen.
Im Folgenden wird beschrieben, wie das Programm die Anmelde- und Abmeldezeit des Benutzers aufzeichnet, indem es die Schritte beschreibt, die ein Benutzer durchläuft, bis er sich abmeldet:
1. Nachdem der Benutzer das Kennwort eingegeben hat, um sich über login.jsp anzumelden, wechselt das Programm zur Steuerseite von switch.jsp.
2. In switch.jsp binden wir das Objekt userBean der Klasse User.java über die Methode session.setAttribute("ses_userBean", userBean) an die Sitzung.
3. Zu diesem Zeitpunkt wird die HttpSessionBindingListener-Schnittstellenmethode valueBound() des UserBean-Objekts aufgerufen und ein Anmeldeprotokoll in die Tabelle T_LOGIN_LOG eingefügt.
4. switch.jsp wechselt zur Seite „welcome.jsp“.
5. Wenn der Benutzer auf den Link auf der Seite „Welcome.jsp“ klickt, um das System zu verlassen, wird er zur Seite „Quit.jsp“ weitergeleitet.
6. quit.jsp ruft die Methode session.invalidate() auf und das userBean-Objekt wird aus der Sitzung gelöscht.
7. Zu diesem Zeitpunkt wird die Methode valueUnbound () der Schnittstellenmethode HttpSessionBindingListener des UserBean-Objekts aufgerufen, die Beendigungszeit des Protokolls aktualisiert und das Browserfenster geschlossen.
Die HttpSessionBindingListener-Schnittstelle ist die Ereignisschnittstelle des Webcontainers. Die Klasse, die die Schnittstelle implementiert, wird automatisch aufgerufen, wenn ein Ereignis auftritt. Der Webcontainer verfügt über mehrere solcher Ereignisschnittstellen.
·ServletContextListener-Schnittstelle: Ereignisverarbeitungsschnittstelle für den Start und die Zerstörung von Webcontainern. In der Schnittstelle sind zwei Methoden definiert.
·ServletContextAttributeListener-Schnittstelle: Ereignisverarbeitungsschnittstelle, wenn sich Webkontextattribute ändern.
·HttpSessionListener-Schnittstelle: Ereignisverarbeitungsschnittstelle für Sitzungserstellungs- und -zerstörungsereignisse.
·HttpSessionAttributeListener-Schnittstelle: Die Ereignisverarbeitungsschnittstelle für Attributobjektänderungen in der Sitzungssitzung. Diese Schnittstelle ähnelt der zuvor verwendeten HttpSessionBindingListener-Schnittstelle.
Darüber hinaus werden in J2EE1.4 zwei weitere Ereignisverarbeitungsschnittstellen bereitgestellt:
·ServletRequestListener-Schnittstelle: Schnittstelle zur Verarbeitung von Ereignissen zur Erstellung und Zerstörung von Anforderungsobjekten.
·ServletRequestAttributeListener-Schnittstelle: Ereignisverarbeitungsschnittstelle beim Ändern des Attributobjekts in Request.
Programmbereitstellung
Nachdem die Entwicklung des Webprogramms abgeschlossen ist, beginnen wir mit der Programmbereitstellung. Wir hoffen, diese Webanwendung auf dem Tomcat5.0-Webanwendungsserver bereitstellen zu können.
Zuerst legen wir die Standard-Homepage der Webanwendung fest und packen dann das gesamte Webprogramm in eine WAR-Archivdatei.
1. Legen Sie die Standardzugriffsseite fest, doppelklicken Sie im Projektbereich auf den Knoten webModule. JBuilder zeigt die folgende Seite im Inhaltsbereich an:
Abbildung 26 Legen Sie die Standardseite fest, auf die das Webprogramm zugreift
Klicken Sie auf die Schaltfläche „Hinzufügen...“ auf der rechten Seite der Liste der Willkommensdateien, geben Sie login.jsp in das Popup-Dialogfeld ein und klicken Sie auf die Schaltfläche „OK“, um die Seite „login.jsp“ als Standardseite festzulegen Die folgende Bereitstellung in Fettschrift wird der Bereitstellungsbeschreibungsdatei web.xml hinzugefügt:
Codeauflistung 19 Standardseite der Webanwendung
1.…
2. <Web-App>
3. <Anzeigename>webModule</Anzeigename>
4. <Willkommensdateiliste>
5. <welcome-file>login.jsp</welcome-file>
6. </welcome-file-list>
7.…
8. </web-app>
Wenn der Benutzer in der URL keinen bestimmten Zugriffsdateinamen angibt, prüft der Webcontainer automatisch, ob unter der URI eine login.jsp-Datei vorhanden ist, und ruft diese Datei in diesem Fall direkt auf.
2. Klicken Sie mit der rechten Maustaste auf den webModule-Knoten in der Ressourcenstruktur im Projektbereich, Eigenschaften...->Erstellen->Stellen Sie im Bereich „Build-Einstellungen“ die Option „Webarchiv erstellen“ auf „Beim Erstellen eines Projekts oder Moduls“ ein, wie in der folgenden Abbildung dargestellt:
Abbildung 27 Legt die WAR-Archivdatei fest, die beim Neuaufbau des Projekts oder Webmoduls erstellt werden soll
3. Klicken Sie im Projektbereich mit der rechten Maustaste auf „kapitel13.jpx“ und wählen Sie im Popup-Menü „Neu erstellen“, um das gesamte Projekt zu kompilieren.
4. Nach Abschluss der Kompilierung wird eine webModule.war-Datei im Projektstammverzeichnis generiert.
5. Kopieren Sie die Datei webModule.war in das Verzeichnis
Damit ist die Bereitstellung der Webanwendung abgeschlossen. Als Nächstes starten wir den Tomcat 5.0-Webanwendungsserver und greifen auf die gerade bereitgestellte webModule.war-Anwendung zu.
1. Doppelklicken Sie auf „startup.bat“ unter
2. Öffnen Sie den IE, geben Sie http://localhost:8080/webModule ein und Sie greifen korrekt auf die gerade bereitgestellte Webanwendung zu, wie in der folgenden Abbildung dargestellt:
Abbildung 28 Zugriffseffekt von login.jsp nach der Bereitstellung
Der Tomcat-Server arbeitet standardmäßig auf Port 8080, daher müssen Sie die Portnummer nach dem Maschinennamen hinzufügen. Sie können diese Portnummer ändern, indem Sie die Konfigurationsdatei server.xml von Tomca im Verzeichnis conf ändern.
Da die WAR-Datei unserer Webanwendung den Namen webModule.war trägt, wird die WAR-Datei nach dem Start des Webservers automatisch in das webModule-Verzeichnis dekomprimiert, sodass auf sie über http://localhost:8080/webModule zugegriffen werden muss. Da die Standardzugriffsseite außerdem login.jsp ist, wird die Seite login.jsp aufgerufen, wenn keine bestimmte Seite angegeben ist.