דפי שגיאה מותאמים אישית עם אביב MVC

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

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

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

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

הנחת העבודה היא שלקורא די נוח לעבוד עם אביב MVC; אם לא, זו דרך נהדרת להתחיל.

מאמר זה מתמקד ב- MVC באביב. המאמר שלנו התאמה אישית של דף שגיאת תווית לבנה מתאר כיצד ליצור דף שגיאה מותאם אישית באביב אתחול.

2. הצעדים הפשוטים

נתחיל בצעדים הפשוטים שאנו נבצע כאן:

  1. ציין כתובת אתר אחת / שגיאות ב web.xml הממפה לשיטה שתטפל בשגיאה בכל פעם שנוצרת שגיאה
  2. צור בקר שנקרא ErrorController עם מיפוי / שגיאות
  3. בדוק את קוד השגיאה של HTTP בזמן הריצה והצג הודעה על פי קוד השגיאה של HTTP. לדוגמה, אם נוצרת שגיאת 404, המשתמש צריך לראות הודעה כמו 'המשאב לא נמצא', ואילו עבור שגיאה 500, המשתמש צריך לראות משהו על הקווים של 'מצטער! נוצרה שגיאת שרת פנימית בסוף שלנו '

3. ה web.xml

אנו מתחילים להוסיף את השורות הבאות לשלנו web.xml:

 / שגיאות 

שים לב שתכונה זו זמינה רק בגרסאות Servlet הגדולות מ -3.0.

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

הערת צד מהירה כאן - לתצורה המתאימה של Java Servlet אין לצערנו API להגדרת דף השגיאה - כך שבמקרה זה, אנו זקוקים למעשה web.xml.

4. הבקר

הלאה, כעת אנו יוצרים את שלנו ErrorController. אנו יוצרים שיטת איחוד אחת המיירטת את השגיאה ומציגה דף שגיאה:

מחלקה ציבורית @Controller ErrorController {@RequestMapping (value = "errors", method = RequestMethod.GET) public ModelAndView renderErrorPage (HttpServletRequest httpRequest) {ModelAndView errorPage = ModelAndView חדש ("errorPage"); מחרוזת errorMsg = ""; int httpErrorCode = getErrorCode (httpRequest); מתג (httpErrorCode) {case 400: {errorMsg = "קוד שגיאה Http: 400. בקשה רעה"; לשבור; } מקרה 401: {errorMsg = "קוד שגיאה Http: 401. לא מורשה"; לשבור; } מקרה 404: {errorMsg = "קוד שגיאה Http: 404. המשאב לא נמצא"; לשבור; } מקרה 500: {errorMsg = "קוד שגיאה Http: 500. שגיאת שרת פנימית"; לשבור; }} errorPage.addObject ("errorMsg", errorMsg); return errorPage; } פרטי int getErrorCode (HttpServletRequest httpRequest) {return (Integer) httpRequest .getAttribute ("javax.servlet.error.status_code"); }} 

5. חזית הקצה

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

    בית 

6. בדיקות

אנו מדמים שתיים מהשגיאות הנפוצות ביותר המתרחשות בכל יישום: שגיאת HTTP 404 ושגיאת HTTP 500.

הפעל את השרת והמשך אל localhost: 8080 / spring-mvc-xml / invalidUrl.מכיוון שכתובת אתר זו אינה קיימת, אנו מצפים לראות את דף השגיאה שלנו עם ההודעה 'קוד שגיאה Http: 404. לא נמצא משאב '.

בואו נראה מה קורה כאשר אחת משיטות המטפלות זורקת א NullPointerException. אנו מוסיפים את השיטה הבאה ל ErrorController:

@RequestMapping (value = "500Error", method = RequestMethod.GET) public void throwRuntimeException () {throw new NullPointerException ("זורק חריג מצביע אפס"); }

עבור אל localhost: 8080 / spring-mvc-xml / 500Error. אתה אמור לראות מסך לבן עם ההודעה 'קוד שגיאה Http: 500. שגיאת שרת פנימית'.

7. מסקנה

ראינו כיצד להגדיר דפי שגיאה עבור קודי HTTP שונים עם Spring MVC. יצרנו דף שגיאה יחיד שבו הודעת שגיאה מוצגת באופן דינמי בהתאם לקוד השגיאה HTTP.