Útmutató a Java Web Starthoz

1. Áttekintés

Ez a cikk elmagyarázza, hogy mi a Java Web Start (JWS), hogyan kell konfigurálni a szerver oldalon, és hogyan lehet egyszerű alkalmazást létrehozni.

Jegyzet: A JWS eltávolításra került az Oracle JDK-ból, a Java 11-től kezdődően. Alternatív megoldásként fontolja meg az OpenWebStart használatát.

2. Bevezetés

A JWS egy futásidejű környezet, amely a Java SE-vel érkezik az ügyfél webböngészőjéhez, és a Java 5. verziója óta létezik.

A JNLP fájlok (más néven Java Network Launch Protocol) webszerverről történő letöltésével ez a környezet lehetővé teszi számunkra az általa hivatkozott JAR csomagok távoli futtatását.

Egyszerűen fogalmazva: a mechanizmus betöltötte és futtatja a Java osztályokat az ügyfél számítógépén, rendszeres JRE telepítéssel. Ez lehetővé teszi néhány extra utasítást a Jakarta EE-től is. A biztonsági korlátozásokat azonban szigorúan alkalmazza az ügyfél JRE, általában figyelmeztetve a felhasználót a megbízhatatlan tartományokra, a HTTPS hiányára és még az aláíratlan JAR-okra is.

Egy általános weboldalról letölthet egy JNLP fájlt egy JWS alkalmazás futtatásához. A letöltés után közvetlenül futtatható egy asztali parancsikonról vagy a Java Cache Viewerből. Ezt követően letölti és végrehajtja a JAR fájlokat.

Ez a mechanizmus nagyon hasznos lehet egy nem webalapú (HTML nélküli) grafikus felület, például biztonságos fájlátviteli alkalmazás, tudományos számológép, biztonságos billentyűzet, helyi képböngésző stb.

3. Egyszerű JNLP alkalmazás

Jó megközelítés az, ha írsz egy alkalmazást, és WAR fájlba csomagolod a szokásos webszerverek számára. Csak arra van szükségünk, hogy megírjuk a kívánt alkalmazást (általában Swing segítségével), és JAR fájlba csomagoljuk. Ezt a JAR-ot aztán egy WAR fájlba kell csomagolni egy JNLP-vel együtt, amely hivatkozni fog, letölt és végrehajtja az alkalmazás osztály rendesen.

Nincs különbség a WAR fájlba csomagolt rendes webalkalmazással, kivéve azt a tényt, hogy JNLP fájlra van szükségünk a JWS engedélyezéséhez, amint az alábbiakban bemutatjuk.

3.1. Java alkalmazás

Kezdjük egy egyszerű Java alkalmazás megírásával:

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); JLabel címke = new JLabel ("Hello World"); f.add (címke); f.setVisible (true); }}

Láthatjuk, hogy ez egy nagyon egyszerű Swing osztály. Valójában semmi sem lett hozzáadva ahhoz, hogy JWS-kompatibilis legyen.

3.2. Webalkalmazás

Csak arra van szükségünk, hogy JAR-ba csomagoljuk ezt a példát: Swing osztályt WAR fájlba, a következő JNLP fájllal együtt:

   Hello példa 

Nevezzük meg hello.jndl és tedd a Háborúnk bármelyik webmappájába. A JAR és a WAR egyaránt letölthető, ezért nem kell aggódnunk, ha a JAR-t a lib mappába.

A végső JAR URL-címét keményen kódolják a JNLP fájlban, ami terjesztési problémákat okozhat. Ha telepítési kiszolgálókat cserélünk, az alkalmazás már nem fog működni.

Javítsuk ki ezt a cikk későbbi megfelelő szervletjével. Egyelőre tegyük a JAR fájlt letöltésre a gyökérmappába index.html, és kapcsolja össze egy horgonyelemmel:

Dob

Állítsuk be a fő osztályt is a JAR kiáltványunkban. Ezt úgy érhetjük el, hogy konfiguráljuk a JAR plugint a pom.xml fájl. Hasonlóképpen a JAR fájlt is áthelyezzük a WEB-INF / lib, mivel csak letöltésre szolgál, vagyis nem az osztályterhelőre:

 org.apache.maven.plugins maven-jar-plugin ... jar fordítása com.example.Hello $ {project.basedir} / target / jws 

4. Speciális konfigurációk

4.1. Biztonsági kérdések

Egy alkalmazás futtatásához alá kell írnunk a JAR-ot. Érvényes tanúsítvány létrehozása és a JAR Sign Maven beépülő modul használata meghaladja a cikk kereteit, de fejlesztési célokra, vagy ha rendszergazdai hozzáféréssel rendelkezünk a felhasználó számítógépéhez, megkerülhetjük ezt a biztonsági házirendet.

Ehhez hozzá kell adnunk a helyi URL-t (például: // localhost: 8080) a JRE telepítés biztonsági kivételek listájára azon a számítógépen, ahol az alkalmazást futtatni fogják. Megtalálható a Java vezérlőpult megnyitásával (Windows rendszeren a Vezérlőpulton keresztül) a Biztonság fülön.

5. A JnlpDownloadServlet

5.1. Tömörítési algoritmusok

Van egy speciális servlet, amely bekerülhet a WAR-ba. Optimalizálja a letöltést azzal, hogy megkeresi a JAR fájlunk tömörített fordított változatát, ha rendelkezésre áll, és kijavítja a kemény kódolást is. kódbázis érték a JLNP fájlban.

Mivel JAR-junk letölthető lesz, célszerű egy tömörítési algoritmussal csomagolni, például a Pack200-ra, és a szokásos JAR-t és a JAR.PACK.GZ vagy JAR.GZ tömörített verziókat ugyanabban a mappában szállítani, hogy ez a szervlet válassza ki a legjobb lehetőséget minden esetre.

Sajnos a Maven plugin még nem rendelkezik stabil verzióval ehhez a tömörítési algoritmushoz, de működhetünk a JRE-hez tartozó Pack200 futtatható programmal (általában az útvonalra telepítve) {JAVA_SDK_HOME} / jre / bin /).

A JNLP-nk megváltoztatása és a jar.gz és jar.pack.gz A JAR ugyanazon mappában található verziói közül a szervlet kiválasztja a jobbat, ha hívást kap egy távoli JNLP-től. Ez javítja a felhasználói élményt és optimalizálja a hálózati forgalmat.

5.2. Codebase dinamikus helyettesítés

A kiszolgáló kisalkalmazás képes dinamikusan helyettesíteni a címke. Úgy, hogy a JNLP-t helyettesítő karakterre változtatja , ugyanazt a végső renderelt címkét adja ki.

A szervlet a helyettesítő karakterekkel is működik $$ kódbázis, $$ hosztnév, $$ név és $$ webhely, amely megoldja// localhost: 8080 / jnlp-example /“, “helyi gazda: 8080“, “hello.jnlp"És"// localhost: 8080”Ill.

5.3. A Servlet hozzáadása az Classpath-hoz

A szervlet hozzáadásához állítsunk be egy normál szervlet-leképezést a JAR és a JNLP mintákhoz web.xml:

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

Maga a szervlet JAR-k sorozatában találhatójardiff.jar és jnlp-servlet.jar), amelyek manapság a Java SDK letöltési oldal Demók és minták részében találhatók.

A GitHub példában ezek a fájlok a java-core-sample-lib mappába, és webes erőforrásként a Maven WAR plugin tartalmazza:

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

6. Záró gondolatok

A Java Web Start olyan eszköz, amely (intranetes) környezetben használható, ahol nincs alkalmazáskiszolgáló. Továbbá azokhoz az alkalmazásokhoz, amelyeknek kezelniük kell a helyi felhasználói fájlokat.

Egy alkalmazást egy egyszerű letöltési protokoll szállít a végfelhasználónak, további függőségek vagy konfiguráció nélkül, kivéve bizonyos biztonsági aggályokat (HTTPS, aláírt JAR stb.).

A Git-példában a cikkben leírt teljes forráskód letölthető. Letölthetjük közvetlenül a GitHub-ból a Tomcat és az Apache Maven operációs rendszerébe. Letöltés után futtatnunk kell a mvn install parancsot a forrás könyvtárból, és másolja a létrehozott jws.war fájl a cél hoz webalkalmazások a Tomcat telepítés mappája.

Ezt követően a szokásos módon elindíthatjuk a Tomcat-ot.

Az Apache Tomcat alapértelmezett telepítéséből a példa elérhető lesz az URL-n //localhost:8080/jws/index.html.