Panduan Memulai Web Java

1. Ikhtisar

Artikel ini menjelaskan tentang Java Web Start (JWS), cara mengkonfigurasinya di sisi server, dan cara membuat aplikasi sederhana.

Catatan: JWS telah dihapus dari Oracle JDK yang dimulai dengan Java 11. Sebagai alternatif, pertimbangkan untuk menggunakan OpenWebStart.

2. Pendahuluan

JWS adalah lingkungan runtime yang hadir dengan Java SE untuk browser web klien dan telah ada sejak Java versi 5.

Dengan mendownload file JNLP (juga dikenal sebagai Java Network Launch Protocol) dari server web, lingkungan ini memungkinkan kita untuk menjalankan paket JAR yang dirujuk olehnya dari jarak jauh.

Sederhananya, mekanisme memuat dan menjalankan kelas Java di komputer klien dengan instalasi JRE biasa. Ini memungkinkan beberapa instruksi tambahan dari Jakarta EE juga. Namun, batasan keamanan diterapkan secara ketat oleh JRE klien, biasanya memperingatkan pengguna untuk domain yang tidak dapat dipercaya, kurangnya HTTPS dan bahkan JAR yang tidak bertanda tangan.

Dari situs web umum, seseorang dapat mengunduh file JNLP untuk menjalankan aplikasi JWS. Setelah diunduh, ini dapat dijalankan langsung dari pintasan desktop atau Java Cache Viewer. Setelah itu, ia mengunduh dan menjalankan file JAR.

Mekanisme ini dapat sangat membantu untuk menghadirkan antarmuka grafis yang tidak berbasis web (bebas HTML), seperti aplikasi transfer file yang aman, kalkulator ilmiah, keyboard yang aman, browser gambar lokal, dan sebagainya.

3. Aplikasi JNLP Sederhana

Pendekatan yang baik adalah menulis aplikasi dan memaketkannya menjadi file WAR untuk server web biasa. Yang kita butuhkan hanyalah menulis aplikasi yang kita inginkan (biasanya dengan Swing) dan memaketkannya menjadi file JAR. JAR ini kemudian harus, pada gilirannya, dikemas ke dalam file WAR bersama dengan JNLP yang akan mereferensikan, mengunduh dan menjalankan kelas Utama aplikasinya secara normal.

Tidak ada perbedaan dengan aplikasi web biasa yang dikemas dalam file WAR, kecuali kenyataan bahwa kita memerlukan file JNLP untuk mengaktifkan JWS, seperti yang akan ditunjukkan di bawah ini.

3.1. Aplikasi Java

Mari kita mulai dengan menulis aplikasi Java sederhana:

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

Kita dapat melihat bahwa ini adalah kelas Swing yang cukup mudah. Memang, tidak ada yang ditambahkan untuk membuatnya sesuai dengan JWS.

3.2. Aplikasi web

Yang kita butuhkan adalah JAR mengemas contoh ini. Ayunkan kelas menjadi file WAR bersama dengan file JNLP berikut:

   Hello Example       

Beri nama hello.jndl dan letakkan di folder web manapun dari WAR kita. Baik JAR maupun WAR dapat diunduh, jadi kita tidak perlu khawatir meletakkan JAR di folder lib .

Alamat URL ke JAR akhir kita di-hardcode dalam file JNLP, yang dapat menyebabkan beberapa masalah distribusi. Jika kami mengubah server penerapan, aplikasi tidak akan berfungsi lagi.

Mari kita perbaiki dengan servlet yang tepat nanti di artikel ini. Untuk saat ini, mari kita letakkan file JAR untuk diunduh di folder root sebagai index.html , dan tautkan ke elemen jangkar:

Launch

Mari kita juga mengatur kelas utama dalam JAR Manifest . Ini dapat dilakukan dengan mengkonfigurasi plugin JAR di file pom.xml . Demikian pula, kami memindahkan file JAR ke luar WEB-INF / lib , karena ini dimaksudkan untuk diunduh saja, yaitu bukan untuk classloader:

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

4. Konfigurasi Khusus

4.1. Masalah Keamanan

Untuk menjalankan aplikasi, kita perlu menandatangani JAR . Membuat sertifikat yang valid dan menggunakan Plugin JAR Sign Maven melampaui cakupan artikel ini, tetapi kami dapat melewati kebijakan keamanan ini untuk tujuan pengembangan, atau jika kami memiliki akses administratif ke komputer pengguna kami.

Untuk melakukannya, kita perlu menambahkan URL lokal (misalnya: // localhost: 8080 ) ke daftar pengecualian keamanan dari instalasi JRE di komputer tempat aplikasi akan dijalankan. Ini dapat ditemukan dengan membuka Java Control Panel (di Windows, kita dapat menemukannya melalui Control Panel) pada tab Security.

5. JnlpDownloadServlet

5.1. Algoritma Kompresi

Ada servlet khusus yang bisa dimasukkan ke dalam WAR kami. Ini mengoptimalkan unduhan dengan mencari versi terkompresi yang paling banyak dari file JAR kami jika tersedia, dan juga memperbaiki nilai basis kode kode keras pada file JLNP.

Karena JAR kami akan tersedia untuk diunduh, disarankan untuk mengemasnya dengan algoritma kompresi, seperti Pack200, dan mengirimkan JAR reguler dan versi terkompresi JAR.PACK.GZ atau JAR.GZ apa pun di folder yang sama sehingga servlet ini dapat pilih opsi terbaik untuk setiap kasus.

Sayangnya, belum ada versi stabil plugin Maven untuk algoritme kompresi ini, tetapi kami dapat bekerja dengan Pack200 yang dapat dieksekusi yang disertakan dengan JRE (biasanya, diinstal di jalur {JAVA_SDK_HOME} / jre / bin / ).

Tanpa mengubah JNLP kita dan dengan menempatkan versi jar.gz dan jar.pack.gz dari JAR di folder yang sama, servlet akan memilih yang lebih baik setelah mendapat panggilan dari JNLP jarak jauh. Ini meningkatkan pengalaman pengguna dan mengoptimalkan lalu lintas jaringan.

5.2. Substitusi Dinamis Basis Kode

Servlet juga dapat melakukan substitusi dinamis untuk URL hardcode di menandai. Dengan mengubah JNLP menjadi wildcard, ini memberikan tag akhir yang sama.

Servlet juga bekerja dengan kode bebas $$ basis kode , nama host $$ , nama $$ dan situs $$ , yang akan menyelesaikan “ // localhost: 8080 / jnlp-example / “, “ localhost: 8080 “, “ hello.jnlp “ , dan “ // localhost: 8080 ”.

5.3. Menambahkan Servlet ke Classpath

Untuk menambahkan servlet, mari konfigurasikan pemetaan servlet normal untuk pola JAR dan JNLP ke web.xml kita :

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

The servlet itself comes in a set of JARs (jardiff.jar and jnlp-servlet.jar) that are nowadays located on the Demos & Samples section on the Java SDK download page.

In the GitHub example, these files are included in the java-core-samples-lib folder and are included as web resources by the Maven WAR plugin:

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

6. Final Thoughts

Java Web Start is a tool that may be used in (intranet) environments where there is no application server. Also, for applications that need to manipulate local user files.

An application is shipped to the end user by a simple download protocol, without any additional dependencies or configuration, except for some security concerns (HTTPS, signed JAR, etc.).

Dalam Contoh Git, kode sumber lengkap yang dijelaskan dalam artikel ini tersedia untuk diunduh. Kita bisa mendownloadnya langsung dari GitHub ke OS dengan Tomcat dan Apache Maven. Setelah mengunduh, kita perlu menjalankan perintah mvn install dari direktori sumber dan menyalin file jws.war yang dihasilkan dari target ke folder webapps dari instalasi Tomcat.

Setelah itu, kita dapat menjalankan Tomcat seperti biasa.

Dari instalasi default Apache Tomcat, contoh akan tersedia di URL //localhost:8080/jws/index.html .