当前位置: 首页 > 知识库问答 >
问题:

Spring Boot app中的WEB-INF目录中未创建“resources”文件夹

茹建茗
2023-03-14

我有一个正在开发的Spring Boot应用程序,我最近将它从Spring3升级到Spring4(spring-boot-starter-parent 1.3.5.release到1.4.6.release)。

我在src/main/resources/templates目录中有一个html模板(名为'test-template.html'),我一直在使用Thymeleaf的TemplateEngine创建html电子邮件内容。(在升级到版本4之前,这是正常工作的。)

我目前遇到的问题是,没有在服务器上的WEB-INF中创建“模板”目录(或者在使用Maven构建时在“target”中的相关目录中)。因此,我得到了以下信息:

java.io.FileNotFoundException:无法打开ServletContext资源[/web-inf/templates/test-template.html]

下面是我对Thymeleaf的配置类。(我使用手动配置,因为我只使用Thymeleaf处理电子邮件模板,因此不希望Spring Boot配置Thymeleaf视图解析器。但是,我在自动配置时也会出现同样的错误。)

@Configuration
public class ThymeleafConfig implements ApplicationContextAware {

    private static final Logger logger = LoggerFactory.getLogger(ThymeleafConfig.class);

    private ApplicationContext applicationContext;

    public void setApplicationContext(ApplicationContext applicationContext) {
        this.applicationContext = applicationContext;
    }

    @Bean
    public SpringTemplateEngine templateEngine() {
        SpringTemplateEngine engine = new SpringTemplateEngine();
        engine.setEnableSpringELCompiler(true);
        engine.setTemplateResolver(templateResolver());
        return engine;
    }

    private ITemplateResolver templateResolver() {
        SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
        resolver.setApplicationContext(applicationContext);
        resolver.setPrefix("/WEB-INF/templates/");
        resolver.setSuffix(".html");
        resolver.setTemplateMode(TemplateMode.HTML);
        return resolver;
    }

}

下面是pom.xml:

    <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>myapp</artifactId>
    <version>1.0.10-SNAPSHOT</version>
    <packaging>war</packaging>

    <name>myapp</name>
    <description>blah blah</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</java.version>
        <start-class>com.matchingchina.AcumenApplication</start-class>
        <thymeleaf.version>3.0.2.RELEASE</thymeleaf.version>
        <thymeleaf-layout-dialect.version>2.1.1</thymeleaf-layout-dialect.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-taglibs</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>


        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>


        <dependency>
            <groupId>org.assertj</groupId>
            <artifactId>assertj-core</artifactId>
            <version>3.4.1</version>
        </dependency>


        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>tiles-jsp</artifactId>
            <version>3.0.5</version>
        </dependency>


        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.0</version>
        </dependency>


        <dependency>
            <groupId>org.imgscalr</groupId>
            <artifactId>imgscalr-lib</artifactId>
            <version>4.2</version>
        </dependency>

        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>

        <dependency>
            <groupId>com.sendgrid</groupId>
            <artifactId>sendgrid-java</artifactId>
            <version>3.2.1</version>
        </dependency>

        <!-- WEBJARS -->

        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>bootstrap</artifactId>
            <version>3.3.6</version>
        </dependency>

        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>font-awesome</artifactId>
            <version>4.6.1</version>
        </dependency>

    </dependencies>

</project>

共有1个答案

冀啸
2023-03-14

/web-inf/templates/更改为classpath:/template/。在类路径上并不一定意味着在web上下文路径上。

 类似资料:
  • 问题内容: 我想将我的JSF 2.0 xhtml文件放在WEB-INF \ jsf下。那我该如何访问它们?我知道WEB- INF中的任何内容都不会暴露给外部,因此我需要一个控制器将我重定向到相应的JSP,对吗?(这也是模型2模式iirc)。 我可以使用web.xml / faces- config.xml中的参数来实现吗?我认为FacesServlet是我的webapp的控制器,因此它应该达到这个

  • 这可能是一个非常基本的问题,但我尝试了各种选择,但都没有成功,因此请求帮助。我想在指定目录中创建一个文件。如果文件已经存在,我想向其添加数据。以下是我尝试的内容: Internet搜索要求使用以下内容: 但是它会在目录内创建空文件,并在目录外创建新文件并附加到它。而且很少有帖子建议不需要使用createNewFile()来创建文件。 我尝试了如下各种路径格式: 但它仍然不会在目录中创建文件。你能告

  • 问题内容: 使用向导从Android Studio创建了一个新的flutter项目。 新创建的项目文件夹在ios目录中没有任何Pods文件夹或podfile。 此Flutter.io页面状态(强调我的): 尽管Flutter项目的iOS文件夹中有一个Podfile,但只有在添加逐平台集成所需的本机依赖项时,才使用此文件。 我的ios目录中根本没有Podfile。 我在另一个问题中发现了此评论,这表

  • 使用向导从Android Studio创建了一个新的flutter项目。 新创建的项目文件夹在ios目录中没有任何Pods文件夹或podfile。 的输出:

  • null null WEB-INF 类 com... 图像 字体 JS CSS messages_en.properties 为什么maven将所有资源放在classes文件夹下?我的文件夹结构错了吗?