מדריך להפעלת האינטרנט של Java

1. סקירה כללית

מאמר זה מסביר מהו Java Web Start (JWS), כיצד להגדיר אותו בצד השרת וכיצד ליצור יישום פשוט.

הערה: ה- JWS הוסר מה- Oracle JDK החל מ- Java 11. כחלופה, שקול להשתמש ב- OpenWebStart.

2. מבוא

JWS היא סביבת זמן ריצה המגיעה עם Java SE עבור דפדפן האינטרנט של הלקוח וקיימת מאז Java גרסה 5.

עם הורדת קבצי JNLP (הידועים גם בשם Java Network Launch Protocol) משרת האינטרנט, סביבה זו מאפשרת לנו להריץ חבילות JAR שמפנות אליו מרחוק.

במילים פשוטות, המנגנון נטען ומריץ שיעורי Java במחשב של לקוח עם התקנת JRE רגילה. זה מאפשר גם כמה הוראות נוספות מג'קרטה EE. עם זאת, הגבלות אבטחה מוחלות בקפידה על ידי ה- JRE של הלקוח, בדרך כלל מזהירות את המשתמש מפני דומיינים לא מהימנים, היעדר HTTPS ואפילו JARs לא חתומים.

מאתר אינטרנט כללי ניתן להוריד קובץ JNLP לצורך ביצוע יישום JWS. לאחר ההורדה, ניתן להפעיל אותו ישירות מקיצור דרך בשולחן העבודה או מ- Java Cache Viewer. לאחר מכן, הוא מוריד ומבצע קבצי JAR.

מנגנון זה יכול להועיל מאוד בהעברת ממשק גרפי שאינו מבוסס אינטרנט (ללא HTML), כמו יישום העברת קבצים מאובטח, מחשבון מדעי, מקלדת מאובטחת, דפדפן תמונות מקומי וכן הלאה.

3. יישום JNLP פשוט

גישה טובה היא לכתוב יישום ולארוז אותו לקובץ WAR עבור שרתי אינטרנט רגילים. כל מה שאנחנו צריכים זה לכתוב את היישום הרצוי שלנו (בדרך כלל עם Swing) ולארוז אותו לקובץ JAR. לאחר מכן יש לארוז את ה- JAR הזה לקובץ WAR יחד עם JNLP שיפנה, יוריד ויבצע את יישומיו. רָאשִׁי בכיתה כרגיל.

אין הבדל עם יישום אינטרנט רגיל שנארז בקובץ WAR, למעט העובדה שאנחנו צריכים קובץ JNLP כדי לאפשר את ה- JWS, כפי שיודגם להלן.

3.1. יישום Java

נתחיל בכתיבת יישום Java פשוט:

class public שלום {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 = JLabel חדשה ("שלום עולם"); f.add (תווית); f.setVisible (נכון); }}

אנו יכולים לראות שמדובר בשיעור נדנדה די פשוט. ואכן, שום דבר לא התווסף כדי להפוך את זה ל- JWS.

3.2. אפליקציית רשת

כל מה שאנחנו צריכים הוא לארוז את JAR לדוגמה זו בכיתה Swing לקובץ WAR יחד עם קובץ JNLP הבא:

   דוגמה שלום 

בואו נקרא לזה שלום.jndl והניח אותו תחת כל תיקיית אינטרנט של המלחמה שלנו. ניתן להוריד הן את ה- JAR והן את ה- WAR, כך שאיננו צריכים לדאוג להכניס את ה- JAR ל lib תיקיה.

כתובת ה- URL ל- JAR הסופי שלנו מקודדת קשה בקובץ JNLP, מה שעלול לגרום לבעיות הפצה מסוימות. אם נשנה שרתי פריסה, היישום לא יעבוד יותר.

בואו נתקן זאת באמצעות סרוולט מתאים בהמשך מאמר זה. לעת עתה, בואו רק נניח את קובץ ה- JAR להורדה בתיקיית השורש כ- index.htmlוקשר אותו לאלמנט עוגן:

לְהַשִׁיק

בואו נקבע גם את המעמד הראשי במניפסט ה- JAR שלנו. ניתן להשיג זאת על ידי הגדרת התצורה של תוסף JAR ב- pom.xml קוֹבֶץ. באופן דומה, אנו מעבירים את קובץ ה- JAR מחוץ ל- WEB-INF / lib, מכיוון שהוא מיועד להורדה בלבד, כלומר לא למטען הכיתות:

 org.apache.maven.plugins maven-jar-plugin ... קומפיל צנצנת com.example.Hello $ {project.basedir} / target / jws 

4. תצורות מיוחדות

4.1. סוגיות אבטחה

להפעלת יישום, עלינו לחתום על ה- JAR. יצירת אישור תקף ושימוש בתוסף JAR Sign Maven חורג מגדר המאמר, אך אנו יכולים לעקוף מדיניות אבטחה זו לצורכי פיתוח, או אם יש לנו גישה מנהלתית למחשב המשתמש שלנו.

לשם כך, עלינו להוסיף את כתובת האתר המקומית (למשל: // localhost: 8080) לרשימת חריגי האבטחה של התקנת JRE במחשב שבו תבוצע היישום. ניתן למצוא אותו על ידי פתיחת לוח הבקרה של Java (ב- Windows, אנו יכולים למצוא אותו דרך לוח הבקרה) בכרטיסייה אבטחה.

5. ה JnlpDownloadServlet

5.1. אלגוריתמים לדחיסה

יש סרוולט מיוחד שיכול להיכלל במלחמה שלנו. זה מייעל את ההורדה על ידי חיפוש הגרסה המקובצת הדחוסה ביותר של קובץ ה- JAR שלנו, אם זמין, וכן לתקן את הקוד המקודד בסיס קוד ערך בקובץ JLNP.

מכיוון שה- JAR שלנו יהיה זמין להורדה, מומלץ לארוז אותו עם אלגוריתם דחיסה, כמו Pack200, ולספק את ה- JAR הרגיל וכל גרסה דחוסה של JAR.PACK.GZ או JAR.GZ באותה תיקייה כך ש- servlet זה יכול בחר באפשרות הטובה ביותר לכל מקרה.

למרבה הצער, עדיין אין גרסה יציבה של תוסף Maven עבור אלגוריתם דחיסה זה, אך אנו עשויים לעבוד עם ההפעלה Pack200 שמגיעה עם ה- JRE (בדרך כלל מותקן בדרך {JAVA_SDK_HOME} / jre / bin /).

מבלי לשנות את ה- JNLP שלנו ועל ידי הצבת ה- jar.gz ו jar.pack.gz בגרסאות ה- JAR באותה תיקייה, ה- servlet בוחר את הטובה יותר ברגע שהוא מקבל שיחה מ- JNLP מרוחק. זה משפר את חוויית המשתמש ומייעל את תעבורת הרשת.

5.2. החלפה דינמית של Codebase

ה- servlet יכול גם לבצע החלפות דינמיות לכתובות אתרים שקודדו קשה תָג. על ידי שינוי ה- JNLP לתו הכללי , הוא מספק את אותו תג שניתנו סופית.

הסרוולט עובד גם עם כרטיסי הבר $$ קוד קוד, $$ מארח, $$ שם ו אתר $$, שיפתור "// localhost: 8080 / jnlp-example /“, “מקום אירוח מקומי: 8080“, “שלום.jnlp“, ו-“// localhost: 8080”בהתאמה.

5.3. הוספת סרוולט לשביל הכיתה

כדי להוסיף את ה- servlet, בואו להגדיר מיפוי servlet רגיל עבור דפוסי JAR ו- JNLP שלנו web.xml:

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

הסרוולט עצמו מגיע בקבוצת JAR (jardiff.jar ו jnlp-servlet.jar) שנמצאים כיום בסעיף הדגמות ודוגמאות בדף ההורדה של Java SDK.

בדוגמה של GitHub, קבצים אלה כלולים ב- java-core-samples-lib התיקיה ונכללים כמשאבי אינטרנט על ידי התוסף Maven WAR:

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

6. מחשבות אחרונות

Java Web Start הוא כלי שניתן להשתמש בו בסביבות (אינטרא-נט) בהן אין שרת יישומים. כמו כן, ליישומים שצריכים לתפעל קבצי משתמשים מקומיים.

יישום נשלח למשתמש הקצה על ידי פרוטוקול הורדה פשוט, ללא כל תלות או תצורה נוספת, למעט חששות אבטחה מסוימים (HTTPS, JAR חתום וכו ').

בדוגמה של Git, קוד המקור המלא המתואר במאמר זה זמין להורדה. אנו יכולים להוריד אותו ישירות מ- GitHub למערכת הפעלה עם Tomcat ו- Apache Maven. לאחר ההורדה, עלינו להפעיל את להתקין mvn פקודה מספריית המקור והעתק את הנוצר jws.war קובץ מה- יַעַד אל ה אפליקציות רשת תיקיית התקנת Tomcat.

לאחר מכן, אנו יכולים להתחיל את טומקט כרגיל.

מהתקנת ברירת מחדל של Apache Tomcat, הדוגמה תהיה זמינה בכתובת האתר //localhost:8080/jws/index.html.