我为" /"的url-patten配置了DispatcherServlet。
现在,我有以下控制器代码:
@Controller
public class HomeController {
@RequestMapping("/")
public void home() {
System.out.print("Test");
}
}
如果@RequestMapping
中的值只是/
,那么当我部署并转到http://host/webapp/
时,如果我将其更改为/*
,则会获得404 ,控制台将打印Test
。
我理解为什么/*
可以正常工作,因为它基本上捕获了任何路径,包括/
,因为*
可以是0或更多字符,但为什么只是映射到/
不适合我?
不仅仅是如何让它发挥作用,我对"为什么"感兴趣。我在网上看到了很多使用@RequestMapping("/")
的例子,似乎没有人说它错了。那么,为什么不适合我呢?我想了解发生了什么。
任何帮助将不胜感激!
这是我的WebApplicationInitializer:
public class MyWebInitializer
implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext)
throws ServletException {
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
context.setConfigLocation("com.web");
context.setServletContext(servletContext);
servletContext.addListener(new ContextLoaderListener(context));
context.refresh();
ServletRegistration.Dynamic dispatcher = servletContext
.addServlet("DispatcherServlet", new DispatcherServlet(context));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");
System.out.println("WebInitializer.onStartup is complete");
}
}
这是我的Java Config,它位于" com.web" context.setConfigLocation("com.web")
行指向的包:
@Configuration
@EnableWebMvc
@ComponentScan({"com.web"})
public class SpringConfig
extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
System.out.println("Configuring static resources.");
registry.addResourceHandler("/css/**").addResourceLocations("/css/");
}
@Bean
public ViewResolver configureViewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/views/");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
}
为什么@RequestMapping("/")
类中HomeController
没有被执行?
答案 0 :(得分:0)
如果您希望它仅按下" /"
,请将RequestMapping更改为以下@RequestMapping(method = RequestMethod.GET)
给它一个去,让我知道它是如何为你工作的。
然后,如果要在参数中添加say索引,请添加值参数:
@RequestMapping(value = {"/","/index},method = RequestMethod.GET)