Sprievodca Java Web Start

1. Prehľad

Tento článok vysvetľuje, čo je Java Web Start (JWS), ako ho nakonfigurovať na strane servera a ako vytvoriť jednoduchú aplikáciu.

Poznámka: JWS bol odstránený z Oracle JDK počnúc Java 11. Ako alternatívu zvážte použitie OpenWebStart.

2. Úvod

JWS je runtime prostredie, ktoré sa dodáva s Java SE pre webový prehliadač klienta a je k dispozícii od verzie Java 5.

Vďaka sťahovaniu súborov JNLP (tiež známych ako Java Network Launch Protocol) z webového servera nám toto prostredie umožňuje vzdialene spúšťať ním odkazované balíky JAR.

Jednoducho povedané, mechanizmus načíta a spúšťa triedy Java na počítači klienta s pravidelnou inštaláciou JRE. Umožňuje tiež niektoré ďalšie pokyny z Jakarty EE. Bezpečnostné obmedzenia však prísne uplatňuje prostredie JRE klienta, ktoré obvykle upozorňuje používateľa na nedôveryhodné domény, nedostatok protokolu HTTPS a dokonca aj nepodpísané súbory JAR.

Z generického webu je možné stiahnuť súbor JNLP na spustenie aplikácie JWS. Po stiahnutí je možné ho spustiť priamo z odkazu na ploche alebo z prehliadača Java Cache Viewer. Potom stiahne a spustí súbory JAR.

Tento mechanizmus môže byť veľmi užitočný pri poskytovaní grafického rozhrania, ktoré nie je založené na webe (bez HTML), ako je napríklad aplikácia na bezpečný prenos súborov, vedecká kalkulačka, zabezpečená klávesnica, miestny prehliadač obrázkov a pod.

3. Jednoduchá aplikácia JNLP

Dobrým prístupom je napísať aplikáciu a zabaliť ju do súboru WAR pre bežné webové servery. Všetko, čo potrebujeme, je napísať požadovanú aplikáciu (zvyčajne pomocou Swingu) a zabaliť ju do súboru JAR. Tento JAR musí byť následne zabalený do súboru WAR spolu s JNLP, ktorý bude odkazovať, sťahovať a spúšťať aplikácie Hlavný trieda normálne.

Nie je žiadny rozdiel s bežnou webovou aplikáciou zabalenou v súbore WAR, s výnimkou skutočnosti, že na povolenie JWS potrebujeme súbor JNLP, ako bude demonštrované nižšie.

3.1. Aplikácia Java

Začnime písaním jednoduchej aplikácie Java:

public class Hello {public static void main (String [] args) {JFrame f = new JFrame ("main"); f.setSize (200, 100); f.setLocationRelativeTo (null); f.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); Štítok JLabel = nový JLabel („Hello World“); f.add (štítok); f.setVisible (true); }}

Vidíme, že toto je celkom jednoduchá trieda Swing. Naozaj nebolo pridané nič, čo by vyhovovalo JWS.

3.2. Webová aplikácia

Všetko, čo potrebujeme, je zabaliť tento príklad triedy Swing do súboru WAR spolu s nasledujúcim súborom JNLP:

   Dobrý deň príklad 

Poďme to pomenovať ahoj.jndl a umiestnite ho do ľubovoľného webového priečinka našej VOJNY. JAR aj WAR sú stiahnuteľné, takže sa nemusíme báť vložiť JAR do a lib priečinok.

Adresa URL nášho konečného súboru JAR je pevne zakódovaná v súbore JNLP, čo môže spôsobiť určité problémy s distribúciou. Ak zmeníme servery nasadenia, aplikácia už nebude fungovať.

Opravíme to pomocou správneho servletu ďalej v tomto článku. Zatiaľ umiestnime súbor JAR na stiahnutie do koreňového priečinka ako index.htmla prepojte ho s kotviacim prvkom:

Spustiť

Nastavme tiež hlavnú triedu v našom manifeste JAR. To sa dá dosiahnuť konfiguráciou doplnku JAR v pom.xml spis. Podobne presunieme súbor JAR mimo server WEB-INF / lib, pretože je určený iba na stiahnutie, t. j. nie na načítanie triedy:

 org.apache.maven.plugins maven-jar-plugin ... kompilovať jar com.example. Ahoj $ {project.basedir} / target / jws 

4. Špeciálne konfigurácie

4.1. Problémy so zabezpečením

Ak chcete spustiť aplikáciu, musíme podpísať JAR. Vytvorenie platného certifikátu a použitie doplnku JAR Sign Maven Plugin ide nad rámec tohto článku, ale túto bezpečnostnú politiku môžeme obísť kvôli vývojovým účelom alebo ak máme administratívny prístup k počítaču nášho používateľa.

Aby sme tak mohli urobiť, musíme pridať miestnu adresu URL (napríklad: // localhost: 8080) na zoznam bezpečnostných výnimiek inštalácie JRE v počítači, na ktorom sa aplikácia spustí. Nájdete ho otvorením ovládacieho panela Java (vo Windows ho nájdeme cez ovládací panel) na karte Zabezpečenie.

5. JnlpDownloadServlet

5.1. Kompresné algoritmy

V našej VOJNE je zahrnutý špeciálny servlet. Optimalizuje sťahovanie vyhľadaním najkomprimovanejšej kompilovanej verzie nášho súboru JAR, ak je k dispozícii, a tiež opraví pevne zakódované zdrojový kód hodnota v súbore JLNP.

Pretože náš JAR bude k dispozícii na stiahnutie, je vhodné zabaliť ho do kompresného algoritmu, napríklad Pack200, a doručiť bežný JAR a ľubovoľnú komprimovanú verziu JAR.PACK.GZ alebo JAR.GZ do rovnakého priečinka, aby tento servlet mohol pre každý prípad vyberte najlepšiu možnosť.

Bohužiaľ pre tento kompresný algoritmus zatiaľ neexistuje stabilná verzia pluginu Maven, ale môžeme pracovať s spustiteľným balíkom Pack200, ktorý je dodávaný s JRE (zvyčajne je nainštalovaný na ceste {JAVA_SDK_HOME} / jre / bin /).

Bez zmeny nášho JNLP a umiestnením jar.gz a jar.pack.gz verzie JAR v rovnakom priečinku, servlet vyberie ten lepší, keď prijme hovor zo vzdialeného JNLP. To zvyšuje užívateľskú skúsenosť a optimalizuje sieťový prenos.

5.2. Dynamická substitúcia kódovej základne

Servlet môže tiež vykonávať dynamické substitúcie pevne zakódovaných adries URL v priečinku značka. Zmenou JNLP na zástupný znak , dodáva rovnakú výslednú vykreslenú značku.

Servlet funguje aj so zástupnými znakmi $$ základ kódu, $$ názov hostiteľa, $$ meno a $$ stránka, ktorá vyrieši „// localhost: 8080 / jnlp-example /“, “localhost: 8080“, “ahoj.jnlp„A“// localhost: 8080“.

5.3. Pridanie servletu do triedy Classpath

Ak chcete pridať servlet, nakonfigurujme normálne mapovanie servletu pre vzory JAR a JNLP na naše web.xml:

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

Samotný servlet je dodávaný v súbore JAR (jardiff.jar a jnlp-servlet.jar), ktoré sa v súčasnosti nachádzajú v sekcii Demos & Samples (Ukázky a vzorky) na stránke na stiahnutie súboru Java SDK.

V príklade GitHub sú tieto súbory zahrnuté v java-core-vzorky-lib priečinok a sú zahrnuté ako webové zdroje doplnkom Maven WAR:

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

6. Záverečné myšlienky

Java Web Start je nástroj, ktorý sa môže používať v (intranetových) prostrediach, kde nie je aplikačný server. Tiež pre aplikácie, ktoré potrebujú manipulovať so súbormi miestnych používateľov.

Aplikácia sa koncovému používateľovi dodáva prostredníctvom jednoduchého protokolu na stiahnutie bez akýchkoľvek ďalších závislostí alebo konfigurácie, s výnimkou niektorých bezpečnostných obmedzení (HTTPS, podpísaný JAR atď.).

V príklade Git je k dispozícii na stiahnutie celý zdrojový kód popísaný v tomto článku. Môžeme si ho stiahnuť priamo z GitHubu do OS s Tomcat a Apache Maven. Po stiahnutí musíme spustiť inštalácia mvn príkaz zo zdrojového adresára a skopírujte vygenerovaný jws.war súbor z cieľ do webové aplikácie priečinok inštalácie Tomcat.

Potom môžeme spustiť Tomcat ako obvykle.

Z predvolenej inštalácie Apache Tomcat bude príklad k dispozícii na adrese URL //localhost:8080/jws/index.html.