Jetons un coup d'œil à un graphique à flux:
Le processus de demandes de traitement du serveur:
(1) Chaque fois que le serveur reçoit une demande, il ouvrira un nouveau thread pour la demande.
(2) Le serveur résumera les données de demande du client dans l'objet de demande, et la demande est l'opérateur des données de demande!
(3) Le serveur créera également un objet de réponse, qui est connecté au client et peut être utilisé pour envoyer une réponse au client.
Comme on peut le voir à partir du graphique de flux, dans la demande et la réponse de Javaweb, les deux paramètres les plus importants sont la demande et la réponse, qui sont dans la méthode Service () du servlet.
1. Concept de réponse:
La réponse est un paramètre de la méthode servlet.service et est de type javax.servlet.http.httpservletResponse. Lorsque le client fait chaque demande, le serveur crée un objet de réponse et le transmet à la méthode servlet.service (). L'objet de réponse est utilisé pour répondre au client, ce qui signifie que l'utilisation de l'objet de réponse dans la méthode Service () peut terminer le travail de réponse au client.
Les fonctions de l'objet de réponse sont divisées en quatre types suivants:
(1) Définir les informations d'en-tête de réponse
(2) Envoyer le code d'état
(3) Définir le texte de la réponse
(4) rediriger
2. Réponse Texte de réponse
La réponse est un objet de réponse. Le flux de réponse du corps de réponse (corps de réponse) peut être utilisé pour sortir le corps de réponse au client. Repsonse fournit un total de deux objets de flux de réponse:
(1) printwriter out = réponse.getWriter (): obtenir un flux de caractères;
(2) servletOutputStream out = réponse.getOutputStream (): Obtenez le flux d'octet;
Bien sûr, si le contenu du corps de réponse est un caractère, utilisez la réponse.getWriter (), et si le contenu de réponse est octet, par exemple, lors du téléchargement, vous pouvez utiliser Response.getOutputStream ().
Notez que dans une demande, les deux flux ne peuvent pas être utilisés en même temps! Autrement dit, vous utilisez Répondre.getWriter () ou Response.getOutputStream (), mais vous ne pouvez pas utiliser les deux flux en même temps. Sinon, une illégalstateException sera lancée.
3. Définir les informations d'en-tête de réponse
Vous pouvez utiliser la méthode SetHeader () de l'objet de réponse pour définir l'en-tête de réponse! L'en-tête de réponse en utilisant cette méthode sera finalement envoyé au navigateur client!
(1) Response.sethEader ("Content-Type", "texte / html; charset = utf-8"): définissez l'en-tête de réponse de type contenu. La fonction de cet en-tête est de dire au navigateur que le contenu de réponse est de type HTML et codé comme UTF-8. Et en même temps, le codage de flux de caractères de la réponse sera défini sur UTF-8, c'est-à-dire la réponse.SetcharaceTetencoding ("UTF-8");
(2) Response.sethEader ("Refresh", "5; url = http: //www.baidu.com"): il passera automatiquement à la page d'accueil de Baidu après 5 secondes.
4. Définir le code d'état et autres méthodes
(1) Response.SetContentType ("Text / Html; charSet = UTF-8"): équivalent à l'appel Response.sethEader ("Content-Type", "Text / Html; Charset = UTF-8");
(2) Response.SetcharAtterencoding ("UTF-8"): Définissez le codage des caractères du flux de réponse de caractères vers UTF-8;
(3) Response.SetStatus (200): Définissez le code d'état;
(4) Response.SenderRor (404, "La ressource que vous recherchez n'existe pas"): Lors de l'envoi d'un code d'état d'erreur, Tomcat sautera à une page d'erreur fixe, mais le message d'erreur peut être affiché.
5. Redirection (****** clé *******)
5.1 Qu'est-ce que la redirection (deux demandes)
Lorsque vous visitez http://www.sun.com, vous constaterez que l'URL dans la barre d'adresse du navigateur deviendra http://www.oracle.com/us/sun/index.htm, qui est la redirection. La redirection est lorsque le serveur informe le navigateur d'accéder à une autre adresse, c'est-à-dire pour publier une autre demande.
5.2 Comment terminer la redirection?
Réponse: Le code d'état de la redirection est 302. Nous utilisons d'abord l'objet de réponse pour envoyer le code d'état de 302 au navigateur, puis définissons un emplacement, c'est-à-dire donner une URL disponible, et le navigateur accède à la nouvelle URL pour réaliser la redirection.
Par exemple:
La classe publique AServlet étend HttpServlet {public void doGet (HttpServletRequest Request, HttpServletResponse Response) lève ServletException, ioException {réponse.SetStatus (302); Response.sethEader ("Location", "http://www.baidu.com"); }}Le but du code ci-dessus est: après avoir accédé à l'Aservlet, le navigateur sera informé de rediriger vers la page d'accueil de Baidu. Une fois que le navigateur client analyse le code de réponse de 302, il sait que le serveur le permet de rediriger, il obtiendra donc immédiatement l'emplacement d'en-tête de réponse, puis émettra une deuxième demande.
Il existe également une méthode de redirection rapide, c'est-à-dire d'utiliser la méthode Response.SenDredirect (). Par exemple, les deux phrases de l'exemple ci-dessus peuvent être remplacées par Response.SendRedirect ("http://www.baidu.com").
demande-encapsule toutes les données de demande du client
1. Aperçu de la demande
La demande est un paramètre de la méthode servlet.service () et est de type javax.servlet.http.httpservletRequest. Lorsque le client fait chaque demande, le serveur créera un objet de demande et encapsulera les données de demande dans la demande, puis la transmet à la méthode Service () lorsque la méthode servlet.service () est appelée, qui montre que les données de demande peuvent être obtenues via l'objet de demande dans la méthode Service ().
Comme indiqué sur la figure:
La fonction de la demande peut être divisée en types suivants:
(1) encapsuler les données d'en-tête de demande;
(2) encapsuler les données de texte de la demande. S'il s'agit d'une demande GET, il n'y a pas de texte;
(3) La demande est un objet de domaine, qui peut être ajouté et récupéré en tant que carte;
(4) La demande fournit des fonctions de transfert et d'inclusion de demande de demande.
2. Méthode de demande de demande
La demande est un objet de domaine! Il y a quatre objets de domaine dans Javaweb, parmi lesquels ServletContext est un objet de domaine, qui ne crée qu'un seul objet ServletContext dans toute l'application. Demandez l'une des demandes, qui peuvent partager des données dans une demande.
Une demande crée un objet de demande. Si plusieurs servlets ont été expérimentés dans une demande, plusieurs servlets peuvent utiliser des demandes pour partager des données. Maintenant, nous ne savons pas comment passer par plusieurs servlets dans une demande.
Voici la méthode de demande de domaine:
(1) void setAttribute (nom de chaîne, valeur de l'objet): utilisé pour stocker un objet, il peut également être appelé stockant un attribut de domaine, par exemple: servletContext.setAttribute ("xxx", "xxx"), un attribut de domaine est enregistré dans la demande, le nom d'attribut de domaine est xxx et la valeur de l'attribut de domaine est xxx. Notez que si la méthode est appelée plusieurs fois et que le même nom est utilisé, la dernière valeur sera écrasée, ce qui est le même que la carte;
(2) objet getAttribute (nom de chaîne): utilisé pour obtenir les données dans la demande. Il doit être stocké avant de l'obtenir. Par exemple: String Value = (String) request.getAttribute ("xxx"); Pour obtenir l'attribut de domaine nommé xxx;
(3) void RemoveAtTribute (nom de chaîne): utilisé pour supprimer l'attribut de domaine dans la demande. Si l'attribut de domaine spécifié par le nom du paramètre n'existe pas, cette méthode ne fait rien;
(4) Énumération getAtTributEnames (): Obtenez les noms de tous les attributs de domaine;
3. Passer les paramètres par demande
Il existe deux façons les plus courantes de transmettre des paramètres sur le client:
(1) Entrée directe de la barre d'adresse du navigateur: il doit s'agir d'une demande GET;
(2) Hyperlien: ce doit être une demande de GET;
(3) Formulaire: Peut être obtenu ou publier, qui dépend de la valeur d'attribut de méthode de <form>;
La différence entre la demande de GET et la demande de poste:
(1) Obtenez une demande:
Les paramètres de demande seront affichés dans la barre d'adresse du navigateur, il n'est donc pas sûr;
La limite de longueur du paramètre de demande est à moins de 1k;
La demande GET n'a pas de corps de demande, donc le codage du paramètre ne peut pas être défini via request.SetcharAtterencoding ();
(2) Demande de poste:
Les paramètres de demande n'afficheront pas la barre d'adresse du navigateur, qui est relativement sûr;
Il n'y a pas de limite sur la longueur du paramètre demandé;
4. Demande de transfert et de demande d'inclusion (****** clé *******)
Qu'il s'agisse d'un transfert de demande ou d'une inclusion de demande, cela signifie que plusieurs servlets gèrent conjointement une demande. Par exemple, Servlet1 gère la demande, puis Servlet1 le transmet à Servlet2 pour continuer à traiter la demande.
Demande de transfert et de demande, notamment
RequestDispatcher rd = request.getRequestDispatcher ("/ myServlet"); Utilisez la demande pour obtenir l'objet de demande d'isoder. Le paramètre de la méthode est le chemin du servlet du servlet transmis ou contenu.
Faire de requête: RD.Forward (demande, réponse);
La demande comprend: rd.include (demande, réponse);
Parfois, une demande nécessite plusieurs servlets pour collaborer, vous devez donc sauter dans un servlet à un autre!
> Une demande s'étend sur plusieurs servlets et nécessite le transfert et l'inclusion.
> Demande de requête: le corps de réponse est complété par le prochain servlet! Le servlet actuel peut définir l'en-tête de réponse! (Quitte la tête mais pas le corps) C'est-à-dire que la tête correspondante définie par le servlet actuel est valide et le corps correspondant n'est pas valide.
> La demande contient: le corps de réponse n'est pas terminé par deux servlets! (Restez tous) Tous sont valables.
> Qu'il s'agisse d'un transfert de demande ou d'une demande contenant, il se situe dans le cadre d'une demande! Utilisez la même demande et la même réponse!
Le transfert de demande et la demande incluent la comparaison:
(1) Si la demande est transmise au BServlet dans l'AServlet, alors le corps de réponse n'est pas autorisé à être sorti dans l'AServlet, c'est-à-dire que la réponse.getwriter () et la réponse.getOutStStream () ne peuvent plus être sorties au client. Ce travail doit être effectué par le BServlet; S'il est utilisé pour inclure la demande, il n'y a pas une telle restriction;
(2) Bien que le transfert de demande ne puisse pas sortir le corps de réponse, l'en-tête de réponse peut toujours être défini, par exemple: Response.SetContentType ("Text / Html; charSet = UTF-8");
(3) La plupart des demandes sont appliquées dans les pages JSP pour compléter la fusion de plusieurs pages;
(4) Le transfert de demande est principalement appliqué dans les servlets, et la cible de transfert est principalement des pages JSP;
Comme indiqué sur la figure:
Comparaison du transfert et de la redirection des demandes
(1) le transfert de demande est une demande, tandis que la redirection est de deux demandes;
(2) Après le transfert de demande, la barre d'adresse du navigateur ne changera pas, mais la redirection changera, car la redirection est de deux demandes;
(3) l'objectif de demander le transfert ne peut être que les ressources de cette application, et l'objectif de la redirection peut être d'autres applications;
(4) La méthode de transfert de demande pour Aservlet et BServlet est la même, c'est-à-dire que les deux sont ou les deux sont des publications, car le transfert de demande est une demande;
(5) La deuxième demande de redirection doit être obtenue;
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.