Introduction à VRaptor en Java

Introduction à VRaptor en Java

1. Overview

Dans cet article, nous allons examinerVRaptor, un framework Web Java MVC simple et direct qui utilise les contextes Java et la technologie d'injection de dépendances et est facile à comprendre.

Tout comme Spring -it relies heavily on annotations and works great with Hibernate.

Il contient également des plugins utiles, tels que l'internalisation et les tests unitaires.

Alors, explorons les différents composants de VRaptor et créons un exemple de projet.

2. Dépendances et configuration de Maven

Un moyen rapide de démarrer et de fonctionner est de télécharger lesvraptor-blank-project-distribution depuis lesofficial repository.

Le projet vierge est juste un squelette qui peut être développé pour devenir une application Web à part entière de choix.

Après avoir téléchargé et décompressé le projet, renommons le répertoire envraptor (ou tout autre nom).

Le répertoire doit contenir:

  • src/

  • pom.xml

  • etREADME.md

Le projet est basé sur Maven et est livré avec le plugin Maventomcat7 qui fournit le conteneur de servlet pour exécuter l'application.

Il est également livré avec unIndexController par défaut qui n'a qu'une seule méthode -index().

Par défaut, la vue à rendre par cette méthode est située danswebapp/WEB-INF/jsp/index/index.jsp - ceci suit la conventionWEB-INF/jsp/controller_name/method_name.

Pour démarrer le serveur, nous allons exécuter la commandemvn tomcat7: _run_ à partir de la racine du projet.

En cas de succès, si nous visitonshttp://localhost:8080,, un navigateur affichera «It works!! VRaptor!».

If we face the “java.lang.LinkageError: loader constraint violation”, then, we have to modify the following dependencies in pom.xml:


    org.jboss.weld.servlet
    weld-servlet-core
    2.1.2.Final
    
        
        org.jboss.spec.javax.el
        jboss-el-api_3.0_spec
        
    


    org.jboss.weld
    weld-core-impl
    2.1.2.Final
    
       
          org.jboss.spec.javax.el
      jboss-el-api_3.0_spec
       
    

Le coupable est leel-api qui est inclus dansweld-servlet-core etweld-core-impl avec la portéecompile; cela conduit à un conflit de dépendance.

Les dépendances suivantes seront nécessaires le long de la ligne, donc incluons-les danspom.xml:


    br.com.caelum.vraptor
    vraptor-freemarker
    4.1.0-RC3

    mysql
    mysql-connector-java
    8.0.8-dmr



    org.freemarker
    freemarker
    2.3.27-incubating

La dernière version des artefactsvraptor-freemarker,mysql-connector-java etfreemarker peut être trouvée dans Maven Central.

Maintenant que nous sommes prêts à partir, créons un site de blog simple.

3. Assistance Hibernate

VRaptor fournit divers plugins pour interagir avec les bases de données, l'un d'entre eux étantvraptor-hibernate qui __ fonctionne avec Hibernate 4.

Le plugin rend le beanSessionFactory d’Hibernate disponible au moment de l’exécution via CDI.

Avec le plugin en place, nous avons besoin d’un fichier de configuration Hibernate standard - un exemple peut être trouvé dans le référentiel.

VRaptor utilise une technique appelée Producers pour rendre les objets disponibles pour la gestion des DI. Plus de détails sur cehere.

4. Définition de routes Web dans VRaptor

Dans VRaptor, les définitions de route résident dans des contrôleurs qui sont simplement des objets Java annotés@Controller - comme dans Spring.

L'annotation@Path est utilisée pour mapper un chemin de requête vers un contrôleur particulier et les annotations@Get, @Post, @Put, @Delete et@Patch sont utilisées pour spécifier les types de requête HTTP.

La configuration du mappage d'itinéraire ressemble à celle de JAX-RS mais n'implémente pas officiellement la norme.

De plus, lors de la définition d'un tracé, il est possible de spécifier une variable de tracé entre accolades:

@Get("/posts/{id}")

La valeur deid est alors accessible dans une méthode de contrôleur:

@Get("/posts/{id}")
public void view(int id) {
    // ...
}

Lorsqu'un formulaire est soumis à un itinéraire particulier, VRaptor peut automatiquement renseigner un objet avec les données de formulaire soumises.

Voyons cela en action dans la section suivante de l'article.

5. Vues et moteur de modèles

Par défaut, les vues peuvent être implémentées à l'aide de JSP. Cependant, d'autres moteurs de modèles peuvent également être utilisés. Dans cet article, nous travaillerons avec Freemarker.

Commençons par créerindex.ftl and saving it dans le répertoire de vue par défaut (src / main / resources / templates):



    
    VRaptor Blank Project


It works!! ${variable}

Maintenant, nous pouvons utiliser la vue définie avec une classeFreemarkerView pour le rendu de vue:

@Path("/")
public void index() {
    result.include("variable", "VRaptor!");
    result.use(FreemarkerView.class).withTemplate("index");
}

L'objetResult contient l'état du modèle - il a des méthodes pour rediriger vers une autre page, une URL ou une méthode de contrôleur; il peut être injecté dans le contrôleur en utilisant CDI.

Dans notre exemple, lesvariable sont résolus par Freemarker. Ainsi, l'espace réservé de${variable} dansindex.ftl est remplacé par le «VRaptor!».

Des utilisations plus avancées sont documentéeshere.

6. Exemple de traitement de soumission de formulaire

Voyons comment gérer les soumissions de formulaires avec validation:

@Post("/post/add")
public void add(Post post) {
    post.setAuthor(userInfo.getUser());
    validator.validate(post);
    if(validator.hasErrors()) {
        result.include("errors", validator.getErrors());
    }
    validator.onErrorRedirectTo(this).addForm();

    Object id = postDao.add(post);

    if(Objects.nonNull(id)) {
       result.include("status", "Post Added Successfully");
         result.redirectTo(IndexController.class).index();
    } else {
        result.include(
          "error", "There was an error creating the post. Try Again");
        result.redirectTo(this).addForm();
    }
}

L'objetPost est d'abord validé à l'aide deJava bean validation avant d'être conservé dans la base de données à l'aide depostDao.add().

Les champs de l’objetPost sont automatiquement renseignés à partir des valeurs des données de formulaire soumises - qui correspondent aux champs d’entrée du formulaire dans le fichier de vue.

Notez que le nom du champ de saisie doit être précédé du nom de l'objet en minuscules.

Par exemple, la vue responsable de l'ajout d'une nouvelle publication a des champs de saisie:post.title etpost.post qui correspondent aux champstitle etpost dansPost.java respectivement:



Le fichieradd.ftl complet se trouve dans le code source.

S'il y a une erreur dans la soumission du formulaire, le message d'erreur est inclus et l'utilisateur est redirigé vers la même méthodeadd():

if(validator.hasErrors()) {
    result.include("errors", validator.getErrors());
}
validator.onErrorRedirectTo(this).addForm();

7. Conclusion

En conclusion, nous avons examiné VRaptor en un coup d'œil et vu comment la fonctionnalité MVC de base peut être obtenue.

Ledocumentation contient plus de détails sur le framework ainsi que les plugins disponibles.

Le code source complet, y compris un échantillondatabase.sql, est disponibleover on Github.