首页 文章

那么如何为我的springboot webapp设置Thymeleaf模板解析器呢

提问于
浏览
1

我在src / main / resources / template下构建了一个带有单个home.html文件的spring-boot webapp,当我从spring控制器返回"home"时,它运行得很好 . 我是'm packaging it as a war and it runs wonderfully with spring-boot'的嵌入式tomcat服务器 . 如果我用 mvn spring-boot:run 运行它,那就是 .

但是后来如果我用 java -jar myjar.war 启动我的应用程序它声称服务器已经启动并且一切都很好,但是当我尝试在localhost:8080访问它时它失败了:

Error resolving template "home", template might not exist or might not be accessible by any of the configured Template Resolvers

那么我接下来要做什么呢?

顺便说一句,这是我的pom.xml:

<groupId>com.ciber</groupId>
  <artifactId>energyworx-conversion-tool</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.3.RELEASE</version>
    </parent>

  <properties>
    <java.version>1.7</java.version>    
    <start-class>com.ciber.ewct.WebApp</start-class>
  </properties>

  <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>            
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>
  </dependencies>
  <build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>          
            <configuration>
                <source>${java.version}</source>
                <target>${java.version}</target>
                <compilerArgument>-Xlint:all</compilerArgument>
                <showWarnings>true</showWarnings>
                <showDeprecation>true</showDeprecation>
            </configuration>
        </plugin> 
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <fork>true</fork>
                <!-- <jvmArguments>-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000</jvmArguments> -->
            </configuration>
        </plugin>
    </plugins>
  </build>

在打开调试日志记录级别之后,我看到了关于百万美元配置的内容,这与我使用 mvn spring-boot:runjava -jar 运行时的情况相同:

[THYMELEAF] * Cache Factory implementation: org.thymeleaf.cache.StandardCacheManager
[THYMELEAF] * Template modes:
[THYMELEAF]     * LEGACYHTML5
[THYMELEAF]     * XHTML
[THYMELEAF]     * HTML5
[THYMELEAF]     * VALIDXML
[THYMELEAF]     * VALIDXHTML
[THYMELEAF]     * XML
[THYMELEAF] * Template resolvers (in order):
[THYMELEAF]     * org.thymeleaf.templateresolver.TemplateResolver
[THYMELEAF] * Message resolvers (in order):
[THYMELEAF]     * org.thymeleaf.spring4.messageresolver.SpringMessageResolver
[THYMELEAF] * Dialect [1 of 2]: org.thymeleaf.spring4.dialect.SpringStandardDialect
[THYMELEAF]     * Prefix: "th"
[THYMELEAF] * Dialect [2 of 2]: nz.net.ultraq.thymeleaf.LayoutDialect
[THYMELEAF]     * Prefix: "layout"
[THYMELEAF] TEMPLATE ENGINE CONFIGURED OK

2 回答

  • 0

    我很遗憾地说你实际上做错了 .

    您已将构建配置为从包中排除Web应用程序服务器 .

    <packaking>war</packaging>
    ...
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
    

    通过此设置,您可以在现有Servlet容器中部署战争 . 您将无法使用 java -jar 命令启动应用程序 .

    如果您想使用java命令行运行webapp . 将包装更换为 jar 并从您的pom中删除 provided 指令 .

    <packaking>jar</packaging>
    ...
    <!--
    <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-tomcat</artifactId>
       <scope>provided</scope>
    </dependency>
    -->
    

    然后你的jar里面会有一个嵌入式tomcat,命令 java -jar myjar.jar 会正常 .

    编辑:最后,我会提高Spring Web包的日志级别,以查看模板解析器如何尝试查找模板 .

    问候,丹尼尔

  • 1

    我似乎已经修复了它,在@ DanielLavoie的帮助下,通过恢复我为使应用程序成为可部署的战争所做的所有更改 .

    那些是:

    • 删除 <packaking>war</packaging> ,以便生成jar;

    • 从依赖spring-boot-starter-tomcat中删除 <scope>provided</scope> ;

    • 从我的 Application 类中删除 extends SpringBootServletInitializer ;

    我不喜欢这个解决方案因为根据the documentation我跟着你'd be able to make the war deployable and also standalone enabled. But it'我现在必须做 .

相关问题