Stručný sprievodca pre pružinové ovládače
1. Úvod
V tomto článku sa zameriame na základný koncept v Spring MVC - Controllers.
2. Prehľad
Začnime tým, že urobíme krok späť a pozrime sa na to koncepcia Predný ovládač v typickej jari Ovládač modelu View architektúry.
Na veľmi vysokej úrovni sa zameriavame na tieto hlavné zodpovednosti:
- Zachytáva prichádzajúce žiadosti
- Prevedie užitočné zaťaženie požiadavky na vnútornú štruktúru údajov
- Odošle údaje do Model na ďalšie spracovanie
- Získava spracované údaje z Model a posúva tieto údaje do vyhliadka na vykreslenie
Tu je rýchly diagram pre vysoký prietok dovnútra Jarné MVC:
Ako vidíte, DispatcherServlet hrá rolu Predný ovládač v architektúre.
Diagram je použiteľný ako pre typické radiče MVC, tak aj pre radiče RESTful - s malými rozdielmi (popísané nižšie).
V tradičnom prístupe MVC aplikácie nie sú orientované na služby, preto existuje View Resolver ktorá poskytuje konečné zobrazenia na základe údajov prijatých z a Kontrolór.
RESTful aplikácie sú navrhnuté tak, aby boli zamerané na služby a vracali nespracované údaje (zvyčajne JSON / XML). Pretože tieto aplikácie nevytvárajú žiadne zobrazenia, nie sú k dispozícii žiadne Zobraziť riešenie - the Kontrolór všeobecne sa očakáva, že bude odosielať údaje priamo prostredníctvom odpovede HTTP.
Začnime radičmi v štýle MVC0.
3. Závislosti Maven
Aby bolo možné pracovať s Jarné MVC, poďme sa najskôr zaoberať závislosťami Maven:
org.springframework spring-webmvc 5.0.6.RELEASE
Najnovšiu verziu knižnice nájdete v serveri spring-webmvc na serveri Maven Central.
4. Projekt Web Config
Predtým, ako sa pozrieme na samotné radiče, je potrebné najskôr vytvoriť jednoduchý webový projekt a rýchlo urobiť Servlet konfigurácia.
Pozrime sa najskôr, ako DispatcherServlet je možné nastaviť bez použitia web.xml - ale namiesto toho pomocou inicializátora:
public class StudentControllerConfig implementuje WebApplicationInitializer {@Override public void onStartup (ServletContext sc) hodí ServletException {AnnotationConfigWebApplicationContext root = nový AnnotationConfigWebApplicationContext (); root.register (WebConfig.class); root.refresh (); root.setServletContext (sc); sc.addListener (nový ContextLoaderListener (root)); DispatcherServlet dv = nový DispatcherServlet (nový GenericWebApplicationContext ()); ServletRegistration.Dynamic appServlet = sc.addServlet ("test-mvc", dv); appServlet.setLoadOnStartup (1); appServlet.addMapping ("/ test / *"); }}
Ak chcete nastavovať veci bez XML, nezabudnite servlet-api 3.1.0 na vašej triede.
Tu je postup, ako web.xml bude vyzerať takto:
test-mvc org.springframework.web.servlet.DispatcherServlet 1 contextConfigLocation /WEB-INF/test-mvc.xml
Nastavujeme contextConfigLocation nehnuteľnosť tu - ukazuje na XML súbor použitý na načítanie jarného kontextu. Ak tam táto nehnuteľnosť nie je, Spring vyhľadá súbor s názvom {servlet_name} -servlet.xml.
V našom prípade servlet_name je test-mvc a tak v tomto príklade DispatcherServlet vyhľadá súbor s názvom test-mvc-servlet.xml.
Nakoniec nastavíme DispatcherServlet a zmapujte to na konkrétny URL - dokončiť našu Predný ovládač založený systém tu:
test-mvc / test / *
V tomto prípade teda DispatcherServlet zachytí všetky požiadavky v rámci vzoru / test / * .
5. Jarná webová konfigurácia MVC
Pozrime sa teraz na to, ako Servlet dispečera je možné nastaviť pomocou Jarná konfig:
@Configuration @EnableWebMvc @ComponentScan (basePackages = {"com.baeldung.controller.controller", "com.baeldung.controller.config"}) verejná trieda WebConfig implementuje WebMvcConfigurer {@Override public void configureDefaultServletHandling (DefaultServleterable) (); } @Bean public ViewResolver viewResolver () {InternalResourceViewResolver bean = nový InternalResourceViewResolver (); bean.setPrefix ("/ WEB-INF /"); bean.setSuffix (". jsp"); spätná fazuľa; }}
Poďme sa teraz pozrieť na nastavenie Servlet dispečera použitím XML . Momentka z DispatcherServlet XML súbor - XML súbor, ktorý DispatcherServlet používa na načítanie zvyk radiče a ďalšie Jarsubjekty je zobrazené nižšie:
/ WEB-INF / .jsp
Na základe tejto jednoduchej konfigurácie rámec samozrejme inicializuje akýkoľvek bean radiča, ktorý nájde na ceste triedy.
Všimnite si, že definujeme aj View Resolver, zodpovedný za vykreslenie pohľadu - budeme používať Spring InternalResourceViewResolver tu. Očakáva sa názov a vyhliadka čo treba vyriešiť, čo znamená nájsť zodpovedajúcu stránku pomocou predpony a prípony (obe sú definované v XML konfigurácia).
Napríklad, ak Kontrolór vracia a vyhliadka pomenovaný „vitaj ”, the vyhliadkarezolver sa pokúsi vyriešiť stránku s názvom „Welcome.jsp“ v WEB-INF priečinok.
6. Ovládač MVC
Poďme teraz konečne implementovať radič štýlu MVC.
Všimnite si, ako sa vraciame a ModelAndView objekt - ktorý obsahuje a modelová mapa a a zobraziť objekt; obidve bude používať View Resolver pre vykreslenie dát:
@Controller @RequestMapping (value = "/ test") verejná trieda TestController {@GetMapping public ModelAndView getTestData () {ModelAndView mv = nový ModelAndView (); mv.setViewName ("vitaj"); mv.getModel (). put ("data", "Vitaj doma muž"); návrat mv; }}
Čo konkrétne sme tu teda nastavili.
Najskôr sme vytvorili ovládač s názvom TestController a namapoval to na „/ Test“ cesta. V triede sme vytvorili metódu, ktorá vracia a ModelAndView objekt a je namapovaný na a ZÍSKAJTE požiadať o akékoľvek URL volanie končiace na „test”Bude smerovaný DispatcherServlet do getTestData metóda v TestController.
A samozrejme vraciame ModelAndView objekt s niektorými údajmi modelu pre dobrú mieru.
Názov zobrazenia má nastavený na „vitaj„. Ako bolo uvedené vyššie, Zobraziť prekladač vyhľadá stránku v priečinku WEB-INF priečinok s názvom „vitaj.jsp“.
Nižšie vidíte výsledok príkladu ZÍSKAJTE prevádzka:
Všimnite si, že URL končí sa „Test“. Vzor URL je “/ Test / test“.
Prvý „/ Test“ pochádza z servletu a druhý pochádza z mapovania radiča.
7. Viac jarných závislostí pre REST
Začnime sa teraz pozerať na ovládač RESTful. Dobrým miestom na začatie sú samozrejme ďalšie závislosti Maven, ktoré k tomu potrebujeme:
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
Najnovšie verzie týchto závislostí nájdete v odkazoch jackson-core, spring-webmvc a spring-web.
Jackson to samozrejme nie je povinné, ale je to určite dobrý spôsob, ako povoliť podporu JSON. Ak sa chcete hlbšie zaoberať touto podporou, pozrite si článok o prevádzačoch správ tu.
8. Kontrolór REST
Nastavenie pre a Jar RESTful aplikácia je rovnaká ako tá pre MVC aplikácia s jediným rozdielom, že neexistuje VZobraziť Riešitelia a nie modelová mapa.
API vo všeobecnosti jednoducho vráti nespracované údaje späť klientovi - XML a JSON reprezentácie zvyčajne - a tak DispatcherServlet obchádza zobraziť riešiteľov a vráti údaje priamo do tela odpovede HTTP.
Pozrime sa na jednoduchú implementáciu radiča RESTful:
@Controller public class RestController {@GetMapping (value = "/ student / {studentId}") public @ResponseBody Student getTestData (@PathVariable Integer studentId) {Student student = new Student (); student.setName ("Peter"); student.setId (studentId); návrat študent; }}
Všimnite si @ResponseBody anotácia metódy - ktorá inštruuje Spring, aby obišiel zobraziť rezolver a v podstate vypíše výstup priamo do tela odpovede HTTP.
Rýchly prehľad výstupu je uvedený nižšie:
Vyššie uvedený výstup je výsledkom odoslania súboru ZÍSKAJTE žiadosť so študentom o API id z 1.
Jedna rýchla poznámka je tu - @RequestMapping anotácia je jednou z centrálnych anotácií, ktoré musíte skutočne preskúmať, aby ste využili celý svoj potenciál.
9. Jarná topánka a @RestController Anotácia
The @RestController anotácia z Spring Boot je v podstate rýchla skratka, ktorá nás ušetrí od toho, aby sme ju vždy museli definovať @ResponseBody.
Tu je predchádzajúci príklad radiča používajúci túto novú anotáciu:
@RestController verejná trieda RestAnnotatedController {@GetMapping (value = "/ annotated / student / {studentId}") public Student getData (@PathVariable Integer studentId) {Student student = new Student (); student.setName ("Peter"); student.setId (studentId); návrat študent; }}
10. Záver
V tejto príručke skúmame základy používania radičov na jar, a to z pohľadu typickej aplikácie MVC, ako aj z RESTful API.
Samozrejme všetok kód v článku je k dispozícii na GitHub.