Spring MVC Hello World Example with Maven and JSTL

In this Spring MVC tutorial, we are building hello world application using Spring MVC framework. Follow the given instructions step by step and learn the basics. We have used JSTL for writing the view files.

1. Development environment

  1. Maven
  2. Eclipse juno
  3. Tomcat 7

2. Create Spring MVC Application

2.1. Create maven web application

To create a maven web application, open command prompt and make current working directory into eclipse workspace.

Now execute below command.

$ mvn archetype:generate -DgroupId=com.howtodoinjava.mvc 
							-DartifactId=firstSpringApplication
							-DarchetypeartifactId=maven-archetype-webapp 
							-DinteractiveMode=false

Please remove the line break from above command. I added it for making it readable.

Now run below given commands. This will convert the created project into eclipse web project.

$ cd firstSpringApplication

$ mvn eclipse:eclipse -Dwtpversion=2.0

2.2. Update maven dependencies

Update the pom.xml file with these dependencies.

<properties>
    <spring.version>3.0.5.RELEASE</spring.version>
</properties>

<!-- Spring 3 dependencies -->
<dependency>
	<groupid>org.springframework</groupid>
	<artifactId>spring-core</artifactId>
	<version>${spring.version}</version>
	<scope>runtime</scope>
</dependency>

<dependency>
	<groupid>org.springframework</groupid>
	<artifactId>spring-web</artifactId>
	<version>${spring.version}</version>
	<scope>runtime</scope>
</dependency>

<dependency>
	<groupid>org.springframework</groupid>
	<artifactId>spring-webmvc</artifactId>
	<version>${spring.version}</version>
	<scope>runtime</scope>
</dependency>

<dependency>
	<groupid>javax.servlet</groupid>
	<artifactId>jstl</artifactId>
	<version>1.2</version>
	<scope>runtime</scope>
</dependency>

<dependency>
	<groupid>taglibs</groupid>
	<artifactId>standard</artifactId>
	<version>1.1.2</version>
	<scope>runtime</scope>
</dependency>

3. Create Dispatcher Servlet

3.1. Update web.xml

Update web.xml for Servlet mapping and spring configuration location.

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
  <display-name>www.howtodoinjava.com</display-name>
  
  <servlet>
		<servlet-name>spring-mvc</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
 
	<servlet-mapping>
		<servlet-name>spring-mvc</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
 
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/spring-mvc-servlet.xml</param-value>
	</context-param>
 
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
</web-app>

3.2. Bean configuration file

We will need to write configuration file (spring-mvc-servlet.xml) inside WEB-INF folder. We can name it at our will, but keep remember that it must match the servlet name we declared in web.xml.


<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	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">

	<context:component-scan base-package="com.howtodoinjava.web" />

	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
		<property name="prefix">
		    <value>/WEB-INF/jsp/</value>
		</property>
		<property name="suffix">
			<value>.jsp</value>
		</property>
	</bean>

</beans>

3. Create Spring MVC Controller

This request handler will receive all requests to a particular URL and return the model data to view handler configured.

package com.howtodoinjava.web;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
@RequestMapping("/access")
public class DemoController
{
	@RequestMapping(method = RequestMethod.GET)
	public String printWelcome(ModelMap model)
	{
		model.addAttribute("message", "Spring 3 MVC Hello World !! Thanks to www.howtodoinjava.com");
		return "helloWorld";
	}
}

4. Create Views

Our view is a jsp file, which will be rendered in browser when related view will be returned from server.

<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@ taglib prefix="x" uri="http://java.sun.com/jstl/xml" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jstl/sql" %>

<html>
	<head>
		<title>My first example using Spring 3 MVC</title>
	</head>
	<body>
		<h1>Welcome message : <c:out value="${message}"></c:out></h1>
	</body>
</html>

5. Demo

To run the application, configure tomcat server in eclipse. Now, right click on project and choose run as. On sub menu, choose Run on server.

Now type on browser: http://localhost:8080/firstSpringApplication/access

We should be able to see the message “Spring 3 MVC Hello World !! Thanks to www.howtodoinjava.com” in browser.

If you find any problem in running or deploying given application, drop me a comment.

Happy Learning !!

Was this post helpful?

Join 7000+ Fellow Programmers

Subscribe to get new post notifications, industry updates, best practices, and much more. Directly into your inbox, for free.

17 thoughts on “Spring MVC Hello World Example with Maven and JSTL”

  1. Im a beginner it is a great Tutorial it really helps me to build or create a simple spring mvc 3 apps. sir can I ask a favor can you create a tutorial of spring mvc 3 w/out using maven. I mean by using jar files only ..

    sorry theres something wrong on my grammar im not that good in english

    ~ NewbieJonel

  2. You have mentioned RequestMapping at class level for access – @RequestMapping(“/access”)
    And mentioned RequestMapping method as RequestMethod.GET for method printWelcome – @RequestMapping(method = RequestMethod.GET)
    I have couple of questions related to this, when we dont have any RequestMapping value at method level. – Only at class level like access – @RequestMapping(“/access”)
    1) Can we have multiple methods with same RequestMethod – such as RequestMethod.GET for printWelcome, printWelcomeNew ..
    If yes, How will application directs to proper method ?
    2) If we have multiple methods with DIFFERENT RequestMethod – such as RequestMethod.GET for printWelcome, RequestMethod.POST for printWelcomePost, RequestMethod.PUT for printWelcomePut..
    How will application directs to proper method – how GET, POST, PUT plays role here, and how it manages to go to proper method ?
    When it will go to Post method, and Put method ?

    • Very good question. And the answer lies in use of annotations.

      RESTEasy uses a regex based system for paths and selects the most closely matching pattern. In the event of a collision the last one matched is used.
      Further for matching methods, resteasy uses build path expressions as above link, then it matches method type (POST, GET annotations etc.) and it also matches the media types as well. When all above are matched (if mentioned in method declaration) then only method is invoked.

      The name of the method does not play any role here. You can name your method absolutely anything i.e. abc, xyz etc. No effect at all.

  3. Suggestion : In the above command while creating the firstSpringApplication it is typed as -DarchetypeartifactId. If we run the above command as it is, it is creating Java application. It should be corrected as -DarchetypeArtifactId to create firstSpringApplication as web application

  4. hey, nice tutorial.. 🙂
    just wanted to ask your opinion on how much difference is there between Jersey API and Spring MVC for REST webservices development. which one is preferable and in what circumstances?

    • actully i was reading your post on REST webservice, and i was redirected here. Mistakenly posted the comment on this post instead of posting there 😛

      • Shashi, it’s very broad question and requires a lot of analysis and I believe that at last there is not much difference when it comes to implement code. Real decision lies in scope of application. If you are building an “webservices” of enterprise level that does not need MVC [UI interaction] then you should go for JAX-RS, RESTeasy or Jersey. All are equally powerful.
        If application is mainly MVC and you need to plugin some REST APIs additionally, Spring MVC is for that purpose only. Remember that Jersey/RESTeasy are mainly intended for building webservices only.

  5. An internal error occurred during: “Updating status for Tomcat v7.0 Server at localhost…”.
    java.lang.IndexOutOfBoundsException

  6. choose a number or apply filter (format :[groupId],artifactId ,case sensitive contains):236:

    so what should I enter? and what is the meaning of these parameters?

    and how to add jdocklet.jar

  7. at command prompt asking me to enter –
    choose a number or apply filter (format :[groupId],artifactId ,case sensitive contains):236:

    so what should I enter? and what is the meaning of these parameters?

Comments are closed.

HowToDoInJava

A blog about Java and its related technologies, the best practices, algorithms, interview questions, scripting languages, and Python.