הפניית סרוולט לעומת קדימה

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

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

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

2. תלות Maven

ראשית, בואו נוסיף את התלות של Servlet Maven:

 javax.servlet javax.servlet-api 4.0.0 

הגרסה האחרונה תוכל למצוא כאן.

3. קדימה

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

ריק מוגן doGet (HttpServletRequest req, HttpServletResponse resp) {RequestDispatcher dispatcher = getServletContext () .getRequestDispatcher ("/ מועבר"); dispatcher.forward (req, resp); }

אנחנו תופסים RequestDispatcher התייחסות מה- Servlet האב והצביעו על משאב שרת אחר.

במילים פשוטות, זה יעביר את הבקשה.

כאשר לקוח מגיש בקשה אל // localhost: 8081 / שלום? שם = דניס, ההיגיון הזה יפעל והבקשה תועבר ל"/ הועבר“.

4. הפניה מחדש

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

ריק מוגן doGet (HttpServletRequest req, HttpServletResponse resp) {resp.sendRedirect (req.getContextPath () + "/ מנותב מחדש"); } 

אנו משתמשים באובייקט תגובה מקורי להפניית בקשה זו לכתובת אתר אחרת: “/ מנותב מחדש ".

כאשר לקוח מגיש בקשה אל // localhost: 8081 / ברוך הבא? name = דניס, הבקשה תנותב אל // localhost: 8081 / מנותב מחדש.

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

5. הבדלים

העברנו את הפרמטר “שֵׁם”עם ערך בשני המקרים. במילים פשוטות, בקשות מועברות עדיין נושאות ערך זה, אך בקשות מנותבות אינן.

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

להלן רשימה של הבדלים גדולים בין קדימה של סרוולט להפניה מחדש:

קָדִימָה:

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

הפניה מחדש:

  • הבקשה מופנית למשאב אחר
  • הלקוח יראה את כתובת האתר משתנה לאחר ההפניה מחדש
  • נוצרת בקשה חדשה
  • הפניה בדרך כלל משמשת בדפוס פוסט / הפניה / קבל / קבל פיתוח אתרים

6. מסקנה

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

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

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

כמו תמיד, ניתן למצוא את קוד הדוגמה ב- GitHub.


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