美文网首页
spring boot整合freemarker+sitemesh

spring boot整合freemarker+sitemesh

作者: 一点温柔 | 来源:发表于2017-11-29 23:19 被阅读0次

    简述:
    项目中可能会遇到多个html,其中顶部头部或者资源文件引用都相同的情况等,为了简洁项目结构,净化页面,采用了本方案来解决,如下:

    1. pom文件添加相关依赖

           <?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>general-manager</groupId>
        <artifactId>general-manager-web</artifactId>
        <version>1.0-SNAPSHOT</version>
        <!--springboot 基本配置构建 start -->
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.5.7.RELEASE</version>
        </parent>
        <!--spring boot-->
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-thymeleaf</artifactId>
            </dependency>
            <!-- freemarker -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-freemarker</artifactId>
            </dependency>
            <!--sitemesh模版装饰-->
            <dependency>
                <groupId>org.sitemesh</groupId>
                <artifactId>sitemesh</artifactId>
                <version>3.0.1</version>
            </dependency>
            <!-- 热部署依赖 start-->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>springloaded</artifactId>
                <version>1.2.6.RELEASE</version>
            </dependency>
            <dependency><!---->
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <optional>true</optional> <!-- 这个需要为 true 热部署才有效 -->
            </dependency>
    
        </dependencies>
    
        <build>
            <finalName>general-manager-web</finalName>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>exec-maven-plugin</artifactId>
                    <configuration>
                        <executable>java</executable>
                        <arguments>
                            <argument>com.py.general.App</argument>
                        </arguments>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>
    

    2. 创建sitemesh目录存放sitemesh相关配置

    image.png

    DecoratorController

    package com.py.general.web.sitemesh;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.ModelMap;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.servlet.ModelAndView;
    
    import java.util.List;
    
    /**
     * Created by py
     */
    @Controller
    @RequestMapping(value = "/decorator")
    public class DecoratorController  {
    
        private static final Logger logger = LoggerFactory.getLogger(DecoratorController.class);
    
        @RequestMapping(value = "/index")
        public ModelAndView index(ModelMap modelMap) {
            return new ModelAndView("decorators/index");
        }
    }
    

    WebConfig

    package com.py.general.web.sitemesh;
    
    
    import org.springframework.boot.web.servlet.FilterRegistrationBean;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
    
    /**
     * Created by py
     */
    @Configuration
    public class WebConfig extends WebMvcConfigurerAdapter {
    
        @Bean
        public FilterRegistrationBean siteMeshFilter() {
            FilterRegistrationBean fitler = new FilterRegistrationBean();
            WebSiteMeshFilter siteMeshFilter = new WebSiteMeshFilter();
            fitler.setFilter(siteMeshFilter);
            return fitler;
        }
    }
    

    WebSiteMeshFilter

    package com.py.general.web.sitemesh;
    
    import org.sitemesh.builder.SiteMeshFilterBuilder;
    import org.sitemesh.config.ConfigurableSiteMeshFilter;
    
    /**
     * Created by py
     */
    public class WebSiteMeshFilter extends ConfigurableSiteMeshFilter {
    
        public static final String DECORATOR_URL="/decorator/index";
    
        /**
         * decoratorPath 第一个参数配置被模板装饰的页面  第二个参数为模板页
         * @param builder
         */
        @Override
        protected void applyCustomConfiguration(SiteMeshFilterBuilder builder) {
            builder.addDecoratorPath("/", DECORATOR_URL)
                    .addDecoratorPath("/test", DECORATOR_URL)
                    .addExcludedPath("/test1")//不需要装饰的路径
                    .addExcludedPath(DECORATOR_URL);
        }
    }
    
    

    3. application.yml

    server:
      port: 8001
    
    spring:
      freemarker:
        cache: false
        settings:
          template_update_delay: 0
    

    4.页面文件处理,templates下创建修饰目录

    image.png

    footer.ftl

    
    footer.............................................
    
    
    

    header.ftl

    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>通用管理平台|
        </title>
        <link rel="shortcut icon" href="/img/favicon.ico" />
        <link href="/css/bootstrap.min.css" rel="stylesheet">
        <#--根据自己模板所需要的木块添加 css  只需包含在head标签即可-->
        <sitemesh:write property='head'/>
    
    </head>
    

    index.ftl

    <html xmlns:th="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/html">
        <#include "header.ftl">
    
        <body id="test">
        修饰页面主题内容
        </br>
        <sitemesh:write property='body'/>
    
        <#include "footer.ftl">
    
        </body>
    </html>
    

    test.ftl

    <head>
            <link href="/css/bootstrap.min.test.css" rel="stylesheet">
    </head>
    
    <body>
        被修饰页面主体内容
    </body>
    
    

    testController.java

    package com.py.general.web.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    /**
     * Created by py on 2017/11/29.
     */
    @Controller
    public class TestController {
        @RequestMapping(value = "/test")
        public String  test(){
            return  "test1";
        }
    
    }
    
    

    运行结果:


    image.png image.png

    相关文章

      网友评论

          本文标题:spring boot整合freemarker+sitemesh

          本文链接:https://www.haomeiwen.com/subject/lfipbxtx.html