【问题标题】:Spring Boot resources not found未找到 Spring Boot 资源
【发布时间】:2017-03-26 17:47:18
【问题描述】:

好的,我使用thymleaf开发了一个小型spring boot网站,现在意识到如果我想用maven插件打包所有东西,我不能使用webapp文件夹。

为了解决这个问题,我将所有资源移至 src/main/resources。但是,当我尝试显示任何站点(简单的 RequestMapping 返回一个字符串)时,我不断收到 FileNotFoundExceptions:

这是我得到的错误:

Caused by: java.io.FileNotFoundException: Could not open ServletContext resource [/index.html]
at org.springframework.web.context.support.ServletContextResource.getInputStream(ServletContextResource.java:157) ~[spring-web-5.0.0.BUILD-SNAPSHOT.jar:5.0.0.BUILD-SNAPSHOT]
at org.thymeleaf.spring5.templateresource.SpringResourceTemplateResource.reader(SpringResourceTemplateResource.java:103) ~[thymeleaf-spring5-3.0.3.M1.jar:3.0.3.M1]
at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parse(AbstractMarkupTemplateParser.java:223) ~[thymeleaf-3.0.3.RELEASE.jar:3.0.3.RELEASE]
... 75 common frames omitted

然后当 Spring 尝试加载我的错误页面时,我再次收到相同的错误。 已满http://pastebin.com/raw/Csw5akHJ

Explorer

(是的,我知道只有静态文件夹可用。足够测试了。)

谁能帮帮我?这有点令人沮丧。

【问题讨论】:

    标签: java spring-boot


    【解决方案1】:

    如果您使用 Thymleaf 作为模板引擎,您应该在资源/模板中添加所有 .html 文件

    【讨论】:

    • 在静态目录中,您只放置静态资源,如 css、js 或图像。你不应该把文件放在那里,我的意思是error.html。将所有 *.html 文件复制到资源/模板。错误应位于名称为 4xx.html 的错误文件夹中,以便处理 4xx 错误。
    • 现在我几乎到处都有一个 index.html 文件。没有任何效果。顺便说一句,如果我正确阅读源代码,所有三个文件夹都应该正确处理,因为它们都是由 addResourceHandlers() 添加的。如果你想有一个默认的,你也可以使用 error.html。至少当一切都还在 webapps 文件夹中时它可以工作。
    【解决方案2】:

    我不确定这是否是您的问题,但通常我会将所有 html 页面放在资源下的模板目录中,并将所有 js 和 css 文件放在静态目录下。

    这样可以轻松访问 js 和 css 文件。例如,如果我在其中有 css 目录和 test.css。我可以简单地访问它

    所以在我的控制器上解决您的问题,我将返回这样的页面。

     @RequestMapping(value="/viewusers",method = RequestMethod.GET)
    public String viewUsers(){
        return "users/viewusers";
    }
    

    在上面的示例中,我在用户目录下有 viewusers.html。我的用户目录在模板目录中。

    【讨论】:

    • 试图将我的测试索引文件复制到 src/main/resources/templates 但它并没有真正改变任何东西。
    • 你能把你的控制器贴在这里吗?
    • @Controller public class HomeController { @RequestMapping(value="/") public String index(){ return "index"; }
    【解决方案3】:

    好的,我取得了一些进展。虽然如果我使用默认模板引擎它工作正常,但一旦我开始使用 Thymeleaf 引擎,它就会停止工作。显然默认模板引擎可以自动处理类路径,而如果我想使用 thymeleaf,我需要从 SpringResourceTemplateResolver 切换到 ClassLoaderTemplateResolver。

    到目前为止,看起来一切正常。哈利路亚!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-03
      • 2019-08-11
      • 2017-05-21
      • 2019-05-31
      • 1970-01-01
      • 1970-01-01
      • 2011-07-12
      • 2017-07-23
      相关资源
      最近更新 更多