Panduan untuk Memulakan Web Java

1. Gambaran keseluruhan

Artikel ini menerangkan apa itu Java Web Start (JWS), bagaimana mengkonfigurasinya di sisi pelayan, dan bagaimana membuat aplikasi sederhana.

Catatan: JWS telah dikeluarkan dari Oracle JDK bermula dengan Java 11. Sebagai alternatif, pertimbangkan untuk menggunakan OpenWebStart.

2. Pengenalan

JWS adalah lingkungan waktu proses yang disertakan dengan Java SE untuk penyemak imbas web pelanggan dan telah ada sejak Java versi 5.

Dengan memuat turun fail JNLP (juga dikenali sebagai Java Network Launch Protocol) dari pelayan web, persekitaran ini membolehkan kita menjalankan pakej JAR yang dirujuk olehnya dari jarak jauh.

Ringkasnya, mekanisme memuat dan menjalankan kelas Java di komputer pelanggan dengan pemasangan JRE biasa. Ia juga memberikan beberapa arahan tambahan dari Jakarta EE. Walau bagaimanapun, sekatan keselamatan dilaksanakan dengan tegas oleh JRE pelanggan, biasanya memberi amaran kepada pengguna untuk domain yang tidak boleh dipercayai, kekurangan HTTPS dan bahkan JAR yang tidak ditandatangani.

Dari laman web generik, seseorang boleh memuat turun fail JNLP untuk melaksanakan aplikasi JWS. Setelah dimuat, ia boleh dijalankan terus dari jalan pintas desktop atau Java Cache Viewer. Selepas itu, memuat turun dan melaksanakan fail JAR.

Mekanisme ini sangat berguna untuk menyampaikan antara muka grafik yang tidak berasaskan web (bebas HTML), seperti aplikasi pemindahan fail selamat, kalkulator saintifik, papan kekunci selamat, penyemak imbas gambar tempatan dan sebagainya.

3. Aplikasi JNLP Mudah

Pendekatan yang baik adalah menulis aplikasi dan mengemasnya ke dalam fail WAR untuk pelayan web biasa. Yang kita perlukan hanyalah menulis aplikasi yang kita mahukan (biasanya dengan Swing) dan mengemasnya ke dalam fail JAR. JAR ini kemudian, pada gilirannya, harus dikemas ke dalam fail WAR bersama-sama dengan JNLP yang akan merujuk, memuat turun dan melaksanakan kelas Utama aplikasinya secara normal.

Tidak ada perbezaan dengan aplikasi web biasa yang dikemas dalam file WAR, kecuali kenyataan bahawa kami memerlukan fail JNLP untuk mengaktifkan JWS, seperti yang akan ditunjukkan di bawah.

3.1. Aplikasi Java

Mari mulakan dengan menulis aplikasi Java yang mudah:

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 bahawa ini adalah kelas Swing yang cukup mudah. Tidak ada yang ditambahkan untuk menjadikannya mematuhi JWS.

3.2. Aplikasi sesawang

Apa yang kita perlukan adalah mengemas JAR contoh ini Swing class ke dalam fail WAR bersama dengan fail JNLP berikut:

   Hello Example       

Mari beri nama hello.jndl dan letakkan di bawah mana-mana folder web WAR kami. Kedua-dua JAR dan WAR boleh dimuat turun, jadi kami tidak perlu risau meletakkan JAR dalam folder lib .

Alamat URL ke JAR akhir kami dikodkan keras dalam fail JNLP, yang boleh menyebabkan beberapa masalah pengedaran. Sekiranya kita menukar pelayan penyebaran, aplikasi tidak akan berfungsi lagi.

Mari perbaiki dengan servlet yang betul kemudian dalam artikel ini. Buat masa ini, mari letakkan fail JAR untuk dimuat turun dalam folder root sebagai index.html , dan pautkannya ke elemen anchor:

Launch

Mari juga tentukan kelas utama dalam JAR Manifest kami . Ini dapat dicapai dengan mengkonfigurasi pemalam JAR dalam fail pom.xml . Begitu juga, kami memindahkan fail JAR ke luar WEB-INF / lib , kerana ia hanya bertujuan untuk memuat turun, bukan untuk pemuat kelas:

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

4. Konfigurasi Khas

4.1. Isu keselamatan

Untuk menjalankan aplikasi, kita perlu menandatangani JAR . Membuat sijil yang sah dan menggunakan JAR Sign Maven Plugin melampaui ruang lingkup artikel ini, tetapi kami boleh memotong dasar keselamatan ini untuk tujuan pembangunan, atau jika kami mempunyai akses pentadbiran ke komputer pengguna kami.

Untuk melakukannya, kita perlu menambahkan URL tempatan (contohnya: // localhost: 8080 ) ke senarai pengecualian keselamatan pemasangan JRE di komputer di mana aplikasi akan dijalankan. Ini dapat dijumpai dengan membuka Java Control Panel (pada Windows, kita dapat menemukannya melalui Control Panel) pada tab Security

5. JnlpDownloadServlet

5.1. Algoritma Pemampatan

Terdapat servlet khas yang boleh dimasukkan ke dalam PERANG kita. Ia mengoptimumkan muat turun dengan mencari versi terkompilasi paling banyak dari fail JAR kami jika ada, dan juga memperbaiki nilai pangkalan data berkod keras pada fail JLNP.

Oleh kerana JAR kami akan tersedia untuk dimuat turun, disarankan untuk membungkusnya dengan algoritma pemampatan, seperti Pack200, dan menyampaikan JAR biasa dan versi yang dimampatkan JAR.PACK.GZ atau JAR.GZ pada folder yang sama sehingga servlet ini dapat pilihlah pilihan terbaik untuk setiap kes.

Sayangnya, belum ada versi stabil dari plugin Maven untuk algoritma pemampatan ini, tetapi kami mungkin bekerjasama dengan Pack200 yang boleh disertakan dengan JRE (biasanya, dipasang di jalan {JAVA_SDK_HOME} / jre / bin / ).

Tanpa mengubah JNLP kami dan dengan meletakkan jar.gz dan jar.pack.gz versi JAR dalam folder yang sama, Servlet picks yang lebih baik sebaik sahaja ia mendapat panggilan daripada JNLP jauh. Ini meningkatkan pengalaman pengguna dan mengoptimumkan lalu lintas rangkaian.

5.2. Penggantian Dinamik Pangkalan Data

Servlet juga dapat melakukan penggantian dinamik untuk URL hardcod di teg. Dengan menukar JNLP ke wildcard, ia memberikan tag akhir yang sama.

Servlet juga berfungsi dengan pangkalan data $$ wildcard , $$ hostname , $$ name dan $$ site , yang akan menyelesaikan " // localhost: 8080 / jnlp-example / ", " localhost: 8080 ", " hello.jnlp " , dan " // localhost: 8080 " masing-masing.

5.3. Menambah Servlet ke Classpath

Untuk menambahkan servlet, mari konfigurasikan pemetaan servlet biasa untuk corak JAR dan JNLP ke web.xml kami :

 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, kod sumber lengkap yang dijelaskan dalam artikel ini tersedia untuk dimuat turun. Kami boleh memuat turunnya secara langsung dari GitHub ke OS dengan Tomcat dan Apache Maven. Selepas memuat turun, kita perlu menjalankan perintah pemasangan mvn dari direktori sumber dan menyalin fail jws.war yang dihasilkan dari sasaran ke folder webapps pemasangan Tomcat.

Selepas itu, kita boleh memulakan Tomcat seperti biasa.

Dari pemasangan Apache Tomcat lalai, contohnya boleh didapati di URL //localhost:8080/jws/index.html .