Hello Java geekier, Today I am going to tell you How to use Servlet Annotation with Spring MVC. In my current project, I have to integrate Spring MVC with Servlet container project. But due to DispacherServlet in web.xml, I was unable to make another Servlet or Filter in my project.
We can use @WebServlet annotation in SpringBoot to create Servlet. But we can not use it that easy with Spring MVC. And in this tutorial, I found a solution if you also want same. So let’s be with us.
Let’s see an example of how to use a Filter and Servlet Annotation with Spring MVC
Project Directory for Servlet Annotation with Spring MVC
First of all, check the project directory which we’ll follow:

Source Code
Create Web Configuration Class
package co.tellmehow.config
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
@EnableWebMvc
@Configuration
@ComponentScan("co.tellmehow.controller")
public class ApplicationWebConfig {
}
In this class, we’ve to add some annotation like
@EnableWebMVC
@EnableWebMvc is equivalent to <mvc:annotation-driven /> in XML. It enables support for @Controller-annotated classes that use @RequestMapping to map incoming requests to a certain method.
[tmh_article_ads]
@Configuration
Annotating a class with the @Configuration indicates that the class can be used by the Spring IoC container as a source of bean definitions.
@ComponentScan
Spring needs to know the packages to scan for annotated components. We can use @ComponentScan annotation to specify the base packages to scan. For this project I use co.tellmehow.controller where all controller defined.
Create Application Initializer class
package co.tellmehow.config
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class ApplicationInitializer extends
AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses () {
return null;
}
@Override
protected Class<?>[] getServletConfigClasses () {
return new Class<?>[]{ApplicationWebConfig.class};
}
@Override
protected String[] getServletMappings () {
return new String[]{"/"};
}
}
We’ve to extend AbstractAnnotationConfigDispatcherServletInitializer class which is used when an application context hierarchy is not required, applications may return all configuration via getRootConfigClasses() and return null from getServletConfigClasses().
Implementations are required to implement:
- getRootConfigClasses() — for “root” application context (non-web infrastructure) configuration.
- getServletConfigClasses() — for
DispatcherServletapplication context (Spring MVC infrastructure) configuration.
Our configuration part is finished now. Now let’s create a Controller and check its running or not.
Create a Controller Class
package co.tellmehow.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class MyController {
@RequestMapping("/myController")
@ResponseBody
public String handleRequest () {
System.out.println("-- handling request in controller --");
return "Tell Me How: MyController running now";
}
}
I don’t think to elaborate this class to our Spring Developers. If you want then ask me in the comment section.
An output of this class would be:

Now let’s create Servlet and Filter Class
Servlet class
package co.tellmehow.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet(name = "myServlet", urlPatterns = "/myServlet")
public class MyServlet extends HttpServlet {
private static final long serialVersionUID = 7088410241741084414L;
@Override
protected void doGet (HttpServletRequest req,
HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("-- In MyServlet --");
PrintWriter writer = resp.getWriter();
writer.println("Tell Me How: MyServlet running now");
}
}
An output of Servlet class

Filter Class
package co.tellmehow.servlet;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
@WebFilter(filterName = "myFilter", urlPatterns = "/*")
public class MyFilter implements Filter {
@Override
public void init (FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter (ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
System.out.println("-- In MyFilter --");
HttpServletRequest req = (HttpServletRequest) request;
System.out.println("URI: " + req.getRequestURI());
chain.doFilter(request, response);
}
@Override
public void destroy () {
}
}
If it helps for you then please comment us.


Share your thoughts