Spring MVC - DispatcherServlet by annotations
16,274
Solution 1
Here is the example with comments. Hope this helps you.
public class ApplicationInitializer implements WebApplicationInitializer {
//Called first when the application starts loading.
public void onStartup(ServletContext servletContext)
throws ServletException {
System.out.println("Inside application initializer...");
//Registering the class that incorporates the annotated DispatcherServlet configuration of spring
AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
rootContext.register(DispatcherConfig.class);
//Adding the listener for the rootContext
servletContext.addListener(new ContextLoaderListener(rootContext));
//Registering the dispatcher servlet mappings.
ServletRegistration.Dynamic dispatcher = servletContext.addServlet("dispatcher", new DispatcherServlet(rootContext));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");
}
}
Solution 2
Writing this because Japs's answer leads to creation of another context, which doesn't see the contents of the security context.
public class WebInitializer extends
AbstractAnnotationConfigDispatcherServletInitializer {
private static final Log LOGGER = LogFactory.getLog(WebInitializer.class);
@Override
protected Class<?>[] getRootConfigClasses() {
/* this is where you will return you config class
* your root config class should @Import other configs
* to make them work without needing them to add there
*/
return new Class[] { ViewConfig.class };
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[0];
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
}
Comments
-
user2160696 almost 2 years
I got spring MVC application. It runs on Tomcat 7. By now i got this part in my web.xml file:
<servlet> <servlet-name>Spring MVC Dispatcher Servlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/app-config.xml </param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Spring MVC Dispatcher Servlet</servlet-name> <url-pattern>*.htm</url-pattern> </servlet-mapping>
Is there any way to init it by annotations? I got a
MainSettings.java
class where all my beans are initialyzed by@Bean
annotation. So how do i initDispatherServlet
there? -
M. Deinum over 9 yearsYou don't want to pass your
rootContext
to theDispatcherServlet
. Pass it an empty context that has therootContext
as the parent. Else the context will be initialized twice. I would also suggest extending theAbstractAnnotationConfigDispatcherServletInitializer
instead of implementing theWebApplicationInitializer
. -
Shervin Asgari over 8 yearsI can't find DispatcherConfig.class. Where can I get this from?
-
Japan Trivedi over 8 years@ShervinAsgari Check your Sprint-mvc dependencies. Make sure you have correct version. Above example is based on Spring 3.2
-
Cameron Hudson about 5 years@ShervinAsgari It's user-defined. docs.spring.io/spring/docs/current/javadoc-api/org/…