Skip to main content
 首页 » 编程设计

spring-mvc之Spring Thymeleaf View 的正确位置

2025年05月04日45虾米哥

我正在使用 Thymeleaf 运行 Spring Boot 应用程序。当我通过我的 IDE (IntelliJ) 运行应用程序时,一切运行良好。 但是,当我通过命令行 (java -jar) 运行应用程序时, View 无法解析,并且出现以下错误:

org.thymeleaf.exceptions.TemplateInputException: Error resolving template "index", template might not exist or might not be accessible by any of the configured Template Resolvers 
    at org.thymeleaf.TemplateRepository.getTemplate(TemplateRepository.java:245) 
    at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1104) 
    at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1060) 
    at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1011) 
    at org.thymeleaf.spring3.view.ThymeleafView.renderFragment(ThymeleafView.java:335) 
    at org.thymeleaf.spring3.view.ThymeleafView.render(ThymeleafView.java:190) 
    at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1225) 
    at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1012) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959) 

这是我的设置:

我的目录结构

PROJECT-ROOT 
  --src 
    --main 
      --java 
        --controllers 
          --[CLASS WITH MAIN METHOD] 
        --views 
          --index.html 

我的模板解析器:

@Bean 
  public ViewResolver viewResolver() { 
    ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver(); 
    templateResolver.setTemplateMode("XHTML"); 
    templateResolver.setPrefix("views/"); 
    templateResolver.setSuffix(".html"); 
    SpringTemplateEngine engine = new SpringTemplateEngine(); 
    engine.setTemplateResolver(templateResolver); 
 
    ThymeleafViewResolver viewResolver = new ThymeleafViewResolver(); 
    viewResolver.setTemplateEngine(engine); 
    return viewResolver; 
  } 

我应该将 View 放在哪里,以便从 jar 文件运行时可以正确解析它们?

请您参考如下方法:

我认为答案取决于您的构建配置。目录“src/main/views”不是任何常用构建工具的标准资源位置,因此您必须将其显式添加到用于构建 jar 的工具的配置中。

如果我是你,我会顺其自然(为什么不一样?),只使用“src/main/resources”作为类路径资源。我也会完全省略 thymeleaf 配置,让 Spring Boot 处理它,将我的模板放在“src/main/resources/templates”中。