Spring Boot: Fast MVC start

I planned to write an article about Spring Boot more than a year ago. Finally I have time and inspiration for this. So prepare yourself for 10 – 15 minutes of step by step tutorial. I’m going to demonstrate Spring Boot basics with Gradle and embedded Tomcat. I use Intellij IDEA instead of Eclipse but this shouldn’t be a problem for those of you who used to Eclipse.
Introduction to Spring Boot
What’s my goal? I want to develop something very similar to one of my previous tutorials about Spring with java configurations. It’s a good exercise to compare two different approaches for Spring development.
No doubt, most of you know what is the main aim of the Spring Boot. For the rest of readers I want to say that the Spring Boot makes developers happier because it takes care of configurations meanwhile a developer can focus on a code production. For more details read official reference.
Gradle build file

For managing dependencies and build of the project I use Gradle. Here is how build.gradle file looks:
buildscript {
repositories {
//Required repos
mavenCentral()
maven { url "http://repo.spring.io/snapshot" }
maven { url "http://repo.spring.io/milestone" }
}
dependencies {
//Required dependency for spring-boot plugin
classpath 'org.springframework.boot:spring-boot-gradle-plugin:1.1.2.BUILD-SNAPSHOT'
}
}
apply plugin: 'java'
apply plugin: 'war'
apply plugin: 'spring-boot'
war {
baseName = 'companies'
version = '0.1'
}
repositories {
mavenCentral()
maven { url "http://repo.spring.io/snapshot" }
maven { url "http://repo.spring.io/milestone" }
}
dependencies {
compile 'org.springframework.boot:spring-boot-starter-web'
//Required dependency for JSP
providedRuntime 'org.apache.tomcat.embed:tomcat-embed-jasper'
}
If you are new to Gradle, I recommend you to read about it somewhere else, e.g. on official site. It’s really nice and practical tool. It can do everything what Maven do, but without XML =)
Spring Boot initialisation
Now we can setup the Spring Boot on a java code level.
package com.companies;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan
@EnableAutoConfiguration
public class CompanyApplication {
public static void main(String[] args) {
SpringApplication.run(CompanyApplication.class, args);
}
}
That’s it, now you can start develop your business logic. Just kidding, we need to put some extra configs related to view resolving.
package com.companies.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
@Configuration
@EnableWebMvc
public class WebMvcConfig extends WebMvcConfigurerAdapter{
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("WEB-INF/pages/");
resolver.setSuffix(".jsp");
return resolver;
}
}
After you created the class published above, you can go ahead with controller development.
Controller & View
package com.companies.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class HelloWorldController {
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public ModelAndView hello() {
ModelAndView mav = new ModelAndView();
mav.setViewName("hello");
String str = "Hello World!";
mav.addObject("message", str);
return mav;
}
}
And corresponding view hello.jsp for the controller:
<html>
<head>
<title>Hello world page</title>
</head>
<body>
<h1>${message}</h1>
</body>
</html>
I hope it wan’t hard to repeat all these steps.
Run Spring Boot application
The last thing which we have to do in this tutorial is launch of the application. Hence I use Gradle, and in our build.gradle file I specified that the application need to be package as WAR file – I need to run build and run war file.
Here is how it looks like in IDEA:
Result you can see here localhost:8080/hello
If you want to perform start of the app more simply, just run the CompanyApplication.class
This approach is more preferable compering with the first one.
