1. Przegląd
To jest prosty samouczek Spring MVC pokazujący, jak skonfigurować projekt Spring MVC, zarówno z konfiguracją opartą na Javie, jak iz konfiguracją XML.
Zależności Maven dla projektu Spring MVC opisano szczegółowo w artykule o zależnościach Spring MVC.
2. Co to jest Spring MVC?
Jak sama nazwa wskazuje, jest to moduł frameworka Spring zajmujący się wzorcem Model-View-Controller lub MVC . Łączy w sobie wszystkie zalety wzoru MVC z wygodą Springa.
Spring implementuje MVC ze wzorcem kontrolera frontowego, używając swojego DispatcherServlet .
W skrócie, DispatcherServlet działa jako główny kontroler kierujący żądania do ich zamierzonego miejsca docelowego. Model to nic innego jak dane naszej aplikacji, a widok jest reprezentowany przez dowolny z różnych silników szablonów. Za chwilę przyjrzymy się stronom JSP w naszym przykładzie.
3. Spring MVC przy użyciu konfiguracji Java
Aby włączyć obsługę Spring MVC za pomocą klasy konfiguracyjnej Java, wystarczy dodać adnotację @EnableWebMvc :
@EnableWebMvc @Configuration public class WebConfig { /// ... }
Spowoduje to skonfigurowanie podstawowego wsparcia, którego potrzebujemy dla projektu MVC, takiego jak rejestrowanie kontrolerów i mapowania, konwertery typów, obsługa walidacji, konwertery komunikatów i obsługa wyjątków.
Jeśli chcemy dostosować tę konfigurację, musimy zaimplementować interfejs WebMvcConfigurer :
@EnableWebMvc @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/").setViewName("index"); } @Bean public ViewResolver viewResolver() { InternalResourceViewResolver bean = new InternalResourceViewResolver(); bean.setViewClass(JstlView.class); bean.setPrefix("/WEB-INF/view/"); bean.setSuffix(".jsp"); return bean; } }
W tym przykładzie mamy zarejestrował ViewResolver fasoli że powróci .jsp widoki z widokiem / WEB-INF / katalogu.
Bardzo ważne jest tutaj to, że możemy zarejestrować kontrolery widoku, które tworzą bezpośrednie mapowanie między adresem URL a nazwą widoku przy użyciu ViewControllerRegistry. W ten sposób nie ma potrzeby stosowania żadnego kontrolera między nimi.
Jeśli chcemy również zdefiniować i przeskanować klasy kontrolerów, możemy dodać adnotację @ComponentScan do pakietu zawierającego kontrolery:
@EnableWebMvc @Configuration @ComponentScan(basePackages = { "com.baeldung.web.controller" }) public class WebConfig implements WebMvcConfigurer { // ... }
Aby załadować aplikację, która ładuje tę konfigurację, potrzebujemy również klasy inicjalizatora:
public class MainWebAppInitializer implements WebApplicationInitializer { @Override public void onStartup(final ServletContext sc) throws ServletException { AnnotationConfigWebApplicationContext root = new AnnotationConfigWebApplicationContext(); root.scan("com.baeldung"); sc.addListener(new ContextLoaderListener(root)); ServletRegistration.Dynamic appServlet = sc.addServlet("mvc", new DispatcherServlet(new GenericWebApplicationContext())); appServlet.setLoadOnStartup(1); appServlet.addMapping("/"); } }
Należy zauważyć, że w przypadku wersji wcześniejszych niż Spring 5 musimy użyć klasy WebMvcConfigurerAdapter zamiast interfejsu.
4. Spring MVC przy użyciu konfiguracji XML
Alternatywnie do powyższej konfiguracji Java, możemy również użyć konfiguracji czysto XML:
Jeśli chcemy użyć konfiguracji czysto XML, musimy również dodać plik web.xml , aby załadować aplikację. Aby uzyskać więcej informacji na temat tego podejścia, zapoznaj się z naszym poprzednim artykułem.
5. Kontroler i poglądy
Spójrzmy na przykład podstawowego kontrolera:
@Controller public class SampleController { @GetMapping("/sample") public String showForm() { return "sample"; } }
Odpowiednim zasobem jsp jest plik sample.jsp :
Pliki widoków oparte na JSP znajdują się w folderze / WEB-INF projektu, więc są dostępne tylko dla infrastruktury Spring, a nie przez bezpośredni dostęp do adresu URL.
6. Sprężyna MVC z butem
Spring Boot to dodatek do Spring Platform, który bardzo ułatwia rozpoczęcie pracy i tworzenie samodzielnych aplikacji produkcyjnych. But nie ma zastąpić Springa, ale przyspieszyć i ułatwić pracę z nim.
6.1. Spring Boot Starters
Nowa struktura zapewnia wygodne zależności początkowe - które są deskryptorami zależności, które mogą wprowadzić całą niezbędną technologię do określonej funkcjonalności.
Mają one tę zaletę, że nie musimy już określać wersji dla każdej zależności, ale zamiast tego zezwalamy starterowi na zarządzanie zależnościami za nas.
Najszybszym sposobem rozpoczęcia jest dodanie spring-boot-starter-parent pom.xml:
org.springframework.boot spring-boot-starter-parent 2.2.2.RELEASE
To zajmie się zarządzaniem zależnościami.
6.2. Punkt wejścia do rozruchu sprężynowego
Każda aplikacja zbudowana przy użyciu Spring Boot wymaga jedynie zdefiniowania głównego punktu wejścia. Zwykle jest to klasa Java z główną metodą, oznaczoną adnotacją @SpringBootApplication :
@SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
Ta adnotacja dodaje następujące inne adnotacje:
- @Configuration - co oznacza klasę jako źródło definicji fasoli
- @EnableAutoConfiguration - który mówi platformie, aby automatycznie dodawała fasolki na podstawie zależności w ścieżce klas
- @ComponentScan - który skanuje w poszukiwaniu innych konfiguracji i komponentów bean w tym samym pakiecie co klasa Application lub poniżej
Dzięki Spring Boot możemy skonfigurować frontend przy użyciu Thymeleaf lub JSP bez używania ViewResolver, jak zdefiniowano w sekcji 3. Dodając zależność spring-boot-starter-thymeleaf do naszego pom.xml, Thymeleaf zostaje włączony i nie jest wymagana dodatkowa konfiguracja.
Kod źródłowy aplikacji Boot jest, jak zawsze, dostępny w serwisie GitHub.
Wreszcie, jeśli chcesz zacząć korzystać z Spring Boot, zapoznaj się z naszym wprowadzeniem referencyjnym tutaj.
7. Wnioski
W tym przykładzie skonfigurowaliśmy prosty i funkcjonalny projekt Spring MVC, używając konfiguracji Java.
Implementację tego prostego samouczka Spring MVC można znaleźć w projekcie GitHub.
Gdy projekt jest uruchamiany lokalnie, plik sample.jsp można uzyskać pod adresem // localhost: 8080 / spring-mvc-basics / sample.