Vodič za Java Web Start

1. Pregled

Ovaj članak objašnjava što je Java Web Start (JWS), kako ga konfigurirati na strani poslužitelja i kako stvoriti jednostavnu aplikaciju.

Bilješka: JWS je uklonjen iz Oracle JDK počevši od Jave 11. Kao alternativu, razmislite o upotrebi OpenWebStart-a.

2. Uvod

JWS je runtime okruženje koje dolazi s Java SE za klijentov web preglednik i postoji od Java verzije 5.

Preuzimanjem JNLP datoteka (poznatog i kao Java Network Launch Protocol) s web poslužitelja, ovo okruženje omogućuje nam daljinsko pokretanje JAR paketa na koje se poziva.

Jednostavno rečeno, mehanizam učitava i izvodi Java klase na računalu klijenta uz redovitu instalaciju JRE. Omogućuje i neke dodatne upute iz Jakarte EE. Međutim, JRE klijenta strogo primjenjuje sigurnosna ograničenja, obično upozoravajući korisnika na nepouzdane domene, nedostatak HTTPS-a i čak nepotpisane JAR-ove.

S generičke web stranice može se preuzeti JNLP datoteka za izvršavanje JWS aplikacije. Jednom preuzeto, može se pokrenuti izravno s prečaca na radnoj površini ili Java Cache Viewer. Nakon toga preuzima i izvršava JAR datoteke.

Ovaj mehanizam može biti vrlo koristan za isporuku grafičkog sučelja koje nije bazirano na internetu (bez HTML-a), kao što je aplikacija za siguran prijenos datoteka, znanstveni kalkulator, sigurna tipkovnica, lokalni preglednik slika i tako dalje.

3. Jednostavna JNLP aplikacija

Dobar pristup je pisanje aplikacije i pakiranje u WAR datoteku za redovite web poslužitelje. Sve što trebamo je napisati željeni program (obično s Swingom) i spakirati ga u JAR datoteku. Ovaj se JAR zatim mora spakirati u WAR datoteku zajedno s JNLP-om koji će referencirati, preuzeti i izvršiti aplikaciju Glavni razred normalno.

Nema razlike sa uobičajenom web aplikacijom upakiranom u WAR datoteku, osim činjenice da nam je potrebna JNLP datoteka da bismo omogućili JWS, kao što će biti prikazano u nastavku.

3.1. Java aplikacija

Počnimo s pisanjem jednostavne Java aplikacije:

javna klasa Pozdrav {public static void main (String [] args) {JFrame f = new JFrame ("main"); f.setSize (200, 100); f.setLocationRelativeTo (null); f.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); Oznaka JLabel = novi JLabel ("Pozdrav svijetu"); f.add (oznaka); f.setVisible (true); }}

Vidimo da je ovo prilično izravna klasa Swinga. Doista, ništa nije dodano kako bi bilo usklađeno s JWS-om.

3.2. Web aplikacija

Sve što trebamo je da JAR spakiramo ovaj primjer Swing klase u WAR datoteku zajedno sa sljedećom JNLP datotekom:

   Pozdrav Primjeru 

Nazovimo to zdravo.jndl i stavite je pod bilo koju web mapu našeg RATA. I JAR i WAR možete preuzeti, tako da ne trebamo brinuti stavljajući JAR u lib mapu.

URL adresa našeg konačnog JAR-a teško je kodirana u JNLP datoteci, što može dovesti do nekih problema s distribucijom. Ako promijenimo poslužitelje za implementaciju, aplikacija više neće raditi.

Popravimo to pravilnim servletom kasnije u ovom članku. Za sada, stavimo JAR datoteku za preuzimanje u korijensku mapu kao index.html, i povežite ga sa sidrenim elementom:

Pokrenite

Postavimo i glavnu klasu u našem JAR manifestu. To se može postići konfiguriranjem JAR dodatka u pom.xml datoteka. Slično tome, JAR datoteku premještamo izvan datoteke WEB-INF / lib, budući da je namijenjen samo za preuzimanje, tj. ne za učitavač klasa:

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

4. Posebne konfiguracije

4.1. Sigurnosni problemi

Da biste pokrenuli aplikaciju, moramo potpisati JAR. Stvaranje valjanog certifikata i upotreba dodatka JAR Sign Maven izlazi izvan dosega ovog članka, ali ovu sigurnosnu politiku možemo zaobići u razvojne svrhe ili ako imamo administrativni pristup računalu našeg korisnika.

Da bismo to učinili, moramo dodati lokalni URL (na primjer: // localhost: 8080) na popis sigurnosnih izuzetaka instalacije JRE na računalu na kojem će se aplikacija izvršiti. Može se pronaći otvaranjem Java nadzorne ploče (u sustavu Windows možemo je pronaći putem upravljačke ploče) na kartici Sigurnost.

5. The JnlpDownloadServlet

5.1. Algoritmi kompresije

Postoji poseban servlet koji se može uključiti u naš RAT. Optimizira preuzimanje tražeći najkomprimiraniju kompajliranu verziju naše JAR datoteke ako je dostupna, a također popravlja i teško kodirane kodna baza vrijednost na JLNP datoteci.

Budući da će naš JAR biti dostupan za preuzimanje, preporučljivo ga je spakirati s algoritmom kompresije, kao što je Pack200, i isporučiti redoviti JAR i bilo koju komprimiranu verziju JAR.PACK.GZ ili JAR.GZ u istoj mapi tako da ovaj servlet može odaberite najbolju opciju za svaki slučaj.

Nažalost, još nema stabilne verzije dodatka Maven za ovaj algoritam kompresije, ali možda ćemo raditi s izvršnom datotekom Pack200 koja dolazi s JRE (obično instaliranom na stazi {JAVA_SDK_HOME} / jre / bin /).

Bez promjene našeg JNLP-a i postavljanjem jar.gz i jar.pack.gz verzije JAR-a u istoj mapi, servlet bira onaj bolji kada dobije poziv s udaljenog JNLP-a. To poboljšava korisničko iskustvo i optimizira mrežni promet.

5.2. Dinamička zamjena Codebasea

Servlet također može izvoditi dinamičke zamjene za kodirane URL-ove u označiti. Promjenom JNLP u zamjenski znak , isporučuje istu konačnu renderiranu oznaku.

Servlet također radi sa zamjenskim znakovima $$ kodna baza, $$ ime hosta, $$ ime i $$ web lokacija, koji će riješiti “// localhost: 8080 / jnlp-primjer /“, “lokalnihost: 8080“, “zdravo.jnlp“, I“// localhost: 8080”Odnosno.

5.3. Dodavanje Servleta u Classpath

Da bismo dodali servlet, konfigurirajmo normalno mapiranje servleta za JAR i JNLP uzorke u naš web.xml:

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

Sam servlet dolazi u kompletu JAR-ova (jardiff.jar i jnlp-servlet.jar) koji se danas nalaze u odjeljku Demos & Samples na stranici za preuzimanje Java SDK-a.

U primjeru GitHub, ove su datoteke uključene u java-core-uzorci-lib mapu, a dodatak Maven WAR uključuje ih kao web resurse:

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

6. Završne misli

Java Web Start alat je koji se može koristiti u (intranet) okruženjima u kojima nema poslužitelja aplikacija. Također, za aplikacije koje trebaju manipulirati lokalnim korisničkim datotekama.

Aplikacija se krajnjem korisniku šalje jednostavnim protokolom za preuzimanje, bez ikakvih dodatnih ovisnosti ili konfiguracije, osim nekih sigurnosnih problema (HTTPS, potpisani JAR, itd.).

U primjeru Git, puni izvorni kod opisan u ovom članku dostupan je za preuzimanje. Možemo ga preuzeti izravno s GitHub-a na OS s Tomcatom i Apache Mavenom. Nakon preuzimanja, moramo pokrenuti mvn instalirati naredbu iz izvornog direktorija i kopirajte generirano jws.rat datoteka iz cilj prema webapps mapa instalacije Tomcat.

Nakon toga možemo pokrenuti Tomcat kao i obično.

Iz zadane instalacije Apache Tomcat, primjer će biti dostupan na URL-u //localhost:8080/jws/index.html.