מבוא למסגרת הנינג'ה

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

כיום, קיימות מסגרות רבות מבוססות JEE כמו Spring, Play ו- Grails לפיתוח יישומי אינטרנט.

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

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

2. נינג'ה

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

לאחר תכונות מ- HTML ל- JSON, התמדה לבדיקות, זהו פיתרון חד פעמי לבניית יישומי רשת ניתנים להרחבה.

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

Ninja משתמש בספריות Java פופולריות עבור תכונות עיקריות כמו ג'קסון לעיבוד JSON / XML, מדריך לניהול תלות, מצב שינה להתמדה ו- Flyway להעברת מסדי נתונים.

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

3. התקנה

Ninja דורשת סט כלים סטנדרטי ליצירת יישום אינטרנט:

  • Java 1.8 ואילך
  • Maven 3 ואילך
  • IDE (Eclipse או IntelliJ)

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

ארכיטיפ mvn: צור -DarchetypeGroupId = org.ninjaframework \ -DarchetypeArtifactId = ninja-servlet-archetype-simple

לחלופין, עבור פרויקט Maven קיים, אנו יכולים להוסיף את התלות האחרונה של הליבה של הנינג'ה pom.xml:

 org.ninjaframework ninja-core 6.5.0 

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

mvn נקי להתקין

אחרון, בואו נפעיל את האפליקציה באמצעות פקודת Maven המסופקת על ידי נינג'ה:

mvn ninja: לרוץ

וואלה! היישום שלנו התחיל ויהיה נגיש בכתובת מקום אירוח מקומי: 8080:

4. מבנה הפרויקט

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

המסגרת יוצרת כמה חבילות המבוססות על מוסכמות.

שיעורי Java מסווגים תחת conf, בקרים, דגמים, ו שירותים ספריות ב src / main / java.

כְּמוֹ כֵן, src / test / java מקיים שיעורי מבחן יחידה מתאימים.

ה נופים ספריה תחת src / main / java מכיל את קבצי ה- HTML. וה src / main / java / נכסים הספרייה מכילה משאבים כמו תמונות, גיליונות סגנונות וקבצי JavaScript.

5. בקר

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

ראשית, בואו נדון בכמה מוסכמות להלן:

  • צור כיתה ב בקרים חבילה והסיומת עם בקר
  • שיטה המשרתת את הבקשה חייבת להחזיר את אובייקט ה- תוֹצָאָה מעמד

בואו ניצור את ApplicationController בכיתה בשיטה פשוטה לעיבוד ה- HTML:

@Singleton מחלקה ציבורית ApplicationController {אינדקס התוצאות הציבורי () {להחזיר Results.html (); }}

הנה ה אינדקס השיטה תעשה HTML על ידי קריאה ל- html שיטת ה- תוצאות מעמד. ה תוֹצָאָה האובייקט מכיל את כל מה שנדרש כדי לעבד את התוכן כמו קוד תגובה, כותרות ועוגיות.

הערה: Guice's @קְלָף בּוֹדֵד ביאור מאפשר רק מופע אחד של הבקר בכל האפליקציה.

6. תצוגה

בשביל ה אינדקס שיטה, Ninja יחפש את קובץ ה- HTML - אינדקס.ftl.html תחת תצוגות / ApplicationController מַדרִיך.

Ninja משתמש במנוע התבנית Freemarker לצורך עיבוד HTML. אז כל הקבצים תחת נופים צריך שיהיה .ftl.html סיומת.

בואו ניצור את אניndex.ftl.html קובץ עבור אינדקס שיטה:

  Ninja: משתמש האינדקס Json 

הנה, השתמשנו בתנאי הנינג'ה i18n תג כדי להשיג את שלום נכס מה message.properties קוֹבֶץ. נדון בכך בהמשך בקטע הבינלאומי בהמשך.

7. מסלול

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

נינג'ה משתמש ב- מסלולים בכיתה ב conf חבילה למיפוי כתובת URL לשיטה מסוימת של הבקר.

בואו נוסיף מסלול לגישה ל אינדקס שיטת ה- ApplicationController:

נתיבי מחלקה ציבורית מיישמים את ApplicationRoutes {@Override public void init (Router router) {router.GET (). route ("/ index"). with (ApplicationController :: index); }}

זהו זה! כולנו מוכנים לגשת ל- אינדקס דף ב localhost: 8080 / אינדקס:

8. טיוח JSON

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

בואו נוסיף את userJson שיטה ב ApplicationController מחלק ומציג את התוכן של פשוט מפת גיבוב ב- JSON:

userJson () תוצאות תוצאות ציבוריות {HashMap userMap = HashMap חדש (); userMap.put ("שם", "נורמן לואיס"); userMap.put ("דוא"ל", "[דוא"ל מוגן]"); להחזיר Results.json (). לדקלם (משתמש); }

לאחר מכן נוסיף את הניתוב הנדרש לגישה ל- userJson:

router.GET (). נתיב ("/ userJson"). עם (ApplicationController :: userJson);

כעת, אנו יכולים לעבד את JSON באמצעות localhost: 8080 / userJson:

9. שירות

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

ראשית, בואו ליצור פשוט שירות משתמש ממשק להגדרת ההפשטה:

ממשק ציבורי UserService {HashMap getUserMap (); }

לאחר מכן, ניישם את שירות משתמש ממשק ב UserServiceImpl בכיתה ולדרוס את getUserMap שיטה:

מחלקה ציבורית UserServiceImpl מיישמת את UserService {@Override ציבורי HashMap getUserMap () {HashMap userMap = חדש HashMap (); userMap.put ("שם", "נורמן לואיס"); userMap.put ("דוא"ל", "[דוא"ל מוגן]"); להחזיר userMap; }}

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

בואו נוסיף את הכריכה ב- מודול בכיתה זמינה conf חֲבִילָה:

מודול המחלקה הציבורית @Singleton מרחיב את AbstractModule {confected void configure () {bind (UserService.class) .to (UserServiceImpl.class); }}

אחרון, נזריק את שירות משתמש תלות ב ApplicationController בשיעור באמצעות @לְהַזרִיק ביאור:

מחלקה ציבורית ApplicationController {@Inject UserService userService; // ...}

לפיכך, כולנו אמורים להשתמש ב- שירות משתמששל getUserMap שיטה ב ApplicationController:

userJson תוצאה ציבורית () {HashMap userMap = userService.getUserMap (); להחזיר Results.json (). render (userMap); }

10. היקף פלאש

Ninja מספקת דרך פשוטה אך יעילה לטפל בהצלחה ובהודעות שגיאה מבקשות באמצעות התכונה שלה שנקראת Flash Scope.

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

תוצאה ציבורית showFlashMsg (FlashScope flashScope) {flashScope.success ("הודעת הצלחה"); flashScope.error ("הודעת שגיאה"); להחזיר Results.redirect ("/ home"); }

הערה: הפניה מחדש שיטת ה- תוצאות class מפנה את היעד לכתובת האתר שסופקה.

לאחר מכן נוסיף ניתוב /הֶבזֵק אל ה showFlashMsg שיטה ולשנות את התצוגה כדי להציג את הודעות הבזק:

 $ {flash.error} $ {flash.success} 

עכשיו, אנחנו יכולים לראות את פלאשסקופ בפעולה בשעה localhost: 8080 / פלאש:

11. בינלאומיות

Ninja מספק תכונה בינלאומית מובנית שקל להגדיר אותה.

ראשית נגדיר את רשימת השפות הנתמכות ב- application.conf קוֹבֶץ:

application.languages ​​= fr, en

לאחר מכן ניצור את קובץ המאפיינים המוגדר כברירת מחדל - messages.properties לאנגלית - עם זוגות ערך מפתח להודעות:

header.home = בית! helloMsg = שלום, ברוך הבא למסגרת הנינג'ה!

באופן דומה, אנו יכולים להוסיף את קוד השפה בשם הקובץ עבור קובץ מאפיינים ספציפי לשפה - למשל, הודעות_פר. נכסים קובץ לצרפתית:

header.home = Accueil! helloMsg = Bonjour, bienvenue dans Ninja Framework!

לאחר שהתצורות מוכנות, אנו יכולים לאפשר בינלאומי בקלות ApplicationController מעמד.

יש לנו שתי דרכים, באמצעות ה- לאנג כיתה או הודעות מעמד:

@Singleton מחלקה ציבורית ApplicationController {@Inject Lang lang; @ הזרקת הודעות msg; // ...}

ואז, באמצעות לאנג בכיתה, אנו יכולים להגדיר את שפת התוצאה:

תוצאת התוצאה = Results.html (); lang.setLanguage ("fr", תוצאה);

באופן דומה, באמצעות הודעות בכיתה, אנו יכולים לקבל הודעה ספציפית לשפה:

שפה אופציונלית = Optional.of ("fr"); מחרוזת helloMsg = msg.get ("helloMsg", שפה) .get ();

12. התמדה

Ninja תומכת ב- JPA 2.0 ומשתמשת ב- Hibernate כדי לאפשר התמדה ביישום האינטרנט. כמו כן, הוא מציע תמיכה מובנית במסד נתונים H2 לפיתוח מהיר.

12.1. דֶגֶם

אנו דורשים יֵשׁוּת בכיתה להתחברות לטבלה במסד הנתונים. לשם כך, נינג'ה עוקב אחר המוסכמה של חיפוש אחר שיעורי היישות ב דגמים חֲבִילָה. אז ניצור את מִשׁתַמֵשׁ מחלקת ישויות שם:

משתמש בכיתה ציבורית @Entity {@Id @GeneratedValue (אסטרטגיה = GenerationType.AUTO) מזהה ארוך; שם פרטי ציבורי; דוא"ל מחרוזת ציבורי; }

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

12.2. תְצוּרָה

בתצורת מצב שינה, Ninja מצפה ש- התמדה.קסמל קובץ להיות ב- src / main / java / META-INF מַדרִיך:

    org.hibernate.jpa.HibernatePersistenceProvider 

לאחר מכן נוסיף את פרטי חיבור מסד הנתונים ל application.conf:

ninja.jpa.persistence_unit_name = dev_unit db.connection.url = jdbc: h2: ./ devDb db.connection.username = sa db.connection.password =

12.3. EntityManager

אחרון, נזריק את המופע של ה- EntityManager בתוך ה ApplicationController באמצעות Guice's ספק מעמד:

מחלקה ציבורית ApplicationController {@Inject Provider entityManagerProvider; // ...}

אז אנחנו מוכנים להשתמש ב- EntityManager להתמיד ב- מִשׁתַמֵשׁ לְהִתְנַגֵד:

@ תנועה ציבורית תעסוקתית insertUser (משתמש משתמש) {EntityManager entityManager = entityManagerProvider.get (); entityManager.persist (משתמש); entityManager.flush (); להחזיר Results.redirect ("/ home"); }

באופן דומה, אנו יכולים להשתמש ב- EntityManager לקרוא את מִשׁתַמֵשׁ אובייקט מה- DB:

@UnitOfWork פומבי fetchUsers () {EntityManager entityManager = entityManagerProvider.get (); שאילתה q = entityManager.createQuery ("בחר x ממשתמש x"); משתמשים ברשימה = (רשימה) q.getResultList (); להחזיר Results.json (). render (משתמשים); }

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

13. אימות

Ninja מספקת תמיכה מובנית לאימות שעועית על ידי ביצוע המפרט JSR303.

בואו נבדוק את התכונה על ידי הערת נכס ב- מִשׁתַמֵשׁ ישות עם @לא ריק ביאור:

משתמש בכיתה ציבורית {// ... @NotNull מחרוזת ציבורית שם פרטי; }

לאחר מכן, נשנה את הדברים שנדונו כבר insertUser שיטה ב ApplicationController כדי לאפשר את האימות:

@ Transactional Public תוסף משתמש משתמש (FlashScope flashScope, @ JSR303Validation User user, Validation validation) {if (validation.getViolations (). Size ()> 0) {flashScope.error ("שגיאת אימות: לא ניתן ליצור משתמש"); } אחר {EntityManager entityManager = entitiyManagerProvider.get (); entityManager.persist (משתמש); entityManager.flush (); flashScope.success ("משתמש" + משתמש + "" נוצר בהצלחה "); } להחזיר Results.redirect ("/ home"); }

השתמשנו בזה של נינג'ה @ JSR303 אימות ביאור כדי לאמת את האימות של מִשׁתַמֵשׁ לְהִתְנַגֵד. לאחר מכן, הוספנו את מַתַן תוֹקֵף טיעון לעבוד עם אימות באמצעות שיטות כמו יש הפרות, getViolations, ו addViolation.

אחרון, ה פלאשסקופ האובייקט משמש להצגת שגיאת האימות על המסך.

הערה: Ninja עוקב אחר המפרט JSR303 לאימות שעועית. עם זאת, מפרט JSR380 (שעועית אימות 2.0) הוא הסטנדרט החדש.

14. מסקנה

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

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

במקביל, ראינו כמה תכונות בסיסיות כמו מסלולים, עיבוד JSON, בינאום והיקפי פלאש.

אחרון, בדקנו את תמיכת האימות המסופקת על ידי המסגרת.

כרגיל, כל יישומי הקוד זמינים ב- GitHub.


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