|
Servlet, se me méfier des objets PrintWriter |
|
|
|
Programmation -
J2EE/Java(script)
|
|
Ecrit par Kamal AOUDA
|
|
13-04-2006 |
|
Servlet, se me méfier des objets PrintWriter
Une des erreurs fréquemment commises
dans le codage des servlets consiste à utiliser la méthode println() de l’objet
PrintWriter pour générer le contenu HTML destiné au browser (cf. classe
Writer1). Avec une console , la méthode println() crée un séparateur pour
afficher les résultats sur une nouvelle ligne. Avec les pages HTML ce séparateur
est tout simplement ignoré parce que le browser n’interprète que les balises
HTML.
Classe Writer1
public class Writer1 extends HttpServlet {public void doGet (HttpServletRequest
req, HttpServletResponse res) throws ServletException, IOException {
res.setContentType("text/html");
PrintWriter out = res.getWriter();
out.println("<html>"); out.println("<head><title>Hello World</title></head>");
out.println("<body>"); for (int i = 0 ; i < 10; i++) { out.println("<h1>Hello
World 1</h1>");}
out.println("</body></html>");}}
En utilisant de façon interchangeable les méthodes println() et print() on
obtient les mêmes résultats mais pas le même niveau de performance. En fait le
traitement d’une méthode println(String s) équivaut en termes de performance au
traitement de la méthode suivante :
public void println(String s) { print(s); println();}
La méthode println() fait appel en arrière appel à la méthode print() qui à son
tour doit réaliser des conversions vers le format spécifié par la méthode
setContentType() de la classe HttpServletResponse. Ces conversions sont très
coûteuses en mémoire et en processeur pour des formats comme l’unicode. Pour
cette raison il faut essayer dans toute la mesure du possible de substituer des
objets comme ServletOutputStream à l’objet PrintWriter.
Cela dit les servlets ne sont pas optimisées pour implémenter la couche de
présentation. Comme nous l’avons vu dans la partie 4, elles sont plus
efficientes lorsqu’elles sont utilisées exclusivement dans l’implémentation du
contrôleur. A chaque fois que cela est possible, il faut évacuer des servlets
tout le code qui contribue directement à la génération de la vue. Autrement on
risque de créer des couplages qui peuvent s’avérer fatal pour le débit de
l’application.
|