我的最终目标是能够同时运行多个servlet(即:一个用于MVC,一个用于WebServices)。不幸的是,当servlet映射不是root(" /")时,我无法让servlet路由到控制器。
我原以为以下网址会触发我的控制器,但它没有。
http://localhost:8080/Sandbox/Page/Test
如果我删除了' / Page'来自servlet-mapping和' / Page'从URL -it工作正常。
http://localhost:8080/Sandbox/Test
网络初始化程序
public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return null;
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[] { WebApplicationConfiguration.class };
}
@Override
protected String[] getServletMappings() {
return new String[] { "/Page/" };
}
@Override
protected String getServletName() {
return "dispatcher";
}
}
WebApplicationConfiguration
@EnableWebMvc
@EnableAspectJAutoProxy(proxyTargetClass = true)
@Configuration
@ComponentScan(basePackages = {"com.myapp.sandbox.business",
"com.myapp.sandbox.page",
"com.myapp.sandbox.utility"})
public class WebApplicationConfiguration extends WebMvcConfigurerAdapter {
/**
* Defines a {@link ViewResolver} as a Spring managed bean.
*
* @return the viewResolver
*/
@Bean
public ViewResolver viewResolver() {
final InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/page");
resolver.setSuffix(".jsp");
return resolver;
}
/**
* Registers resource handlers with Spring.
*
* @param registry the {@link ResourceHandlerRegistry}
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/view/**").addResourceLocations("/view/");
}
}
的TestController
@Controller
@RequestMapping("/Test")
public class TestController {
@RequestMapping({"", "load"})
public ModelAndView load(final ModelAndView modelAndView) {
modelAndView.setViewName("/test/test"); // improve this
return modelAndView;
}
}
答案 0 :(得分:0)
我认为你的问题就在这些行中
resolver.setPrefix("/WEB-INF/page");
因为你使用
return new String[] { "/Page/" };
并且第一个字母是不同的。
答案 1 :(得分:0)
这有点不直观,但是点击http://localhost:8080/Sandbox/Page/Test
时会发生什么:
/Page/
映射到DispatcherServlet
,因此处理请求的任务正确地提供给您想要的servlet。DispatcherServlet
后,原始请求将用于查找处理程序。在执行此操作时,/Page/Test
会与Controller
进行比较,/Test
会映射到404
。两者不匹配,因此服务器以/Page/Test
更新您的控制器以映射到settings
,您的代码应按预期工作。