[Servlet Java] La route de Senri est aussi la quatrième étape de la première étape

Le progrès

Enfin la dernière fois login.jsp → LoginServlet.java → mypage.jsp Vous pouvez maintenant effectuer des transitions. À propos, l'URL au moment de la transition mypage est http://localhost:8080/ServletApp/mypage.jsp Cependant, si vous êtes préoccupé par la dernière extension, accédez à 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>

Si vous ajoutez, l'URL au moment de la transition sera http://localhost:8080/ServletApp/mypage Sera.

Autres méthodes de transfert de données

En fait, il existe d'autres méthodes appelées "cookies" et "sessions" pour passer des données entre servlets, en plus de la méthode utilisant la méthode request.getParameter () qui a été effectuée la dernière fois.

Faisons un cookie

Un cookie est une information stockée côté client lorsqu'une réponse est renvoyée par le serveur. (Si vous naviguez souvent sur le site, vous pouvez voir une fenêtre contextuelle telle que "Ce site utilise des cookies") servlet17.png Comme avantage de la sauvegarde des données côté client

--Site d'adhésion → Omettre l'entrée du nom d'utilisateur de la prochaine fois --Site d'achat → Souvenez-vous des articles que vous avez mis dans votre panier

Etc. Faisons des cookies. Tout d'abord, modifiez la méthode doPost () de 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 () ・ ・ ・ Récupère les cookies que le client a dans un tableau (5ème ligne) --cookie.getName () ・ ・ ・ Obtenez le nom du cookie (8ème ligne) --new Cookie (String name, String value) ・ ・ ・ Créer un cookie avec une paire de nom: valeur (ligne 13) --res.addCookie (cookie cookie) `・ ・ ・ Définir le cookie comme réponse (ligne 14)

Cela vous permet de sauvegarder le nom d'utilisateur que vous avez entré lorsque vous vous êtes connecté en tant que cookie_user. De plus, bien que cela n'apparaisse pas ici,

--cookie.setMaxAge (int secondes) ・ ・ ・ Spécifiez la date d'expiration du cookie en secondes (le cookie sera détruit à l'expiration de la date d'expiration) --cookie.setValue (valeur de chaîne) ・ ・ ・ Réinitialiser la valeur du cookie

Etc. Ensuite, modifiez l'intérieur de la balise «» de «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>

Si le nom de cookie cookie_user existe déjà lorsque l'écran de connexion est affiché, la valeur est saisie dans le champ de texte.

Utilisons des cookies

Accédez maintenant à login.jsp. servlet19.png Entrez «hato» dans «nom» pour vous connecter. servlet21.png À première vue, il semble que rien n'a changé, mais accédons à nouveau à login.jsp. servlet22.png Vous pouvez voir que le "hato" qui était déjà entré est déjà entré dans "nom".

Vérifions les cookies

J'ai dit "informations stockées côté client" dans [Faisons un cookie](# Créons un cookie), mais il existe un moyen de vérifier le cookie stocké dans Google Chrome.

  1. Avec login.jsp ouvert, appuyez sur la touche F12 pour ouvrir" Developer Tools ".

  2. Cliquez sur l'onglet ʻApplication` dans le menu. 2020-06-07.png

  3. Cliquez sur «Cookies». 2020-06-07 (1).png

  4. Cliquez sur «http: // localhost: 8080». 2020-06-07 (2).png accompli. Dans Name, cookie_user, qui est le nom du cookie créé précédemment, est affiché, et "Hato", qui est le nom d'utilisateur entré dans Value, est affiché. Vous pouvez également réécrire ou supprimer la valeur sur cet écran.

Faisons une session

Une session est une série de processus allant du début à la fin (ou rejet) d'une connexion, tels que "de la connexion à la déconnexion" ou "après la connexion à la sortie et à l'expiration". Cependant, comme une page Web normale n'a pas de fonction pour passer «l'état connecté», elle sera traitée comme une connexion différente chaque fois que vous accédez au serveur comme indiqué ci-dessous. servlet24.png

Faisons la connexion A à la connexion C une série de processus (sessions).

Ajoutez le code suivant à LoginServlet.java.

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 qui enregistre l'heure de début de la session sous le nom lastLoginDate.

--req.getSession () ・ ・ ・ Accéder à la session --session.getCreationTime () ・ ・ ・ Obtenez la date et l'heure de création de la session en tant que type long --session.setAttribute (nom de la chaîne, valeur de l'objet) ・ ・ ・ nom: valeur paire pour stocker les paramètres --session.setMaxInactiveInterval (int s) ・ ・ ・ Spécifiez la date d'expiration de la session avec secondes (la valeur par défaut doit être de 1800 secondes)

Modifiez également mypage.jsp.

mypage.jsp


<body>
<%
    String name=request.getParameter("name");
    String session_date=session.getAttribute("lastLoginDate").toString();
%>
<%=name%>Date et heure de connexion<%=session_date%>est.
</body>

--session.getAttribute (String name) ・ ・ ・ Récupère la valeur correspondant au nom spécifié dans l'argument depuis la session avec ʻObject type`

De plus, je ne l'utiliserai pas cette fois

--session.getAttributeNames () ・ ・ ・ Récupère les noms de paramètres stockés dans la session sous forme de tableau de type chaîne --session.lastAccessedTime () ・ ・ ・ Obtenez la dernière connexion de la session

Etc.

Utilisons la session

Accédez à nouveau à login.jsp. Entrez "Hato" pour vous connecter. servlet26.png Je pense que l'heure actuelle est approximativement affichée. Ensuite, actualisez la page avec la touche F5 sans interruption (ne le faites pas sur le formulaire de saisie réel ou la page produit) servlet26.png L'heure ne change pas. Les 20 secondes dont vous avez défini la date d'expiration plus tôt sont considérées comme «même connexion». Puis rechargez après un certain temps. servlet27.png

Puisqu'une session est également un type de cookie, vous pouvez vérifier la session de la même manière que [Vérifions les cookies](# Vérifions les cookies). Cependant, il s'agit d'une chaîne de caractères difficile afin qu'elle ne puisse pas être modifiée autant que possible.

C'est tout pour cette fois. Je me demande si je peux le mettre dans le cadre bientôt ...

Recommended Posts

[Servlet Java] La route de Senri est aussi la quatrième étape de la première étape
[Servlet Java] La route de Senri est aussi la cinquième étape d'une étape
[Servlet Java] La route de Senri est aussi la deuxième étape de la première étape
La route de JavaScript à Java
À partir de Java9, les constructeurs de classe correspondant aux types primitifs sont marqués comme obsolètes.
[Promotion de la compréhension de Ruby (1)] Lorsque vous passez de Java à Ruby, commencez par comprendre la différence.
L'ordre des modificateurs de méthode Java est fixe
L'histoire de l'apprentissage de Java dans la première programmation
[Java] Calculer le jour à partir de la date (ne pas utiliser la classe Calendar)
Première touche de la classe Files (ou Java 8)
Comment écrire Scala du point de vue de Java
La comparaison d'énumération est ==, et equals est bonne [Java]
Langage Java du point de vue de Kotlin et C #
L'histoire que .java est également construite dans Unity 2018
Accédez à l'abréviation à partir de 5 exemples de listes Java en italique
Java: dont le problème est plus rapide, en flux ou en boucle
Road to Java Engineer Part2 Quel type de langage est Java?
[Java] Supprimer le nombre spécifié de caractères à la fin de StringBuilder
[Java] Je me sentais comme un débutant en java. "Pourquoi le premier caractère est-il en majuscule uniquement dans le type String?" J'ai fait face au type String.
[Java débutant] Conversion d'une chaîne de caractères en valeur numérique - Quelle est la méthode parseInt de la classe Integer? ~
[Java] Compréhension débutante de Servlet-②
Ceci est le premier message.
5ème jour de Java
La milliseconde définie dans /lib/calendars.properties de Java jre est UTC
Lire les 4 premiers octets du fichier de classe Java et générer CAFEBABE
De Java naissant (3 ans) à Node.js (4 ans). Et l'impression de retourner à Java
[Swift] La couleur de NavigationBar est différente (plus claire) de la couleur spécifiée.
La version d'Elasticsearch que vous utilisez est-elle compatible avec Java 11?
Méthode d'enquête lorsque le processeur du serveur exécutant java est lourd
Résumons la grammaire Java 8 du point de vue des ingénieurs iOS