[JAVA] JSP - À propos du modèle MVC du servlet, de la redirection / transmission et de la portée

Modèle MVC

Abréviation de Model, View, Controller model, qui est respectivement responsable du «traitement», de «l'affichage des résultats» et de la «supervision». Le contrôleur reçoit la demande du côté de l'utilisateur, le contrôleur demande au modèle de traiter les données, le modèle renvoie les données traitées au contrôleur, les données sont transmises à la vue, la vue est mise en forme et renvoyée à l'utilisateur en tant que réponse, etc. devenir.

Dans un environnement de servlet / JSP, le contrôleur est souvent exécuté par la classe de servlet, la vue est exécutée par le JSP et le modèle est souvent exécuté par une classe Java normale. L'un des avantages de ceci est que le développement peut être partagé sans avoir besoin de connaissances couvrant plusieurs domaines.

01.png

Transférer et rediriger

Il existe deux façons de transférer des pages d'une classe de servlet vers une JSP ou une autre classe de servlet: en avant et en redirection. Le transfert est rapide au lieu de pouvoir se déplacer uniquement dans la même application, et la barre d'adresse du navigateur conserve les informations de la première destination de la demande. En revanche, la redirection est lente au lieu de pouvoir accéder aux fichiers et autres applications (autres sites), et les informations de la barre d'adresse du navigateur sont également modifiées.

02.png

Méthode de traitement

vers l'avant

réorienter

Emplacement des fichiers jsp

Le fichier jsp enregistré sous Webcontent / WEB-INF / ne peut pas être ouvert en réponse aux instructions du navigateur, il peut donc être utilisé lorsque vous ne souhaitez pas établir de lien direct. De plus, en raison de la nature de ne pas pouvoir ouvrir directement à partir du navigateur, il est possible d'afficher à partir de l'avant, mais il n'est pas possible de rediriger.

portée

Même si vous utilisez le transfert ou la redirection, vous ne pouvez pas enregistrer ou envoyer les données telles quelles. En stockant les données dans une zone appelée étendue, les données peuvent être partagées entre les servlets et les JSP.

Conditions de partage

Seules les instances peuvent être enregistrées -Il doit être possible de sérialiser en implémentant java.io. ・ La classe appartient au package -Avoir un constructeur par défaut (constructeur sans arguments) en public -Les champs doivent être encapsulés et avoir à la place des getters / setters qui suivent les conventions de dénomination Est défini comme une règle de partage.

Gamme à partager

L'étendue est divisée en quatre selon la plage de stockage, et ils sont appelés respectivement «étendue de page», «étendue de demande», «étendue de session» et «étendue d'application».

Portée de la page

La plage est uniquement dans cette page. Je vais omettre cette fois.

Demande de portée

La plage va de la demande à la réponse. Il peut être utilisé pour les applications Web telles que l'affichage des résultats de calcul basés sur les données d'entrée.

Portée de la session

La plage est entre les sessions. Nécessaire lors de l'utilisation de la valeur saisie temporairement dans le formulaire d'inscription, etc. plusieurs fois.

Champ d'application

Utilisé lors de la gestion des données partagées / référencées par l'ensemble de l'utilisateur, telles que les boutons de vote. Supprimé lorsque l'application est fermée.

Comment enregistrer / récupérer

Vous pouvez enregistrer et récupérer avec une méthode qui a un nom et un argument communs dans une classe différente pour chaque étendue.

** Enregistrer la méthode **

** Méthode d'acquisition **

Pour la portée de la demande

Classe à utiliser: *** Classe ServletRequest ***

Il existe des objets implicites dans JSP qui peuvent être utilisés comme variables sans les déclarer explicitement, et la "requête actuelle" référencée par le type * ServletRequest * est *** request ***. Peut être traité implicitement.

Pour la portée de la session

Classe à utiliser: *** HttpSession *** class

Tant lors de la sauvegarde que de la récupération des données, il est nécessaire de récupérer une instance de la "session en cours d'utilisation". Il peut être récupéré avec * HttpServletRequest # getSession () *, et il est géré en le plaçant dans une variable de référence de type * HttpSession *. Il y a aussi un objet implicite ici, et vous pouvez implicitement gérer la "session en cours d'utilisation" avec *** session ***.

Précautions lors de l'utilisation de la portée de session

Afin de gérer les étendues de session de plusieurs personnes en même temps, il est nécessaire de partager l'ID de session entre le côté client et le côté serveur, et d'associer l'étendue et l'ID de session côté serveur. Dans ce cas, autant d'étendues qu'il y a de clients seront préparées et une perforation de la mémoire peut se produire. Par conséquent, il est nécessaire de détruire de manière appropriée le contenu de l'étendue et de la session. Un exemple est le délai d'expiration de session, qui supprime les sessions qui n'ont pas été utilisées pendant un certain temps comme cibles pour le garbage collection.

De plus, afin de faciliter la résistance à une courte période de concentration des demandes, une méthode qui les rejette volontairement est préparée et doit être utilisée de manière appropriée par le développeur.

Pour le champ d'application

Classe à utiliser: *** Classe ServletContext ***

Comme pour la portée de session, vous devez obtenir une instance de "l'application que vous utilisez". L'objet implicite de ceci est traité avec le nom de variable de *** application ***. Si vous souhaitez l'obtenir comme méthode, vous pouvez l'obtenir avec * HttpServlet # getServletContext () *.

Précautions lors de l'utilisation du champ d'application

Les données peuvent être enregistrées dans le périmètre d'application en tant que zone commune à tous les clients. Cependant, comme les données ne restent du côté serveur que temporairement, la portée de l'application qui s'est terminée en même temps que le serveur est arrêté est détruite. Si vous souhaitez gérer les données même après le redémarrage, vous devez les laisser sous la forme d'un fichier.

Type de portée Demande de portée Portée de la session Champ d'application
Gamme de portée Jusqu'à ce que la demande soit traitée Jusqu'à ce que la session soit détruite Jusqu'à ce que l'application soit fermée
Classe d'utilisation ServletRequest HttpSession ServletContext
Objet implicite de classe request session application
Principales applications formulaire de saisie Informations de connexion Données communes
Autres mises en garde La redirection renvoie une réponse une fois et ne peut pas être utilisée Si les données s'accumulent, cela mettra une charge sur le serveur, alors jetez-les si nécessaire. Si vous souhaitez réutiliser les données, exportez-les dans un fichier, etc.

Recommended Posts

JSP - À propos du modèle MVC du servlet, de la redirection / transmission et de la portée
Pensez à la combinaison de Servlet et Ajax
Qu'est-ce que le modèle Java Servlet / JSP MVC?
À propos de la redirection et du transfert
[Rails] Comment obtenir l'URL de la source de transition et la rediriger
Ceci et cela de JDK
Définissez le nombre de secondes d'avance et de retour rapides dans ExoPlayer
À propos du fonctionnement de next () et nextLine ()
Point 57: Minimiser la portée des variables locales
Un exemple simple du modèle MVC