The new Certification Class of Learn Spring Security is out:


1. Overview and Maven

This is a simple Spring MVC tutorial showing how to set up a Spring MVC project, both with Java based Configuration as well as with XML Configuration.

The Maven artifacts for Spring MVC project are described in the in detail in the Spring MVC dependencies article.

2. The web.xml

This is a simple configuration of the web.xml for a Spring MVC project:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi=""
   id="WebApp_ID" version="3.0">

   <display-name>Spring MVC Java Config App</display-name>




We are using Java based Configuration, so we’re using AnnotationConfigWebApplicationContext as the main context class – this accepts @Configuration annotated classes as input. As such, we only need to specify the package where these configuration classes are located, via contextConfigLocation.

To keep this mechanism flexible, multiple packages are also configurable here, simply space delimited:

      <param-value>org.baeldung.spring.web.config org.baeldung.spring.persistence.config</param-value>

This allows more complex projects with multiple modules to manage their own Spring Configuration classes and contribute them to the overall Spring context at runtime.

Finally, the Servlet is mapped to / – meaning it becomes the default Servlet of the application and it will pick up every pattern that doesn’t have another exact match defined by another Servlet.

3. The Spring MVC Configuration – Java

The Spring MVC Java configuration is simple – it uses the MVC configuration support introduced in Spring 3.1:

public class ClientWebConfig extends WebMvcConfigurerAdapter {

   public void addViewControllers(ViewControllerRegistry registry) {


   public ViewResolver viewResolver() {
      InternalResourceViewResolver bean = new InternalResourceViewResolver();


      return bean;

Very important here is that we can register view controllers that create a direct mapping between the URL and the view name – no need for any Controller between the two now that we’re using Java configuration.

4. The Spring MVC Configuration – XML

Alternatively to the Java configuration above, we can also use a purely XML config:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="" 

    <bean id="viewResolver" 
        <property name="prefix" value="/WEB-INF/view/" />
        <property name="suffix" value=".jsp" />

    <mvc:view-controller path="/sample.html" view-name="sample" />


5. The JSP Views

We defined above a basic view controller – sample.html – the corresponding jsp resource is:


      <h1>This is the body of the sample view</h1>	

The JSP based view files are located under the /WEB-INF folder of the project, so they’re only accessible to the Spring infrastructure and not by direct URL access.

6. Conclusion

In this example we configured a simple and functional Spring MVC project, using Java configuration.

The implementation of this simple Spring MVC tutorial can be found in the github project – this is an Eclipse based project, so it should be easy to import and run as it is.

When the project runs locally, the sample.html can be accessed at:


Go deeper into Spring Security with the course:


Sort by:   newest | oldest | most voted
Sujit Tripathy

Thanks for the post. I am wondering this when addViewControllers will be helpful? Will it be when there is no business logic between view and another view layer so that the action and view mapping can be done via the ViewControllerRegistry. I think we can get the with @controller also so is there any added advantage on this? share your thoughts.

Eugen Paraschiv

Hey Sujit,
Yes, that’s the general idea. You can certainly handle all of these mappings in the Controller layer, but if there’s no extra logic, it’s generally easier to do everything here and not have to define lots of extra methods with no real logic.
Hope that clarifies things. Cheers,

Sujit Tripathy

Thanks Eugen.