Rövid útmutató a rugós vezérlőkhöz
1. Bemutatkozás
Ebben a cikkben a Spring MVC - Controllers alapkoncepciójára fogunk koncentrálni.
2. Áttekintés
Kezdjük azzal, hogy visszalépünk egy pillantással a. fogalma Első vezérlő a tipikus tavasszal Model View Controller építészet.
Nagyon magas szinten itt vannak a fő feladatok, amelyeket megvizsgálunk:
- Elfogja a beérkező kéréseket
- Átalakítja a kérelem hasznos terhelését az adatok belső szerkezetére
- Az adatokat elküldi a címre Modell további feldolgozásra
- A feldolgozott adatokat a Modell és továbbítja ezeket az adatokat a Kilátás a rendereléshez
Itt van egy gyors ábra a magas szintű beáramlásról Tavaszi MVC:

Mint láthatja, a DispatcherServlet szerepet játszik Első vezérlő az építészetben.
A diagram mind a tipikus MVC vezérlőkhöz, mind a RESTful vezérlőkhöz alkalmazható - néhány apró különbséggel (az alábbiakban leírjuk).
A hagyományos megközelítésben MVC az alkalmazások nem szolgáltatásorientáltak, ezért van View Resolver amely az a-tól kapott adatok alapján teszi a végső nézeteket Vezérlő.
Nyugalmas az alkalmazásokat úgy alakítottuk ki, hogy szolgáltatásorientáltak legyenek és nyers adatokat adjanak vissza (általában JSON / XML). Mivel ezek az alkalmazások nem végeznek nézetmegjelenítést, nincsenek Megoldók megtekintése - a Vezérlő általában elvárják, hogy közvetlenül a HTTP-válaszon keresztül küldjön adatokat.
Kezdjük az MVC0 stílusú vezérlőkkel.
3. Maven-függőségek
Annak érdekében, hogy együtt lehessen dolgozni Tavaszi MVC, először foglalkozzunk a Maven-függőségekkel:
org.springframework spring-webmvc 5.0.6.KÖZLEMÉNY
A könyvtár legújabb verziójának megtekintéséhez tekintse meg a spring-webmvc oldalt a Maven Central webhelyen.
4. Projekt webkonfiguráció
Mielőtt magukat a vezérlőket néznénk meg, először fel kell állítanunk egy egyszerű webprojektet, és gyorsan elvégeznünk Servlet konfiguráció.
Először megnézzük, hogy a DispatcherServlet használat nélkül beállítható web.xml - de ehelyett inicializálót használ:
public class StudentControllerConfig implementálja a WebApplicationInitializer {@Orride public void onStartup (ServletContext sc) dobja a ServletException {AnnotationConfigWebApplicationContext root = new AnnotationConfigWebApplicationContext (); root.register (WebConfig.class); root.refresh (); root.setServletContext (sc); sc.addListener (új ContextLoaderListener (root)); DispatcherServlet dv = new DispatcherServlet (új GenericWebApplicationContext ()); ServletRegistration.Dynamic appServlet = sc.addServlet ("test-mvc", dv); appServlet.setLoadOnStartup (1); appServlet.addMapping ("/ test / *"); }}
Ha XML nélkül szeretné beállítani a dolgokat, győződjön meg róla, hogy rendelkezik-e servlet-api 3.1.0 az osztályúton.
Itt van, hogyan web.xml a következőképpen nézne ki:
test-mvc org.springframework.web.servlet.DispatcherServlet 1 contextConfigLocation /WEB-INF/test-mvc.xml
Beállítjuk a contextConfigLocation ingatlan itt - mutatva a XML a Spring kontextus betöltésére használt fájl. Ha az ingatlan nincs ott, a Spring egy megnevezett fájlt keres {servlet_name} -servlet.xml.
Esetünkben a szervlet_neve van teszt-mvc és így ebben a példában a DispatcherServlet nevű fájlt keresne test-mvc-servlet.xml.
Végül állítsuk be a DispatcherServlet és feltérképezi egy adott helyre URL - befejezni a dolgunkat Első vezérlő alapú rendszer itt:
test-mvc / test / *
Így ebben az esetben a DispatcherServlet az összes kérést a mintán belül elfogja /teszt/* .
5. Tavaszi MVC Web Config
Most nézzük meg, hogyan Dispatcher Servlet segítségével állítható be Tavaszi konfigur:
@Configuration @EnableWebMvc @ComponentScan (basePackages = {"com.baeldung.controller.controller", "com.baeldung.controller.config"}) public class WebConfig implementálja a WebMvcConfigurer {@Override public void configureDefaultServletHandable (); } @Bean public ViewResolver viewResolver () {InternalResourceViewResolver bean = new InternalResourceViewResolver (); bean.setPrefix ("/ WEB-INF /"); bean.setSuffix (". jsp"); visszatérő bab; }}
Most nézzük meg a Dispatcher Servlet felhasználásával XML . Pillanatkép a DispatcherServlet XML fájl - az XML fájl, amelyet a DispatcherServlet felhasználás az egyéni betöltéshez vezérlők és egyéb Tavaszientitások az alábbiakban látható:
/ WEB-INF / .jsp
Ezen egyszerű konfiguráció alapján a keretrendszer természetesen inicializálja az összes vezérlőbabot, amelyet az osztályúton talál.
Figyelje meg, hogy meghatározzuk a nézetmegjelenítőt is, amely felelős a nézetek megjelenítéséért - a tavaszit fogjuk használni InternalResourceViewResolver itt. Ez elvárja az a nevét Kilátás meg kell oldani, ami azt jelenti, hogy megtalálja a megfelelő oldalt az előtag és az utótag használatával (mindkettőt a XML konfiguráció).
Tehát például, ha a Vezérlő visszatér a Kilátás nevezett "Üdvözöljük", a Kilátásmegoldó nevű oldalt megpróbálja megoldani „Welcome.jsp” ban,-ben WEB-INF mappába.
6. Az MVC vezérlő
Vezessük végre végre az MVC stílusú vezérlőt.
Figyeljük meg, hogyan térünk vissza a ModelAndView objektum - amely tartalmazza a modelltérkép és a objektum megtekintése; mindkettőt a V fogja használniiew Resolver adatmegjelenítéshez:
@Controller @RequestMapping (value = "/ test") public class TestController {@GetMapping public ModelAndView getTestData () {ModelAndView mv = new ModelAndView (); mv.setViewName ("welcome"); mv.getModel (). put ("data", "Welcome home man"); visszatérés mv; }}
Szóval, mit állítottunk itt pontosan.
Először létrehoztunk egy nevű vezérlőt TestController és feltérképezte a "/teszt" pálya. Az osztályban létrehoztunk egy metódust, amely visszaadja a ModelAndView objektumot, és a KAP kérjen tehát minden olyan URL-hívást, amely ateszt”Útvonalát a DispatcherServlet hoz getTestData módszer a TestController.
És természetesen visszaadjuk a ModelAndView objektum néhány modelladattal a jó mérés érdekében.
A nézetobjektum neve „Üdvözöljük“. Amint fentebb említettük, a Megoldó megtekintése keresni fog egy oldalt a WEB-INF mappaszívesen.jsp“.
Az alábbiakban egy példa eredményét láthatja KAP művelet:

Vegye figyelembe, hogy a URL végződik "teszt". A minta URL van "/teszt“.
Az első "/teszt" a Servlet-ből származik, a második pedig a vezérlő leképezéséből származik.
7. További tavaszi függőségek a REST-hez
Most kezdjünk el egy RESTful vezérlőt nézni. Természetesen jó hely a kiinduláshoz az extra Maven-függőségek, amelyekre szükségünk van:
org.springframework spring-webmvc 5.0.6.RELEASE org.springframework spring-web 5.0.6.RELEASE com.fasterxml.jackson.core jackson-databaseind 2.9.5
Kérjük, olvassa el a jackson-core, a spring-webmvc és a rugó-web linkeket ezen függőségek legújabb verzióihoz.
Jackson itt természetesen nem kötelező, de minden bizonnyal jó módszer a JSON támogatás engedélyezésére. Ha érdekel, hogy jobban belemerüljön ebbe a támogatásba, nézze meg az üzenetátalakítók cikket itt.
8. A REST vezérlő
A beállítás a Tavasz RESTful alkalmazás megegyezik a MVC alkalmazás azzal a különbséggel, hogy nincs View Resolvers és nem modelltérkép.
Az API általában egyszerűen visszaadja a nyers adatokat az ügyfélnek - XML és JSON reprezentációk általában - és így a DispatcherServlet megkerüli a nézetmegoldók és az adatokat közvetlenül a HTTP választörzsben adja vissza.
Vessünk egy pillantást egy egyszerű RESTful vezérlő megvalósítására:
@Controller public class RestController {@GetMapping (value = "/ student / {studentId}") public @ResponseBody Student getTestData (@PathVariable Integer studentId) {Student student = new Student (); student.setName ("Péter"); student.setId (studentId); visszatérő hallgató; }}
Vegye figyelembe a @ResponseBody kommentár a módszerről - amely utasítja Springet, hogy kerülje meg a metódust nézetmegoldó és lényegében közvetlenül írja be a kimenetet a HTTP válasz törzsébe.
A kimenet gyors pillanatképe az alábbiakban látható:

A fenti kimenet a KAP kérés az API-val a hallgatóval id nak,-nek 1.
Itt egy gyors megjegyzés: a @RequestMapping az annotáció egyike azoknak a központi kommentároknak, amelyeket valóban meg kell vizsgálnia, hogy teljes mértékben kiaknázhassa.
9. Tavaszi csizma és a @RestController Megjegyzés
A @RestController a Spring Boot kommentárja alapvetően egy gyors parancsikon, amely megment minket attól, hogy mindig meg kell határoznunk @ResponseBody.
Íme az előző példa vezérlő, amely ezt az új kommentárt használja:
@RestController public class RestAnnotatedController {@GetMapping (value = "/ annotated / student / {studentId}") public Student getData (@PathVariable Integer studentId) {Student student = new Student (); student.setName ("Péter"); student.setId (studentId); visszatérő hallgató; }}
10. Következtetés
Ebben az útmutatóban a vezérlők tavaszi használatának alapjait tárjuk fel, mind egy tipikus MVC alkalmazás, mind egy RESTful API szempontjából.
Természetesen a cikk összes kódja elérhető a GitHubon.