En guide til Java Web Start

1. Oversigt

Denne artikel forklarer, hvad Java Web Start (JWS) er, hvordan man konfigurerer det på serversiden, og hvordan man opretter en enkel applikation.

Bemærk: JWS er ​​fjernet fra Oracle JDK startende med Java 11. Som et alternativ, overvej at bruge OpenWebStart.

2. Introduktion

JWS er ​​et runtime-miljø, der følger med Java SE til klientens webbrowser og har eksisteret siden Java version 5.

Med download af JNLP-filer (også kendt som Java Network Launch Protocol) fra webserveren giver dette miljø os mulighed for at køre JAR-pakker, der refereres til af det eksternt.

Kort sagt, mekanismen indlæser og kører Java-klasser på en klients computer med en regelmæssig JRE-installation. Det giver også nogle ekstra instruktioner fra Jakarta EE. Sikkerhedsrestriktioner anvendes dog strengt af klientens JRE, som normalt advarer brugeren om upålidelige domæner, mangel på HTTPS og endda usignerede JAR'er.

Fra et generisk websted kan man downloade en JNLP-fil for at udføre en JWS-applikation. Når den er downloadet, kan den køres direkte fra en genvej på skrivebordet eller Java Cache Viewer. Derefter downloader og udfører den JAR-filer.

Denne mekanisme kan være meget nyttigt at levere en grafisk grænseflade, der ikke er webbaseret (HTML-fri), såsom en sikker filoverførselsapplikation, en videnskabelig lommeregner, et sikkert tastatur, en lokal billedbrowser og så videre.

3. En simpel JNLP-applikation

En god tilgang er at skrive en applikation og pakke den i en WAR-fil til almindelige webservere. Alt, hvad vi har brug for, er at skrive vores ønskede applikation (normalt med Swing) og pakke den i en JAR-fil. Denne JAR skal derefter igen pakkes i en WAR-fil sammen med en JNLP, der vil henvise til, downloade og udføre dens applikations Vigtigste klasse normalt.

Der er ingen forskel med en almindelig webapplikation pakket i en WAR-fil, bortset fra at vi har brug for en JNLP-fil for at aktivere JWS, som det vil blive demonstreret nedenfor.

3.1. Java-applikation

Lad os starte med at skrive en simpel Java-applikation:

offentlig klasse Hej {public static void main (String [] args) {JFrame f = new JFrame ("main"); f.setSize (200, 100); f.setLocationRelativeTo (null); f.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); JLabel label = new JLabel ("Hello World"); f.add (etiket); f.setVisible (sand); }}

Vi kan se, at dette er en ret ligetil Swing-klasse. Faktisk blev der ikke tilføjet noget for at gøre det JWS-kompatibelt.

3.2. Webapplikation

Alt, hvad vi har brug for, er at JAR pakke dette eksempel Swing-klasse til en WAR-fil sammen med følgende JNLP-fil:

   Hej Eksempel 

Lad os hedde det hej.jndl og placer den under enhver webmappe i vores WAR. Både JAR og WAR kan downloades, så vi behøver ikke bekymre os om at sætte JAR i en lib folder.

URL-adressen til vores endelige JAR er hårdt kodet i JNLP-filen, hvilket kan forårsage nogle distributionsproblemer. Hvis vi skifter implementeringsservere, fungerer applikationen ikke længere.

Lad os ordne det med en ordentlig servlet senere i denne artikel. Lad os lige nu placere JAR-filen til download i rodmappen som index.html, og knyt det til et ankerelement:

Start

Lad os også indstille hovedklassen i vores JAR-manifest. Dette kan opnås ved at konfigurere JAR-pluginet i pom.xml fil. På samme måde flytter vi JAR-filen uden for WEB-INF / lib, da det kun er beregnet til download, dvs. ikke til classloader:

 org.apache.maven.plugins maven-jar-plugin ... kompilér jar com.example.Hello $ {project.basedir} / target / jws 

4. Særlige konfigurationer

4.1. Sikkerhedsproblemer

For at køre et program, vi er nødt til at underskrive JAR. Oprettelse af et gyldigt certifikat og brug af JAR Sign Maven Plugin går ud over denne artikels anvendelsesområde, men vi kan omgå denne sikkerhedspolitik til udviklingsformål, eller hvis vi har administrativ adgang til vores brugers computer.

For at gøre det skal vi tilføje den lokale URL (for eksempel: // localhost: 8080) til listen over sikkerhedsundtagelser for JRE-installationen på den computer, hvor applikationen udføres. Det kan findes ved at åbne Java Kontrolpanel (i Windows kan vi finde det via Kontrolpanel) på fanen Sikkerhed.

5. Den JnlpDownloadServlet

5.1. Kompressionsalgoritmer

Der er en speciel servlet, der kan inkluderes i vores KRIG. Det optimerer download ved at kigge efter den mest komprimerede kompilerede version af vores JAR-fil, hvis den er tilgængelig, og også rette den hårdkodede kodebase værdi på JLNP-filen.

Da vores JAR vil være tilgængelig til download, anbefales det at pakke den med en komprimeringsalgoritme, såsom Pack200, og levere den almindelige JAR og enhver JAR.PACK.GZ eller JAR.GZ komprimeret version i samme mappe, så denne servlet kan vælg den bedste mulighed for hvert tilfælde.

Desværre er der endnu ingen stabil version af et Maven-plugin til denne komprimeringsalgoritme, men vi kan arbejde med den Pack200-eksekverbare fil, der følger med JRE (normalt installeret på stien {JAVA_SDK_HOME} / jre / bin /).

Uden at ændre vores JNLP og ved at placere jar.gz og jar.pack.gz versioner af JAR i samme mappe, vælger servlet det bedre, når det får et opkald fra en ekstern JNLP. Dette forbedrer brugeroplevelsen og optimerer netværkstrafik.

5.2. Codebase Dynamic Substitution

Servleten kan også udføre dynamiske erstatninger for hardkodede webadresser i tag. Ved at ændre JNLP til jokertegnet , det leverer det samme endelige gengivne mærke.

Servetten fungerer også med jokertegnene $$ kodebase, $$ værtsnavn, $$ navn og $$ websted, som løser “// localhost: 8080 / jnlp-eksempel /“, “lokal vært: 8080“, “hej.jnlp“Og“// localhost: 8080" henholdsvis.

5.3. Tilføjelse af Servlet til Classpath

For at tilføje servlet, lad os konfigurere en normal servlet-kortlægning for JAR- og JNLP-mønstre til vores web.xml:

 JnlpDownloadServlet jnlp.sample.servlet.JnlpDownloadServlet JnlpDownloadServlet * .jar JnlpDownloadServlet * .jnlp 

Selve servetten kommer i et sæt JAR'er (jardiff.jar og jnlp-servlet.jar), der i dag findes i afsnittet Demoer og eksempler på Java SDK-download-siden.

I GitHub-eksemplet er disse filer inkluderet i java-core-samples-lib mappe og er inkluderet som webressourcer af Maven WAR-pluginet:

 org.apache.maven.plugins maven-war-plugin ... $ {project.basedir} / java-core-samples-lib / ** / *. jar WEB-INF / lib 

6. Afsluttende tanker

Java Web Start er et værktøj, der kan bruges i (intranet) miljøer, hvor der ikke er nogen applikationsserver. Også til applikationer, der har brug for at manipulere lokale brugerfiler.

En applikation sendes til slutbrugeren af ​​en simpel downloadprotokol uden yderligere afhængigheder eller konfiguration, bortset fra nogle sikkerhedsmæssige problemer (HTTPS, signeret JAR osv.).

I Git-eksemplet er den fulde kildekode, der er beskrevet i denne artikel, tilgængelig til download. Vi kan downloade det direkte fra GitHub til et operativsystem med Tomcat og Apache Maven. Efter download skal vi køre mvn installere kommandoen fra kildemappen og kopier den genererede jws.war fil fra mål til webapps mappen til Tomcat-installationen.

Derefter kan vi starte Tomcat som normalt.

Fra en standard Apache Tomcat-installation vil eksemplet være tilgængeligt på URL'en //localhost:8080/jws/index.html.