Bla bla blog

Aller au contenu | Aller au menu | Aller à la recherche

jeudi 19 février 2009

Nouveautés servlet 3.0 (JSR 315) - Les annotations

Introduction

Cet article met l'accent sur la nouvelle série d'annotations introduites qui peuvent être utilisés par les développeurs plutôt que de mettre les données dans le fichier de configuration

Facilité de développement par Annotations

Les informations sur les composants Web tels que les Servlets, Servlet filtres sont mentionnées dans le descripteur de déploiement, qui est web.xml. A partir de Servlet 3.0, il est également possible de spécifier des méta-informations sur un élément (classe, interface), cette opération se fera via les annotations. Le fichier web.xml ne disparait pas pour autant. D'ailleurs les informations qu'il contient sont toujours prioritaires sur celles des annotations. Il est également possible d'activer ou pas la prise en charge des annotations par le conteneur via la balise <metadata-complete> directement placée sous la balise <web-app> du fichier web.xml. Cette balise attend les valeur "true" (le web.xml est complet, il se suffit à lui même) ou false (dans ce cas les annotations devraient être prises en compte)

Les annotations suivantes sont applicables à partir de spécifications Servlet 3.0,

    * @WebServlet 
    * @WebServletContextListener 
    * @ServletFilter 
    * @InitParam

Annotations WebServlet et InitParam

Dans cette section, nous allons voir l'utilisation de @WebServlet et @InitParam par un exemple.

package net.javabeat.servlet30.newfeatures;

import javax.servlet.annotation.InitParam;
import javax.servlet.annotation.WebServlet;

@WebServlet(
    name = "SimpleServlet", 
    urlPatterns = {"/simple"}, 
    initParams = {
        @InitParam(name = "param1", value = "value1"),
        @InitParam(name = "param2", value = "value2")}
)
public class SimpleServlet {

}


Dans cet exemple, nous avons créé une classe SimpleServlet qui n'hérite pas de HttpServlet, contrairement à ce que prévoit la spécification originale. En revanche, pour bénéficier de cette classe comme une classe Servlet, nous avons annoté en utilisant l'annotation @ WebServlet. Notez que le nom de la servlet est SimpleServlet comme spécifié par l'attribut name. L'attribut urlPatterns définit un ensemble de modèles url-qui peut être utilisé pour invoquer la Servlet. Voici le descripteur de déploiement équivalant :

<servlet>
    <servlet-name>SimpleServlet</servlet-name>
    <servlet-class>net.javabeat.servlet30.newfeatures.SimpleServlet</servlet-class>

        <init-param>
            <param-name>param1</param-name>
            <param-value>value1</param-value>
        </init-param>

        <init-param>
            <param-name>param2</param-name>
            <param-value>value2</param-value>
    </init-param>

</servlet>

<servlet-mapping>
    <url-pattern>/simple</url-pattern>
    <servlet-name>SimpleServlet</servlet-name>
</servlet-mapping>

Nouveautés servlet 3.0 (JSR 315) - Introduction

Après la révolution des EJB 3.0, les servlets leur emboitent le pas et passent à leur tour en version 3.0. Comme pour les EJB, la principale nouveauté correspond à une simplification de la spec avec des annotations à la place des fichiers descripteur de déploiement, mais ce n'est pas tout... Notez que cette spec n'est pas encore finalisée, certaines parties risquent de bouger encore un peu. Je me lance donc dans une suite d'articles consacrés à cette spécification et dans lesquels je compte successivement traiter :

  1. les annotations
  2. l'intégration des frameworks (struts, jsf, etc.)
  3. Les requêtes asynchrones

Notez que certains articles seront parfois inspirés d'autres post, voire de simple traduction, c'est pourquoi je tiens d'ores et déjà à indiquer les sources utilisées :