• Aucun résultat trouvé

Les servlets

Dans le document Les cahiers du programmeur - Java EE 5 (Page 180-183)

Bien que le développement de l’application YAPS Pet Store n’utilise pas les servlets mais les JSP ( Java Server Pages), les balises JSTL ( JSP Stan-dard Tag Library) et JSF ( Java Server Faces), une petite introduction est nécessaire.

Fonctionnant côté serveur au même titre que CGI, ASP ou PHP, les servlets permettent de gérer des requêtes HTTP, d’effectuer des traite-ments, d’appeler des EJB, des services, et de fournir au navigateur une réponse sous forme de page web. Les servlets implémentent les classes et les interfaces des paquetages javax.servlet (classes génériques indépen-dantes du protocole) et javax.servlet.http (spécifique au protocole HTTP).

En pratique, les servlets, socle omniprésent de Java EE, ne sont plus uti-lisées directement dans la programmation web. En effet, elles souffrent de nombreuses lacunes comme l’absence de séparation entre les traite-ments et la présentation.

APPROFONDIR HTML & CSS Bhttp://www.w3.org/MarkUp/

Bhttp://www.htmlprimer.com/

Bhttp://www.w3.org/Style/CSS/

Bhttp://www.w3schools.com/css/

RÉric Sarrion, Introduction à HTML et CSS, O’Reilly, 2006

T CGI, ASP et PHP

CGI (Common Gateway Interface), inventé en 1993, permet d’exécuter un programme sur un ser-veur et de renvoyer le résultat à un navigateur Internet.

PHP (Hypertext Preprocessor) est un langage de script HTML inspiré des langages C, Java et Perl.

ASP est un langage propriétaire de Microsoft pour les développements web.

T HTTP

HyperText Transfer Protocol est un protocole de communication pour transférer les documents (HTML, image, etc.) entre le serveur HTTP et le navigateur web.

Bhttp://www.w3.org/Protocols/

APPROFONDIR Servlet Java Servlet Technology

Bhttp://java.sun.com/products/servlet/

RJason Hunter, Java Servlet Programming, 2nd Edition, O’Reilly, 2001

7 – Interface web

produits pour une catégorie donnée.

Comme le montre cet exemple, le code n’est pas très élégant et peut rapidement devenir illisible. On y mélange des traitements Java (l’appel à l’EJB) et de la présentation HTML (souvent avec des images, des styles, des animations, etc.). Dans le cas de pages complexes, le code devient vite difficile à maintenir. Pour ne pas se retrouver dans ce cas de figure, les JSP sont venues simplifier le développement de pages web.

Extrait de servlet mêlant traitement et présentation

public class ShowProductsServlet extends HttpServlet { 3 Une servlet étend la classe HttpServlet.

public void service(HttpServletRequest request,

HttpServletResponse response) throws ServletException { response.setContentType("text/html");

PrintWriter out = response.getWriter();

3 Point d’entrée d’une servlet.

Context initalContext = new InitialContext();

CatalogLocal catalogLocal = (CatalogLocal)

initalContext.lookup("ejb/stateless/Catalog");

3 Lookup JNDI pour obtenir l’interface locale de l’EJB CatalogBean.

Long categoryId = Long.valueOf(

request.getAttribute("categoryId"));

Category category = catalogLocal.findCategory(categoryId);

List<Product> products = category.getProducts();

3 L’EJB retourne la liste des produits pour une catégorie donnée.

out.println("<HTML>");

out.println("<HEAD>");

out.println("<TITLE>Display Products</TITLE>");

out.println("</HEAD>");

out.println("<BODY>");

out.println("<TABLE>");

3 La servlet prépare la réponse à renvoyer au navi-gateur sous forme de HTML.

for (Product product : products) { out.println("<TR>");

out.println("<TD>");

out.println("<A href=''>");

out.println(product.getName());

out.println("</A>");

out.println("<BR>");

out.println(product.getDescription());

out.println("</TD>");

out.println("</TR>");

}

3 On itère la liste des produits pour en afficher le nom et la description sous forme de tableau (balises TABLE, TR et TD).

out.println("</TABLE>");

out.println("</BODY>");

out.println("</HTML>");

out.close();

} }

Les Cahiers du Programmeur Java E

Les JSP

Les JSP permettent l’affichage de contenus dynamiques de manière plus lisible que les servlets. Elles consistent en une page HTML, incluant des directives JSP et du code Java, page qui sera ensuite précompilée en ser-vlet, puis exécutée dans un conteneur web. La page est principalement constituée de balises HTML pour l’affichage, et de code Java pour les traitements. C’est un peu l’inverse de la servlet.

L’exemple ci-après nous montre une JSP qui effectue le même traite-ment, c’est-à-dire afficher la liste des produits pour une catégorie.

La directive import possède le même comportement que l’import en Java. Dans notre cas, elle permet d’importer l’entity bean Product, la classe java.util.List et d’autres classes comme celles de JNDI. Grâce aux scriptlets , on peut inclure du code Java dans la page et, par exemple, rechercher un EJB dans JNDI , puis l’invoquer pour qu’il retourne la liste des produits . À l’aide d’une boucle for , on affiche dans un tableau HTML le nom du produit ainsi que sa description en utilisant l’expression (<%=).

APPROFONDIR JSP

RAnne Tasso, Sébastien Ermacore, Initiation à JSP, Eyrolles, 2004

RSimon Brown, Sam Dalton, Daniel Jepp, Dave Johnson, Sing Li, Matt Raible, Pro JSP 2, Apress, 2005

JavaServer Pages Technology : Bhttp://java.sun.com/products/jsp/

The JSP Resource Index : Bhttp://www.jspin.com/

Extrait de JSP appelant un EJB pour afficher des produits

<%@ page import="com.yaps.petstore.entity.catalog.Product" %>

<%@ page import="java.util.List" %>

<%@ page import="javax.naming.InitialContext" %>

(...)

<TABLE>

Lookup JNDI pour obtenir l’interface locale du

stateless CatalogBean. B

<%

Context initalContext = new InitialContext();

CatalogLocal catalogLocal = (CatalogLocal)

initalContext.lookup("ejb/stateless/Catalog");

L’EJB retourne la liste des produits pour une catégorie donnée.

B Long categoryId = Long.valueOf(

request.getAttribute("categoryId"));

Category category = catalogLocal.findCategory(categoryId);

List<Product> products = category.getProducts();

On itère la liste des produits. B for (Product product : products) {

%>

<TR>

<TD>

On affiche le nom et la description du produit. B <A href=""><%= product.getName() %></A>

<BR><%= product.getDescription()%>

</TD>

</TR>

<% } %>

</TABLE>

WEB Extensions des pages JSP Les fichiers de pages JSP portent l’extension .jsp.

Lorsqu’une page est développée pour produire de l’XHTML, elle a l’extension .jspx. Pour les frag-ments de page (en-tête, menu, pied de page), il est courant d’utiliser l’extension .jspf.

7 – Interface web

Vous l’aurez compris, ce genre de page mêlant code Java et balises HTML est à peine plus lisible que la servlet que nous avons vue précé-demment. La page peut vite devenir compliquée à lire, à maintenir, et rapidement compter plusieurs centaines de lignes de code.

Pour résoudre ce problème, il est nécessaire de séparer les responsabilités entre composants : les servlets exécutent les traitements, appellent les EJB, gèrent les exceptions et renvoient le résultat à la JSP qui l’affiche.

Cette façon de décorréler traitement (servlet) et présentation ( JSP) est inspirée du design pattern MVC (Model-View-Controller).

Dans le document Les cahiers du programmeur - Java EE 5 (Page 180-183)