Accéder au contenu principal

Transformez vos applications Java en applications Web avec WebSwing

J’ai longtemps cherché un moyen simple pour développer des applications Web en Java se rapprochant de Swing. J’ai ainsi essayé OpenLazlo (arrêté, mais toujours téléchargeable), Echo2 & 3 (plus très dynamique) et Vaadin dont j’ai déjà parlé dans un billet précédent. Celui qui se rapproche le plus du développement d’une application Swing reste incontestablement Vaadin. Cependant, les classes utilisées sont tout de même différentes de Swing. Il y a donc un effort de portage de l’application existante qui peut être relativement conséquent.
J’ai récemment trouvé l’application WebSwing, une application Open Source qui permet de transformer instantanément vos applications Java en application Web. Quand je dis instantanément, cela veut dire, sans aucune modification du code existant. Il faut juste indiquer l’application à exécuter, ainsi que les librairies nécessaires.

Installation de WebSwing

L’installation de WebSwing est relativement simple. Il suffit de télécharger le binaire à l’adresse : http://webswing.org/#!/downloads
Une fois le fichier zip décompressé, sous Windows, exécutez le fichier webswing.bat (webswing.sh) sous Unix.

C:\webswing-2.4>java -jar webswing-server.war -j jetty.properties
########################Server Configuration ################################
host=localhost
http=true
httpPort=8080
https=true
httpsPort=8443
truststore=ssl/truststore.jks
truststorePassword=***
keystore=ssl/keystore.jks
keystorePassword=***
configFile=null
usersFile=null
allowedCorsOrigins=*
########################Server Configuration End#############################

2017-03-13 11:04:52.529:INFO:oejs.Server:jetty-8.1.14.v20131031
2017-03-13 11:04:52.560:INFO:oejw.WebInfConfiguration:Extract jar:file:/C:/Users/ftoure/Downloads/2017/03.Mars/webswing-2.4/webswing-server.war!/ to C:\Users\ftoure\Downloads\2017\03.Mars\webswing-2.4\tmp\release\webapp
2017-03-13 11:05:00.936:INFO:oejw.StandardDescriptorProcessor:NO JSP Support for /, did not find org.apache.jasper.servlet.JspServlet
2017-03-13 11:05:02.031:INFO:/:Initializing Shiro environment
mars 13, 2017 11:05:04 AM org.glassfish.jersey.server.ApplicationHandler initialize
INFOS: Initiating Jersey application, version Jersey: 2.6 2014-02-18 21:52:53...

2017-03-13 11:05:07.552:INFO:oejs.AbstractConnector:Started SelectChannelConnector@localhost:8080
2017-03-13 11:05:07.781:INFO:oejus.SslContextFactory:Enabled Protocols [TLSv1, TLSv1.1, TLSv1.2] of [SSLv2Hello, SSLv3, TLSv1, TLSv1.1, TLSv1.2]
2017-03-13 11:05:10.781:INFO:oejs.AbstractConnector:Started SslSelectChannelConnector@localhost:8443

Vous pouvez vous connecter soit sur http://localhost:8080 ou sur https://localhost:8443


La console d’administration permet de configurer ou visualiser les applications. Par défaut, l’application est livrée avec la démo classique de Swing SwingSet, mais j’ai voulu essayer avec une « vielles » applications basée sur Memoranda, un agenda qui sauvegarde les données dans des fichiers textes. Je l’ai adapté pour sauvegarder les données dans une base de données.
Dans « General Settings », on configure le nom de l’application, ainsi que l’icône affichée sur la première page.


Dans Java settings, on configure la classe Main de l’application à exécuter, ainsi que les librairies, ou le répertoire où elles se trouvent.


Une fois l’application configurée, on peut la lancer depuis la fenêtre principale.


Dans ce cas-ci, l’application s’exécute en mode fenêtre. Il faut donc mettre la fenêtre en mode plein écran pour occuper toute la page Web.
Pour avoir un rendu encore meilleur, il est également possible de proposer une version sous forme d’Applet de l’application. L’applet occupe ainsi tout l’espace de la page Web. Quel intérêt ? Pour certaines applications, cela permet d’éviter d’avoir à installer Java sur chaque poste utilisateur. Cela marche tant qu’il n’est pas nécessaire d’avoir accès à des ressources PC locales telles que la sauvegarde en local (généralement interdite pour une applet), l’accès au microphone, etc.

Comment ça marche ?

L’application est livrée en Open Source, ce qui permet de regarder un peu mieux son fonctionnement. Elle est livrée sous forme de War avec un Jetty 8 embarqué, ce qui permet de la déployer sans avoir à installer un serveur Java tel que Tomcat préalablement. Personnellement j’aime assez ce type de déploiement lorsque le nombre d’utilisateurs est limité. Git/Gerrit utilise un principe similaire et permet de déployer assez simplement un serveur Git incluant un outil de revue de code. Le serveur Web démarre ensuite l’application en mode graphique et redirige l’affichage graphique DirectDraw vers une classe propriétaire. C’est cet copie d’écran qui est affichée dans la page Web. L’affichage reste fluide pour la plupart des applications. Les déplacements d’objets sont cependant moins bien pris en compte.

Conclusion

Ce type d’application montre un moyen simple et rapide de transformer une application classique Java Swing en application Web. Elle vient en complément (ou concurrence) des Applets Java et de Java Web Start (Java Network Launching Protocol). Chacune de ces approches à ses avantages et ses inconvénients. Les Applets tournent généralement directement dans le Navigateur Web et n’ont pas besoin d’une installation préalable. Elles doivent préférablement être légères pour éviter des temps de chargement trop longs. Il faut par ailleurs que Java soit installé sur le poste client et que la sécurité soit configurée pour permettre à l’application de s’exécuter.
Java Web Start nécessite la mise en place d’un serveur Web dédié à partir duquel le fichier de configuration JNLP de l’application sera chargé. Dans ce fichier est indiqué l’adresse à partir de laquelle les librairies sont téléchargées, ainsi que la classe main à exécuter. Une fois téléchargé, les fichiers sont mis en cache et l’application est exécutée sur le poste client. Le browser Web dans ce cas ci ne sert que d’intermédiaire pour lancer l’application. Il est nécessaire d’avoir une version de Java sur le poste client. Les mises à jour ne sont faites que sur le serveur et le client vérifie la nouvelle version à chaque lancement. Il faut cependant parfois vider complètement le cache pour prendre en compte les nouvelles libraries.
La solution WebSwing peut avoir du sens pour un nombre limité d’accès simultanés (quelque dizaines dans le cadre d’une application métier par exemple). Cela permet de simplifier la mise à jour des applications et ne nécessite pas l’installation de Java sur le poste client. Pour des solutions nécessitant plus de connexions, l’utilisation d’un framework Web en Javascript (bootstrap, angularjs), PHP, Python (django) ou Java (Vaadin ou Primefaces) est généralement préférable.

Commentaires

Posts les plus consultés de ce blog

Supprimer les partitions Raspberry sur une carte SD sous Windows 7 avec Diskpart

Si vous souhaitez récupérer une ancienne carte SD utilisée pour démarrer un Raspberry pour un autre usage (appareil photo, etc), il vous faudra supprimer les deux partitions créées au moment de l'écriture de l'image sur la carte SD. Vous pouvez voir les partition en sélectionnant Menu Windows/Ordinateur/bouton droit "Gérer". Voici un exemple du résultat final. Vous pouvez supprimer la partition Unix de 7 Gb (ou 4Gb en fonction de la taille de votre carte) en sélectionnant la partition puis en faisant "bouton droit Supprimer". Laissez juste une partition pour pouvoir faire les autres manipulations avec DISKPART. Démarrez l'outil DISKPART en ligne de commande. Une nouvelle fenêtre s'ouvrira. Microsoft DiskPart version 6.1.7601 Copyright (C) 1999-2008 Microsoft Corporation. Sur l'ordinateur : FRVILN0H305806 DISKPART> list disk   N° disque  Statut         Taille   Libre    Dyn  GPT   ---------  -------------  -------  -------  ---  ---   D

Comment lire son écran de téléphone Android sur PC (2)

Voici une nouvelle manière d'accéder à votre téléphone depuis votre PC. Cette méthode utilise le câble USB et Google Chrome. Elle fonctionne donc sur Windows, Mac et Linux. Les pré-requis sont les mêmes que ceux du billet précédent : Téléphone configuré en mode Développement Drivers USB installés sur le PC Google Chrome installé L'application Vysor s'installe comme une extension de Google Chrome. Cherchez dans le Webstore et lancez l'installation. Une fois installée, l'application apparaît dans les extensions. Vous pouvez la lancer de différentes manières. La manière la plus simple est d'ouvrir la fenêtre des applications : chrome://apps/ Une autre manière est de créer un raccourci en cliquant sur « Détails ». Ensuite créez un raccourci sur le bureau, le menu démarrer et/ou la barre de tâche. Vous pouvez également cliquer sur afficher dans la boutique et lancer l'application depuis la boutique. Une fois

Serveur d'impression CUPS sur Raspberry Pi

Je possède une très vieille imprimante laser HP Laserjet 6L noir et blanc de 12 ans d'age qui a survécu à plusieurs imprimantes jet d'encre couleurs tombées en désuétude pour obsolescence programmée. J'envisage tout de même sérieusement de les démanteler pour les recycler en CNC, graveur ou autre.   Je continue donc a utiliser cette bonne petite imprimante parallèle qui me rend bien des services (en 12 ans, j'ai changé le toner 3 fois pour un coût de 20 € la cartouche). J'ai donc dû m'équiper d'une adaptateur USB/Parallèle pour pouvoir la connecter sur un PC récent. Le problème principal est que le driver de cette imprimate n'est reconnu que par un seul de mes PC sous Windows 7. Les autres PC sous Windows 8 ou Windows 10 reconnaissent bien l'imprimante, mais sortent des feuilles avec le code Postscript. L'impression depuis une tablette ou un téléphone Androïd est également tout simplement impossible. Pour remédier à ce problème, j'ai don