Java Spring DispatchServlet在Jetty中找不到资源

Java Spring DispatchServlet在Jetty中找不到资源,java,spring,spring-mvc,servlets,jetty,Java,Spring,Spring Mvc,Servlets,Jetty,我看到很多人都有类似的问题,但没有一个答案适合我。我正在做的是尝试将Jetty与Spring4嵌入到零配置中。为了更好地描述我的问题,我将一些代码放在下面: JettyStarter.class WebMvcConfig.class HomeController.class 最后,在服务器启动后,我在尝试访问localhost:8080/login时收到了404错误,错误消息如下 警告:在名为“Servlet Dispatcher”的DispatcherServlet中找不到URI为[/WEB-

我看到很多人都有类似的问题,但没有一个答案适合我。我正在做的是尝试将Jetty与Spring4嵌入到零配置中。为了更好地描述我的问题,我将一些代码放在下面:

JettyStarter.class WebMvcConfig.class HomeController.class 最后,在服务器启动后,我在尝试访问localhost:8080/login时收到了404错误,错误消息如下

警告:在名为“Servlet Dispatcher”的DispatcherServlet中找不到URI为[/WEB-INF/jsp/view/pub/login.jsp]的HTTP请求的映射

我非常确定resource login.jsp位于包中的/webapp/WEB-INF/jsp/view/pub文件夹下。但为什么它一直说找不到

解决方案: 奇怪的限制,我不能在8小时内回答自己的问题

通过跟踪Spring的源代码,我最终得到了我的页面显示。原因是我将Jetty ServletContextHandler的ResourceBase设置为webapp,并在其下创建了WEB-INF子文件夹,所有资源位于WEB-INF/jsp/view/…下。。。也但是ResourceHttpRequestHandler无法查看文件夹WEB-INF,因为我们可以在那里看到代码:

protected boolean isInvalidPath(String path) {
    return (path.contains("WEB-INF") || path.contains("META-INF") || StringUtils.cleanPath(path).startsWith(".."));
}
因此,解决方案是将资源库更改为webapp/WEB-INF,并将InternalResourceViewResolver前缀更改为/jsp/view。但它确实有效


现在我的问题是,ResourceHttpRequestHandler已知用于直接限制资源访问,servlet不应该使用它,为什么我的none-config版本会加载它?但不适用于XML配置版本?使用任何其他处理程序的XML配置是否通过了此限制或我缺少的内容?感谢任何人转发。

您需要告诉Spring您已经为bean添加了注释。这通常是在XML文档中完成的,称为注释驱动。但我相信您必须在@Configuration元素中使用@AnnotationDrivenConfig,这样您的bean才能自动连接

编辑:正如OP所提到的那样@AnnotationDrivenConfig已被弃用。
你能试试吗?

不要认为@AnnotationDrivenConfig会起作用,因为此注释已被弃用,AnnotationConfigWebApplicationContext类负责连接bean。谢谢你指出。我已经更新了答案。你能看看这是否有帮助吗?谢谢你的链接,但它很喜欢我正在做的事情。但是,我不使用web.xml,而是使用getContext方法,在该方法中,我创建一个AnnotationConfigWebApplicationContext并设置配置位置。由于Spring能够基于InternalResourceViewResolver的设置构建完整的路径,我相信bean正在工作。如果你让它工作,请接受这个作为答案,或者将你的问题标记为另一个问题的副本,这样更多的人就不会再尝试回答这个问题。此外,您可以编辑您的问题,以包括您的案例有何不同以及您是如何使其发挥作用的。将来会帮助别人是的,我知道这很像我问题的答案,实际上我没有做过一些研究,但不幸的是,它不起作用,这就是为什么我创建了这张票,并在开头说了这些话。一定有什么东西从来没有被提到过,所以我不认为它是重复的,我会继续等待,或者如果我能自己弄清楚的话。
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com...controllers")
public class WebMvcConfig extends WebMvcConfigurerAdapter{
    ...

    @Bean
    public InternalResourceViewResolver getInternalResourceViewResolver()
    {
        InternalResourceViewResolver internalResourceViewResolver = new InternalResourceViewResolver();
        internalResourceViewResolver.setPrefix("/WEB-INF/jsp/view");
        internalResourceViewResolver.setSuffix(".jsp");
        internalResourceViewResolver.setViewClass(org.springframework.web.servlet.view.JstlView.class);
        return internalResourceViewResolver;
    }
}
@Controller
public class HomeController {
    @RequestMapping(value = "/login", method = RequestMethod.GET)
    public String login(@RequestParam(value="error", required=false) boolean error, ModelMap model) 
    {
        ...
        return "/pub/login";
    }
}
protected boolean isInvalidPath(String path) {
    return (path.contains("WEB-INF") || path.contains("META-INF") || StringUtils.cleanPath(path).startsWith(".."));
}