Déploiement d’applications Web dans une jetée

Déploiement d'applications Web dans une jetée

1. Vue d'ensemble

Dans cet article, nous allons faire un survol rapide du serveur Web Jetty, puis nous aborderons diverses approches du déploiement d’un fichier WAR.

Jetty est un serveur Web HTTP Java open source et un conteneur de servlet. Jetty est plus couramment utilisée dans la communication machine à machine dans l'écosystème Java.

2. Configuration du projet

La dernière version de Jetty peut toujours être téléchargée en suivantthis link. Nous allons créer une application Web Java très basique à partir de la ligne de commande avec Maven, que nous utiliserons pour nos exemples.

Dans cet article, nous utilisons Jetty 9.x, la dernière version en ce moment.

Rendons-nous sur notre console, accédez à l'emplacement de votre choix et exécutez la commande suivante:

mvn archetype:generate -DgroupId=com.example -DartifactId=jetty-app
  -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

Cette commande créera une application Web Java complète dans un nouveau dossierjetty-app à notre emplacement actuel. C’est l’une des nombreuses façons de créer une application Java avec Maven et elle convient à notre objectif.

Puisque nous allons traiter des fichiers WAR, allons à la racine du projet et construisons-le:

cd jetty-app

Construire avec Maven:

mvn package

Ensuite,jetty-app.war sera créé à l'emplacementjetty-app/target/jetty-app.war.

3. Structure de la jetée

Context path. Désigne l’emplacement relatif à l’adresse du serveur et représentant le nom de l’application Web.

Par exemple, si notre application Web est placée sous le répertoire$JETTY_HOME\webapps\myapp, elle sera accessible par l'URLhttp://localhost/myapp, et son chemin de contexte sera/myapp.

WAR. Extension d'un fichier contenant une hiérarchie de répertoires d'applications Web au format ZIP. Il s'agit de l'abréviation de Web Archive. Les applications Web Java sont généralement regroupées sous forme de fichiers WAR pour le déploiement. Les fichiers WAR peuvent être créés sur la ligne de commande ou avec un IDE tel qu'Eclipse.

4. Déploiement en copiant WAR

Le moyen le plus simple de déployer une application Web sur le serveur Jetty est probablement de copier le fichier WAR dans le répertoire$JETTY_HOME/webapps.

Après la copie, nous pouvons démarrer le serveur en accédant à$JETTY_HOME et en exécutant la commande:

java -jar start.jar

Jetty analysera son répertoire`$JETTY_HOME/webapps` au démarrage pour les applications Web à déployer. Notre nouvelle application sera déployée dans le contexte/jetty-app.

Lorsque nous chargeons l'URLhttp://localhost:8080/jetty-app depuis le navigateur, nous devrions voir notre application s'exécuter avecHello world! imprimée à l'écran.

5. Déploiement à l'aide d'un fichier de contexte

Le serveur Web Jetty nous offre un moyen de localiser lesdeploy a web archiven'importe où dans le système de fichiers en créant un fichier de contexte pour celui-ci.

De cette façon, même si notre fichier WAR est situé sur un bureau ou que nous avons choisi de le conserver dansjetty-app/target où Maven place le paquet, nous pouvons simplement créer son fichier de contexte dans$JETTY_HOME/webapps.

Annulons le déploiement desjetty-app.war que nous venons de déployer en les supprimant dewebapps. Nous allons ensuite créerjetty-app.xml avec le code suivant et le placer danswebapps:




    /jetty
    absolute/path/to/jetty-app.war

This context file must have the same name as our WAR, avec l'extension de fichier XML. Notez que nous avons défini l'attributcontextPath sur/jetty. Cela signifie que nous accéderons à notre application Web à partir de l'URLhttp://localhost:8080/jetty.

Cette possibilité de personnaliser le chemin de contexte est l’un des grands avantages de l’approche de déploiement de fichiers WAR dans Jetty basée sur les fichiers de contexte, car certains noms d’applications peuvent ne pas convenir à cet usage.

6. Déploiement avec le plugin Jetty Maven

6.1. Déploiement par défaut

Le plugin jetty Maven nous aide à effectuer des tests et itérations rapides lors de la création d'applications Web Java. Pour pouvoir déployer et exécuter des applications avec lui, il suffit d'ajouter le plugin danspom.xml:


    org.eclipse.jetty
    jetty-maven-plugin
    9.3.11.v20160721

La dernière version peut être trouvée en suivantthis Maven link.

Nous devons nous assurer que notre instance de Jetty exécutée sur le port8080 est arrêtée avant de passer à l'étape suivante.

Pour déployer notre application après avoir ajouté le plugin, nous naviguons vers la racine où se trouvepom.xml et exécutons la commande suivante:

mvn jetty:run

Cette commande crée une nouvelle instance de jetée et le plug-in y déploie l'application. On peut y accéder en chargeanthttp://localhost:8080.

Le plugin Jetty Maven analyse en permanence le projet Web pour y rechercher les modifications et continue à le redéployer.

6.2. Modification desContextPath

À partir de la sous-section précédente, l'application a été déployée sous le contexte/. Cependant, si nous souhaitons déployer sous un chemin de contexte donné tel que/jetty comme précédemment, nous devrons configurer le plugin différemment.

Nous allons changer notre déclaration de plugin en XML suivant:


    org.eclipse.jetty
    jetty-maven-plugin
    9.3.11.v20160721
    
        
            /jetty
        
    

Notez comment nous avons ajouté un bloc de configuration pour personnaliser davantage notre déploiement. Plusieurs options de configuration existent pour être placées à l'intérieur de ce bloc en fonction de ce que l'on veut.

Après ces modifications, nous pouvons réexécuter le plugin comme auparavant et accéder à notre application viahttp://localhost:8080/jetty.

6.3. Changer le port

Un scénario auquel on peut être confronté est une exception de port en cours d'utilisation. Peut-être avons-nous une instance de jetée fonctionnant sur le port8080 pour la production, mais nous sommes encore en phase de développement et souhaitons bénéficier de la facilité d'itération qui accompagne le déploiement à l'aide du plugin Maven.

Dans ce cas, nous devons exécuter notre serveur de test sur un port différent. Modifions la configuration du plug-in en XML suivant:


    
        /jetty
    
    
        8888
    

Lorsque nous réexécutons notre plugin Maven, nous pourrons accéder à notre application à partir dehttp://localhost:8888/jetty.

Il est à noter qu'avec le plugin Jetty Maven, nous n'avons pas besoin d'avoir une instance de Jetty installée et en cours d'exécution. Au contraire, il crée sa propre instance de jetée.

7. Déploiement avec Jetty Runner

Tout comme le plugin Jetty Maven, le jetty-runner offre un moyen rapide et facile de déployer et d'exécuter notre application Web. Avec jetty-runner, nous n'avons pas non plus besoin d'installer et d'exécuter une instance distincte d'un serveur de jetée.

7.1. Configuration de Jetty Runner

Pour utiliser jetty-runner dans le déploiement et l'exécution rapides de nos applications Web, nous pouvons télécharger la dernière version en suivant ceMaven link.

Avec jetty-runner, nous n'avons besoin de placer que le fichier téléchargé où bon nous semble et d'être prêt avec le chemin du système de fichiers de nos archives Web.

Nous pouvons passer des paramètres de configuration à partir de la ligne de commande et déployer de nombreuses applications dans différents contextes et liées à différents ports avec une seule commande.

J'ai placé mon pot jetty-runner dans la même hiérarchie que le répertoirejetty-app. C'est le répertoire contenant notre application Web.

7.2. Déploiement de base

Déployons notre WAR à l'aide de jetty-runner:

java -jar jetty-runner-9.4.0.M1.jar jetty-app/target/jetty-app.war

Cette commande, comme dans le cas du plug-in Maven, crée une instance de jetée et y déploie le fichier WAR fourni. Le chemin WAR peut être un chemin absolu ou relatif.

Nous pouvons charger cette application en utilisanthttp://localhost:8080.

7.3. Déployer avec le chemin de contexte

Pour déployer sous le contexte/jetty comme précédemment:

java -jar jetty-runner-9.4.0.M1.jar --path /jetty jetty-app/target/jetty-app.war

7.4. Déployer sur un port donné

Pour déployer sur un numéro de port donné:

java -jar jetty-runner-9.4.0.M1.jar --port 9090 jetty-app/target/jetty-app.war

Accessible viahttp://localhost:9090.

7.5. Déployer plusieurs WAR

Pour déployer plusieurs WAR avec la même commande, nous utilisons l'argument–path pour rendre chaque fichier unique:

java -jar jetty-runner --path /one one.war --path /two two.war

On accèderait alors àone.war viahttp://localhost:8080/one ettwo.war viahttp://localhost:8080/two.

8. Déployer avec le plug-in Cargo Maven

Cargo est une bibliothèque polyvalente qui nous permet de manipuler divers types de conteneurs d'applications de manière standard.

8.1. Configuration du déploiement du fret

Dans cette section, nous verrons commentuse Cargo’s Maven plugin to deploy a WAR to Jetty, dans ce cas nous déploierons un WAR sur une instance Jetty 9.x.

Pour bien maîtriser l’ensemble du processus, nous allons commencer par créer une nouvelle application Web Java à partir de la ligne de commande:

mvn archetype:generate -DgroupId=com.example -DartifactId=cargo-deploy
  -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

Cela créera une application Web Java complète dans le répertoirecargo-deploy. Si nous construisons, déployons et chargeons cette application telle quelle, elle imprimeraHello World! dans le navigateur.

Puisque notre application Web ne contient pas de servlets, notre fichierweb.xml sera très basique. Naviguez donc vers le dossierWEB-INF de notre projet nouvellement créé et créez unweb.xml s'il n'a pas encore été créé automatiquement avec le contenu suivant:




    cargo-deploy
    
        index.jsp
    

Pour permettre à Maven de reconnaître les commandes de cargo sans saisir le nom complet, nous devons ajouter le plugin cargo Maven dans un groupe de plugins dans lessettings.xml. de Maven

En tant qu'enfant immédiat de l'élément racine<settings></settings>, ajoutez ceci:


    org.codehaus.cargo

8.2. Déploiement local

Dans cette sous-section, nous modifierons nospom.xml en fonction de nos nouvelles exigences de déploiement.

Ajoutez le plugin comme suit:


    
        
            org.codehaus.cargo
            cargo-maven2-plugin
            1.5.0
            
                
                    jetty9x
                    installed
                    Insert absolute path to jetty 9 installation
                
                
                    existing
                    Insert absolute path to jetty 9 installation
                
            
       
    

Notez que nousexplicitly define the packaging as a WAR, sans cela, notre construction échouera. Dans la section plugins, nous ajoutons ensuite le plugin cargo maven2.

La dernière version au moment de l'écriture est1.5.0. Cependant, la dernière version peut toujours être trouvéehere. De plus, nous ajoutons une section de configuration où nous disons à Maven que nous utilisons le conteneur Jetty ainsi qu'une installation Jetty existante.

En définissant le type de conteneur surinstalled, nous indiquons à Maven que nous avons une instance Jetty installée sur la machine et nous fournissons l'URL absolue de cette installation.

En définissant le type de configuration surexisting, nous disons à Maven que nous avons une configuration existante que nous utilisons et qu'aucune configuration supplémentaire n'est requise.

L’alternative serait de demander à cargo de télécharger et d’installer la version de Jetty spécifiée en fournissant une URL. Cependant, nous nous concentrons surWAR deployment.

Il convient de noter que, que nous utilisions Maven 2.x ou Maven 3.x, le plugin cargo maven2 fonctionne pour les deux.

Nous pouvons maintenant installer notre application en exécutant:

mvn install

et le déployer en lançant:

mvn cargo:deploy

Si tout se passe bien dans la console Maven et Jetty, alors nous devrions pouvoir exécuter notre application Web en chargeanthttp://localhost:8080/cargo-deploy.

Si nous vérifions le dossier$JETTY_HOME/webapps, nous trouverons un fichier descripteur de déploiement ou ce que nous avons appelé précédemment un fichier de contexte appelécargo-deploy.xml créé par cargo.

8.3. Déploiement à distance

Par défaut, Jetty n'offre aucune possibilité de déploiement à distance. Afin d'ajouter un tel support à Jetty, Cargo utilise l'application WebJetty remote deployer.

Cela signifie que nous devons télécharger un fichier WAR d'application Web pré-créé par les développeurs Cargo et déployer ce fichier WAR dans le conteneur de la jetée cible.

Chaque fois que nous voulons déployer sur ce serveur distant à l'aide du plug-in cargo Maven, il envoie une demande HTTP à l'application de déploiement sur le serveur distant avec notre WAR pour le déploiement.

Ce déployeur distant peut être trouvéhere. Rendez-vous dans la sectiontools et téléchargez le fichier WAR decargo-jetty-7-and-onwards-deployer.

Considérations de sécurité

Nous devons configurer unsecurity realm dans jetty avant que cela puisse fonctionner, à des fins d'authentification. Créez un fichier appelérealm.properties dans le répertoire$JETTY_HOME/etc du serveur de jetée distant. Le contenu du fichier est:

admin:password,manager

Leadmin est le nom d'utilisateur par lequel le client peut accéder aux applications sécurisées,password est le mot de passe etmanager est le rôle que les clients doivent posséder avant d'obtenir l'accès.

Nous devons également déclarer nos exigences de sécurité dans l'application de déploiement. Nous allons décompresser le fichier WAR que nous avons téléchargé à partir de la page de téléchargements de la jetée, y apporter des modifications et le réintégrer dans un fichier WAR.

Après avoir déballé, rendez-vous surWEB-INF/web.xml et décommentez le code XML avec le commentaireUncomment in order to activate security. Ou placez le code suivant ici:


    
        Jetty Remote Deployer
        /*
    
    
        manager
    



    BASIC
    Test Realm

Déployer le déployeur

Nous pouvons maintenant compresser l'application dans un fichier WAR et la copier dans n'importe quel emplacement du serveur distant. Nous le déploierons ensuite à Jetty.

Lors du déploiement, il est préférable d'utiliser undeployment descriptor file afin de pouvoir créer unsecurityHandler et lui passer unloginService. Toutes les applications sécurisées doivent disposer d'un service de connexion, sinon jetty ne pourra pas les déployer.

Maintenant, créons un fichier de contexte dans$JETTY_HOME/webapps de l'instance de jetée distante, rappelez-vous les règles de dénomination du fichier de contexte. Faites-en le même nom que le WAR:




    /deployer
    absolute/path/to/cargo-jetty-deployer.war
    
        
            
                Test Realm
                /etc/realm.properties
            
        
    

Démarrez le serveur de jetée distant et si tout se passe bien, nous devrions pouvoir chargerhttp://localhost:8080/cargo-jetty-deployer. Nous devrions alors pouvoir voir quelque chose comme:

HTTP ERROR 400

Problem accessing /cargo-jetty-deployer/. Reason:

    Command / is unknown

Déploiement de WAR sur une jetée distante

Pour effectuer un déploiement à distance, il suffit de modifier notre section de configuration depom.xml. Le déploiement à distance signifie que nous n'avons pas d'installation locale de Jetty mais que nous avons un accès authentifié à l'application de déploiement s'exécutant sur le serveur distant.

Modifions donc lespom.xml pour que la section de configuration ressemble à ceci:


    
        jetty9x
        remote
    
    
        runtime
        
      127.0.0.1
            8080
            admin
            password
        
    

Cette fois, nous changeons le type de conteneur deinstalled àremote et le type de configuration deexisting àruntime. Enfin, nous ajoutons des propriétés de nom d’hôte, de port et d’authentification à la configuration.

nettoyer le projet:

mvn clean

Installez-le:

mvn install

enfin, déployez-le:

mvn cargo:deploy

C'est ça.

9. Déploiement depuis Eclipse

Eclipse nous permet d’incorporer des serveurs afin d’ajouter le déploiement de projets Web dans le flux de travail normal sans quitter l’EDI.

9.1. Intégration de Jetty dans Eclipse

Nous pouvons intégrer une installation Jetty dans eclipse en sélectionnant l'élémentwindow dans la barre des tâches, puispreferences dans le menu déroulant.

Nous trouverons une grille d'arborescence d'éléments de préférence dans le panneau de gauche de la fenêtre qui apparaît. Nous pouvons ensuite naviguer vers eclipse → serveurs ou simplement taper des serveurs dans la barre de recherche.

Nous sélectionnons ensuite le répertoire Jetty s'il n'est pas déjà ouvert pour nous et choisissons la version de Jetty que nous avons téléchargée.

Sur le côté droit du panneau apparaîtra une page de configuration où nous sélectionnons l’option Activer pour activer cette version de Jetty et accéder au dossier d’installation.

À partir des captures d’écran, jetty 7.x sera remplacé par la version de jetty que nous avons configurée.

image

 

Nous appliquons les modifications et la prochaine fois que nous ouvrirons la vue des serveurs à partir des fenêtres d’éclipse → afficher le sous-menu de la vue, le serveur nouvellement configuré sera présent et nous pourrons y démarrer, arrêter et déployer des applications.

9.2. Déployer une application Web dans Embedded Jetty

Pour déployer une application Web sur l'instance Jetty intégrée, celle-ci doit exister dans notre espace de travail.

Ouvrez la vue deserversdepuis la fenêtre → afficher la vue et recherchez les serveurs. Lorsqu'il est ouvert, nous pouvons simplement faire un clic droit sur le serveur que nous avons configuré et sélectionneradd deployment dans le menu contextuel qui apparaît.

image

Dans la boîte de dialogueNew Deployment qui apparaît, ouvrez le menu déroulantproject et sélectionnez le projet Web.

Il y a une sectionDeploy Type sous la liste déroulanteProject lorsque nous sélectionnonsExploded Archive(development mode),our changes in the application will be synced live without having to redeploy, c'est la meilleure option pendant le développement car elle est très efficace.

image

 

La sélection dePackaged Archive(production mode) nous obligera à redéployer chaque fois que nous apportons des modifications et les visualisons dans le navigateur. Ceci n’est préférable que pour la production, mais Eclipse le rend tout aussi facile.

9.3. Déployer une application Web dans un emplacement externe

Nous choisissons généralement de déployer un fichier WAR via Eclipse pour faciliter le débogage. Il peut arriver un moment où nous souhaitons le déployer vers un emplacement autre que ceux utilisés par les serveurs embarqués d’Eclipse.

L'instance la plus courante est celle où notre serveur de production est en ligne et nous souhaitons mettre à jour l'application Web.

Nous pouvons contourner cette procédure en déployant en mode production et en notant lesDeploy Location dans la boîte de dialogueNew Deployment et en choisissant le WAR à partir de là.

Lors du déploiement, au lieu de sélectionner un serveur intégré, nous pouvons sélectionner l'option<Externally Launched> dans la vueservers à côté de la liste des serveurs embarqués. Nous naviguons vers le répertoire$JETTY_HOME /webapps d'une installation externe Jetty.

10. Déploiement depuis IntelliJ IDEA

Pour déployer une application Web sur Jetty, elle doit exister et avoir déjà été téléchargée et installée.

10.1. Configuration locale

Ouvrez le menuRun et cliquez sur les optionsEdit Configurations.

Dans le panneau de gauche, recherchezJetty Server, s'il ne s'y trouve pas, cliquez sur le signe + dans le menu, recherchezJetty et sélectionnezLocal. Dans le champname, mettezJetty 9.

Cliquez sur le boutonConfigure… et dans le champJetty Home, accédez à l'emplacement d'origine de votre installation et sélectionnez-le.

Si vous le souhaitez, définissez la pageStartup surhttp://localhost:8080/ etHTTP port: 8080, modifiez le port le cas échéant.

Allez dans l'ongletDeployment et cliquez sur le symbole +, sélectionnez l'artefact que vous souhaitez ajouter au serveur et cliquez sur OK

10.2. Configuration à distance

Suivez les mêmes instructions que pour les configurations locales de Jetty, mais dans l'onglet Serveur, vous devez entrer l'emplacement distant de l'installation.

11. Conclusion

Dans cet article, nous avons couvert de manière approfondie les différentes manières de déployer un fichier WAR sur le serveur Web Jetty.