7. Notion de réponse

La réponse d'une servlet à un client est un flux HTTP modélisé par deux classes : ServletResponse et HttpServletResponse. Ces deux classes exposent des méthodes qui permettent de fixer cette réponse et de la paramétrer, notamment de fixer le type MIME de cette réponse, ou l'encodage des caractères dans le cas d'une réponse textuelle. Le contenu de la réponse d'une servlet n'est pas envoyé au client directement ; il est tout d'abord enregistré dans un buffer. La classe Response expose quelques méthodes qui permettent de contrôler ce buffer. Une réponse peut être contrôlée en mode caractère, via un PrintWriter, ou en mode binaire, via un ServletOutputStream. Enfin, la classe HttpServletResponse expose quelques méthodes qui permettent de contrôler les en-têtes HTTP associés à cette réponse. Voyons tout ceci en détails.

7.1. Contrôle du buffer de sortie

Le buffer de sortie est contrôlé par la classe ServletResponse. Cette classe expose les méthodes suivantes :
  • reset() et resetBuffer() : ces méthodes vident le buffer de son contenu. La méthode reset() efface également les paramètres de l'en-tête HTTP qui auraient été fixés.
  • setBufferSize(int) et getBufferSize() : contrôlent la taille du buffer.
  • setContentType(String) et getContentType() : contrôlent le type MIME du contenu porté par ce buffer. Ce type doit être fixé avant que le buffer ne soit envoyé au client, même partiellement.
  • setCharacterEncoding(String) et getCharacterEncoding() : contrôlent le codage des caractères de ce buffer. Même chose : cet encodage doit être fixé avant que le buffer ne soit retourné au client, même partiellement.
  • setContentLength() : fixe la taille du contenu envoyé au client. Cette méthode est portée par la classe ServletResponse, et fixe l'attribut HTTP Content-length dans le cas d'une réponse HTTP. Il n'y a pas de méthode getContentLength().
  • setLocale(Locale) et getLocale() : contrôlent la langue dans laquelle la réponse est envoyée. Comme pour les autres méthodes, cette locale doit être fixée avant l'envoi du buffer.
  • flushBuffer() : envoi le contenu du buffer au client. La méthode isCommited permet de tester si cet envoi à eut lieu.
Enfin les deux méthodes getWriter() et getOuputStream() permettent d'accéder au contenu de la réponse au travers d'un objet de type PrintWriter (extension de Writer), ou d'un objet ServletOutputStream (extension de OutputStream).

7.2. Contrôle de la réponse HTTP

La classe HttpServletResponse offre trois contrôles sur la réponse HTTP :
  • la possibilité de fixer les paramètres de l'en-tête. Les méthodes qui prennent en charge cette fonctionnalité sont addHeader(String, String), addIntHeader(String, int), etc... On peut également fixer le statut de cette réponse par appel à la méthode setStatus(int).
  • le retour d'un code HTTP, afin de signaler une erreur ou un problème dans le traitement de la requête. Ce point est géré par la méthode sendError(int, String).
  • enfin la redirection de la requête vers une autre URL : sendRedirect(String).
Java servlet et JSP
Retour au blog Java le soir
Cours & Tutoriaux
Table des matières
Introduction
1. Position de l'API Servlet
2. Présentation
Présentation de Tomcat
1. Un peu d'histoire
2. Organisation des répertoires de Tomcat
2.1. Répertoire bin
2.2. Répertoire conf
2.3. Répertoire lib
2.4. Répertoire log
2.5. Répertoire temp
2.6. Répertoire webapp
2.7. Répertoire work
3. Lancement de Tomcat
3.1. Lancement par défaut
3.2. Accéder à l'administration de Tomcat
3.3. Plusieurs instances de Tomcat
4. Configuration de Tomcat
4.1. Introduction
4.2. Élément Server
4.3. Élément Service
4.4. Élément Connector
4.5. Élément Engine
4.6. Élément Host
4.7. Élément Context
4.8. Élément GlobalNamingResources
4.9. Élément Realm
4.10. Élément Valve
5. Définition et chargement des applications web
5.1. Introduction
5.2. Prise en compte des éléments Context
5.3. Chargement et mise à jour à chaud
6. Utilisation de Tomcat avec Apache
API Servlet
1. Introduction
2. Une première servlet
2.1. Le code
2.2. Création de l'application web
2.3. Déploiement dans Tomcat
3. Concepts, cycle de vie
3.1. Requête
3.2. Réponse
3.3. Session
3.4. Application web
3.5. Contexte d'exécution
3.6. Cycle de vie
3.7. Filtre
4. Présentation générale de l'API
4.1. Introduction
4.2. Interfaces disponibles
5. Notion de servlet
5.1. Interfaces servlet
5.2. Cycle de vie d'une servlet
5.3. Paramètres d'initialisation d'une servlet
6. Notion de requête
6.1. Accès aux paramètres d'une requête
6.2. Accès aux éléments de l'en-tête HTTP
6.3. Accès aux éléments de l'URL
6.4. Accès aux paramètres du client
6.5. Accès aux informations de sécurité
6.6. Accès à la session, au contexte et aux informations d'initialisation
7. Notion de réponse
7.1. Contrôle du buffer de sortie
7.2. Contrôle de la réponse HTTP
8. Notion de session HTTP
9. Redirection ou inclusion d'une ressource
10. Listeners
10.1. Introduction
10.2. Événements de l'API Servlet
10.3. Ajout ou retrait d'un attribut
10.4. Création et destruction d'un contexte
10.5. Notification d'un objet attaché à un contexte
10.6. Déclaration d'un listener dans une application web
11. Connexion à une base
11.1. Introduction
11.2. Connexion manuelle
11.3. Connexion par utilisation de source de données
Filtrage
1. Filtrage de servlets
2. Mise en place d'un filtre
2.1. Écriture d'un filtre
2.2. Déclaration du filtrage
3. Filtrage d'une requête
4. Filtrage d'une réponse
4.1. Fonctionnement de ce filtrage
Java Server Pages
1. Introduction
2. Un premier exemple
2.1. Une première JSP statique
2.2. Une première JSP dynamique
2.3. Fonctionnement interne des JSP
3. JSP scriplet
3.1. Les expressions
3.2. Les déclarations
3.3. Variables prédéfinies
3.4. Scriplet de directives
4. Utilisation de beans
4.1. Introduction
4.2. Déclaration d'un bean existant
4.3. Création d'un nouveau bean
4.4. Utilisation des propriétés d'un bean
5. Inclure un contenu externe dans une JSP
5.1. Introduction
5.2. Inclusion au lancement de l'application
5.3. Inclusion au traitement de la requête
6. Utilisation de bibliothèques de tags
6.1. Introduction
6.2. Bibliothèque core
7. Internationalisation
7.1. Notion de bundle
7.2. Internationalisation de pages JSP
Projet exemple
1. Présentation du projet