מדריך מהיר לבקרי אביב

1. הקדמה

במאמר זה נתמקד בתפיסת ליבה ב- Spring MVC - בקרים.

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

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

ברמה גבוהה מאוד, הנה האחריות העיקרית שאנו בוחנים:

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

להלן תרשים מהיר לזרימה ברמה הגבוהה אביב MVC:

כפי שאתה יכול לראות, DispatcherServlet משחק את התפקיד של בקר קדמי בארכיטקטורה.

התרשים חל גם על בקרי MVC טיפוסיים וגם על בקרי RESTful - עם כמה הבדלים קטנים (שתואר להלן).

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

מַרגִיעַ יישומים נועדו להיות מוכווני שירות ולהחזיר נתונים גולמיים (בדרך כלל JSON / XML). מכיוון שיישומים אלה אינם מבצעים כל עיבוד תצוגה, אין צפו במחליטים - ה בקר צפוי בדרך כלל לשלוח נתונים ישירות דרך תגובת HTTP.

נתחיל בבקרים בסגנון MVC0.

3. תלות Maven

על מנת להיות מסוגלים לעבוד איתו אביב MVCבואו נתמודד עם התלות של Maven תחילה:

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

כדי לקבל את הגרסה האחרונה של הספרייה, עיין ב spring-webmvc ב- Maven Central.

4. Project Web Config

כעת, לפני שנסתכל על הבקרים עצמם, ראשית עלינו להקים פרויקט אינטרנט פשוט ולעשות מהיר סרוולט תְצוּרָה.

בוא נראה קודם איך DispatcherServlet ניתן להגדיר ללא שימוש web.xml - אלא במקום להשתמש באתחול:

מחלקה ציבורית StudentControllerConfig מיישם את WebApplicationInitializer {@Override public void onStartup (ServletContext sc) זורק ServletException {AnnotationConfigWebApplicationContext root = new AnnotationConfigWebApplicationContext (); root.register (WebConfig.class); root.refresh (); root.setServletContext (sc); sc.addListener (ContextLoaderListener חדש (שורש)); DispatcherServlet dv = DispatcherServlet חדש (GenericWebApplicationContext חדש ()); ServletRegistration.Dynamic appServlet = sc.addServlet ("test-mvc", dv); appServlet.setLoadOnStartup (1); appServlet.addMapping ("/ test / *"); }}

כדי להגדיר דברים ללא XML, ודא שיש servlet-api 3.1.0 במסלול הכיתה שלך.

הנה איך web.xml ייראה כמו:

 test-mvc org.springframework.web.servlet.DispatcherServlet 1 contextConfigLocation /WEB-INF/test-mvc.xml 

אנחנו קובעים את contextConfigLocation נכס כאן - המצביע על XML קובץ המשמש לטעינת הקשר האביב. אם הנכס לא נמצא שם, אביב יחפש קובץ בשם {servlet_name} -servlet.xml.

במקרה שלנו servlet_name הוא test-mvc וכך, בדוגמה זו ה- DispatcherServlet היה מחפש קובץ שנקרא test-mvc-servlet.xml.

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

 test-mvc / test / * 

כך במקרה זה ה DispatcherServlet היה מיירט את כל הבקשות בתבנית /מִבְחָן/* .

5. אביב MVC Web Config

בוא נראה עכשיו איך שולח סרוולט ניתן להתקין באמצעות אביב קונפיג:

@Configuration @EnableWebMvc @ComponentScan (basePackages = {"com.baeldung.controller.controller", "com.baeldung.controller.config"}) מחלקה ציבורית WebConfig מיישם את WebMvcConfigurer {@Override public void configureDefaultServletHander configureer. (); } @Bean Public ViewResolver viewResolver () {InternalResourceViewResolver שעועית = חדש InternalResourceViewResolver (); bean.setPrefix ("/ WEB-INF /"); bean.setSuffix (". jsp"); שעועית להחזיר; }}

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

    / WEB-INF / .jsp 

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

שימו לב שאנחנו מגדירים גם את View Resolver, האחראי על עיבוד התצוגה - אנו נשתמש ב- Spring InternalResourceViewResolver פה. זה מצפה לשם של a נוף להיפתר, כלומר למצוא דף מתאים באמצעות קידומת וסיומת (שניהם מוגדרים ב- XML תְצוּרָה).

כך למשל אם ה בקר מחזירה א נוף בשם “ברוך הבא", ה נוףפותר ינסה לפתור דף שנקרא "Welcome.jsp" בתוך ה WEB-INF תיקיה.

6. בקר ה- MVC

בואו נשתמש סוף סוף בבקר סגנון MVC.

שימו לב איך אנחנו מחזירים א ModelAndView אובייקט - המכיל א מפת מודלים ו להציג אובייקט; שניהם ישמשו את ה- Vראה Resolver לעיבוד נתונים:

@Controller @RequestMapping (value = "/ test") מחלקה ציבורית TestController {@GetMapping ציבורית ModelAndView getTestData () {ModelAndView mv = ModelAndView חדש (); mv.setViewName ("ברוך הבא"); mv.getModel (). put ("נתונים", "ברוך הבא איש"); להחזיר mv; }}

אז מה בדיוק הקמנו כאן.

ראשית, יצרנו בקר שנקרא TestController ומיפה אותו ל "/מִבְחָן" נָתִיב. בשיעור יצרנו שיטה שמחזירה a ModelAndView אובייקט וממופה ל- לקבל בקש לפיכך כל שיחת URL המסתיימת ב- “מִבְחָן"ינותב על ידי ה- DispatcherServlet אל ה getTestData שיטה ב TestController.

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

לאובייקט התצוגה שם מוגדר כ- “ברוך הבא". כפי שנדון לעיל, הצג את Resolver יחפש דף ב WEB-INF תיקיה בשם "ברוכים הבאים.jsp“.

למטה תוכלו לראות את התוצאה של דוגמא לקבל מבצע:

שים לב שה- כתובת אתר נגמר עם "מִבְחָן". התבנית של כתובת אתר הוא "/מבחן מבחן“.

הראשון "/מִבְחָן" מגיע מהסרוולט, והשני מגיע ממיפוי הבקר.

7. עוד תלות באביב למנוחה

נתחיל כעת להסתכל בבקר RESTful. כמובן, מקום טוב להתחיל בו הוא התלות הנוספת ב- Maven שאנו זקוקים לו:

  org.springframework Spring-webmvc 5.0.6.RELEASE org.springframework Spring-web 5.0.6.RELEASE com.fasterxml.jackson.core jackson-databind 2.9.5 

אנא עיין בקישורי jackson-core, spring-webmvc ו- spring-web עבור הגרסאות החדשות ביותר של תלות אלה.

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

8. בקר ה- REST

ההתקנה עבור א אביב נח היישום זהה לזה של MVC יישום כשההבדל היחיד הוא שאין Vצפה במפתיעים ולא מפת מודלים.

ה- API בדרך כלל יחזיר ללקוח נתונים גולמיים בחזרה - XML ו ג'סון ייצוגים בדרך כלל - וכך גם DispatcherServlet עוקף את להציג פותרים ו מחזיר את הנתונים ישירות בגוף התגובה HTTP.

בואו נסתכל על יישום בקר RESTful פשוט:

@Controller מחלקה ציבורית RestController {@GetMapping (value = "/ student / {studentId}") public @ResponseBody Student getTestData (@PathVariable Integer studentId) {סטודנט = סטודנט חדש (); student.setName ("פיטר"); student.setId (studentId); תלמיד חוזר; }}

שים לב ל @ResponseBody ביאור על השיטה - המורה לאביב לעקוף את להציג פותר ו למעשה לכתוב את הפלט ישירות לגוף תגובת ה- HTTP.

תמונת מצב מהירה של הפלט מוצגת למטה:

הפלט הנ"ל הוא תוצאה של שליחת ה- לקבל בקש ל- API עם התלמיד תְעוּדַת זֶהוּת שֶׁל 1.

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

9. מגף אביב ו @ RestController ביאור

ה @ RestController ביאור מ- Spring Boot הוא בעצם קיצור דרך מהיר שחוסך מאיתנו תמיד להגדיר @ResponseBody.

הנה בקר הדוגמה הקודם המשתמש בהערה חדשה זו:

@RestController מחלקה ציבורית RestAnnotatedController {@GetMapping (value = "/ annotated / student / {studentId}") getData של סטודנטים ציבוריים (@PathVariable Integer studentId) {סטודנט סטודנט = סטודנט חדש (); student.setName ("פיטר"); student.setId (studentId); תלמיד חוזר; }}

10. מסקנה

במדריך זה נחקור את יסודות השימוש בבקרים באביב, הן מנקודת מבט של יישום MVC טיפוסי והן ממשק API RESTful.

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