【问题标题】:spring boot - how to correctly define template locations?spring boot - 如何正确定义模板位置?
【发布时间】:2016-09-01 03:43:26
【问题描述】:

在使用 Spring 应用程序(以及 Spring Boot,就此而言)苦苦挣扎了一段时间之后,看来我终于要让它工作了。

我已经通过依赖解决方案和 Maven 构建进行了转换。应用程序启动(而且非常快!)但是当我尝试访问时

localhost:8080

每当我尝试访问应用程序的登录页面时,都会收到以下浏览器消息:

HTTP Status 500 - Request processing failed; nested exception is org.thymeleaf.exceptions.TemplateInputException: Error resolving template "home/homeNotSignedIn", template might not exist or might not be accessible by any of the configured Template Resolvers

src/main/resources文件夹是

src/main/resources
    static // CSS, IMG and JS
    templates // html
    application.properties
    log4j.properties

现在,我知道我可能会混淆概念,但在我的 ApplicationConfiguration.java 上我有这个:

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "b.c.g.c")
public class ApplicationConfiguration extends WebMvcConfigurerAdapter {

    @Bean
    @Description("Thymeleaf template resolver serving HTML 5")
    public ServletContextTemplateResolver templateResolver() {
        ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver();
        templateResolver.setCacheable(false);
        templateResolver.setTemplateMode("HTML5");
        templateResolver.setCharacterEncoding("UTF-8");
        templateResolver.setPrefix("classpath:/templates/");
        templateResolver.setSuffix(".html");

        return templateResolver;
    }

    @Bean
    @Description("Thymeleaf template engine with Spring integration")
    public SpringTemplateEngine templateEngine() {
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.addDialect(new SpringSecurityDialect());
        templateEngine.addDialect(new LayoutDialect(new GroupingStrategy()));
        templateEngine.setTemplateResolver(templateResolver());

        return templateEngine;
    }

    @Bean
    @Description("Thymeleaf view resolver")
    public ViewResolver viewResolver() {

        ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
        viewResolver.setTemplateEngine(templateEngine());
        viewResolver.setCharacterEncoding("UTF-8");
        viewResolver.setCache(false);
        viewResolver.setOrder(1);

        return viewResolver;
    }

    // other beans
}

而且,在application.properties,我有这个:

spring.thymeleaf.check-template-location=true
spring.thymeleaf.prefix=classpath:templates/
spring.thymeleaf.suffix=.html
spring.thymeleaf.mode=HTML5
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.content-type=text/html
spring.thymeleaf.cache=false

虽然我看到这些摘录说的是同一件事,但我敢打赌,对吧?

所以,实际上,有两个问题,

1) 如何确保 Spring + Thymeleaf 知道在哪里可以找到模板?

2) 如何让应用程序回复localhost:8080/appName 而不是localhost:8080/

【问题讨论】:

  • 您是否有任何理由进行配置?整个模板解析器是默认的自动配置。

标签: java spring spring-mvc spring-boot


【解决方案1】:

推荐方法
我先回答你的第二个问题

  1. 您已经在 src/main/resources 中定义了 application.properties 或 application.yml(Yaml 更好)文件。 Spring-Boot 带有 default properties 文件,您可以在其中设置上下文路径(查找 web 属性),移植所有内容。

     server.context-path=/<appname>
    
  2. 要回答您的第二个问题 spring-boot,您可以参考属性文件中的 thymeleaf 配置。

【讨论】:

  • 谢谢,伙计!上下文路径有效!不过,我仍然无法到达目标网页...
  • 你是打包成 JAR 文件还是 WAR 文件?
  • Preveen,我正在打包作为战争。
猜你喜欢
  • 1970-01-01
  • 2017-01-17
  • 2016-07-06
  • 2017-07-30
  • 2020-11-01
  • 2021-11-27
  • 2017-03-16
  • 2016-12-28
  • 2023-02-21
相关资源
最近更新 更多