מדריך למאפייני פלאש ביישום אינטרנט באביב

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

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

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

2. יסודות תכונות פלאש

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

2.1. פרסם / הפנה מחדש / קבל תבנית

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

כדי למתן את נושא העיבוד הכפול, אנו יכולים ליצור את זרימת העבודה כרצף של בקשות מקושרות בסדר מסוים - כלומר POST, REDIRECT ו- GET. בקיצור, אנו קוראים לזה דפוס פרסום / הפניה מחדש / קבל (PRG) להגשת טופס.

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

2.2. מחזור חיים של תכונות פלאש

להשלמת הגשת הטופס באמצעות דפוס PRG, נצטרך להעביר מידע מבקשת ה- POST הראשונית לבקשת ה- GET הסופית לאחר הפניה מחדש.

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

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

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

RedirectAttributes addFlashAttribute (מחרוזת attributeName, @Nullable אובייקט attributeValue); RedirectAttributes addFlashAttribute (Object attributeValue); מפה getFlashAttributes ();

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

2.3. FlashMap מבנה נתונים

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

בואו נסתכל על ההגדרה FlashMap מעמד:

מחלקה סופית ציבורית FlashMap מאריך את HashMap מיישמת השוואה {@Nullable Private String targetRequestPath; סופי פרטי MultiValueMap targetRequestParams = חדש LinkedMultiValueMap (4); expirationTime פרטי פרטי = -1; }

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

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

  • תְפוּקָה FlashMap משמש בבקשת POST כדי לשמור זמנית את תכונות הפלאש ולשלוח אותם לבקשת ה- GET הבאה לאחר ההפניה מחדש
  • קֶלֶט FlashMap משמש בבקשת GET הסופית לגישה לתכונות הבזק לקריאה בלבד שנשלחו על ידי בקשת ה- POST הקודמת לפני ההפניה מחדש

2.4. FlashMapManager ו RequestContextUtils

כפי שהשם מרמז, אנו יכולים להשתמש FlashMapManager לנהל את FlashMap מקרים.

ראשית, נסתכל על ההגדרה ממשק אסטרטגיה זה:

ממשק ציבורי FlashMapManager {@Nullable FlashMap retrieveAndUpdate (בקשת HttpServletRequest, תגובה HttpServletResponse); void saveOutputFlashMap (FlashMap flashMap, HttpServletRequest בקשה, HttpServletResponse תגובה); }

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

לאחר מכן, בואו להכיר כמה שיטות סטטיות הקיימות ב- RequestContextUtils מחלקת תועלת מופשטת.

כדי לשמור על המיקוד שלנו במסגרת מדריך זה, נגביל את הכיסוי שלנו לשיטות הרלוונטיות לתכונות הבזק:

מפה סטטית ציבורית getInputFlashMap (בקשת HttpServletRequest); FlashMap סטטי ציבורי getOutputFlashMap (בקשת HttpServletRequest); FlashMapManager סטטי ציבורי getFlashMapManager (בקשת HttpServletRequest); בטל סטטי פומבי saveOutputFlashMap (מיקום מחרוזת, בקשת HttpServletRequest, תגובה HttpServletResponse);

אנו יכולים להשתמש בשיטות אלה כדי לאחזר את הקלט / הפלט FlashMap מקרים, קבל את FlashMapManager לבקשה, ושמור א FlashMap למשל.

3. מקרה שימוש בהגשת טופס

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

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

3.1. תצורת Thymeleaf

נשתמש Thymeleaf, שהוא מנוע תבנית Java ליצירת דפי אינטרנט דינמיים באמצעות תבניות HTML פשוטות.

ראשית, עלינו להוסיף את אביב-אתחול-התחלה-טימילית התלות בפרויקטים שלנו pom.xml:

 org.springframework.boot spring-boot-starter-thymeleaf 2.2.1.RELEASE 

לאחר מכן, אנו יכולים להגדיר כמה מהתכונות הספציפיות ל- Thymeleaf ב- a שלנוpplication.properties הקובץ נמצא ב- src / main / resources מַדרִיך:

spring.thymeleaf.cache = spring false.thymeleaf.enabled = spring.thymeleaf.prefix = path path: / templates / spring.thymeleaf.suffix = .html

לאחר שהגדרנו מאפיינים אלה, כעת ניתן ליצור את כל התצוגות שלנו תחת ה- / src / main / resources / templates מַדרִיך. בתורו, אביב יוסיף את .html סיומת לכל התצוגות שצוינו בתוך הבקר שלנו.

3.2. מודל תחום

בהמשך, בואו להגדיר את מודל התחום שלנו ב שִׁיר מעמד:

שיר בכיתה ציבורית {כותרת מחרוזת פרטית; סופר מחרוזת פרטי; גוף מחרוזת פרטי; }

יתר על כן, אנו יכולים להוסיף את isValidPoem () שיטה סטטית אצלנו שִׁיר בכיתה כדי לעזור לנו לאמת שהשדות אינם מאפשרים מחרוזות ריקות:

בוליאני סטטי ציבורי isValidPoem (שיר שיר) {חזרה לשיר! = null && Strings.isNotBlank (poet.getAuthor ()) && Strings.isNotBlank (poet.getBody ()) && Strings.isNotBlank (poet.getTitle ()); }

3.3. צור טופס

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

@GetMapping ("/ שיר / הגש") ציבורי מחרוזת submitGet (מודל מודל) {model.addAttribute ("שיר", שיר חדש ()); החזר "הגש"; }

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

בנוסף, אנו רוצים לאגד את טופס ה- POST עם תכונת המודל שִׁיר:

3.4. פרסם / הפנה מחדש / קבל זרימת הגשה

כעת, בואו נפעיל את פעולת ה- POST עבור הטופס. לשם כך, ניצור את / שיר / הגש נקודת סיום ב PoemSubmission בקר שיגיש את בקשת ה- POST:

@PostMapping ("/ שיר / הגש") Public RedirectView submitPost (HttpServletRequest בקשה, @ModelAttribute שיר שיר, RedirectAttributes redirectAttributes) {if (Poem.isValidPoem (שיר)) {redirectAttributes.addFlashAttribute ("שיר", שיר); להחזיר RedirectView חדש ("/ שיר / הצלחה", נכון); } אחר {להחזיר RedirectView חדש ("/ שיר / הגש", נכון); }}

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

כעת עלינו להציג דף אישור למשתמש, אז בואו נשתמש בפונקציונליות עבור ה- / שיר / הצלחה נקודת קצה שתשרת את בקשת ה- GET:

@GetMapping ("/ שיר / הצלחה") מחרוזת ציבורית getSuccess (HttpServletRequest בקשה) {Map inputFlashMap = RequestContextUtils.getInputFlashMap (בקשה); אם (inputFlashMap! = null) {שיר שיר = (שיר) inputFlashMap.get ("שיר"); להחזיר "הצלחה"; } אחר {return "redirect: / שיר / הגש"; }}

חשוב לציין כאן שאנחנו צריך לאמת את FlashMap לפני שנחליט להפנות מחדש לדף ההצלחה.

לבסוף, בואו נשתמש בתכונת הבזק שִׁיר בתוך דף ההצלחה שלנו כדי להציג את כותרת השיר שהגיש המשתמש:

לחץ כאן להגשת מידע נוסף.

4. מסקנה

במדריך זה למדנו כמה מושגים סביב מאפייני ההודעה Post / Redirect / Get ו- Flash. כמו כן, ראינו מאפייני פלאש בפעולה עם הגשת טפסים פשוטה ביישום אינטרנט של אתחול Spring.

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


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