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)
.