CodeGym/Cours Java/Module 3/Façonner les réponses des servlets

Façonner les réponses des servlets

Disponible

3.1 Classe HttpServletResponse

Après avoir appelé service()votre méthode de servlet, le conteneur Web générera une réponse au client basée sur le HttpServletResponse. Donc, si vous voulez influencer d'une manière ou d'une autre la réponse au client, vous devez modifier cet objet.

La réponse du serveur se compose de trois parties :

  • Ligne d'état (par exemple : 200 OK)
  • En-têtes
  • Corps de la réponse

Et les méthodes de classe HttpServletResponsesont également divisées en 3 groupes ? Presque:

Méthodes Description
1 void setStatus(int sc) Définit le code d'état de la réponse.
2 void sendError(int sc) Envoie une erreur au client avec le code spécifié.
3 void sendError(int sc, String msg) Envoie une erreur avec le code spécifié et un message au client.
4 void addHeader(String name, String value) Ajoute un en-tête à la liste des en-têtes de réponse.
5 void setHeader(String name, String value) Modifie l'en-tête dans la liste des en-têtes de réponse.
6 boolean containsHeader(String name) Vérifie si l'en-tête existe déjà.
7 void addCookie(Cookie cookie) Ajoute un cookie à la réponse.
8 void sendRedirect(String location) Redirige le client vers une URL différente.
9 String encodeRedirectURL(String url) Encode l'URL spécifiée à utiliser dans la méthode sendRedirect.
dix String encodeURL(String url) Encode l'URL spécifiée, y compris l'ID de session.
onze void setContentType(String type) Définit le MimeType du résultat.
12 void setContentLength(int len) Définit la longueur du corps de la réponse.
13 void setCharacterEncoding(String charset) Définit le jeu de codage de réponse.
14 void setBufferSize(int size) Définit la taille de la mémoire tampon pour le corps de la réponse.
15 boolean isCommitted() Vérifie si le tampon a déjà été écrit dans la réponse.
16 void flushBuffer() Écrit le contenu du tampon dans la réponse.
17 void reset() Réinitialise toutes les données stockées dans la mémoire tampon, les en-têtes et les codes de réponse.
18 void resetBuffer() Efface le tampon de réponse.

Les méthodes ici sont assez triviales. Mais je vais vous donner quelques faits saillants ci-dessous.

Tampon . La réponse de votre servlet est écrite dans un tampon, pas immédiatement envoyée à l'utilisateur. Par conséquent, à un moment donné (si, par exemple, une erreur se produit), vous pouvez réinitialiser (effacer) tout ce qui est écrit dans le tampon. Vous pouvez même appeler la méthode reset() et effacer non seulement le contenu du tampon, mais également les en-têtes avec le code de réponse.

3.2 rediriger()

Le deuxième point important est la redirection. Si votre servlet décide de rediriger le client vers une autre URL, vous devez d'une manière ou d'une autre envoyer cette URL au client. Cela peut être fait en utilisant le sendRedirect.

Mais il y a une nuance importante. L'URI peut contenir une plage de caractères plus large que celle autorisée dans le corps de la réponse. Par conséquent, l'URL doit d'abord être encodée dans un jeu de caractères valide avant d'appeler la méthode sendRedirect(). Il existe une méthode spéciale pour cela encodeRedirectURL(String url). Utilise le.

Exemple de redirection :

public class RedirectServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
        String newUrl = "http://google.com?q=Learn to google!";
        String redirectUrl = response.encodeRedirectURL(newUrl);
        response.sendRedirect(redirectUrl);
    }
}

3.3 méthode getWriter()

Et maintenant, nous allons apprendre à écrire notre texte en tant que corps de réponse. Pour ce faire, la classe HttpServletResponsea une méthode spéciale getWriter()qui renvoie un objet PrintStream. Si quelqu'un a oublié, c'est le type de champ avec le nom System.out.

Pour écrire du texte en tant que réponse de servlet, vous avez besoin :

  • Obtenez l'objet PrintStream en appelant le response.getWriter().
  • Écrivez ce que vous pensez nécessaire dans l'objet PrintStream (toutes les données seront écrites dans le tampon).
  • Envoyez le tampon à l'utilisateur en appelant la méthode close()sur le PrintStream.

Écrivons une servlet qui additionne deux nombres aet brenvoie le résultat à l'utilisateur :

public class CalculatorServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
         // Getting the parameter “a” and “b” from request
        String a = request.getParameter("a");
        String b = request.getParameter("b");

        try {
            // Convert strings to numbers and calculate sum
            int sum = Integer.parseInt(a) + Integer.parseInt(b);

            // Print HTML as a response for browser
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();

            out.println("<html>");
            out.println("<head> <title> CalculatorServlet </title> </head>");
            out.println("<body>");
            out.println("<h1> Sum == " + sum + "</h1>");
            out.println("</body>");
            out.println("</html>");
        } finally {
            out.close();
        }
    }
}
Commentaires
  • Populaires
  • Nouveau
  • Anciennes
Tu dois être connecté(e) pour laisser un commentaire
Cette page ne comporte pas encore de commentaires