HandlerAdapters באביב MVC

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

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

2. מהו מתאם מטפל?

ה HandlerAdapter הוא בעצם ממשק המאפשר את הטיפול בבקשות HTTP בצורה גמישה מאוד ב- Spring MVC.

הוא משמש בשילוב עם ה- HandlerMapping, הממפה שיטה לכתובת אתר ספציפית.

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

בואו נסתכל על שיטות שונות הקיימות בממשק זה:

ממשק ציבורי HandlerAdapter {תומך בוליאני (מטפל באובייקטים); ידית ModelAndView (בקשת HttpServletRequest, תגובה HttpServletResponse, מטפל באובייקטים) זורקת חריג; long getLastModified (בקשת HttpServletRequest, מטפל באובייקטים); }

ה תומך API משמש כדי לבדוק אם מופעל מטפל מסוים נתמך או לא. יש לקרוא לשיטה זו תחילה לפני שתתקשר ל- ידית() שיטה של ​​ממשק זה, על מנת לוודא אם מופעל המטפל נתמך או לא.

ה ידית API משמש לטיפול בקשת HTTP מסוימת. שיטה זו אחראית להפעיל את המטפל על ידי העברת ה- HttpServletRequest ו HttpServletResponse אובייקט כפרמטר. לאחר מכן המטפל מבצע את לוגיקת היישום ומחזיר א ModelAndView אובייקט, שעובד לאחר מכן על ידי DispatcherServlet.

3. תלות של Maven

נתחיל בתלות של Maven שיש להוסיף אליה pom.xml:

 org.springframework spring-webmvc 5.2.8. שחרור 

הגרסה האחרונה של אביב-webmvc חפץ ניתן למצוא כאן.

4. סוגי HandlerAdapter

4.1. SimpleControllerHandlerAdapter

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

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

בואו נגדיר מחלקת בקר פשוטה, תוך שימוש בסגנון הבקר הישן יותר (יישום ה- בקר מִמְשָׁק):

מחלקה ציבורית SimpleController מיישמת בקר {@Override public ModelAndView handleRequest (HttpServletRequest בקשה, HttpServletResponse תגובה) זורק חריג {ModelAndView model = חדש ModelAndView ("ברכה"); model.addObject ("הודעה", "דינש מדוואל"); מודל החזרה; }}

תצורת ה- XML ​​הדומה:

ה BeanNameUrlHandlerMapping class הוא מחלקת המיפוי של מתאם המטפל הזה.

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

4.2. SimpleServletHandlerAdapter

מתאם מטפל זה מאפשר שימוש בכל סרוולט לעבוד עם DispatcherServlet לטיפול בבקשה. זה מעביר את הבקשה מ DispatcherServlet למתאים סרוולט בכיתה על ידי קריאה שלה שֵׁרוּת() שיטה.

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

4.3. ביאור MethodHandlerAdapter

מחלקת מתאם זו משמשת לביצוע השיטות בהן רשום הערות @ בקשת מיפוי ביאור. הוא משמש למיפוי השיטות על בסיס שיטות HTTP ונתיבי HTTP.

מחלקת המיפוי של מתאם זה היא ברירת מחדל AnnotationHandlerMapping, המשמש לעיבוד ה- @ בקשת מיפוי ביאור ברמת הסוג ו ביאור MethodHandlerAdaptor משמש לעיבוד ברמת שיטה.

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

בואו נגדיר מחלקת בקר:

@Controller Class class AnnotationHandler {@RequestMapping ("/ annotedName") public ModelAndView getEmployeeName () {ModelAndView model = ModelAndView חדש ("ברכה"); model.addObject ("הודעה", "דינש"); מודל החזרה; }}

ה @בקר ביאור מציין כי מעמד זה משרת את התפקיד של בקר.

ה @ בקשת מיפוי הערות ממפות את getEmployeeName () שיטה לכתובת האתר /שֵׁם.

ישנן שתי דרכים שונות להגדרת תצורה של מתאם זה תלוי אם היישום משתמש בתצורה מבוססת Java או בתצורה מבוססת XML. הבה נבחן את הדרך הראשונה באמצעות תצורת Java:

@ComponentScan ("com.baeldung.spring.controller") @Configuration @EnableWebMvc מחלקה ציבורית ApplicationConfiguration מיישם את WebMvcConfigurer {@Bean public InternalResourceViewResolver jspViewResolver () {InternalResourceViewResolver שעועית = רזולוציה חדשה bean.setPrefix ("/ WEB-INF /"); bean.setSuffix (". jsp"); שעועית להחזיר; }}

אם היישום משתמש בתצורת XML, ישנן שתי גישות שונות לתצורה של מתאם מטפל זה בהקשר של XML של יישום אינטרנט. בואו נסתכל על הגישה הראשונה שהוגדרה בקובץ spring-servlet_AnnotationMethodHandlerAdapter.xml:

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

הבה נבחן את הגישה השנייה:

ה תג ירשום באופן אוטומטי את שתי הכיתות הללו עם MVC באביב. מתאם זה הוצא משימוש באביב 3.2 ומתאם מטפל חדש נקרא RequestMappingHandlerAdapter הוצג באביב 3.1.

4.4. RequestMappingHandlerAdapter

כיתת מתאם זו הוצגה באביב 3.1, תוך ביטול של ביאור MethodHandlerAdaptor מתאם מטפל באביב 3.2.

זה משמש עם RequestMappingHandlerMapping כיתה, אשר מבצעת שיטות עם הערות @ בקשת מיפוי.

ה RequestMappingHandlerMapping משמש כדי לשמור על מיפוי ה- URI של הבקשה למטפל. לאחר קבלת המטפל, ה- DispatcherServlet שולח את הבקשה למתאם המטפל המתאים, ואז קורא ל- handlerMethod ().

המיפויים ברמת הסוג וברמת השיטה עובדו בשני שלבים שונים בגרסת האביב לפני 3.1.

השלב הראשון היה בחירת הבקר לפי DefaultAnnotationHandlerMapping והשלב השני היה להפעיל את השיטה בפועל על ידי ביאור MethodHandlerAdapter.

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

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

@Controller מחלקה ציבורית RequestMappingHandler {@RequestMapping ("/ requestName") ציבורית ModelAndView getEmployeeName () {ModelAndView model = ModelAndView חדש ("ברכה"); model.addObject ("הודעה", "Madhwal"); מודל החזרה; }}

ישנן שתי דרכים שונות להגדרת תצורה של מתאם זה, תלוי אם היישום משתמש בתצורה מבוססת Java או בתצורה מבוססת XML.

בואו נסתכל על הדרך הראשונה באמצעות תצורת Java:

@ComponentScan ("com.baeldung.spring.controller") @Configuration @EnableWebMvc מחלקה ציבורית ServletConfig מיישם את WebMvcConfigurer {@Bean public InternalResourceViewResolver jspViewResolver () {InternalResourceViewResolver שעועית = רזולוציה חדשה bean.setPrefix ("/ WEB-INF /"); bean.setSuffix (". jsp"); שעועית להחזיר; }}

אם היישום משתמש בתצורת XML, קיימות שתי גישות שונות להגדרת מתאם מטפל זה בהקשר של XML של יישום אינטרנט. בואו נסתכל על הגישה הראשונה שהוגדרה בקובץ spring-servlet_RequestMappingHandlerAdapter.xml:

והנה הגישה השנייה:

תג זה ירשום באופן אוטומטי את שני השיעורים הללו ב- Spring MVC.

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

4.5. HttpRequestHandlerAdapter

מתאם מטפל זה משמש למטפלים המעבדים HttpRequestס. זה מיישם את HttpRequestHandler ממשק, המכיל יחיד handleRequest () שיטה לעיבוד הבקשה וליצירת התגובה.

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

5. הפעלת האפליקציה

אם היישום נפרס ב- מארח מקומי עם מספר היציאה 8082 ושורש ההקשר הוא מטפלי אביב-mvc:

// localhost: 8082 / spring-mvc-handlers /

6. מסקנה

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

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

את קוד המקור של הדרכה זו ניתן למצוא בפרויקט GitHub.


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