[Java Servlet] Die Straße von Senri ist auch der vierte Schritt vom ersten Schritt

Fortschritt

Endlich letztes Mal login.jsp → LoginServlet.java → mypage.jsp Sie können jetzt Übergänge vornehmen. Übrigens lautet die URL zum Zeitpunkt des Übergangs der Mypage http://localhost:8080/ServletApp/mypage.jsp Wenn Sie jedoch über die letzte Erweiterung besorgt sind, gehen Sie zu web.xml

web.xml


<servlet>
	<servlet-name>mypage</servlet-name>
	<jsp-file>/mypage.jsp</jsp-file>
</servlet>
<servlet-mapping>
	<servlet-name>mypage</servlet-name>
	<url-pattern>/ServletApp/mypage</url-pattern>
</servlet-mapping>

Wenn Sie hinzufügen, lautet die URL zum Zeitpunkt des Übergangs http://localhost:8080/ServletApp/mypage Wird sein.

Andere Datenübertragungsmethoden

Tatsächlich gibt es neben der Methode, die die zuletzt durchgeführte Methode "request.getParameter ()" verwendet, andere Methoden, die als "Cookies" und "Sitzungen" bezeichnet werden, um Daten zwischen Servlets zu übertragen.

Lass uns einen Keks machen

Ein Cookie ist eine Information, die auf der Clientseite gespeichert wird, wenn eine Antwort vom Server zurückgegeben wird. (Wenn Sie häufig auf der Website surfen, wird möglicherweise ein Popup-Fenster wie "Diese Website verwendet Cookies" angezeigt.) servlet17.png Als Vorteil des Speicherns von Daten auf der Client-Seite

--Mitgliedschaftssite → Benutzername-Eingabe beim nächsten Mal weglassen --Shopping-Site → Merken Sie sich die Artikel, die Sie in Ihren Warenkorb gelegt haben

Und so weiter. Lass uns Kekse machen. Ändern Sie zunächst die Methode "doPost ()" von "LoginServlet.java".

LoginServlet.java


protected void doPost(HttpServletRequest req, HttpServletResponse res)
			throws ServletException, IOException {
	req.setCharacterEncoding("UTF-8");
	String name=req.getParameter("name");
	Cookie c[]=req.getCookies();
	boolean CreatedCookie=false;
	for(Cookie cookie:c) {
		if(cookie.getName().equals("cookie_user")) {
			CreatedCookie=true;
		}
	}
	if(CreatedCookie==false) {
		Cookie cookie=new Cookie("cookie_user",name);
		res.addCookie(cookie);
	}
//		if(Arrays.stream(c)
//			.filter(e->!e.getName().equals("cookie_user"))
//			.count()==c.length) {
//		Cookie cookie=new Cookie("cookie_user",name);
//		res.addCookie(cookie);
//	}
	req.setAttribute("name",name);
	req.getRequestDispatcher("/mypage.jsp").forward(req,res);
}

--req.getCookies () ・ ・ ・ Ruft die Cookies ab, die der Client in einem Array hat (5. Zeile) --cookie.getName () ・ ・ ・ Den Namen des Cookies abrufen (8. Zeile) --new Cookie (String name, String value) ・ ・ ・ Erstelle ein Cookie mit einem Paar von name: value (Zeile 13) --res.addCookie (Cookie-Cookie) `・ ・ ・ Cookie als Antwort festlegen (Zeile 14)

Auf diese Weise können Sie den Benutzernamen speichern, den Sie eingegeben haben, als Sie sich als "cookie_user" angemeldet haben. Auch, obwohl es hier nicht erscheint,

--cookie.setMaxAge (int Sekunden) ・ ・ ・ Geben Sie das Ablaufdatum des Cookies in Sekunden an (das Cookie wird zerstört, wenn das Ablaufdatum abläuft). --cookie.setValue (String value) ・ ・ ・ Setzt den Wert auf das Cookie zurück

Und so weiter. Ändern Sie als Nächstes das Innere des Tags von login.jsp.

login.jsp


<body>
<%
	Cookie cookies[]=request.getCookies();
	String username="";
	for(Cookie c:cookies){
		if(c.getName().equals("cookie_user"))username=c.getValue();
	}
%>
<form action="/ServletApp/mypage" method="post">
name:<input type="text" name="name" value=<%=username%>><br>
password:<input type="text" name="password"><br>
<input type="submit" value="login">
</form>
</body>

Wenn der Cookie-Name "cookie_user" bereits vorhanden ist, wenn der Anmeldebildschirm angezeigt wird, wird dieser Wert in das Textfeld eingegeben.

Verwenden wir Cookies

Greifen Sie jetzt auf "login.jsp" zu. servlet19.png Geben Sie "hato" in "name" ein, um sich anzumelden. servlet21.png Auf den ersten Blick sieht es so aus, als hätte sich nichts geändert, aber lassen Sie uns erneut auf login.jsp zugreifen. servlet22.png Sie können sehen, dass das bereits eingegebene "Hato" bereits in "Name" eingegeben wurde.

Lassen Sie uns Cookies überprüfen

Ich sagte "Informationen, die auf der Clientseite gespeichert sind" in [Lassen Sie uns ein Cookie erstellen](# Lassen Sie uns ein Cookie erstellen), aber es gibt eine Möglichkeit, das in "Google Chrome" gespeicherte Cookie zu überprüfen.

  1. Drücken Sie bei geöffnetem login.jsp die Taste F12, um" Developer Tools "zu öffnen.

  2. Klicken Sie im Menü auf die Registerkarte "Anwendung". 2020-06-07.png

  3. Klicken Sie auf "Cookies". 2020-06-07 (1).png

  4. Klicken Sie auf "http: // localhost: 8080". 2020-06-07 (2).png erreicht. In "Name" wird "cookie_user" angezeigt, der Name des zuvor erstellten Cookies, und "Hato", der in "Value" eingegebene Benutzername, wird angezeigt. Sie können den Wert auf diesem Bildschirm auch neu schreiben oder löschen.

Lassen Sie uns eine Sitzung machen

Eine Sitzung besteht aus einer Reihe von Prozessen vom Anfang bis zum Ende (oder dem Verwerfen) einer Verbindung, z. B. "Von Anmelden zu Abmelden" oder "Nach dem Anmelden zum Verlassen und Zeitüberschreitung". Da eine normale Webseite jedoch keine Funktion zum Übergeben des "Verbindungsstatus" hat, wird sie bei jedem Zugriff auf den Server wie unten gezeigt als andere Verbindung behandelt. servlet24.png

Lassen Sie uns Verbindung A zu Verbindung C zu einer Reihe von Prozessen (Sitzungen) machen.

Fügen Sie LoginServlet.java den folgenden Code hinzu.

LoginServlet.java


HttpSession session=req.getSession();
Date date=new Date(session.getCreationTime());
SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
session.setAttribute("lastLoginDate", sdf.format(date));
session.setMaxInactiveInterval(20);

Code, der die Startzeit der Sitzung mit dem Namen "lastLoginDate" speichert.

--req.getSession () ・ ・ ・ Sitzung abrufen --session.getCreationTime () ・ ・ ・ Ruft das Datum und die Uhrzeit ab, zu der die Sitzung zum ersten Mal als langer Typ erstellt wurde --session.setAttribute (Stringname, Objektwert) ・ ・ ・ Name: Wert Paar zum Speichern von Parametern --session.setMaxInactiveInterval (int s) ・ ・ ・ Geben Sie das Ablaufdatum der Sitzung mit Sekunden an (Standard sollte 1800 Sekunden sein).

Ich werde auch mypage.jsp ändern.

mypage.jsp


<body>
<%
    String name=request.getParameter("name");
    String session_date=session.getAttribute("lastLoginDate").toString();
%>
<%=name%>Datum und Uhrzeit der Anmeldung<%=session_date%>ist.
</body>

--session.getAttribute (String name) ・ ・ ・ Ruft den Wert, der dem im Argument angegebenen Namen entspricht, aus der Sitzung mit Object type ab

Auch werde ich es diesmal nicht benutzen

--session.getAttributeNames () ・ ・ ・ Ruft die in der Sitzung gespeicherten Parameternamen als String-Typ-Array ab --session.lastAccessedTime () ・ ・ ・ Ruft die letzte verbundene Zeit in der Sitzung ab

Und so weiter.

Lassen Sie uns die Sitzung verwenden

Greifen Sie jetzt erneut auf "login.jsp" zu. Geben Sie "Hato" ein, um sich anzumelden. servlet26.png Ich denke, dass die aktuelle Zeit grob angezeigt wird. Aktualisieren Sie dann die Seite mit der Taste "F5" ohne Unterbrechung (nicht auf dem realen Eingabeformular oder der Produktseite). servlet26.png Die Zeit ändert sich nicht. Die 20 Sekunden, in denen Sie das Ablaufdatum früher festgelegt haben, gelten als "gleiche Verbindung". Dann nach einer Weile neu laden. servlet27.png

Da eine Sitzung auch eine Art Cookie ist, können Sie die Sitzung auf die gleiche Weise überprüfen wie [Cookies überprüfen](# Cookies überprüfen). Es ist jedoch eine schwierige Zeichenfolge, so dass sie nicht so weit wie möglich geändert werden kann.

Das ist alles für diese Zeit. Ich frage mich, ob ich es bald in den Rahmen stellen kann ...

Recommended Posts

[Java Servlet] Die Straße von Senri ist auch der vierte Schritt vom ersten Schritt
[Java Servlet] Die Straße von Senri ist auch der fünfte Schritt von einem Schritt
[Java Servlet] Die Straße von Senri ist auch der zweite Schritt vom ersten Schritt
Der Weg von JavaScript nach Java
Ab Java9 werden Klassenkonstruktoren, die primitiven Typen entsprechen, als veraltet markiert.
[Förderung des Ruby-Verständnisses (1)] Wenn Sie von Java zu Ruby wechseln, verstehen Sie zuerst den Unterschied.
Die Reihenfolge der Java-Methodenmodifikatoren ist festgelegt
Die Geschichte des Lernens von Java in der ersten Programmierung
[Java] Tag ab Datum berechnen (Kalenderklasse nicht verwenden)
Erster Touch der Files-Klasse (oder Java 8)
Wie schreibe ich Scala aus der Perspektive von Java
Der Vergleich von enum ist == und gleich ist gut [Java]
Java-Sprache aus der Sicht von Kotlin und C #
Die Geschichte, dass .java auch in Unity 2018 erstellt wurde
Kommen Sie zu den Abkürzungen aus den fünf Beispielen für kursive Java-Listen
Java: Das Problem ist schneller, Stream oder Loop
Road to Java Engineer Part2 Was für eine Sprache ist Java?
[Java] Löschen Sie die angegebene Anzahl von Zeichen am Ende von StringBuilder
[Java] Ich fühlte mich als Java-Anfänger. "Warum wird das erste Zeichen nur im String-Typ großgeschrieben?" Ich sah mich dem String-Typ gegenüber.
[Java-Anfänger] Konvertierung von Zeichenfolge in numerischen Wert - Was ist die parseInt-Methode der Integer-Klasse? ~
[Java] Anfängerverständnis von Servlet-②
Dies ist der erste Beitrag.
5. Tag von Java
Die in /lib/calendars.properties von Java jre festgelegte Millisekunde ist UTC
Lesen Sie die ersten 4 Bytes der Java-Klassendatei und geben Sie CAFEBABE aus
Vom jungen Java (3 Jahre) bis zu Node.js (4 Jahre). Und der Eindruck, nach Java zurückzukehren
[Swift] Die Farbe der Navigationsleiste unterscheidet sich (heller) von der angegebenen Farbe.
Ist die von Ihnen verwendete Version von Elasticsearch mit Java 11 kompatibel?
Untersuchungsmethode, wenn die CPU des Servers, auf dem Java ausgeführt wird, schwer ist
Lassen Sie uns die Java 8-Grammatik aus der Sicht der iOS-Ingenieure zusammenfassen