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.
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.
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.
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.
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.
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».
La plage est uniquement dans cette page. Je vais omettre cette fois.
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.
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.
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.
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 **
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.
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 ***.
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.
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 () *.
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