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