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.


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