美文网首页
spring boot Thymeleaf Error reso

spring boot Thymeleaf Error reso

作者: _流浪的猫_ | 来源:发表于2016-09-24 10:55 被阅读0次

    spring boot Thymeleaf加载模板错误

    • 开发环境可能碰到的
    • 没引入spring boot Thymeleaf相关的包,一般少见
    • 模板路径写错
    • 使用layout时,带了后缀名。如下:top_header后不应有.html
        <header th:replace="common/top_header :: header"></header>
    
    • 发布后可能碰到的
    • 打包时未将html等资源打包进去,或是打包路径弄错。
    • 模板路径写的不规范(应该仅限打包为jar的程序,未测试war)
    // 前面不能有 / (这样写就挂了 ---> /common/top_header)
    th:replace="common/top_header :: header"
    // Controller 返回的也一样
    return "index";  // 不能写 "/index"
    

    前端页面还没画完,昨晚下班到家收到领导的消息,让发布出来看看,结果就出现上面发布后出现的问题

    第一个问题,html资源未打包进去,是开始就没这部分的配置,之前都是打包纯java代码和一些配置文件的,解压jar包才发现确实少了...

    第二个问题,直觉告诉我可能多了个/,删掉一个打包重新测试,发现ok了,只好都删了,重新发布完事。比较晚了,也不想调查了。


    今天早晨开始调查这个问题,之前写web程序时,Controller都是这样写的return "/index";,感觉很奇怪...

    由于开发环境是正常的,只有打完包后才出问题的,只好开启远程调试「开启远程调试」。

    // 发现Thymeleaf在这块代码抛出这个错误的
    try {
        final Resource resource = this.applicationContext.getResource(resourceName);
        if (resource == null) {
            return null;
        }
         // 抛出异常的地方
        return resource.getInputStream();
    } catch (final IOException e) {        
    }
    

    继续往下查,到了java的源代码


    代码跟踪.png
    // 附JDK的getResource源码
    public URL getResource(String name) {
        URL url;
        if (parent != null) {
            url = parent.getResource(name);
        } else {
            url = getBootstrapResource(name);
        }
        if (url == null) {
            url = findResource(name);
        }
        return url;
    }
    

    从错误和正常执行的流程来看,开发环境和发布环境的处理是不一样的,一个走系统文件路径,一个走jar路径。

    // 要加载的模板,这个是找不到模板的写法,多了一个 /
    templates//common/head.html
    

    所以,开发环境得到的流路径:

    // 自动删除了多余的 / 所以能正常找到模板
    /Users/alanwei/Documents/${project_path}/classes/templates/common/head.html
    

    发布环境,因为在jar中找不到templates//common/head.html而挂掉

    发布环境正常执行获取的是ZipFIle


    远程正常.png

    相关文章

      网友评论

          本文标题:spring boot Thymeleaf Error reso

          本文链接:https://www.haomeiwen.com/subject/sorxyttx.html