La fonction principale du servlet est de traiter les demandes des clients et de répondre. Pour cette raison, pour chaque demande, le conteneur Web créera deux objets avant d'appeler Service (), à savoir httpServletRequest et httpservletResponse. Lorsque HttpServletRequest encapsule les messages de demande HTTP, HttpServletResponse encapsule les messages de réponse HTTP. Il convient de noter que lors du fonctionnement du serveur Web, chaque servlet ne créera qu'un seul objet d'instance, mais chaque demande appellera la méthode Service (ServLetRequest REQ, ServletResponse Res) de l'instance de servlet. Ici, HttpServletRequest est une sous-classe de servletRequest, et HttpservletResponse est une sous-classe de servletResponse.
Le diagramme de la relation d'héritage de l'interface httpservletRequest et httpservletResponse est la suivante:
1. HttpservletResponse
L'interface HttpServletResponse hérite de l'interface ServletResponse. Étant donné que les messages de réponse HTTP sont divisés en trois parties: ligne d'état, corps de message de réponse et corps de message, l'interface HTTPServletResponse définit une méthode pour envoyer un code d'état de réponse, un en-tête de message de réponse et un corps de message de réponse au client. Bien qu'il existe de nombreuses méthodes dans l'interface httpservletResponse, nous n'utilisons que quelques-uns couramment utilisés. Si vous utilisez d'autres méthodes, vous pouvez lire le code source ou les informations connexes de la réponse.
Envoyer des fonctions liées au code d'état
Description de la méthode public void setStatus (int sc) définit le code d'état du message de réponse. Le serveur Web génère une ligne d'état avec un code d'état de 200 par défaut. Public void Sendror (INT SC) envoie un code d'état indiquant le message d'erreur. La deuxième méthode ajoute également un SMS pour inviter la description publique void Sendror (INT SC, String MSG)
Envoyer des fonctions liées à l'en-tête du message de réponse
Description de la méthode public void addHeader (nom de chaîne, valeur de chaîne) définit le champ d'en-tête de réponse HTTP, le nom spécifie le nom du champ et la valeur spécifie la valeur du champ. addHeader can add the response header field with the same name, setHeader will override the header field with the same name public void setHeader(String name, String value) public void setContentLength(int len) sets the size of the entity content of the response message, in bytes, that is, sets the value of the Content-Length field public void setContentType(String type) sets the MIME type of the Servlet output content, that IS, Définit la valeur du champ de contenu de type contenu public void setCharacTerencoding (String Charset) définit le codage des caractères de contenu de sortie, c'est-à-dire définir la valeur du champ de type contenu. Notez que la priorité de cette méthode est supérieure à celle de la redirection du servlet SetContType Public Void Sendredirect (emplacement de la chaîne)
Envoyer des fonctions liées au corps du message de réponse
| méthode | illustrer |
| public servletOutputStream getOutputStream () | Obtenez le flux de sortie de l'octet du type HttpservletResponse servletOutputStram |
| Printwriter public GetWriter () | Obtenez le flux de sortie du caractère servletwriter type de httpservletResponse |
Problème de sortie chinoise
Les données dans les ordinateurs sont stockées sous forme binaire, donc lorsque le texte est transféré, la conversion entre les octets de caractères se produira. La conversion entre les caractères et les octets est terminée via une table de recherche de code. Le processus de conversion des caractères en octets est appelé codage, et le processus de conversion des octets en caractères est appelé décodage. Si les tables de code utilisées pour l'encodage et le décodage sont différentes, des problèmes de code brouillé se produiront.
Remarque: Lors de l'encodage du flux de sortie de caractères de l'objet httpservletResponse, la valeur par défaut est le codage ISO 8859-1. Cette méthode d'encodage est incompatible avec le chinois. Par exemple, "Chine" sera encodée comme "63 63" (les caractères qui ne peuvent être trouvés dans le tableau de code ISO 8959-1 seront affichés 63). Lorsque le navigateur décode les données reçues, il utilisera GB2312 par défaut, décodera "63" à "?", Et le navigateur décodera les deux caractères "Chine" à "??".
Exemple du programme HTTPServletResponse
Package zzz; import java.io.ioexception; import java.io.printwriter; importer javax.servlet.http.httpservlet; import javax.servlet.http.httpservletRequest; classe publique HELLO HELL DoGet (demande httpservletRequest, réponse httpservrasseponse) lance ioException {// Définir le message du message de réponse, après avoir commenté "Chine", le "Brized Response.SetContentType (" text / html; charset = ut-8 "); printwriter out = réponse @Override (); Out.Println (" Hello China "); DOPOST (HttpServLetRequest Request, HttpServletResponse Response) lance ioException {this.DoGet (demande, réponse);Parfois, vous rencontrerez régulièrement le problème des pages de saut. Le champ d'en-tête de rafraîchissement de HTTP peut informer le navigateur de rafraîchir automatiquement et de passer à d'autres pages dans un délai spécifié, et la page Web actualisera et sautera régulièrement sur la page spécifiée.
Package zzz; import java.io.ioexception; import java.io.printwriter; importer javax.servlet.http.httpservlet; import javax.servlet.http.httpservletRequest; classe publique HELLO HELL DOGET (demande HttpServLetRequest, réponse httpservletResponse) lève ioException {// set Response Message Encoding Response.SetContentType ("text / html; charset = utf-8"); Response.sethEader ("Refresh", "2; url = http: //www.baidu.com"); Printwriter out = réponse.getWriter (); Out.println ("Hello China, sautez à Baidu en 2 secondes ..."); } @Override public void doPost (demande httpservletRequest, réponse httpservletResponse) lève ioException {this.doget (request, réponse); }}2. HttpServletRequest
L'interface HTTPServletRequest hérite de l'interface ServLetRequest et est spécifiquement utilisée pour les messages de demande HTTP encapsulés. Étant donné que les informations de demande HTTP comprennent trois parties: ligne de demande, en-tête de demande et corps de demande, l'interface httpservletRequest définit les méthodes connexes pour obtenir la ligne de demande, l'en-tête de demande et le corps de la demande.
Méthodes connexes pour obtenir des lignes de demande
| méthode | illustrer |
| public String getMethod () | Obtenez des méthodes de demande HTTP, publiez, obtenez, etc. |
| String public getRequesturi () | Obtenez la partie de nom de ressource dans la ligne de demande |
| public String getQuerystring () | Obtenez la partie du paramètre dans la ligne de demande |
| public String getProtocol () | Obtenez le nom et la version du protocole dans la ligne de demande, comme HTTP 1.1 |
| String public getContextPath () | Obtenez le chemin appartenant à l'application Web dans l'URL de la demande |
En fait, la méthode de la ligne de demande peut être vue à partir du nom de la méthode, donc je ne le publierai pas un par un ici.
Méthodes connexes pour obtenir des en-têtes de message de demande
| méthode | illustrer |
| Getheader de chaîne publique (nom de chaîne) | Obtenez la valeur du champ spécifié, si aucun null n'est renvoyé, s'il y a plusieurs renvoie la première valeur |
| Énumération publique <string> getheaders (nom de chaîne) | Renvoie un objet de collecte d'énumération avec le champ spécifié |
| Énumération publique <string> getheadernames () | Renvoie un objet de collecte d'énumération contenant tous les champs |
| public String getContentType () | Obtenez la valeur du champ de type contenu |
Imprimez toutes les valeurs du champ d'en-tête de demande
Package zzz; import java.io.ioException; import java.io.printwriter; import java.util.enumeration; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletRequest; public clavax. HttpServlet {@Override public void doGet (httpsservletRequest request, httpservletResponse réponse) lève ioException {// set la réponse de réponse en codage de réponse.setContentType ("text / html; charset = ut-8"); Printwriter out = réponse.getWriter (); Énumération <string> names = request.getheadernames (); while (names.hasmoreElements ()) {String name = nameS.NextElement (); String value = request.getheader (name); out.println (nom + ":" + valeur + "</br>"); }} @Override public void doPost (request httpServleRequest, httpservletResponse réponse) lève ioException {this.doget (request, réponse); }}Méthodes connexes pour obtenir le corps de la demande
Description de la méthode Public ServleTinputStream getInputStream () Obtient l'objet ServleTinputStream demandé. Si le contenu de l'entité n'est pas texte, vous ne pouvez obtenir le corps du message du corps de demande que via la méthode GetInputStream. Le BufferedReader demandé GetReader () obtient l'objet BufferedReader demandé. Cet objet convertira les données d'octets de contenu de l'entité en une chaîne de texte codée par le jeu de caractères spécifié.
Obtenir les paramètres de demande
| méthode | illustrer |
| public String getParameter (nom de chaîne) | Obtenez la valeur du paramètre spécifié et retournez NULL sans ce paramètre |
| Énumération publique <string> getParameTernames () | Renvoie un objet d'énumération contenant tous les noms de paramètres |
| String public [] getParameTervalues (nom de la chaîne) | Il peut y avoir plusieurs mêmes paramètres dans la demande HTTP pour obtenir toutes les valeurs de paramètres correspondant au même nom de paramètre. |
3. Interface de requestdispatcher
Lorsqu'une ressource Web est demandée par le client, si vous souhaitez que le serveur informe une autre ressource telle que le traitement d'une demande, en plus d'utiliser la fonction SenDirect () pour implémenter Redirect, elle peut également être implémentée via l'objet d'instance de l'interface de requestdispatcher. Une méthode pour obtenir l'objet requestdispatcher est définie dans l'interface ServLetRequest - getRequestDispatcher (String Path), qui renvoie l'objet de requestdispatcher de la ressource spécifiée par un certain chemin. Le chemin du paramètre doit commencer par "/" pour représenter le répertoire racine de l'application Web actuelle, c'est-à-dire que le chemin du chemin doit être dans ce programme Web, sinon une exception se produira.
Méthodes dans Interface de demande de dispatcher
| méthode | Fonction |
| Public Void Forward (Demande de servletRequest, réponse servletResponse) | Passez un servlet à une autre ressource Web et transmettez la demande à une autre ressource pour la réponse |
| Le vide public inclut (demande de servletRequest, réponse servletResponse) | Utilisé pour inclure d'autres ressources comme contenu de réponse actuel |
Ce qui précède est l'explication détaillée des exemples de demande Web et de réponse Java introduits par l'éditeur. J'espère que ce sera utile à tous!