Issue
In a typical Spring MVC web app, you would declare the DispatcherServlet
in web.xml
like so
<!-- MVC Servlet -->
<servlet>
<servlet-name>sample</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>sample</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
Along with listeners, filters, etc.
With servlet-api 3.0, you can declare your servlets with the annotation @WebServlet
instead of adding them to your web.xml
. Spring 3.2 already has @Configuration
and @EnableXYZ
for its context configuration. Does it have something similar for the DispatcherServlet
, ie. is there a way to configure your full Spring application without any xml?
Solution
With JEE6, if your application container is Servlet 3.0 ready what you need to do is:
- Create a custom class that implements ServletContainerInitializer (i.e.
com.foo.FooServletContainer
) - Create a file in your
META-INF/services
folder namedjavax.servlet.ServletContainerInitializer
which will contain the name of your implementation above (com.foo.FooServletContainer
)
Spring 3 is bundled with a class named SpringServletContainerInitializer
that implements the stuff above (so you don't need to create yourself the file in META-INF/services
. This class just calls an implementation of WebApplicationInitializer
. So you just need to provide one class implementing it in your classpath (the following code is taken from the doc above).
public class FooInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) {
WebApplicationContext appContext = ...;
ServletRegistration.Dynamic dispatcher =
container.addServlet("dispatcher", new DispatcherServlet(appContext));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");
}
}
That's it for the web.xml
thing, but you need to configure the webapp using @Configuration
, @EnableWebMvc
etc..
Answered By - Alex
Answer Checked By - Senaida (JavaFixing Volunteer)