מבוא לג'ובי

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

ג'ובי היא מסגרת מיקרו-רשת מדרגית ומהירה הבנויה על גבי הנפוצים ביותר שרתי רשת NIO. זה מאוד פשוט ומודולרי, שתוכנן בבירור לארכיטקטורת האינטרנט של ימינו. זה בא עם תמיכה עבור Javascript ו קוטלין גַם.

כברירת מחדל, ג'ובי מגיע עם תמיכה רבה עבור נטי, ג'טי ואנדרטאו.

במאמר זה נלמד על הכללי ג'ובי מבנה הפרויקט וכיצד לבנות יישום אינטרנט פשוט באמצעות ג'ובי.

2. אדריכלות יישומים

פשוט ג'ובי מבנה היישום יופיע כמו להלן:

├── ציבורי | └── ברוך הבא.html ├── conf | ├── application.conf | └── logback.xml └── src | ├── עיקרי | | └── ג'אווה | | └── com | | └── באלדונג | | └── ג'ובי | | └── App.java | מבחן └── | └── ג'אווה | └── com | └── באלדונג | └── ג'ובי | └── AppTest.java ├── pom.xml

נקודה לציין כאן היא כי ב פּוּמְבֵּי בספרייה אנו יכולים לשים קבצים סטטיים כמו css / js / html וכו ' conf בספרייה, אנו יכולים לשים כל קובץ תצורה שיישום צריך logback.xml אוֹ application.conf וכו '

3. תלות של Maven

אנחנו יכולים ליצור פשוט ג'ובי יישום על ידי הוספת התלות הבאה שלנו pom.xml:

 org.jooby jooby-netty 1.1.3 

אם אנחנו רוצים לבחור מֵזַח אוֹ זֶרֶם תַחתִי אנו יכולים להשתמש בתלות הבאה:

 org.jooby jooby-jetty 1.1.3 org.jooby jooby-undertow 1.1.3 

אתה יכול לבדוק את הגרסה האחרונה של ה- ג'ובי פרויקט במאגר Central Maven.

ג'ובי יש לו גם ארכיטיפ ייעודי של Maven. אנו יכולים להשתמש בו כדי ליצור פרויקט לדוגמה עם כל התלות הדרושה שנבנו מראש.

אנו יכולים להשתמש בתסריט הבא כדי ליצור את פרויקט הדוגמה:

ארכיטיפ mvn: צור -B -DgroupId = com.baeldung.jooby -DartifactId = jooby -Dversion = 1.0 -DarchetypeArtifactId = jooby-archetype -DarchetypeGroupId = org.jooby -DarchetypeVersion = 1.1.3

4. בניית יישום

4.1. יוזם את השרת

כדי להפעיל את השרת המשובץ, עלינו להשתמש בקטע הקוד הבא:

אפליקציית class class מרחיבה את Jooby {public static void main (String [] args) {run (App :: new, args); }}

לאחר תחילת השרת יופעל יציאת ברירת מחדל8080.

אנו יכולים גם לקבוע את תצורת השרת האחורי עם פורט מותאם אישית ומותאם אישית HTTPS נמל:

{יציאה (8081); securePort (8443); }

4.2. יישום הנתב

קל מאוד ליצור נתב מבוסס נתיב ג'ובי. לדוגמא, אנו יכולים ליצור נתב לנתיב '/התחברות'בדרך הבאה:

{get ("/ login", () -> "שלום מבלדונג"); }

באופן דומה, אם אנו רוצים להתמודד עם אחרים HTTP שיטות כמו POST, PUT וכו 'נוכל להשתמש בהן קטע קוד:

{פוסט ("/ שמור", req -> אסימון מוטציה = req.param ("אסימון"); החזר token.intValue ();}); }

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

אנו יכולים לבדוק כל פרמטר של url באופן הבא:

{get ("/ user / {id}", req -> "שלום המשתמש:" + req.param ("id"). value ()); get ("/ user /: id", req -> "שלום משתמש:" + req.param ("id"). value ()); }

אנו יכולים להשתמש בכל האמור לעיל. אפשר גם למצוא פאראמים שמתחילים בתוכן קבוע. לדוגמא, אנו יכולים למצוא פרמטר של כתובת אתר החל מ- 'uid: ' בדרך הבאה:

{get ("/ uid: {id}", req -> "שלום משתמש עם id: uid" + req.param ("id"). value ()); }

4.3. יישום בקר תבניות MVC

ליישום ארגוני, ג'ובי מגיע עם ממשק API של MVC בדומה לכל מסגרות MVC אחרות כמו אביב MVC.

לדוגמא, אנו יכולים להתמודד עם נתיב שנקרא '/שלום‘ :

@Path ("/ שלום") מחלקה ציבורית GetController {@GET ציבור מחרוזת שלום () {החזר "שלום באלדונג"; }}

באופן דומה מאוד אנו יכולים ליצור מטפל לטיפול איתו בשיטות HTTP אחרות @ POST, @ PUT, @ DELETEביאור וכו '.

4.4. טיפול בתכנים סטטיים

כדי להגיש כל תוכן סטטי כמו HTML, Javascript, CSS, תמונה וכו ', עלינו למקם את הקובץ פּוּמְבֵּי מַדרִיך.

לאחר הצבתנו, מהנתב אנו יכולים למפות כל כתובת אתר למשאבים הבאים:

{נכסים ("/ עובד", "form.html"); }

4.5. טופס טיפול

ג'ובי בַּקָשָׁה ממשק כברירת מחדל מטפל בכל אובייקט טופס מבלי להשתמש בכל סוג יציקה ידני.

נניח שעלינו להגיש פרטי עובד באמצעות טופס. בשלב הראשון עלינו ליצור עוֹבֵד אובייקט שעועית שנשתמש בו כדי להחזיק את הנתונים:

עובד בכיתה ציבורית {מזהה מחרוזת; שם מחרוזת; דוא"ל מחרוזת; // קונסטרוקציות סטנדרטיות, קבוצות וקובעות}

כעת עלינו ליצור דף ליצירת הטופס:

לאחר מכן, ניצור מטפל בפוסטים לטפל בטופס זה ולהביא את הנתונים שנשלחו:

post ("/ submitForm", req -> {עובד שכיר = req.params (שכיר עובד); // ... להחזיר "נתוני עובד נשמרו בהצלחה";});

נקודה לציין כאן היא שעלינו להזדקק להצהרה על צורה להקליד כפי ש יישום / x-www-form-urlencoded כדי לתמוך בכריכת הטופס הדינמי.

על ידי Request.file (שם קובץ מחרוזת) נוכל לאחזר את הקובץ שהועלה:

פוסט ("/ upload", req -> {Upload upload = req.file ("file"); // ... upload.close ();});

4.6. הטמעת פילטר

מחוץ לקופסא, ג'ובי מספק את הגמישות להגדיר מסננים גלובליים כמו גם את המסננים מבוססי הנתיב.

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

לדוגמא, אם עלינו ליישם מסנן לנתיב URL שנקרא '/לְסַנֵן', עלינו ליישם את המסנן בנתיב זה במפורש:

קבל ("/ filter", (req, resp, chain) -> {// ... chain.next (req, resp);});

התחביר דומה מאוד ל- סרוולט לְסַנֵן. אפשר להגביל את הבקשה ולשלוח בחזרה את התגובה בפילטר עצמו על ידי התקשרות Response.send (תוצאת התוצאה) שיטה.

לאחר הטמעת המסנן, עלינו ליישם את מטפל הבקשות:

get ("/ filter", (req, resp) -> {resp.send ("filter filter");});

4.7. מוֹשָׁב

ג'ובי מגיע עם שני סוגים של יישום הפעלות; בזיכרון ומבוסס על עוגיות.

יישום ניהול הפעלות בזיכרון הוא די פשוט. יש לנו את האפשרויות לבחור בכל אחת מחנויות ההפעלות בעלות התפוקה הגבוהה שזמינה ג'ובי כמו EhCache, Guava, HazleCast, Cassandra, Couchbase, Redis, MongoDB, ו ממוסמכים.

לדוגמה, כדי ליישם אחסון הפעלה מבוסס Redis, עלינו להוסיף תלות Maven הבאה:

 org.jooby jooby-jedis 1.1.3 

כעת נוכל להשתמש בקטע קוד להלן כדי לאפשר ניהול מושב:

{שימוש (Redis חדש ()); מושב (RedisSessionStore.class); קבל ("/ session", req -> {Session session = req.session (); session.set ("token", "value"); return session.get ("token"). value ();}); }

נקודה לציין כאן היא שאנחנו יכולים להגדיר רדיס url כמו 'Db' נכס ב application.conf.

כדי לאפשר ניהול מושב מבוסס עוגיות, עלינו להצהיר cookieSession (). אם נבחרה גישה מבוססת עוגיות, עלינו להזדקק להצהרה יישום. סוד נכס ב application.conf קוֹבֶץ. מכיוון שכל קובץ cookie יחתום יחתום באמצעות מפתח סודי זה, תמיד מומלץ להשתמש בקטע מחרוזת אקראי ארוך כמפתח סודי.

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

5. בדיקות

בדיקת מסלול MVC היא אכן קלה מכיוון שמסלול מחויב לאסטרטגיה לכיתה כלשהי. זה מקל על ביצוע בדיקות יחידות על כל המסלולים.

לדוגמא, אנו יכולים ליצור מקרה מבחן במהירות לכתובת אתר המוגדרת כברירת מחדל:

AppTest בכיתה ציבורית {@ClassRule יישום JoobyRule סטטי ציבורי = JoobyRule חדש (יישום חדש ()); @Test ציבור בטל given_defaultUrl_expect_fixedString () {get ("/"). ואז (). AssertThat (). Body (equalTo ("שלום עולם!")) .StatusCode (200) .contentType ("text / html; charset = UTF -8 "); }}

נקודה לציין כאן היא כי השימוש @ ClassRule ביאור ייצור מופע אחד בלבד של השרת לכל מקרי הבדיקה. אם עלינו לבנות מופעים נפרדים של השרתים לכל מקרי בדיקה עלינו להשתמש ב- @כְּלָל ביאור ללא השינוי הסטטי.

אנחנו יכולים גם להשתמש MockRouter של ג'ובי לבדוק את הדרך באותו האופן:

@Test ציבורי בטל given_defaultUrl_with_mockrouter_expect_fixedString () זורק Throwable {מחרוזת תוצאה = MockRouter חדש (יישום חדש ()). Get ("/"); assertEquals ("שלום עולם!", תוצאה); }

6. מסקנה

במדריך זה חקרנו את ג'ובי פרויקט ופונקציונליות חיונית שלו.

כמו תמיד, קוד המקור המלא זמין ב- GitHub.


$config[zx-auto] not found$config[zx-overlay] not found