What is the expected output? What do you see instead?
When using XML-based configuration (web.xml), controller methods work.
When using Java-based configuration (WebApplicationInitializer) for dynamic web
app, controller methods are not executed.
Controller method breakpoints are not reached. Controller method mapped to root
(http://localhost:8080/) returns directory listing (Directory: / ... WEB-INF/,
resources/). Other controller methods (e.g., http://localhost:8080/users)
return 404 Not Found.
I have tried both XmlWebApplicationContext (using original XML Spring MVC
configuration) AnnotationConfigWebApplicationContext (Java-based Spring MVC
configuration).
Request mappings show up in log correctly.
What steps will reproduce the problem?
1. Use WebApplicationInitializer instead of web.xml
2. Run/Debug using Run-Jetty-Run
3. Request URI in browser (http://localhost:8080/)
4. Breakpoint in controller not reached
5. Browser displays directory listing
6. Request URI in browser (http://localhost:8080/users)
7. Breakpoint in controller not reached
8. Browser displays 404 Not Found
What Eclipse version are you using ?
Kepler R2
What Run-Jetty-Run version are you using?
1.3.3
What OS are you using ? 32bit or 64 bit?
Max OS X 64 bit
Please provide any additional information below.
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app
version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<!-- Define spring container -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/spring/root-context.xml</param-value>
</context-param>
<!-- Create spring container -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Define servlet -->
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/spring/appServlet/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Map context root -->
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
CustomWebApplicationInitializer (using XmlWebApplicationContext):
public class CustomWebApplicationInitializer implements
WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
org.apache.log4j.BasicConfigurator.configure();
XmlWebApplicationContext rootContext = new XmlWebApplicationContext();
rootContext.setConfigLocation("classpath:/spring/root-context.xml");
servletContext.addListener(new ContextLoaderListener(rootContext));
ServletRegistration.Dynamic appServlet = servletContext.addServlet("appServlet", DispatcherServlet.class);
appServlet.setInitParameter("contextConfigLocation", "classpath:/spring/appServlet/servlet-context.xml");
appServlet.addMapping("/");
appServlet.setLoadOnStartup(1);
}
}
CustomWebApplicationInitializer (using AnnotationConfigWebApplicationContext):
public class CustomWebApplicationInitializer implements
WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
org.apache.log4j.BasicConfigurator.configure();
AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
rootContext.register(RootContextConfig.class);
servletContext.addListener(new ContextLoaderListener(rootContext));
AnnotationConfigWebApplicationContext appServletContext = new AnnotationConfigWebApplicationContext();
appServletContext.register(AppServletContextConfig.class);
ServletRegistration.Dynamic appServlet = servletContext.addServlet("appServlet", new DispatcherServlet(appServletContext));
appServlet.addMapping("/");
appServlet.setLoadOnStartup(1);
}
}
Controllers:
@Controller
public class PagesController {
@RequestMapping(value = "/", method = RequestMethod.GET)
public @ResponseBody String home() {
return "PagesController/home";
}
}
@Controller
public class UsersController {
@RequestMapping(value = "/users", method = RequestMethod.GET)
public @ResponseBody String index() {
return "UsersController/index";
}
}
Log excerpt showing request mappings:
566 [main] INFO
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMappi
ng - Mapped
"{[/],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}"
onto public java.lang.String apps.app_0.PagesController.home()
565 [main] INFO
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMappi
ng - Mapped
"{[/users],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}
" onto public java.lang.String apps.app_0.UsersController.index()
Original issue reported on code.google.com by Alexande...@gmail.com on 12 May 2014 at 4:50
Original issue reported on code.google.com by
Alexande...@gmail.com
on 12 May 2014 at 4:50