ניפוי באגים ב- Spring MVC 404 "לא נמצא מיפוי לבקשת HTTP"

1. הקדמה

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

כמו בכל יישום אינטרנט או אתר כלשהו, ​​Spring MVC מחזיר את קוד התגובה HTTP 404 כאשר לא ניתן למצוא את המשאב המבוקש. במדריך זה נבחן סיבות שכיחות לשגיאות 404 באביב MVC.

2. סיבות אפשריות לתגובה 404

2.1. URI שגוי

בוא נגיד שיש לנו a GreetingController שממופה ל /בְּרָכָה ועושה ברכה.jsp:

@Controller מחלקה ציבורית GreetingController {@RequestMapping (value = "/ greeting", method = RequestMethod.GET) public String get (ModelMap model) {model.addAttribute ("message", "Hello, World!"); להחזיר "ברכה"; }}

התצוגה המקבילה הופכת את הערך של ה- הוֹדָעָה מִשְׁתַנֶה:

   בְּרָכָה 

$ {message}

כצפוי, הגשת בקשת GET ל /בְּרָכָה עובד:

תלתל // localhost: 8080 / ברכה

נראה דף HTML עם ההודעה "שלום עולם":

  בְּרָכָה 

שלום עולם!

אחת הסיבות השכיחות ביותר לראות 404 היא שימוש ב- URI שגוי. לדוגמה, יהיה זה שגוי להגיש בקשת GET /ברכות במקום /בְּרָכָה:

תלתל // localhost: 8080 / ברכות

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

[http-nio-8080-exec-6] WARN o.s.web.servlet.PageNotFound - לא נמצא מיפוי לבקשת HTTP עם URI [/ ברכות] ב- DispatcherServlet עם השם 'mvc'

והלקוח יראה דף שגיאה:

  בית 

כדי להימנע מכך, עלינו לוודא שהזנו את ה- URI כהלכה.

2.2. מיפוי שגוי של סרוולט

כפי שהוסבר קודם, DispatcherServlet הוא הבקר הקדמי באביב MVC. לפיכך, בדיוק כמו ביישום מבוסס servlet סטנדרטי, עלינו ליצור מיפוי עבור servlet באמצעות ה- web.xml קוֹבֶץ.

אנו מגדירים את סרוולט בתוך סרוולט לתייג ולמפות אותו ל- URI בתוך ה- מיפוי סרוולט תָג. עלינו להבטיח שערכו של דפוס url נכון כי זה די מקובל לראות הצעות היכן שמומן סרוולט ל- “/ *” - שימו לב לכוכבית הנגררת:

    mvc org.springframework.web.servlet.DispatcherServlet 1 mvc / * 

עכשיו, אם נבקש /בְּרָכָה, נראה אזהרה ביומני השרת:

תלתל // localhost: 8080 / ברכה
WARN o.s.web.servlet.PageNotFound - לא נמצא מיפוי לבקשת HTTP עם URI [/WEB-INF/view/greeting.jsp] ב- DispatcherServlet עם השם 'mvc'

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

כדי לתקן את השגיאה, עלינו למפות DispatcherServlet אל “/” (ללא הכוכבית הנגררת) במקום זאת:

 mvc / 

לאחר תיקון המיפוי, הכל אמור לעבוד כראוי. מבקש /בְּרָכָה מציג כעת את ההודעה "שלום עולם!":

תלתל // localhost: 8080 / ברכה
  בְּרָכָה 

שלום עולם!

הנימוק מאחורי הבעיה הוא שאם אנו ממפים DispatcherServlet ל /*, ואז אנו אומרים לבקשה כי כל בקשה שמגיעה לבקשתנו אמורה להיות מוגשת על ידי DispatcherServlet. עם זאת, זו לא גישה נכונה כי DispatcherServlet אינו מסוגל לעשות זאת. במקום זאת, אביב MVC מצפה ליישום של ViewResolver לשרת תצוגות כגון קבצי JSP.

3. מסקנה

במאמר מהיר זה, הסברנו כיצד לבצע ניפוי שגיאות 404 באביב MVC. עברנו את שתי הסיבות הנפוצות ביותר לקבלת תגובה 404 מהיישום שלנו באביב. הראשון היה שימוש ב- URI שגוי בעת הגשת הבקשה. השנייה הייתה מיפוי ה- DispatcherServlet לא נכון דפוס url ב web.xml.

כמו תמיד, ניתן למצוא את היישום המלא של מדריך זה ב- Github.