Actualités

[22/05/2017] Des Smiliens récompensés lors du Hackathon Carrefour !

Notre équipe, composée en partie de Smiliens, a remporté le Prix du Code et celui de l'Incubation lors du Hackathon Carrefour, organisé ce week-end à Paris !

[18/05/2017] OpenShift, le nouveau livre blanc Smile !

Smile publie aujourd'hui un livre blanc dédié à OpenShift, le PaaS open source orienté DevOps. A télécharger dès maintenant !

[15/05/2017] Smile décroche le label HappyAtWork 2017 !

Pour la 2ème année consécutive, Smile obtient le label HappyAtWork for Starters qui récompense les entreprises où il fait bon débuter sa carrière !

Toutes les actualités picto
       

Vous avez besoin de mettre à jour votre Lecteur Flash Flash 7

Guillemet ouvrant l'actualité des solutions
et des technologies open source Guillemet fermant
picto

JSR 315 - Java Servlet 3.0

Cette nouvelle spécification[1], intégrée à JEE6, est en version finale depuis décembre 2009. Elle introduit un bon nombre d'améliorations et de nouveautés.

Modularité et annotation

Une des nouveautés est l'introduction d'une modularité via les web-fragment. Un web-fragement.xml est une partie de fichier web.xml, placé dans le répertoire META-INF des jar de la webapp. Les web-fragment permettent de déclarer les mêmes informations que dans le web.xml. Les fichiers web-fragment.xml et web.xml sont combinés par le conteneur de servlet au déploiement de l'application, il est possible de définir les préférences d'assemblage (ordre absolue, ordre relatif)

A la mode, les annotations font leur apparition pour configurer l'application web :
- @WebServlet pour les Servlet
- @WebFilter pour les Filter
- @WebListener les listeners
- @ServletSecurity pour définir les éléments de securité (equivalent de security-constraint du web.xml)

Exemple de code pour définir une servlet :

@WebServlet(name=”MySampleServlet”, urlPatterns={"/myservlet", "/m"})
 public class SampleServlet extends HttpServlet{
   public void doGet(HttpServletRequest req, HttpServletResponse res) {
    }
 }

A noter, que pour spécifier l'ordre des éléments (filtre, servlet), il est nécessaire de passer par le descripteur de déploiement web.xml ou web-fragment.xml

Enfin, une api permet de déclarer les éléments par programmation. Par exemple, l'ajout d'un filtre peut se faire de cette manière :

Filter filter = new fr.smile.MyFilter();
 ...
 context.addFilter("myfilter", filter);

Ressources statiques dans les jars

Servlet 3.0 introduit le chargement de ressources statiques dans les jar. Les fichiers JSP, css, js, ... placés dans le répertoire META-INF/resources des jar sont disponibles comme s'ils étaient placés à la racine de la webapp.

Upload de fichier

L'annotation @MultipartConfig permet d'annoter les servlet qui vont traiter les requêtes multipart/form-data, c'est à dire l'upload de fichiers. L'upload de fichier devient donc natif avec servlet 3.0 !

Traitement asynchrone

Sans aucune doute la nouveauté la plus notable, servlet 3.0 introduit le traitement asynchrone des requêtes. Jusqu'à servlet 2.5, les requêtes étaient traitées de manière synchrone, c'est à dire que le thread traitant la requête était bloqué jusqu'à la fin du traitement de la servlet. Il était alors complexe et couteux en performance de gérer les requêtes longues durée. Avec la gestion asynchrone, les threads ne sont plus bloqués et peuvent donc traiter d'autres requêtes sans attendre la réponse de la servlet. Cela permet de gérer le cas de traitement long, mais surtout de gérer la programmation de type server-push, alias Comet[2], de manière standard. Ce type de programmation est utilisé ans les applications affichant des données qui évoluent rapidement (chat, indices boursier, monitoring, news …).

Implémentations

L'implémentation de référence est glassfish v3.0, sortie en debut d'année et telechargeable sur le site glassfish.dev.java.net [3].
Pour les autres serveurs d'applications, il faudra attendre Tomcat 7 et Jetty 8. Même si aucune date officielle n'est donnée, ces 2 versions devraient être disponible en version stable d'ici la fin du premier trismestre 2010.

Conclusion

La plupart des nouveautés de servlet 3.0, mise à part le traitement asynchrone, ne vont pas directement modifier notre facon de travailler. En effet, avec les frameworks utilisés pour développer nos applications, nous écrivons très peu de servlet ou de filter. L'interet de servlet 3.0 sera de pouvoir charger un framework en ajoutant uniquement le jar dans notre application, sans configuration du web.xml.

[1] http://jcp.org/aboutJava/communityprocess/final/jsr315/index.html
[2] http://en.wikipedia.org/wiki/Comet_(programming)
[3] https://glassfish.dev.java.net/downloads/v3-final.html

Alexis Thaveau
picto

Commentaires

Soyez la premiere personne à ajouter un commentaire sur cet article.
Ecrire un nouveau commentaire