Bonjour,
Je souhaite intégrer une librairie développée en Java dans Javascript en tant qu'API pour utiliser et afficher ses objets dans du HTML5.
Est-ce possible et comment?
Merci d'avance de votre aide.
Bonjour,
Je souhaite intégrer une librairie développée en Java dans Javascript en tant qu'API pour utiliser et afficher ses objets dans du HTML5.
Est-ce possible et comment?
Merci d'avance de votre aide.
La réponse est non
Mais cela ne signifie pas que tu ne peux rien faire.
Si javascript ne peux pas charger de librairie externes dans d'autre langage dans le navigateur il peux par contre accéder à tous les éléments présent dans une page html
et HTML lui prévoit le chargement d'élément externes dans le cas de Java ça s'appelle une Applet
http://jmdoudoux.developpez.com/cour...ts.php#applets
Bien que pour des raisons de sécurité cette possibilité soit de moins en moins usitée elle existe toujours moyennant la confirmation de la part de l'utilisateur. (autoriser les Applets java dans la page)
Une fois l'Applet présent dans la page javascript peut y accéder puisqu'il s'agit d'un élément de la page.
https://docs.oracle.com/javase/tutor...avaScript.html
C'est tout de même une solution de plus en plus décriée et perso je la déconseille.
Soit la lib Java est relativement simple et je vote pour un portage (réécriture) en javascript pur
auquel cas elle s'exécutera sur le poste de l'utilisateur comme pour l'Applet
Soit la lib Java fournis des algos lourd complexe dans ce cas je vote pour une exposition depuis le serveur via une API de type Rest, JSON, ou JSON-RPC. dans ce cas le javascript appelle une fonction local qui envois une demande d'exécution au serveur et attends la réponse. le Java s'exécute alors sur le serveur mieux équipé pour ça.
Il existe de plus en plus de restriction sur les postes client pour l'exécution de Java via le réseau.
Même JNLP est considéré comme une exécution non sure et est désactivé par défaut sur la plus part des machines.
enfin on ne sais jamais quelle version possède le client il faut donc un Java particulièrement robuste et générique. alors que avec l'exécution côté serveur on maitrise la version précisément et on peut utiliser un code java plus optimisé.
pour exposer ton API tu peux t'inspirer de https://jolokia.org/features/overview.html
qui expose tous les MBean de ton Java via HTTP
A+JYT
Merci Sekaijin de cette réponse claire et détaillée.
Par ailleurs sur le Net, j'ai trouvé des réponses contraires affirmant que cela est possible.
Mais il est vrai que je n'ai pas réussi à faire l'import comme ils disent, sous NetBeans (page HTML chargée dans un objet WebView, important une classe définie dans le même projet).
Maintenant si c'est impossible, comment des API ont été ajoutées à Javascript (par Google et autres ) ?
Concernant mon projet, la libraire java est trop complexe et importante pour la réécrire en JS. De même que l'exécution devrait se faire côté client. Donc, si je trouve pas le moyen pour importer des classes ou la Jar, il reste à essayer la solution de transformer la librairie en Applet. Mais dans ce cas, je crains une forte dégradation des performances, notamment qu'il risque d'y avoir beaucoup de pages actives (et donc autant d'applets, à moins de pouvoir faire appel à un seul, mais comment?).
Encore merci..
Je ne comprends pas la question des API, une API est une interface et on peut en écrire dans tous les langages.
One Web to rule them all
Ce qui est décrit dans ta page est l'ajout d'une ressource java dans une jsp soit donc dans un programme JAVA
une jsp est compilé par un outil appelé jspc (lorsqu'on le publie directement sur son serveur le serveur compile les jsp à l'installation de la webapp). cela donne une classe java qui est une servlet.
il ne s'agit donc pas d'ajouter une lib java à un moteur d'interprétation javascript
la jsp est compilé puis exécuté sur le serveur alors que le javascript est exécuté par le navigateur sur le poste du client.
le moteur d'interprétation javascript à été conçu pour être embarque dans une application. dans le cas qui nous intéresse l'application en question est le navigateur. cette conception du moteur prévois une interface qui permet d'inclure du code spécifique. c'est cette capacité qui est utilisée pour ajouter à javascript les objets document, navigator ou window. pour cela il faut développer une librairie en C ou C++ et re-compiler le navigateur tout entier. Heureusement les concepteur des navigateurs on ajouté un autre moyen qui ajoute des élément au moteur javascript dynamiquement. cette solution se fait au travers de l'API du navigateur pour écrire des plugins.Maintenant si c'est impossible, comment des API ont été ajoutées à Javascript (par Google et autres ) ?
Si la spécification de l'API C++ de Javascript pour ajouter des fonctionnalités est normalisé mais nécessite une compilation du moteur
l'API pour écrire des plugins est totalement dépendante du navigateur de la plateforme (Windows/Linux/Mac) et de la version.
Les specs du moteur javascript font qu'on peu l'embarquer dans n'importe quelle appli. il existe donc des implémentation en java. dans ce cas il n'est pas très difficile d'ajouter une lib java à la jvm exécutant le moteur javascript et de la rendre visible.
Mais je doute que tu veuille développer un navigateur en java juste pour pouvoir y ajouter ta lib.
je ne comprends pas bien ton client a beaucoup de page ouverte en même temps au point que l'instanciation d'une JVM contenant une simple applet dans chaque page dégraderait les performance du client ?Mais dans ce cas, je crains une forte dégradation des performances, notamment qu'il risque d'y avoir beaucoup de pages actives...
J'avoue que là je ne comprends pas du tout. en général dans une application web lorsque l'utilisateur à plus de trois fenêtres dépendantes ouvertes en simultané il convient de revoir la conception. depuis longtemps les études en ergonomie ont montré que ce n'était pas une bonne solution. une des tendance est même les Single page application.
En général dans une application Web on a une fenêtre ouverte sur l'application et au plus une fenêtre dépendante. (je ne parle pas de l'ouverture d'une fenêtre ou onglet non dépendant) ton client a donc une ou deux instance de l'applet.
du coup je ne comprends pas comment cela peut dégrader les perfs.
où alors même avec une seule instance ton Java écrase les perf mais ce n'est pas du au fait que tu en a fais une applet.
J'avoue que n'ayant que peut d'info sur ta lib je ne peux rien te conseiller.
Il te faut savoir que si tu en fais un applet 90% des navigateur refuseront par défaut de l'éxécuter que dans les 10% restant tu auras une 15 de version en moyenne de java à gérerDe même que l'exécution devrait se faire côté client.
que tu n'auras pas accès au ressource locales (pas de persistance)
et qu'à chaque changement de page tu perdras dans java toutes les variables. (à chaque page une nouvelle JVM)
A+JYT
Merci à tous (et surtout à Sekaijin) de ses réponses utiles
Ok pour JSP (et le lien que j'ai donné).. Je n'avais pas vu la différence.. mais maintenant c'est claire grâce à vous
Concernant mon projet : il s'agit de faire exécuter les pages HTML dans des objets WebView de JavaFX, et non par les navigateurs Web (IE, Opera, Firefox, etc.). Par ailleurs, je ne contrôle pas le nombre de pages qui seront ouvertes simultanément, car c'est l’utilisateur qui le décidera.
Si je pouvais le faire facilement en quelques jours !!.. Car ce serai l'idéal dans le contexte de mon projet qui est une appli autonome (non un NAVIGATEUR au sens classique).. Mon but est de seulement utiliser la puissance conjuguée de HTML5 et de Javascript...Les specs du moteur javascript font qu'on peu l'embarquer dans n'importe quelle appli. il existe donc des implémentation en java. dans ce cas il n'est pas très difficile d'ajouter une lib java à la jvm exécutant le moteur javascript et de la rendre visible.
Mais je doute que tu veuille développer un navigateur en java juste pour pouvoir y ajouter ta lib.
Mais alors comment faire cela (une version de Javascript intégrant ma lib que j'embarque dans mon appli)?
Alors l'a ça ce simplifie
si tu as une version récente de java tu peux utiliser nashorn JSR 223
si c'est une version plus ancienne il te faut de retourner vers une lib Rhino
dans les deux cas tu embarque un moteur javascript dans ton appli java et tout les objets et classes java chargées dans ton appli peuvent être exposé dans javascript
A+JYT
Je vais regarder cela..Admettons que j'y arrive, la question est après : comment intégrer le nouveau moteur Javascript (intégrant ma lib) dans le WebEngine de javafx (utilisé par WebView), pour qu’il puisse interpréter le code des pages HTML?
Nashorn et rhino ont été conçu pour être intégré dans une application java.
Il n'est pas besoin d'intégrer ta lib au moteur TOUT le java de ton appli est accessible depuis le moteur javascript.
Quant au WebEngine de JavaFX il te faudra poser la question dans la section java je ne pense pas que tu trouve ici quelqu'un.
A+JYT
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager