Tutorial

Spring MVC Tutorial

Published on August 3, 2022
author

Pankaj

Spring MVC Tutorial

In this Spring MVC Tutorial, we will learn how to develop Spring MVC web application using Spring Tool Suite. Spring MVC framework is widely used for java web applications.

Spring MVC

spring mvc, spring mvc tutorial Just like Struts Framework, Spring MVC is also based on Java EE Servlet and JSP technologies and implement Model-View-Controller design pattern.

Spring MVC Tutorial

We have earlier seen how Spring Dependency Injection works and in this tutorial we will learn how to create a simple web application using Spring MVC framework. We can use Eclipse or IntelliJ IDE for the Spring projects development, but SpringSource provides Spring Tool Suite (STS) that is an IDE based on Eclipse and comes with in-built VMware vFabric tc Server that is built on top of Apache Tomcat container and optimised for Spring-based applications. I would use STS for Spring MVC tutorial and other future tutorials because it makes a developer life easier by providing the following features:

  • Support for creating skeletal Spring applications (MVC, Rest, Batch etc), good for starting the project from scratch. We will soon see in this spring MVC tutorial how easy it is to create a Spring MVC project.
  • Provides useful features such as creating Spring Configuration files, parsing config files and classes to provide useful information about them.
  • Automatic validation of Spring application
  • Refactoring support to easily make project changes, the changes get reflected in config files too.
  • Code assist for not only classes but configuration files too, I like this feature a lot because most of the times we need to know what we can use and its details.
  • Best support for Aspect Oriented Programming (AOP) through the integration of AspectJ.

Looking at all the features STS provide, I was sold for this and decided to use it for Spring application and till now I am very happy with it. Just Download the STS from STS Official Download Page and install it. I am using STS 3.4.0.RELEASE that is based on Eclipse 4.3.1 release. Spring Tool Suite, Spring MVC, Spring MVC Tutorial for beginners If you don’t want to use STS and want to get its facilities in existing Eclipse, then you need to install its plugin from Eclipse Marketplace. Use below image as a reference and make sure to chose the correct STS version for installation. Below plugin is good for Eclipse Kepler. Spring Tool Suite, Spring MVC, Spring MVC Tutorial Eclipse If you don’t want to use SpringSource server, you can deploy the application in any other Java EE container such as Tomcat, JBoss etc. For this tutorial, I will use the server that ships with STS but I have tested the application by exporting it as WAR file into separate tomcat server and it’s working fine. Now that our server environment and IDE is ready, let’s proceed to create our first Spring MVC project. Below steps are valid for STS as well as Eclipse with STS plugins.

Creating Spring MVC Application in STS or Eclipse

Step 1: Create New Spring Project from the menu. Spring MVC, Spring MVC Project, Spring MVC Example Step 2: In the new project window, give the name as “SpringMVCExample” and chose template as “Spring MVC Project”. If you are using this template for the first time, STS will download it from SpringSource website. If you want, you can add the project to any working set. Spring MVC Spring MVC Template Download, Spring MVC Project, Spring MVC Example Step 3: When the template is downloaded, in the next screen you need to provide the top-level package name. This package will be used as the base-package for Spring components. Spring MVC source Package, Spring MVC, Spring MVC Example, Spring MVC Tutorial Step 4: Once the project is created by Spring MVC template, it will look like below image. Spring MVC Don’t worry if you don’t see User.java class, login.jsp and user.jsp files, they have been added by me later on. If your project is not compiled and you see some errors, run Maven/Update Project. Make sure to check the “Force update of Snapshots/Releases” options, refer below image. Spring MVC, Maven Force update projects Overall project looks just like any other maven based web application with some Spring configuration files. Now it’s time to analyze the different part of the projects and extend it a little.

Spring MVC Dependencies

Our generated pom.xml file looks like below.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.journaldev</groupId>
	<artifactId>SpringMVCExample</artifactId>
	<name>SpringMVCExample</name>
	<packaging>war</packaging>
	<version>1.0.0-BUILD-SNAPSHOT</version>
	<properties>
		<java-version>1.6</java-version>
		<org.springframework-version>4.0.0.RELEASE</org.springframework-version>
		<org.aspectj-version>1.7.4</org.aspectj-version>
		<org.slf4j-version>1.7.5</org.slf4j-version>
	</properties>
	<dependencies>
		<!-- Spring -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${org.springframework-version}</version>
			<exclusions>
				<!-- Exclude Commons Logging in favor of SLF4j -->
				<exclusion>
					<groupId>commons-logging</groupId>
					<artifactId>commons-logging</artifactId>
				 </exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>
				
		<!-- AspectJ -->
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjrt</artifactId>
			<version>${org.aspectj-version}</version>
		</dependency>	
		
		<!-- Logging -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>${org.slf4j-version}</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>jcl-over-slf4j</artifactId>
			<version>${org.slf4j-version}</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>${org.slf4j-version}</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.15</version>
			<exclusions>
				<exclusion>
					<groupId>javax.mail</groupId>
					<artifactId>mail</artifactId>
				</exclusion>
				<exclusion>
					<groupId>javax.jms</groupId>
					<artifactId>jms</artifactId>
				</exclusion>
				<exclusion>
					<groupId>com.sun.jdmk</groupId>
					<artifactId>jmxtools</artifactId>
				</exclusion>
				<exclusion>
					<groupId>com.sun.jmx</groupId>
					<artifactId>jmxri</artifactId>
				</exclusion>
			</exclusions>
			<scope>runtime</scope>
		</dependency>

		<!-- @Inject -->
		<dependency>
			<groupId>javax.inject</groupId>
			<artifactId>javax.inject</artifactId>
			<version>1</version>
		</dependency>
				
		<!-- Servlet -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>servlet-api</artifactId>
			<version>2.5</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet.jsp</groupId>
			<artifactId>jsp-api</artifactId>
			<version>2.1</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
		</dependency>
	
		<!-- Test -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.7</version>
			<scope>test</scope>
		</dependency>        
	</dependencies>
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-eclipse-plugin</artifactId>
                <version>2.9</version>
                <configuration>
                    <additionalProjectnatures>
                        <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
                    </additionalProjectnatures>
                    <additionalBuildcommands>
                        <buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
                    </additionalBuildcommands>
                    <downloadSources>true</downloadSources>
                    <downloadJavadocs>true</downloadJavadocs>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.5.1</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                    <compilerArgument>-Xlint:all</compilerArgument>
                    <showWarnings>true</showWarnings>
                    <showDeprecation>true</showDeprecation>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.2.1</version>
                <configuration>
                    <mainClass>org.test.int1.Main</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

artifactId will be the servlet-context for the web application, so you can change it if you want something else. There are few properties defined for Spring Framework, AspectJ and SLF4j versions, I found that they were not reflecting the latest versions, so I have changed them to the latest stable version as of today. The project dependencies that I am interested in are;

  • spring-context: Spring Core dependency. Notice the exclusion of commons logging in favor of SLF4J.
  • spring-webmvc: Spring artifact for MVC support
  • aspectjrt: AspectJ API reference
  • SLF4J and Log4j: For logging purposes, Spring is very easy to configure for log4j or Java Logging API because of SLF4J integration.
  • javax.inject - JSR330 API for dependency injection

There are some other dependencies added, such as Servlet, JSP, JSTL and JUnit API but for starter application, we can overlook them.

Spring MVC Tutorial - Log4j Configuration

The generated log4j.xml file looks like below.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
<log4j:configuration xmlns:log4j="https://jakarta.apache.org/log4j/">

	<!-- Appenders -->
	<appender name="console" class="org.apache.log4j.ConsoleAppender">
		<param name="Target" value="System.out" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%-5p: %c - %m%n" />
		</layout>
	</appender>
	
	<!-- Application Loggers -->
	<logger name="com.journaldev.spring">
		<level value="info" />
	</logger>
	
	<!-- 3rdparty Loggers -->
	<logger name="org.springframework.core">
		<level value="info" />
	</logger>
	
	<logger name="org.springframework.beans">
		<level value="info" />
	</logger>
	
	<logger name="org.springframework.context">
		<level value="info" />
	</logger>

	<logger name="org.springframework.web">
		<level value="info" />
	</logger>

	<!-- Root Logger -->
	<root>
		<priority value="warn" />
		<appender-ref ref="console" />
	</root>
	
</log4j:configuration>

Notice that it’s printing everything to console, we can easily add appenders to redirect logging to files.

Spring MVC Tutorial - Deployment Descriptor Configuration

Let’s see our web.xml and analyze it.

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="https://java.sun.com/xml/ns/javaee"
	xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="https://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

	<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/spring/root-context.xml</param-value>
	</context-param>
	
	<!-- Creates the Spring Container shared by all Servlets and Filters -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

	<!-- Processes application requests -->
	<servlet>
		<servlet-name>appServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
		
	<servlet-mapping>
		<servlet-name>appServlet</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>

</web-app>

ContextLoaderListener ties the ApplicationContext lifecycle to ServletContext lifecycle and automate the creation of ApplicationContext. ApplicationContext is the place for Spring beans and we can provide it’s configuration through contextConfigLocation context parameter. root-context.xml file provides the configuration details for WebApplicationContext. DispatcherServlet is the controller class for Spring MVC application and all the client requests are getting handled by this servlet. The configuration is being loaded from the servlet-context.xml file.

Spring MVC Tutorial - Configuration Files

root-context.xml file:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="https://www.springframework.org/schema/beans"
	xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="https://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">
	
	<!-- Root Context: defines shared resources visible to all other web components -->
		
</beans>

We can define shared beans here, as of now there is nothing in it. servlet-context.xml code:

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

	<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->
	
	<!-- Enables the Spring MVC @Controller programming model -->
	<annotation-driven />

	<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
	<resources mapping="/resources/**" location="/resources/" />

	<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
	<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<beans:property name="prefix" value="/WEB-INF/views/" />
		<beans:property name="suffix" value=".jsp" />
	</beans:bean>
	
	<context:component-scan base-package="com.journaldev.spring" />	
	
</beans:beans>

This is how the standard Spring configuration file looks like, just imagine writing all this on your own and you will start liking STS tool. annotation-driven element is used to let Controller servlet know that annotations will be used for bean configurations. resources element defines the location where we can put static files such as images, HTML pages etc that we don’t want to get through Spring framework. InternalResourceViewResolver is the view resolver, we can provide view pages location through prefix and suffix properties. So all our JSP pages should be in /WEB-INF/views/ directory. context:component-scan element is used to provide the base-package location for scanning Controller classes. Remember the value of the top-level package given at the time of project creation, it’s the same value getting used here.

Spring MVC Controller Class

HomeController is created automatically with the home() method, although I have extended it a little bit by adding loginPage() and login() methods.

package com.journaldev.spring;

import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 * Handles requests for the application home page.
 */
@Controller
public class HomeController {
	
	private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
	
	/**
	 * Simply selects the home view to render by returning its name.
	 */
	@RequestMapping(value = "/", method = RequestMethod.GET)
	public String home(Locale locale, Model model) {
		logger.info("Welcome home! The client locale is {}.", locale);
		
		Date date = new Date();
		DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
		
		String formattedDate = dateFormat.format(date);
		
		model.addAttribute("serverTime", formattedDate );
		
		return "home";
	}
	
	@RequestMapping(value = "/login", method = RequestMethod.GET)
	public String loginPage(Locale locale, Model model) {
		return "login";
	}
	
	@RequestMapping(value = "/home", method = RequestMethod.POST)
	public String login(@Validated User user, Model model) {
		model.addAttribute("userName", user.getUserName());
		return "user";
	}
}

@Controller annotation is used to indicate that it’s a web controller class. @RequestMapping is used with classes and methods to redirect the client request to specific handler method. Notice that handler methods are returning String, this should be the name of view page to be used as the response. As you can see that we are having three methods returning different strings, so we need to create JSP pages with the same name. Notice that login() method will get called with HTTP method as POST, so we are expecting some form data here. So we have User model class and it’s marked for validation using @Validated annotation. Every method contains Model as an argument and we can set attributes to be later used in the JSP response pages.

Spring MVC Model Classes

Model classes are used to hold form variables, our User model bean looks like below.

package com.journaldev.spring;

public class User {

	private String userName;

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}
	
}

A simple java bean with the variable name and its getter and setter methods.

Spring MVC Tutorial - View Pages

We have three JSP pages like below. home.jsp code:

<%@ taglib uri="https://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<html>
<head>
	<title>Home</title>
</head>
<body>
<h1>
	Hello world!  
</h1>

<P>  The time on the server is ${serverTime}. </P>
</body>
</html>

Notice the use of JSP Expression Language to get the attribute values. login.jsp code:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Login Page</title>
</head>
<body>
<form action="home" method="post">
<input type="text" name="userName"><br>
<input type="submit" value="Login">
</form>
</body>
</html>

A simple JSP page for the user to provide the userName as input. Notice that form variable name is same as User class variable name. Also, form action is “home” and method is “post”. It’s clear that HomeController login() method will handle this request. user.jsp code:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>User Home Page</title>
</head>
<body>
<h3>Hi ${userName}</h3>
</body>
</html>

Simple home page for the user where username is displayed, notice that we are setting this attribute in the login method.

Spring MVC Example Application Testing

Our application is ready for execution, just run it on the VMware tc Server or your choice of any other servlet container, you will get below pages as the response. Spring MVC Hello World, Spring MVC, Spring MVC Example Spring MVC Hello World, Spring MVC Spring MVC Hello World, Spring MVC Tutorial That’s it for Spring MVC Tutorial, you can see that how easy it is to create Spring MVC application using STS plugins. The code size is very less and most of the configuration is handled by Spring MVC so that we can focus on business logic. Download the example spring MVC project from below link and play around with it.

Download Spring MVC Project

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about our products

About the author(s)

Category:
Tutorial
Tags:

While we believe that this content benefits our community, we have not yet thoroughly reviewed it. If you have any suggestions for improvements, please let us know by clicking the “report an issue“ button at the bottom of the tutorial.

Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
JournalDev
DigitalOcean Employee
DigitalOcean Employee badge
December 25, 2013

Great tutorial, learned a lot with simple example. Looking forward for Spring Webservices and Rest tutorials, keep them coming.

- Rajesh

    JournalDev
    DigitalOcean Employee
    DigitalOcean Employee badge
    December 25, 2013

    Very nice explanation , thank u so much…

    - Sreeni

      JournalDev
      DigitalOcean Employee
      DigitalOcean Employee badge
      December 28, 2013

      Good work,. Highly appreciate the efforts.

      - Mohanakrishnan Sudersan

        JournalDev
        DigitalOcean Employee
        DigitalOcean Employee badge
        December 30, 2013

        when i import this project i found following error: java.lang.ClassCastException: org.apache.jasper.el.ELContextImpl cannot be cast to org.apache.jasper.el.ELContextImpl waiting for reply… thnx

        - Ganesh Dudhade

        JournalDev
        DigitalOcean Employee
        DigitalOcean Employee badge
        December 30, 2013

        Are you getting compile time error or at runtime. I think it’s because of Classloading issue since the both classes names are same. Are you running on Tomcat or STS Server? Please check your project settings.

        - Pankaj

          JournalDev
          DigitalOcean Employee
          DigitalOcean Employee badge
          February 3, 2014

          Really helpfull…

          - Reddy

            JournalDev
            DigitalOcean Employee
            DigitalOcean Employee badge
            February 17, 2014

            how to call setUserName(String userName)

            - Sandipon Saha

            JournalDev
            DigitalOcean Employee
            DigitalOcean Employee badge
            February 17, 2014

            Its automatically called by Spring framework. Ultimately it’s a normal Java Bean and if you have the object, you can call the method and set any value you want.

            - Pankaj

              JournalDev
              DigitalOcean Employee
              DigitalOcean Employee badge
              February 17, 2014

              how to call setUserName mehods

              - Sandipon Saha

                JournalDev
                DigitalOcean Employee
                DigitalOcean Employee badge
                March 25, 2014

                Thanks Pankaj. Was very useful. As you are doing good, my prayer for you is to give your life to Jesus Christ and pursue eternal life through him. This is not a joke or a laughing mater. Thanks again.

                - Kofi

                  JournalDev
                  DigitalOcean Employee
                  DigitalOcean Employee badge
                  March 30, 2014

                  I got this running only when I give “https://localhost:8080/spring/” instead of giving “https://localhost:8080/springMVCExample/”. Where am I going wrong?

                  - Suresh

                  JournalDev
                  DigitalOcean Employee
                  DigitalOcean Employee badge
                  March 30, 2014

                  That’s because STS tcserver automatically creates a context.xml file for the application with ServletContext as spring. You can check that in the tcserver directories.

                  - Pankaj

                  JournalDev
                  DigitalOcean Employee
                  DigitalOcean Employee badge
                  April 16, 2014

                  I am able to access https://localhost:8080/spring/, but when i try to access the login page https://localhost:8080/spring/login get HTTP 404 error Is there any settings i need to change Thanks

                  - Rohan

                    JournalDev
                    DigitalOcean Employee
                    DigitalOcean Employee badge
                    June 11, 2014

                    I have the same problem. but how to create my own context.xml ? with many thanks

                    - Hussam

                    JournalDev
                    DigitalOcean Employee
                    DigitalOcean Employee badge
                    June 11, 2014

                    Don’t run from Eclipse, export as WAR file and then deploy it.

                    - Pankaj

                      JournalDev
                      DigitalOcean Employee
                      DigitalOcean Employee badge
                      November 24, 2014

                      Not sure if this is proper etiquette or not – I am editing this answer to give exact steps for Eclipse Indigo. 1. In your project’s Properties, choose “Web Project Settings”. 2. Change “Context root” to “app”. 3. Choose Window > Show View > Servers. 4. Stop the server by either clicking the red square box (“Stop the server” tooltip) or context-click on the server listing to choose “Stop”. 5. On the server you want to use, context-click to choose “Clean…”. 6. Click OK in this confirmation dialog box. Screenshot of dialog asking to update server configuration to match the changed context root Now you can run your app with the new “app” URL such as: https://localhost:8080/app/

                      - John Britto

                        JournalDev
                        DigitalOcean Employee
                        DigitalOcean Employee badge
                        April 12, 2014

                        sir i didn’t get the login page … only home page appear after the server starts … wating for ur reply … sir i m using macbook . tell me how to connect mysql with STS … thank you sir … god bless you sir for ur efforts … :)

                        - ketan

                        JournalDev
                        DigitalOcean Employee
                        DigitalOcean Employee badge
                        April 12, 2014

                        Check the image URL for the URI pattern to use in your application for login page. If you are using Macbook Pro, you can download “Sequel Pro” that is a very good IDE for MySQL databases.

                        - Pankaj

                        JournalDev
                        DigitalOcean Employee
                        DigitalOcean Employee badge
                        April 12, 2014

                        thank you very much sir …!

                        - ketan

                          JournalDev
                          DigitalOcean Employee
                          DigitalOcean Employee badge
                          April 15, 2014

                          In Login page, after clicking on Login button, it not redirecting to home page. Its prompting error like below… SOURCES Deployment url : https://localhost:8080/test/home ERROR SUMMARY Below is a summary of the errors, details of these errors are listed later in the log. * Activation of https://localhost:8080/test/home resulted in exception. Following failure messages were detected: + Downloading https://localhost:8080/test/home did not succeed. + The remote server returned an error: (405) Method Not Allowed. Please help…

                          - Nitin

                          JournalDev
                          DigitalOcean Employee
                          DigitalOcean Employee badge
                          April 15, 2014

                          Which browser you are using?

                          - Pankaj

                            JournalDev
                            DigitalOcean Employee
                            DigitalOcean Employee badge
                            April 20, 2014

                            Very nice explanation! worked perfectly! great tutorial!! :)

                            - Nathi Heimoski

                              JournalDev
                              DigitalOcean Employee
                              DigitalOcean Employee badge
                              May 6, 2014

                              Great tutorial, Pankaj. Is helping me a lot. Thanks!

                              - Marcel

                                JournalDev
                                DigitalOcean Employee
                                DigitalOcean Employee badge
                                May 11, 2014

                                Hi Pankaj God Bless you…You are the best, very helpful for a learner like me. regards, Prashanth

                                - Prashanth

                                  JournalDev
                                  DigitalOcean Employee
                                  DigitalOcean Employee badge
                                  May 31, 2014

                                  God bless u !!! Thank u for the wonderful tutorial. It really helps students like me.

                                  - Suma

                                    JournalDev
                                    DigitalOcean Employee
                                    DigitalOcean Employee badge
                                    June 6, 2014

                                    Too good. Excellently written and excellently detailed. Pankaj, you should definitely start online video tutorials too. Thanks a lot for posting such a valuable thing for us Thanks -Rakesh

                                    - Rakesh Konda

                                      JournalDev
                                      DigitalOcean Employee
                                      DigitalOcean Employee badge
                                      June 10, 2014

                                      I am a very beginner using STS. I followed all the steps in building the project on my STS. but, when I run it using WMware vFabric tc Server v2.5 , the server runs correctly, and I can browse to the home page. but when I type the URL of the project as it shown in the pictures you provide in this doc. it show me error. means that there is no page with this name. second, can you tell me how to import the project to STS without the need to rebuild it step by step? My best regards

                                      - Hussam

                                      JournalDev
                                      DigitalOcean Employee
                                      DigitalOcean Employee badge
                                      June 10, 2014

                                      1. It’s because when you deploy from STS, it automatically generates a context file with name “spring”, so you should use it like that. I am sure you know about web application servlet context. 2. STS is built on top of Eclipse, so you can import any project like you do in Eclipse.

                                      - Pankaj

                                        JournalDev
                                        DigitalOcean Employee
                                        DigitalOcean Employee badge
                                        June 25, 2014

                                        nicely helped me to learn

                                        - siva

                                          JournalDev
                                          DigitalOcean Employee
                                          DigitalOcean Employee badge
                                          July 6, 2014

                                          Excellent tutorial Pankaj!!

                                          - Sandeep

                                            JournalDev
                                            DigitalOcean Employee
                                            DigitalOcean Employee badge
                                            July 20, 2014

                                            Thanks Pankaj. a very insightful example. I know this might be a stupid question; please what is the difference between springsource tc server and vmware vfabric tc server? Also I have successfully installed STS into my Eclipse environmnt but I am having issues adding springsource tc server 2.1 to my project; at the point where it’s asking for installation directory, if i click on Browse, i am unable to find anything as i dont know where STS installation dumped the require file Thanks as you help

                                            - Lary

                                              JournalDev
                                              DigitalOcean Employee
                                              DigitalOcean Employee badge
                                              July 23, 2014

                                              Hi, Pankaj. I’m a beginner of spring mvc. I can’t understand how is the textbox value “userName” in user.jsp saved to User. The value must be recorded to User class somewhere so that in HomeController.java you can set the model’s attribute “userName” with user.getUserName(), but I can’t find where.

                                              - Gilbert

                                              JournalDev
                                              DigitalOcean Employee
                                              DigitalOcean Employee badge
                                              August 7, 2014

                                              thank u bhaii…

                                              - xyz

                                                JournalDev
                                                DigitalOcean Employee
                                                DigitalOcean Employee badge
                                                August 8, 2014

                                                Hello Pankaj, I am getting an error in servlet-context.xml (line:13 Class ‘org.springframework.web.servlet.config.AnnotationDrivenBeanDefinitionParser $CompositeUriComponentsContributorFactoryBean’ not found [config set: SpringMVCExample/web-context] How to correct it. Thanks & Regards, Raghav

                                                - Raghav

                                                JournalDev
                                                DigitalOcean Employee
                                                DigitalOcean Employee badge
                                                September 26, 2014

                                                hello, i met the same problem but have no idea how to solve it. have you fixed it?

                                                - Farago

                                                  JournalDev
                                                  DigitalOcean Employee
                                                  DigitalOcean Employee badge
                                                  September 15, 2014

                                                  Hi All, I am getting below error.please help me how to resolve this problem. org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/spring/] in DispatcherServlet with name ‘appServlet’ I am using JDK 1.6, tomcat 7

                                                  - Ajaya Kumar

                                                  JournalDev
                                                  DigitalOcean Employee
                                                  DigitalOcean Employee badge
                                                  September 15, 2014

                                                  What is the WAR file name that you have deployed in Tomcat7, that will be your application context. I think that’s why it’s not working for you.

                                                  - Pankaj

                                                  JournalDev
                                                  DigitalOcean Employee
                                                  DigitalOcean Employee badge
                                                  September 26, 2014

                                                  You could run through how to compile this project too, you asume too much, there is no WAR file at the stage you finnish this project

                                                  - Steve

                                                  JournalDev
                                                  DigitalOcean Employee
                                                  DigitalOcean Employee badge
                                                  September 26, 2014

                                                  HTTP Status 404 - /SpringMVCExample/ type Status report message /SpringMVCExample/ description The requested resource is not available. Apache Tomcat/8.0.12

                                                  - Steve

                                                    JournalDev
                                                    DigitalOcean Employee
                                                    DigitalOcean Employee badge
                                                    September 26, 2014

                                                    Hi Steve, If you are learning Spring, I am sure you can run mvn clean install command in the terminal to build your project WAR and then copy it to your tomcat webapps directory. Also you should know that the file name will be the Servlet Context of the application. This tutorial is not intended to include everything, if I include every minor details, it will become a large book.

                                                    - Pankaj

                                                      JournalDev
                                                      DigitalOcean Employee
                                                      DigitalOcean Employee badge
                                                      December 26, 2014

                                                      Hi Ajaya Kumar, Please check your HomeController.java class has proper @RequestMapping. Thanks

                                                      - Srikanth Kattam

                                                        JournalDev
                                                        DigitalOcean Employee
                                                        DigitalOcean Employee badge
                                                        September 20, 2014

                                                        I am getting error in root-context.xml and pom.xml

                                                        - Ganesh

                                                          JournalDev
                                                          DigitalOcean Employee
                                                          DigitalOcean Employee badge
                                                          September 24, 2014

                                                          Really a very good tutorial implementing the new STS tool and spring. Most of the tutorials online are very old. Thanks again. Keep up this great work!!!

                                                          - Abhiroop

                                                            JournalDev
                                                            DigitalOcean Employee
                                                            DigitalOcean Employee badge
                                                            September 30, 2014

                                                            Thank you for this tutorial and for your site. You are very helpful!

                                                            - Gigi Sapun

                                                              JournalDev
                                                              DigitalOcean Employee
                                                              DigitalOcean Employee badge
                                                              October 15, 2014

                                                              How to customize startup URL when running a Spring MVC web application in STS? I’m following your tutorial and succeeded to get the sample application run from springsource’s STS IDE. Though when started, the initial URL opened is https://localhost:8080/springmvc/WEB-INF/views/home.jsp which need to be corrected as below as I want to run the default Home controller. https://localhost:8080/springmvc/ How can I change that startup URL when run? This question is also posted on stackoverflow.com at https://stackoverflow.com/questions/26386462/how-to-customize-startup-url-when-running-a-spring-mvc-web-application-in-sts

                                                              - Nam G VU

                                                                JournalDev
                                                                DigitalOcean Employee
                                                                DigitalOcean Employee badge
                                                                October 28, 2014

                                                                Thanks. It was straight forward and easy to follow.

                                                                - Rizwan Mursaleen

                                                                  JournalDev
                                                                  DigitalOcean Employee
                                                                  DigitalOcean Employee badge
                                                                  November 3, 2014

                                                                  Hi Pankaj, Thanks for the great tutorial. I could never understand one thing - Spring Controller methods accepts any combination of parameters, regardless of type and count. How this happens? Why there is not standard rule for this. Who passes the values for these parameters ? and also, how should we plan what argument to take while designing those methods? Thanks, Raju.

                                                                  - Raju

                                                                  JournalDev
                                                                  DigitalOcean Employee
                                                                  DigitalOcean Employee badge
                                                                  November 3, 2014

                                                                  Its all possible because of Reflection and Annotations.

                                                                  - Pankaj

                                                                    JournalDev
                                                                    DigitalOcean Employee
                                                                    DigitalOcean Employee badge
                                                                    November 18, 2014

                                                                    Very nice tutorial. It’s working fine for me. But i’ve one question: how can i separate the datasource and hibernate configuration from the servlet-context. I mean, i had created two extra files: datasource.xml: properties/database.properties and hibernate.xml: com.journaldev.spring.model.Person org.hibernate.dialect.MySQLDialect true How can i import/integrated those files in servlet-context? Cheers

                                                                    - emoleumassi

                                                                    JournalDev
                                                                    DigitalOcean Employee
                                                                    DigitalOcean Employee badge
                                                                    June 9, 2016

                                                                    Use the import tag to load multiple resources.

                                                                    - Pankaj

                                                                      JournalDev
                                                                      DigitalOcean Employee
                                                                      DigitalOcean Employee badge
                                                                      November 20, 2014

                                                                      Pankaj, I just want say big thanks to you for all yours wonderful blogs. These are very simple to follow as compare to other blogs. You are doing great job keep it up. Regards Bhupinder

                                                                      - Bhupinder Singh

                                                                      JournalDev
                                                                      DigitalOcean Employee
                                                                      DigitalOcean Employee badge
                                                                      June 9, 2016

                                                                      You just made my day brother. :)

                                                                      - Pankaj

                                                                        JournalDev
                                                                        DigitalOcean Employee
                                                                        DigitalOcean Employee badge
                                                                        November 22, 2014

                                                                        Thanks for the tutorial…Pls tell me why i am not getting the value in user.jsp ; instead it shows ‘hi’ only…i checked literally everything…

                                                                        - Fazin

                                                                        JournalDev
                                                                        DigitalOcean Employee
                                                                        DigitalOcean Employee badge
                                                                        November 23, 2014

                                                                        Obviously there is some issue in your code, please use logger to check whether u have value in the Controller class and then check for any typos etc.

                                                                        - Pankaj

                                                                          JournalDev
                                                                          DigitalOcean Employee
                                                                          DigitalOcean Employee badge
                                                                          December 2, 2014

                                                                          I found a typo Spring Controller Class HelloController >> should be HomeController. Thank you for this tutorial :D

                                                                          - Pabel Lopez

                                                                          JournalDev
                                                                          DigitalOcean Employee
                                                                          DigitalOcean Employee badge
                                                                          June 9, 2016

                                                                          Thanks Pabel, I have corrected it.

                                                                          - Pankaj

                                                                            JournalDev
                                                                            DigitalOcean Employee
                                                                            DigitalOcean Employee badge
                                                                            February 24, 2015

                                                                            Hi Pankaj - Could you please create “Spring MVC Swagger” example? You’ve lots of different types of example codes, but I don’t see it “Spring MVC Swagger”. That would really help for all your followers who re following you from most of the years. Thanks

                                                                            - PA

                                                                            JournalDev
                                                                            DigitalOcean Employee
                                                                            DigitalOcean Employee badge
                                                                            June 9, 2016

                                                                            I have never used it, that’s why I have not posted about it. Check below StackOverflow link, it has some good information. https://stackoverflow.com/questions/26720090/a-simple-way-to-implement-swagger-in-a-spring-mvc-application

                                                                            - Pankaj

                                                                              JournalDev
                                                                              DigitalOcean Employee
                                                                              DigitalOcean Employee badge
                                                                              March 2, 2015

                                                                              Hi, Im just now learning spring. My aim is to create RESTful web services using SPRING. In case if im not using spring, just with eclipse IDE, i can create dynamic web application and run it on local host server like tomcat. Even then, i will get the required URL in the top. Can’t we call it as REST service?. Why do we want to use SPRING to generate a Dynamic Web application?.. Please educate me.

                                                                              - Vibinchander

                                                                              JournalDev
                                                                              DigitalOcean Employee
                                                                              DigitalOcean Employee badge
                                                                              June 9, 2016

                                                                              We are using IDE to generate web application to get the skeleton of the project and then build on top of it.

                                                                              - Pankaj

                                                                                JournalDev
                                                                                DigitalOcean Employee
                                                                                DigitalOcean Employee badge
                                                                                March 6, 2015

                                                                                Excellent tutorial - thanks so much for sharing it.

                                                                                - Bill Hopkins

                                                                                JournalDev
                                                                                DigitalOcean Employee
                                                                                DigitalOcean Employee badge
                                                                                June 9, 2016

                                                                                you are welcome Bill

                                                                                - Pankaj

                                                                                  JournalDev
                                                                                  DigitalOcean Employee
                                                                                  DigitalOcean Employee badge
                                                                                  April 9, 2015

                                                                                  I am able to access https://localhost:8080/springMVCExample/, but when i try to access the login page https://localhost:8080/springMVCExample/login get HTTP 404 error Is there any settings i need to change. Thanks for the tutorial.

                                                                                  - Diwakar

                                                                                  JournalDev
                                                                                  DigitalOcean Employee
                                                                                  DigitalOcean Employee badge
                                                                                  April 10, 2015

                                                                                  You should check login.jsp again,

                                                                                  - Vu Le

                                                                                    JournalDev
                                                                                    DigitalOcean Employee
                                                                                    DigitalOcean Employee badge
                                                                                    September 17, 2015

                                                                                    sometimes ned ti restar eclipse or exit an entry again

                                                                                    - victor márquez

                                                                                      JournalDev
                                                                                      DigitalOcean Employee
                                                                                      DigitalOcean Employee badge
                                                                                      December 22, 2016

                                                                                      Just go to windows->show views -> server there you will see the server. Double click on that and open the modules. there you can see the path. that is the real path for your application. you can see the path like /spring In my case, my path is localhost:8080/spring

                                                                                      - Rajesh Pendela

                                                                                        JournalDev
                                                                                        DigitalOcean Employee
                                                                                        DigitalOcean Employee badge
                                                                                        April 29, 2015

                                                                                        Thanks a alot

                                                                                        - Ravikumar

                                                                                          JournalDev
                                                                                          DigitalOcean Employee
                                                                                          DigitalOcean Employee badge
                                                                                          June 10, 2015

                                                                                          Hi Pankaj. Great tutorial .Could you please explain more about model class and handler methods.?

                                                                                          - Kaveen

                                                                                          JournalDev
                                                                                          DigitalOcean Employee
                                                                                          DigitalOcean Employee badge
                                                                                          June 9, 2016

                                                                                          Go through my Spring tutorials, I have explained all these in more detail in other articles.

                                                                                          - Pankaj

                                                                                            JournalDev
                                                                                            DigitalOcean Employee
                                                                                            DigitalOcean Employee badge
                                                                                            July 13, 2015

                                                                                            thnx a lot .it helps me a lot …

                                                                                            - mk

                                                                                              JournalDev
                                                                                              DigitalOcean Employee
                                                                                              DigitalOcean Employee badge
                                                                                              November 20, 2014

                                                                                              Pankaj, I just want say big thanks to you for all yours wonderful blogs. These are very simple to follow as compare to other blogs. You are doing great job keep it up. Regards Bhupinder

                                                                                              - Bhupinder Singh

                                                                                                JournalDev
                                                                                                DigitalOcean Employee
                                                                                                DigitalOcean Employee badge
                                                                                                November 22, 2014

                                                                                                Thanks for the tutorial…Pls tell me why i am not getting the value in user.jsp ; instead it shows ‘hi’ only…i checked literally everything…

                                                                                                - Fazin

                                                                                                  JournalDev
                                                                                                  DigitalOcean Employee
                                                                                                  DigitalOcean Employee badge
                                                                                                  December 2, 2014

                                                                                                  I found a typo Spring Controller Class HelloController >> should be HomeController. Thank you for this tutorial :D

                                                                                                  - Pabel Lopez

                                                                                                    JournalDev
                                                                                                    DigitalOcean Employee
                                                                                                    DigitalOcean Employee badge
                                                                                                    February 24, 2015

                                                                                                    Hi Pankaj - Could you please create “Spring MVC Swagger” example? You’ve lots of different types of example codes, but I don’t see it “Spring MVC Swagger”. That would really help for all your followers who re following you from most of the years. Thanks

                                                                                                    - PA

                                                                                                      JournalDev
                                                                                                      DigitalOcean Employee
                                                                                                      DigitalOcean Employee badge
                                                                                                      March 2, 2015

                                                                                                      Hi, Im just now learning spring. My aim is to create RESTful web services using SPRING. In case if im not using spring, just with eclipse IDE, i can create dynamic web application and run it on local host server like tomcat. Even then, i will get the required URL in the top. Can’t we call it as REST service?. Why do we want to use SPRING to generate a Dynamic Web application?.. Please educate me.

                                                                                                      - Vibinchander

                                                                                                        JournalDev
                                                                                                        DigitalOcean Employee
                                                                                                        DigitalOcean Employee badge
                                                                                                        March 6, 2015

                                                                                                        Excellent tutorial - thanks so much for sharing it.

                                                                                                        - Bill Hopkins

                                                                                                          JournalDev
                                                                                                          DigitalOcean Employee
                                                                                                          DigitalOcean Employee badge
                                                                                                          April 9, 2015

                                                                                                          I am able to access https://localhost:8080/springMVCExample/, but when i try to access the login page https://localhost:8080/springMVCExample/login get HTTP 404 error Is there any settings i need to change. Thanks for the tutorial.

                                                                                                          - Diwakar

                                                                                                            JournalDev
                                                                                                            DigitalOcean Employee
                                                                                                            DigitalOcean Employee badge
                                                                                                            April 29, 2015

                                                                                                            Thanks a alot

                                                                                                            - Ravikumar

                                                                                                              JournalDev
                                                                                                              DigitalOcean Employee
                                                                                                              DigitalOcean Employee badge
                                                                                                              June 10, 2015

                                                                                                              Hi Pankaj. Great tutorial .Could you please explain more about model class and handler methods.?

                                                                                                              - Kaveen

                                                                                                                JournalDev
                                                                                                                DigitalOcean Employee
                                                                                                                DigitalOcean Employee badge
                                                                                                                July 13, 2015

                                                                                                                thnx a lot .it helps me a lot …

                                                                                                                - mk

                                                                                                                  JournalDev
                                                                                                                  DigitalOcean Employee
                                                                                                                  DigitalOcean Employee badge
                                                                                                                  September 17, 2015

                                                                                                                  Sir, what is maven and what is dependency , why we use it and how it works plz tell me

                                                                                                                  - Mohd Raisuddin

                                                                                                                    JournalDev
                                                                                                                    DigitalOcean Employee
                                                                                                                    DigitalOcean Employee badge
                                                                                                                    September 26, 2015

                                                                                                                    Hi Pankaj Can you explain why from variable name must be the same as User class variable name?

                                                                                                                    - karablaxos

                                                                                                                      JournalDev
                                                                                                                      DigitalOcean Employee
                                                                                                                      DigitalOcean Employee badge
                                                                                                                      October 19, 2015

                                                                                                                      great tutorials…thank you so much…

                                                                                                                      - sarvesh

                                                                                                                        JournalDev
                                                                                                                        DigitalOcean Employee
                                                                                                                        DigitalOcean Employee badge
                                                                                                                        October 29, 2015

                                                                                                                        Great work…thanks a ton

                                                                                                                        - chandra sekhar

                                                                                                                          JournalDev
                                                                                                                          DigitalOcean Employee
                                                                                                                          DigitalOcean Employee badge
                                                                                                                          December 25, 2015

                                                                                                                          This tutorial is very good! and thanks for the code to download! please keep doing more of these

                                                                                                                          - jorge

                                                                                                                            JournalDev
                                                                                                                            DigitalOcean Employee
                                                                                                                            DigitalOcean Employee badge
                                                                                                                            January 3, 2016

                                                                                                                            Great! Thank you for this tutorial!

                                                                                                                            - Patricia

                                                                                                                              JournalDev
                                                                                                                              DigitalOcean Employee
                                                                                                                              DigitalOcean Employee badge
                                                                                                                              February 7, 2016

                                                                                                                              Login Page i just change the jsp tag with spring tag but it give me error WARN : org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/controller/] in DispatcherServlet with name ‘appServlet’

                                                                                                                              - Vikas Bhardwaj

                                                                                                                                JournalDev
                                                                                                                                DigitalOcean Employee
                                                                                                                                DigitalOcean Employee badge
                                                                                                                                February 7, 2016

                                                                                                                                And instead of reply make some thing so we can show our error with pages so we can get the solution after trying these tutorial wtw asm tutorial thanks a lot…

                                                                                                                                - Vikas Bhardwaj

                                                                                                                                  JournalDev
                                                                                                                                  DigitalOcean Employee
                                                                                                                                  DigitalOcean Employee badge
                                                                                                                                  February 19, 2016

                                                                                                                                  Nice explanation. Thanks, Krunal

                                                                                                                                  - Krunal Shah

                                                                                                                                    JournalDev
                                                                                                                                    DigitalOcean Employee
                                                                                                                                    DigitalOcean Employee badge
                                                                                                                                    March 12, 2016

                                                                                                                                    Great explanation… Can you please explain me how to add external css and js files to this project… Thanks…

                                                                                                                                    - Abhishek S

                                                                                                                                      Try DigitalOcean for free

                                                                                                                                      Click below to sign up and get $200 of credit to try our products over 60 days!

                                                                                                                                      Sign up

                                                                                                                                      Join the Tech Talk
                                                                                                                                      Success! Thank you! Please check your email for further details.

                                                                                                                                      Please complete your information!

                                                                                                                                      Become a contributor for community

                                                                                                                                      Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

                                                                                                                                      DigitalOcean Documentation

                                                                                                                                      Full documentation for every DigitalOcean product.

                                                                                                                                      Resources for startups and SMBs

                                                                                                                                      The Wave has everything you need to know about building a business, from raising funding to marketing your product.

                                                                                                                                      Get our newsletter

                                                                                                                                      Stay up to date by signing up for DigitalOcean’s Infrastructure as a Newsletter.

                                                                                                                                      New accounts only. By submitting your email you agree to our Privacy Policy

                                                                                                                                      The developer cloud

                                                                                                                                      Scale up as you grow — whether you're running one virtual machine or ten thousand.

                                                                                                                                      Get started for free

                                                                                                                                      Sign up and get $200 in credit for your first 60 days with DigitalOcean.*

                                                                                                                                      *This promotional offer applies to new accounts only.