Spring-bootとテンプレートエンジン:テンプレートパスと接尾辞名の変更

7152 ワード

シリーズゲート
Spring-bootとテンプレートエンジンspring-bootとテンプレートエンジンspring-bootとテンプレートエンジン:テンプレートパスと接尾辞名spring-bootとテンプレートエンジンを変更する:metisMenuを使用してダイナミックマルチレベルメニューを実現する
Spring-bootとテンプレートエンジン:metisMenuを使用してダイナミックマルチレベルメニューを実装するにはspring-bootとbeetlテンプレートエンジンを使用します.使用中、次の2つの疑問が生じました:1、テンプレートフォルダを作成するにはなぜ「templates」を使わなければならないのか、他のファイル名に変えることができますか?2、作成したテンプレートは、必ず「btl」で接尾辞名を付けますか?「html」または他の接尾辞名を使用できますか?以下、以上の問題について一緒に検討しましょう.
まずFreeMarker,Groovy,Thymeleaf,Mustacheの4種類のテンプレートエンジンを見てみましょう
spring-boot docsには次の文があります.
Spring Boot includes auto-configuration support for the following templating engines:
  • FreeMarker
  • Groovy
  • Thymeleaf
  • Mustache

  • When you’re using one of these templating engines with the default configuration, your templates will be picked up automatically from:
    src/main/resources/templates.
    パッケージ名orgを表示する.springframework.boot.autoconfigure.thymeleafのThymeleafPropertiesソース:
    @ConfigurationProperties(
        prefix = "spring.thymeleaf"
    )
    public class ThymeleafProperties {
        private static final Charset DEFAULT_ENCODING = Charset.forName("UTF-8");
        private static final MimeType DEFAULT_CONTENT_TYPE = MimeType.valueOf("text/html");
        public static final String DEFAULT_PREFIX = "classpath:/templates/";
        public static final String DEFAULT_SUFFIX = ".html";
        private boolean checkTemplate = true;
        private boolean checkTemplateLocation = true;
        private String prefix = "classpath:/templates/";
        private String suffix = ".html";
        private String mode = "HTML5";
        ......
        ......
    }
    

    パッケージ名orgを表示する.springframework.boot.autoconfigure.groovy.templateのGroovyTemplatePropertiesソース:
    @ConfigurationProperties(
        prefix = "spring.groovy.template",
        ignoreUnknownFields = true
    )
    public class GroovyTemplateProperties extends AbstractTemplateViewResolverProperties {
        public static final String DEFAULT_RESOURCE_LOADER_PATH = "classpath:/templates/";
        public static final String DEFAULT_PREFIX = "";
        public static final String DEFAULT_SUFFIX = ".tpl";
        public static final String DEFAULT_REQUEST_CONTEXT_ATTRIBUTE = "spring";
        private String resourceLoaderPath = "classpath:/templates/";
        ......
        ......
    }
    

    パッケージ名orgを表示する.springframework.boot.autoconfigure.freemarkerの下にあるFreeMarkerPropertiesソース:
    @ConfigurationProperties(
        prefix = "spring.freemarker"
    )
    public class FreeMarkerProperties extends AbstractTemplateViewResolverProperties {
        public static final String DEFAULT_TEMPLATE_LOADER_PATH = "classpath:/templates/";
        public static final String DEFAULT_PREFIX = "";
        public static final String DEFAULT_SUFFIX = ".ftl";
        private Map settings = new HashMap();
        private String[] templateLoaderPath = new String[]{"classpath:/templates/"};
        private boolean preferFileSystemAccess = true;
        ......
        ......
    }
    

    パッケージ名orgを表示する.springframework.boot.autoconfigure.Mustacheの下にあるMustachePropertiesソース:
    @ConfigurationProperties(
        prefix = "spring.mustache"
    )
    public class MustacheProperties extends AbstractTemplateViewResolverProperties {
        public static final String DEFAULT_PREFIX = "classpath:/templates/";
        public static final String DEFAULT_SUFFIX = ".html";
        private String prefix = "classpath:/templates/";
        private String suffix = ".html";
    
        public MustacheProperties() {
            super("classpath:/templates/", ".html");
        }
        ......
        ......
    }
    

    以上から分かるように、spring-bootプロジェクトでは、上記のいずれかのテンプレートを使用し、設定を行わない場合、spring-bootはclasspathパスの下にあるtemplatesをテンプレートファイルのルートディレクトリとしてデフォルトであり、テンプレートの接尾辞名も対応するテンプレートのデフォルト接尾辞名としてデフォルトである.
    テンプレートファイルのルートディレクトリとテンプレート接尾辞名を変更するには、アプリケーションを新規作成する必要があります.propertiesファイル、このファイルで構成します.
    構成は簡単です.上記の4つのテンプレートの構成ソースコードを引き続き確認すると、class定義の前に@ConfigurationProperties注記があることに気づきます.
    @ConfigurationProperties(
        prefix = "spring.XXXXXX"
    )
    

    この注釈から、異なるテンプレートエンジン、spring-booはApplication.propertiesで読み込まれた構成の名前の接頭辞は異なります.また、spring-boot起動時には、この注記により自動的にApplicationを実行する.propertiesで構成されたspring.XXXXXX.abcは、対応するテンプレートPropertiesのabcプロパティに値を割り当てます.だから、Application.propertiesにspringを追加するだけです.XXXXXX.abc対応の構成でよい.次に、構成例を示します.
    ......
    ......
    #THYMELEAF (ThymeleafAutoConfiguration)
    spring.thymeleaf.prefix=classpath:/templates/
    spring.thymeleaf.suffix=.html
    spring.thymeleaf.mode=HTML5
    spring.thymeleaf.encoding=UTF-8
    spring.thymeleaf.content-type=text/html # ;charset= is added
    spring.thymeleaf.cache=true # set to false for hot refresh
    
    #FREEMARKER (FreeMarkerAutoConfiguration)
    spring.freemarker.allowRequestOverride=false
    spring.freemarker.allowSessionOverride=false
    spring.freemarker.cache=true
    spring.freemarker.checkTemplateLocation=true
    spring.freemarker.contentType=text/html
    spring.freemarker.exposeRequestAttributes=false
    spring.freemarker.exposeSessionAttributes=false
    spring.freemarker.exposeSpringMacroHelpers=false
    spring.freemarker.prefix=
    spring.freemarker.requestContextAttribute=
    spring.freemarker.settings.*=
    spring.freemarker.suffix=.ftl
    spring.freemarker.templateEncoding=UTF-8
    spring.freemarker.templateLoaderPath=classpath:/templates/
    spring.freemarker.viewNames= # whitelist of view names that can be resolved
    
    
    #GROOVY TEMPLATES (GroovyTemplateAutoConfiguration)
    spring.groovy.template.allowRequestOverride=false
    spring.groovy.template.allowSessionOverride=false
    spring.groovy.template.cache=true
    spring.groovy.template.configuration.*= # See Groovy's TemplateConfiguration
    spring.groovy.template.contentType=text/html
    spring.groovy.template.prefix=classpath:/templates/
    spring.groovy.template.suffix=.tpl
    spring.groovy.template.templateEncoding=UTF-8
    spring.groovy.template.viewNames= # whitelist of view names that can be resolved
    ......
    ......
    

    次にbeetlテンプレートエンジンを見てみましょう
    Spring-bootの場合、beetlテンプレートエンジンを使用してbeetlのlibパッケージを追加できない場合は、次のlibパッケージを追加する必要があります.
    
    
        com.ibeetl
        beetl-framework-starter
        1.1.22.RELEASE
    
    

    追加したら、上記のようにbeetlテンプレートエンジンのデフォルト構成と、デフォルト構成をどのように変更するかを分析します.
    パッケージ名comを表示します.ibeetl.starterの下のBeetlTemplateConfigソース:
    ......
    ......
    public class BeetlTemplateConfig {
        @Value("${beetl.templatesPath:templates}")
        String templatesPath;
        @Value("${beetl.suffix:btl}")
        String suffix;
        @Value("${beetl-beetlsq.dev:true}")
        boolean dev;
        ......
        ......
    }
    

    一目瞭然,修正Application.propertiesは次のとおりです.
    beetl.templatesPath=templates/other/
    beetl.suffix=html
    

    OR
    beetl.templatesPath=other/
    beetl.suffix=html
    

    この場合、templatesディレクトリの下に他のフォルダを新規作成したり、resourceの下に直接他のフォルダを新規作成したりして、htmlを接尾辞とするテンプレートファイルを入れることができます.