Spring:MVC

Aus Alexander's Wiki

Umgebung

  • Java JDK 1.8
  • Tomcat
  • Eclipse JEE Version
  • Maven (Spring kommt als Maven dependency)

Erstellung

Wir benutzen den archetype spring-mvc-archetype. In Eclipse:

  • File / new / Maven Project
  • Create a simple project (skip archetype selection) darf NICHT gesetzt sein
  • Next
  • Add Archetype
  • Next
  • Eintragen des eigenen Projekts, z.B.:
    • Group Id: de.taufkirchen.kluge
    • Artifact Id: MySpringMvc
    • Version: default, 0.0.1-SNAPSHOT.
    • ackage: de.taufkirchen.kluge

Erstellung (Outdated)

  • Eclipse mit neuem Workspace öffnen, z.B. analog folgende Verknüpfung:
E:\Entwicklungsumgebungen\eclipse-jee-neon-x64\eclipse.exe -data "E:\Entwicklungsumgebungen\data_and_configuration\data\PRIVAT\SpringMVC-simple" -configuration "E:\Entwicklungsumgebungen\data_and_configuration\configuration\PRIVAT\SpringMVC-simple"
  • File/New/Dynamic Web Project
    • Project Name setzen, z.B. SpringMVCTutorial
    • Target Runtime -> Apache Tomcat 8.5
  • Konvertieren des Projekts in
    • m2e-eclipse muss als PlugIn in Eclipse installiert sein
    • Rechte Maustaste auf das Projekt -> Configure -> "Convert to Maven Project"
  • Das POM modifizieren (über die Oberfläche) und Dependencies hinzufügen
    • <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.3.3.RELEASE</version>
    • <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>4.3.3.RELEASE</version>
    • <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.3.3.RELEASE</version>
    • <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>4.3.3.RELEASE</version>
    • <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version>

Funktionsweise

Spring’s MVC module is based on front controller design pattern followed by MVC design pattern. All the incoming requests are handled by the single servlet named DispatcherServlet which acts as the front controller in Spring’s MVC module. The DispatcherServlet then refers to the HandlerMapping to find a controller object which can handle the request. DispatcherServlet then dispatches the request to the controller object so that it can actually perform the business logic to fulfil the user request. (Controller may delegate the responsibility to further application objects known as service objects). The controller returns an encapsulated object containing the model object and the view object (or a logical name of the view). In Spring’s MVC, this encapsulated object is represented by class ModelAndView. In case ModelAndView contains the logical name of the view, the DispatcherServlet refers the ViewResolver to find the actual View object based on the logical name. DispatcherServlet then passes the model object to the view object which is then rendered to the end user.

Dispatcher Servlet

Since this is like any other servlet, it must be configured in the application’s web deployment descriptor file i.e. web.xml.

<web-app xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID"
version="2.5"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
   <display-name>Library</display-name>
   <servlet>
      <servlet-name>myLibraryAppFrontController</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <load-on-startup>1</load-on-startup>
   </servlet>
   <servlet-mapping>
      <servlet-name>myLibraryAppFrontController</servlet-name>
      <url-pattern>*.htm</url-pattern>
   </servlet-mapping>
   <welcome-file-list>
      <welcome-file>welcome.htm</welcome-file>
   </welcome-file-list>
</web-app>

Annotation driven

Um Stereotypen benutzen zu können, muss es in der Spring Konfigurationsdatei angeschaltet werden:

<annotation-driven />
<context:component-scan base-package="net.codejava.spring" />

Beispiel

  • Ein Projekt in Eclipse erstellen
  • Die Spring Bibliotheken (z.B. über Maven) hinzufügen
  <dependencies>
    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.2</version>
    </dependency>  
  	<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>spring-aop</artifactId>
  		<version>4.3.3.RELEASE</version>
  	</dependency>  
  	<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>spring-aspects</artifactId>
  		<version>4.3.3.RELEASE</version>
  	</dependency>  
  	<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>spring-beans</artifactId>
  		<version>4.3.3.RELEASE</version>
  	</dependency>  
  	<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>spring-context</artifactId>
  		<version>4.3.3.RELEASE</version>
  	</dependency>
  	<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>spring-context-support</artifactId>
  		<version>4.3.3.RELEASE</version>
  	</dependency>
  	<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>spring-core</artifactId>
  		<version>4.3.3.RELEASE</version>
  	</dependency>
  	<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>spring-expression</artifactId>
  		<version>4.3.3.RELEASE</version>
  	</dependency>
  	<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>spring-instrument</artifactId>
  		<version>4.3.3.RELEASE</version>
  	</dependency>  	
  	<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>spring-instrument-tomcat</artifactId>
  		<version>4.3.3.RELEASE</version>
  	</dependency>
  	<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>spring-jdbc</artifactId>
  		<version>4.3.3.RELEASE</version>
  	</dependency>	
  	<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>spring-jms</artifactId>
  		<version>4.3.3.RELEASE</version>
  	</dependency>
  	<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>spring-messaging</artifactId>
  		<version>4.3.3.RELEASE</version>
  	</dependency>  	
  	<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>spring-orm</artifactId>
  		<version>4.3.3.RELEASE</version>
  	</dependency>  	
  	<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>spring-oxm</artifactId>
  		<version>4.3.3.RELEASE</version>
  	</dependency>  	 	
  	<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>spring-test</artifactId>
  		<version>4.3.3.RELEASE</version>
  	</dependency>
  	<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>spring-tx</artifactId>
  		<version>4.3.3.RELEASE</version>
  	</dependency>
  	<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>spring-web</artifactId>
  		<version>4.3.3.RELEASE</version>
  	</dependency>
  	<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>spring-webmvc</artifactId>
  		<version>4.3.3.RELEASE</version>
  	</dependency>
  	<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>spring-webmvc-portlet</artifactId>
  		<version>4.3.3.RELEASE</version>
  	</dependency>
  	<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>spring-websocket</artifactId>
  		<version>4.3.3.RELEASE</version>
  	</dependency>
  </dependencies>
  • Folgende Klassen erstellen
    • HelloWorld.java
      package de.taufkirchen.kluge;
      
      public class HelloWorld {
      	private String message;
      
      	public void setMessage(String message) {
      		this.message = message;
      	}
      
      	public void getMessage() {
      		System.out.println("Your Message : " + message);
      	}
      }
      
    • HelloWorldConfig.java
      package de.taufkirchen.kluge;
      
      import org.springframework.context.annotation.Bean;
      import org.springframework.context.annotation.Configuration;
      
      @Configuration
      public class HelloWorldConfig {
      
         @Bean 
         public HelloWorld helloWorld(){
            return new HelloWorld();
         }
      }
      
    • MainApp.java
      package de.taufkirchen.kluge;
      
      import org.springframework.context.ApplicationContext;
      import org.springframework.context.annotation.AnnotationConfigApplicationContext;
      
      public class MainApp {
         public static void main(String[] args) {
            ApplicationContext ctx = 
            new AnnotationConfigApplicationContext(HelloWorldConfig.class);
         
            HelloWorld helloWorld = ctx.getBean(HelloWorld.class);
      
            helloWorld.setMessage("Hello World!");
            helloWorld.getMessage();
         }
      }
      

Schlüsselwörter

  • Dependency Injection (DI)
  • Aspect Oriented Programming (AOP)