Spring MVC: Hello World Tutorial

Der Einstieg in neue Frameworks wie das Spring Framework ist meist am schwierigsten. Am hilfreichsten sind daher immer wieder „Hello World“ Tutorials. Aufgrund dessen möchte ich genau mit diesem einfach Hello World Tutorial heute den Einstieg in das Spring MVC Konzept erleichtern. Ich werde zeigen, was konkret alles benötigt wird und wie im Detail vorgegangen werden muss, um das erste kleine Erfolgserlebnis hervorzurufen. Hierzu werde ich zwei unterschiedliche Wege für die erste Spring MVC Anwendung vorstellen.

Spring Vorbereitungen

Für die Umsetzung des Hello World Tutorials wird zunächst eine Entwicklungsumgebung benötigt. Wer bereits einige Artikel auf itblogging.de gelesen hat, weiß, das ich die Eclipse Umgebung bevorzuge. Für die Softwareentwicklung mit Spring bietet SpringSource sogar eine angepasste Spring IDE, die SpringSource Tool Suite (Spring STS). Die Spring STS basiert auf Eclipse, beinhaltet jedoch einige spezielle Anpassungen für die Entwicklung mit Spring die die Entwicklung erleichtern. Die Spring STS wird jedoch nicht zwingend für das Arbeiten mit Spring benötigt. Optional kann auch die Eclipse IDE ohne weiteres mit den im Eclipse Marketplace befindlichen Tools / Bibliotheken erweitert werden.

Download SpringSource Tool Suite

Wer sich die SpringSource Tool Suite mal anschauen möchte, für den steht auf SpringSource stets die aktuellste Version bereit.
Download SpringSource Tool Suite

Download SpringSource Tool Suite über Eclipse Marketplace

Wie zuvor bereits kurz angesprochen, ist der Download der SpringSource Tool Suite und die damit verbundene Integration in die Eclipse IDE eine weitere Möglichkeit mit den Spring Tools zu arbeiten. Die Suche im Eclipse Marketplace nach „spring“ listet die Möglichkeiten der Installation auf. Für Eclipse 3.7 muss entsprechend SpringSource Tool Suite for Eclipse Indigo (3.7) heruntergeladen und installiert werden.

Bedingt der langen Downloadzeit über den Eclipse Marketplace würde ich den Download der SpringSource Tool Suite über die direkte SpringSource Website bevorzugen.

Download Spring Framework

Im nächsten Schritt muss das Spring Framework noch über die SpringSource Website heruntergeladen werden. In dem heruntergeladenen ZIP File befinden sich alle notwendigen JAR Dateien für die Entwicklung mit Spring. Die darin enthaltenen Libraries müssen anschließend dem Build Path hinzugefügt werden müssen.
http://www.springsource.org/download

Hello World – Spring MVC

Noch ein kleiner Hinweis: Für die Spring Entwicklung aber der Version 3.0 wird mindestens Java in der Version 1.5 benötigt. Die aktuellste Version ist sowohl unter Linux als auch in der Windows Kommandozeile

java -version

abzurufen.
Die aktuellste Java Version gibt es auf der Oracle Java Downloadseite.

Download Tomcat

In diesem Beispiel wird die Umsetzung des Spring MVC mit dem Apache Tomcat 7 durchgeführt.

Servlets und Java Server Pages

Wie ein Tomcat Server eingerichtet wird und grundsätzliche eine Webanwendung mit Servlets und JSP’s aufgebaut ist, erfahrt ihr in dem Tutorial Servlets und Java Server Pages.

Der Vollständigkeitshalber möchte ich beide Varianten zur Erstellung des Spring MVC Einstiegs veranschaulichen. Über die normale Eclipse Umgebung (ohne Spring Plugin) sowie die vereinfachte Variante mit Hilfe eines Spring Template Projects mit Spring STS.

Spring MVC über Eclipse EE

Im ersten Schritt wird ein Dynamic Web Project angelegt. Wie dies im einzelnen geschieht, zeigt das Servlets und Java Server Pages Tutorial. Das Projekt trägt den Namen HelloWorldSpring.
Angelegt, sollte in Eclipse das Web Projekt nun wie folgt aussehen (Navigator View):

Notwendige Bibliotheken

Im nächsten Schritt müssen folgende JAR Dateien in das lib Verzeichnis (WebContent => WEB-INF => lib) kopiert werden.
Lib Verzeichnis
All diese Dateien habe ich zu einer ZIP Datei zusammengefasst und stelle sie hier zum Download bereit.

web.xml

Falls noch nicht vorhanden, muss die web.xml in dem Ordner WebContent => WEB-INF erstellt und wie folgt angepasst werden. Bitte die Hinweise den Kommentaren entnehmen.

<?xml version="1.0" encoding="UTF-8"?>
<web-app 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"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	id="WebApp_ID" version="3.0">

	<display-name>HelloWorldSpring</display-name>
	<welcome-file-list>
		<!-- Die Willkommensseite (muss direkt in dem Ordner 'WebContent' liegen) -->
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>

	<servlet>
		<!-- Registrierung des Spring DispatcherServlet -->
		<servlet-name>helloworld</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<!-- Die Registrierung bereits während des Startvorgangs laden -->
		<load-on-startup>1</load-on-startup>
	</servlet>

	<servlet-mapping>
		<servlet-name>helloworld</servlet-name>
		<!-- Alle Anfragen ( / ) über das helloworld Servlet bearbeiten -->
		<url-pattern>/</url-pattern>
	</servlet-mapping>

</web-app>

helloworld-servlet.xml

In der web.xml haben wir dem Servlet den Namen „helloworld“ gegeben. Das DispatcherServlet sucht in dem WEB-INF Ordner -falls der Pfad nicht extra angegeben wird- immer nach einer Datei mit dem Namen [servletname]-servlet.xml. In dieser Datei werden weitere Einstellungen für Spring vorgenommen. Zunächst muss also die Datei helloworld-servlet.xml in dem WEB-INF Ordner angelegt und mit folgendem Code gefüllt werden.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-3.0.xsd">

	<!-- Spring sucht in dem angegebenen Package nach Controllern -->
	<context:component-scan base-package="de.itblogging.spring.helloworld" />

	<bean id="viewResolver"
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="viewClass"
			value="org.springframework.web.servlet.view.JstlView" />
		<!-- Die Views müssen alle in dem 'views' Ordner liegen ... -->
		<property name="prefix" value="/WEB-INF/views/" />
		<!-- ... und mit .jsp enden -->
		<property name="suffix" value=".jsp" />
	</bean>

</beans>

HelloWorldController.java

In dem component-scan tag in der helloworld-servlet.xml Datei wurde ein Pfad angegeben. Dies ist der Pfad, an dem Spring automatisch nach Controller Klassen sucht, in diesem Fall de.itblogging.spring.helloworld.
HelloWorldController

package de.itblogging.spring.helloworld;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class HelloWorldController
{

	@RequestMapping("/helloWorld")
	public ModelAndView helloWorld()
	{
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.setViewName("helloWorld");
		String message = "Geschafft! Ich bin dein erstes Spring MVC Erfolgserlebnis! : - ) ";
		modelAndView.addObject("message", message);
		return modelAndView;
	}

}

index.jsp

Ebenfalls wird in der web.xml als Startseite auf eine index.jsp verwiesen. Diese muss in dem Ordner WebContent liegen. Die index.jsp könnte wie folgt aussehen:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>itblogging.de - Spring Tutorial</title>
</head>
<body>
<h2>Spring MVC - Hello World Tutorial</h2>
Jetzt geht es los. Wir rufen den <a href="helloWorld">HelloWorldController</a> auf.
</body>
</html>

helloWorld.jsp

Zu guter Letzt wird noch die View benötigt, die die Mitteilung des Spring Controllers ausgibt. Hierzu wird eine Datei helloWorld.jsp in dem Ordner WEB-INF => views angelegt.

helloWorld.jsp

Mit ${message} wird der zuvor in das Model geschriebene Parameter ausgelesen und in der View eingesetzt.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>itblogging.de - Spring Tutorial</title>
</head>
<body>

<h2>Ich wurde von einem Controller aufgerufen</h2>

Der Controller hat mir folgende Nachricht mitgeteilt:
${message}

</body>
</html>

Tomcat starten

Zu guter Letzt muss lediglich der Tomcat Server gestartet werden.
Tomcat 7 starten

Ist der Tomcat Server einmal gestartet, kann unter http://localhost:8080/HelloWorldSpring/ die Webanwendung aufgerufen werden. Der Inhalt der index.jsp begrüßt uns und das Tutorial ist somit erfolgreich abgeschlossen worden.
http://localhost:8080/HelloWorldSpring/

Spring MVC über Spring STS

Nachdem die Spring MVC Einführung in der Eclipse IDE (dies würde so natürlich auch in der Spring STS klappen) durchgeführt wurde, möchte ich an dieser Stelle noch den einfachen schnellen Weg über die Spring STS vorstellen.
Die Spring STS liefert für den schnellen Einstieg in das Spring Framework einige Template Projekte mit. So auch für Spring MVC.

Spring Template Project anlegen

In dem Spring STS Menü wird unter New => Other => SpringSource Tool Suite => Spring Template Project ein neues Template Projekt angelegt.
Spring Template Project

Anschließend muss das Spring MVC Project ausgewählt werden.
Spring MVC Project

Bei der ersten Verwendung des Spring MVC Projects fragt die Spring STS, ob sie die notwendigen Dateien herunterladen darf. Um fortzufahren, muss dies mit YES bestätigt werden.
Im nächsten Schritt wird der Name sowie die Projekthierarchie angegeben. Die Namensgebung wird analog zu der ersten Variante des Spring MVC vergeben.
Spring MVC Project naming

Mit Finish wird von der Spring STS ein neues Projekt angelegt. Das Hinzufügen von JAR Dateien oder das Anlegen des Controllers, der Views oder die Servlet Einstellungen wurde bereits von der Spring STS übernommen.

Tomcat starten

Nachdem die Anwendung über den Tomcat Server gestartet wurde, kann ebenfalls unter http://localhost:8080/HelloWorldSpring/ die Webanwendung abgerufen werden. Ein kleiner Text mit der aktuellen Uhrzeit wird ausgegeben.

Weitere Informationen

Da Spring MVC weitaus komplizierter werden kann als es in diesem Hello World Tutorial gezeigt wurde, möchte ich für viele weitere Informationen die offizielle Spring Dokumentation empfehlen:
Web MVC framework