为什么Spring MVC会以404响应并报告“在DispatcherServlet中找不到与URI[...]对应的映射”?

15 浏览
0 Comments

为什么Spring MVC会以404响应并报告“在DispatcherServlet中找不到与URI[...]对应的映射”?

我正在编写一个部署在Tomcat上的Spring MVC应用程序。请参考下面的最小、完整和可验证的示例

public class Application extends AbstractAnnotationConfigDispatcherServletInitializer {
    protected Class[] getRootConfigClasses() {
        return new Class[] { };
    }
    protected Class[] getServletConfigClasses() {
        return new Class[] { SpringServletConfig.class };
    }
    protected String[] getServletMappings() {
        return new String[] { "/*" };
    }
}

其中,`SpringServletConfig`为:

@Configuration
@ComponentScan("com.example.controllers")
@EnableWebMvc
public class SpringServletConfig {
    @Bean
    public InternalResourceViewResolver resolver() {
        InternalResourceViewResolver vr = new InternalResourceViewResolver();
        vr.setPrefix("/WEB-INF/jsps/");
        vr.setSuffix(".jsp");
        return vr;
    }
}

最后,我在包`com.example.controllers`中有一个`@Controller`:

@Controller
public class ExampleController {
    @RequestMapping(path = "/home", method = RequestMethod.GET)
    public String example() {
        return "index";
    }
}

我的应用程序上下文名称为`Example`。当我向以下地址发送请求时:

http://localhost:8080/Example/home

应用程序返回HTTP状态404,并记录以下日志:

WARN  o.s.web.servlet.PageNotFound - No mapping found for HTTP request with URI `[/Example/WEB-INF/jsps/index.jsp]` in `DispatcherServlet` with name 'dispatcher'

我在`/WEB-INF/jsps/index.jsp`路径下有一个JSP资源,我期望Spring MVC使用我的控制器来处理请求并转发到JSP,那为什么会返回404错误?

0