Spring Framework Tutorial

Software Setup and Configuration (STS/Eclipse/IntelliJ)

Core Spring

Spring Annotations

Spring Data

Spring JDBC

Spring Security

Spring WebApplicationInitializer with Example

The WebApplicationInitializer is an interface provided by Spring that allows a programmatic way to configure the Servlet context in a Spring application, as an alternative to the traditional web.xml configuration. This programmatic configuration is especially useful with Servlet 3.0+ environments.

When Spring's SpringServletContainerInitializer detects a class that implements WebApplicationInitializer, it will automatically use it to configure the Servlet context.

Here's a step-by-step example to understand how you can use WebApplicationInitializer:

1. Maven Dependencies:

Ensure you have the required dependencies. Here's an example using Spring MVC:

<!-- Spring MVC -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.3.10</version>
</dependency>

(Note: Adjust the version as per your needs.)

2. Implement WebApplicationInitializer:

Here's a simple implementation of WebApplicationInitializer:

import org.springframework.web.context.ContextLoaderListener;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;

public class MyWebAppInitializer implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        
        // Create the 'root' Spring application context
        AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
        rootContext.register(RootConfig.class);

        // Manage the lifecycle of the root application context
        servletContext.addListener(new ContextLoaderListener(rootContext));

        // Create the dispatcher servlet's Spring application context
        AnnotationConfigWebApplicationContext dispatcherContext = new AnnotationConfigWebApplicationContext();
        dispatcherContext.register(WebConfig.class);

        // Register and map the dispatcher servlet
        ServletRegistration.Dynamic dispatcher = servletContext.addServlet("dispatcher", new DispatcherServlet(dispatcherContext));
        dispatcher.setLoadOnStartup(1);
        dispatcher.addMapping("/");
    }
}

In the above example:

  • RootConfig.class is a configuration class that would typically contain services, repositories, etc.
  • WebConfig.class is a configuration class that would define beans related to the web layer like view resolvers, controllers, etc.

3. Configuration Classes:

Here's a simplistic example of what the RootConfig and WebConfig classes might look like:

RootConfig.java:

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan(basePackages = "com.example.service")
public class RootConfig {
}

WebConfig.java:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.example.controller")
public class WebConfig implements WebMvcConfigurer {
    
    @Bean
    public InternalResourceViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        return resolver;
    }
}

By following these steps, you've replaced the traditional web.xml approach with a programmatic configuration using WebApplicationInitializer. This approach offers more flexibility and aligns well with modern Java configurations.

  1. Configuring Spring application using WebApplicationInitializer:

    • Description: An introduction to using the WebApplicationInitializer interface in Spring to configure the application without the need for web.xml.
    • Example Code:
      public class MyWebAppInitializer implements WebApplicationInitializer {
          @Override
          public void onStartup(ServletContext servletContext) throws ServletException {
              // Configure Spring application context, servlets, and filters programmatically
          }
      }
      
  2. Example of Spring WebApplicationInitializer implementation:

    • Description: A basic example showcasing the implementation of the WebApplicationInitializer interface for Spring configuration.
    • Example Code:
      public class MyWebAppInitializer implements WebApplicationInitializer {
          @Override
          public void onStartup(ServletContext servletContext) throws ServletException {
              AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
              context.register(AppConfig.class);
      
              DispatcherServlet dispatcherServlet = new DispatcherServlet(context);
              ServletRegistration.Dynamic registration = servletContext.addServlet("dispatcher", dispatcherServlet);
              registration.addMapping("/");
          }
      }
      
  3. Initializing Spring web application programmatically with WebApplicationInitializer:

    • Description: Explains how to initialize a Spring web application programmatically using the WebApplicationInitializer interface.
    • Example Code:
      public class MyWebAppInitializer implements WebApplicationInitializer {
          // Configuration code for initializing Spring web application programmatically
      }
      
  4. Customizing Servlet container initialization with WebApplicationInitializer:

    • Description: Demonstrates how to customize the initialization of the Servlet container using the WebApplicationInitializer interface.
    • Example Code:
      public class MyWebAppInitializer implements WebApplicationInitializer {
          // Customizing Servlet container initialization
      }
      
  5. Spring WebApplicationInitializer for servlet registration:

    • Description: Shows how to use WebApplicationInitializer to register servlets in a Spring web application.
    • Example Code:
      public class MyWebAppInitializer implements WebApplicationInitializer {
          @Override
          public void onStartup(ServletContext servletContext) throws ServletException {
              // Register servlets programmatically
          }
      }
      
  6. Using WebApplicationInitializer to configure DispatcherServlet:

    • Description: Illustrates how to configure the DispatcherServlet using WebApplicationInitializer.
    • Example Code:
      public class MyWebAppInitializer implements WebApplicationInitializer {
          @Override
          public void onStartup(ServletContext servletContext) throws ServletException {
              // Configure DispatcherServlet and set mappings
          }
      }
      
  7. Configuring filters with Spring WebApplicationInitializer:

    • Description: Demonstrates the configuration of filters in a Spring application using the WebApplicationInitializer interface.
    • Example Code:
      public class MyWebAppInitializer implements WebApplicationInitializer {
          @Override
          public void onStartup(ServletContext servletContext) throws ServletException {
              // Configure filters programmatically
          }
      }
      
  8. WebApplicationInitializer and programmatic servlet container initialization:

    • Description: Details the programmatic initialization of the servlet container using the WebApplicationInitializer interface.
    • Example Code:
      public class MyWebAppInitializer implements WebApplicationInitializer {
          @Override
          public void onStartup(ServletContext servletContext) throws ServletException {
              // Programmatic servlet container initialization
          }
      }
      
  9. Spring Boot and WebApplicationInitializer example:

    • Description: Demonstrates how to use WebApplicationInitializer in a Spring Boot application for customizing the servlet container.
    • Example Code:
      public class MyWebAppInitializer implements WebApplicationInitializer {
          // Configuration code for Spring Boot application
      }
      
  10. WebApplicationInitializer for Spring MVC projects:

    • Description: Shows the usage of WebApplicationInitializer in a Spring MVC project for setting up the application context and MVC configuration.
    • Example Code:
      public class MyWebAppInitializer implements WebApplicationInitializer {
          // Configuration code for Spring MVC project
      }
      
  11. Security configuration with WebApplicationInitializer in Spring:

    • Description: Describes how to configure security features using WebApplicationInitializer in a Spring application.
    • Example Code:
      public class MyWebAppInitializer implements WebApplicationInitializer {
          // Security configuration code
      }
      
  12. WebApplicationInitializer and dynamic servlet registration in Spring:

    • Description: Illustrates dynamic servlet registration using WebApplicationInitializer for flexibility in a Spring application.
    • Example Code:
      public class MyWebAppInitializer implements WebApplicationInitializer {
          // Dynamic servlet registration code
      }
      
  13. WebApplicationInitializer for initializing Spring profiles:

    • Description: Shows how to use WebApplicationInitializer to initialize Spring profiles based on specific conditions.
    • Example Code:
      public class MyWebAppInitializer implements WebApplicationInitializer {
          // Spring profile initialization code
      }
      
  14. Spring WebApplicationInitializer for setting context parameters:

    • Description: Explains how to set context parameters using WebApplicationInitializer in a Spring application.
    • Example Code:
      public class MyWebAppInitializer implements WebApplicationInitializer {
          // Setting context parameters code
      }
      
  15. Handling multipart requests with WebApplicationInitializer:

    • Description: Demonstrates how to configure handling of multipart requests using WebApplicationInitializer in a Spring application.
    • Example Code:
      public class MyWebAppInitializer implements WebApplicationInitializer {
          // Handling multipart requests code
      }