Spring MVC Tutorial

1. Übersicht

Dies ist ein einfaches Spring MVC-Tutorial, das zeigt, wie ein Spring MVC-Projekt sowohl mit einer Java-basierten Konfiguration als auch mit einer XML-Konfiguration eingerichtet wird.

Die Maven-Abhängigkeiten für ein Spring MVC-Projekt werden im Artikel zu Spring MVC-Abhängigkeiten ausführlich beschrieben.

2. Was ist Spring MVC?

Wie der Name schon sagt, handelt es sich um ein Modul des Spring-Frameworks, das sich mit dem Model-View-Controller oder MVC-Muster befasst . Es kombiniert alle Vorteile des MVC-Musters mit dem Komfort von Spring.

Spring implementiert MVC mithilfe seines DispatcherServlet mit dem Front-Controller-Muster .

Kurz gesagt, das DispatcherServlet fungiert als Hauptcontroller, um Anforderungen an das beabsichtigte Ziel weiterzuleiten. Das Modell ist nichts anderes als die Daten unserer Anwendung, und die Ansicht wird von einer der verschiedenen Template-Engines dargestellt. Wir werden uns in einer Weile JSPs in unserem Beispiel ansehen.

3. Spring MVC mit Java-Konfiguration

Um die Spring MVC-Unterstützung über eine Java-Konfigurationsklasse zu aktivieren, müssen wir lediglich die Annotation @EnableWebMvc hinzufügen :

@EnableWebMvc @Configuration public class WebConfig { /// ... }

Dadurch wird die grundlegende Unterstützung eingerichtet, die wir für ein MVC-Projekt benötigen, z. B. das Registrieren von Controllern und Zuordnungen, Typkonverter, Validierungsunterstützung, Nachrichtenkonverter und Ausnahmebehandlung.

Wenn wir diese Konfiguration anpassen möchten, müssen wir die WebMvcConfigurer- Schnittstelle implementieren :

@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; } }

In diesem Beispiel haben wir eine ViewResolver- Bean registriert , die .jsp- Ansichten aus dem Verzeichnis / WEB-INF / view zurückgibt .

Sehr wichtig ist hierbei, dass wir View Controller registrieren können, die mithilfe der ViewControllerRegistry eine direkte Zuordnung zwischen der URL und dem Viewnamen erstellen. Auf diese Weise ist kein Controller zwischen den beiden erforderlich.

Wenn wir auch Controller-Klassen definieren und scannen möchten, können wir die Annotation @ComponentScan mit dem Paket hinzufügen , das die Controller enthält:

@EnableWebMvc @Configuration @ComponentScan(basePackages = { "com.baeldung.web.controller" }) public class WebConfig implements WebMvcConfigurer { // ... }

Um eine Anwendung zu booten, die diese Konfiguration lädt, benötigen wir außerdem eine Initialisiererklasse:

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("/"); } }

Beachten Sie, dass wir für Versionen vor Spring 5 die WebMvcConfigurerAdapter- Klasse anstelle der Schnittstelle verwenden müssen.

4. Spring MVC mit XML-Konfiguration

Alternativ zur obigen Java-Konfiguration können wir auch eine reine XML-Konfiguration verwenden:

Wenn wir eine reine XML-Konfiguration verwenden möchten, müssen wir auch eine web.xml- Datei hinzufügen, um die Anwendung zu booten. Weitere Informationen zu diesem Ansatz finden Sie in unserem vorherigen Artikel.

5. Controller und Ansichten

Schauen wir uns ein Beispiel für einen Basis-Controller an:

@Controller public class SampleController { @GetMapping("/sample") public String showForm() { return "sample"; } }

Die entsprechende JSP-Ressource ist die Datei sample.jsp :

Die JSP-basierten Ansichtsdateien befinden sich im Ordner / WEB-INF des Projekts, sodass sie nur für die Spring-Infrastruktur und nicht über den direkten URL-Zugriff zugänglich sind.

6. Feder MVC mit Boot

Spring Boot ist eine Ergänzung zu Spring Platform, mit der Sie ganz einfach loslegen und eigenständige Anwendungen für die Produktion erstellen können. Boot soll Spring nicht ersetzen, sondern die Arbeit damit schneller und einfacher machen.

6.1. Spring Boot Starter

Das neue Framework bietet praktische Starter-Abhängigkeiten - dies sind Abhängigkeitsbeschreibungen , mit denen alle für eine bestimmte Funktionalität erforderlichen Technologien bereitgestellt werden können.

Diese haben den Vorteil, dass wir nicht mehr für jede Abhängigkeit eine Version angeben müssen, sondern dem Starter ermöglichen, Abhängigkeiten für uns zu verwalten.

Der schnellste Weg, um loszulegen, ist das Hinzufügen der Spring-Boot-Starter-Parent- Datei pom.xml:

 org.springframework.boot spring-boot-starter-parent 2.2.2.RELEASE 

Dies kümmert sich um das Abhängigkeitsmanagement.

6.2. Spring Boot Entry Point

Jede mit Spring Boot erstellte Anwendung muss lediglich den Haupteinstiegspunkt definieren. Dies ist normalerweise eine Java - Klasse mit der Haupt- Methode, mit Anmerkungen versehen @SpringBootApplication :

@SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } 

Diese Anmerkung fügt die folgenden anderen Anmerkungen hinzu:

  • @Configuration - markiert die Klasse als Quelle für Bean-Definitionen
  • @EnableAutoConfiguration - weist das Framework an, Beans basierend auf den Abhängigkeiten vom Klassenpfad automatisch hinzuzufügen
  • @ComponentScan - sucht nach anderen Konfigurationen und Beans im selben Paket wie die Anwendungsklasse oder darunter

Mit Spring Boot können wir das Frontend mit Thymeleaf oder JSPs einrichten, ohne ViewResolver zu verwenden, wie in Abschnitt 3 definiert. Durch Hinzufügen der Spring-Boot-Starter-Thymeleaf- Abhängigkeit zu unserer pom.xml wird Thymeleaf aktiviert und es ist keine zusätzliche Konfiguration erforderlich.

Der Quellcode für die Boot-App ist wie immer über GitHub verfügbar.

Wenn Sie mit Spring Boot beginnen möchten, sehen Sie sich hier unser Referenz-Intro an.

7. Fazit

In diesem Beispiel haben wir ein einfaches und funktionales Spring MVC-Projekt mithilfe der Java-Konfiguration konfiguriert.

Die Implementierung dieses einfachen Spring MVC-Tutorials finden Sie im GitHub-Projekt.

Wenn das Projekt lokal ausgeführt wird, kann auf die Datei sample.jsp unter // localhost: 8080 / spring-mvc-basic / sample zugegriffen werden.