@Requestmapping(“/”)使用Spring MVC生成404

时间:2014-11-19 04:25:25

标签: spring spring-mvc

我为" /"的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没有被执行?

1 个答案:

答案 0 :(得分:0)

如果您希望它仅按下" /"

,请将RequestMapping更改为以下
@RequestMapping(method = RequestMethod.GET)

给它一个去,让我知道它是如何为你工作的。

然后,如果要在参数中添加say索引,请添加值参数:

@RequestMapping(value = {"/","/index},method = RequestMethod.GET)