美文网首页
SpringBoot2+JSP+SiteMesh3实现页面“装饰

SpringBoot2+JSP+SiteMesh3实现页面“装饰

作者: DeppWang | 来源:发表于2019-01-09 18:00 被阅读0次

    注:本篇文章的SpringBoot版本为2.1.1

    SpringBoot使用JSP技术

    Windows系统的IDEA中,可使用快捷键Ctrl+Shift+Alt+S,打开Project Structure,新增webapp存放jsp文件

    image.png image.png

    使用内嵌的tomcat容器来运行的话,需要在pom.xml文件新增下面这3个依赖:

    <!--WEB支持-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    <!--jsp页面使用jstl标签-->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
    </dependency>
    
    <!--用于编译jsp-->
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
    </dependency>
    

    在application.properties中配置返回jsp文件的路径和后缀

    spring.mvc.view.prefix=/WEB-INF/views/
    spring.mvc.view.suffix=.jsp
    

    使用SiteMesh3实现页面装饰

    新增依赖

    <!--sitemesh实现页面装饰-->
    <dependency>
        <groupId>org.sitemesh</groupId>
        <artifactId>sitemesh</artifactId>
        <version>3.0.1</version>
    </dependency>
    

    实现ConfigurableSiteMeshFilter的applyCustomConfiguration方法,来配置装饰路径

    public class WebSiteMeshFilter extends ConfigurableSiteMeshFilter {
    
        @Override
        protected void applyCustomConfiguration(SiteMeshFilterBuilder builder) {
            builder.addDecoratorPath("/task/index", "/WEB-INF/views/decorator.jsp");
    //        也可使用Controller请求映射
    //        builder.addDecoratorPath("/task/index", "/task/decorator").addExcludedPath("/task/decorator");
        }
    }
    

    自定义Config,将装饰路径注入容器。相当于在xml文件中配置<bean></bean>。

    SpringBoot2废弃了WebMvcConfigurerAdapter ,直接使用WebMvcConfigurer

    @Configuration
    public class WebConfig implements WebMvcConfigurer {
    
        @Bean
        public FilterRegistrationBean siteMeshFilter() {
            FilterRegistrationBean filter = new FilterRegistrationBean();
            WebSiteMeshFilter siteMeshFilter = new WebSiteMeshFilter();
            filter.setFilter(siteMeshFilter);
            return filter;
        }
    }
    

    效果如下图:

    image.png

    源码地址:https://github.com/DeppWang/SpringBoot-Demo/tree/master/springboot-sitemesh

    总结

    要在SpringBoot2中使用SiteMesh,就不得不使用JSP或者FreeMarker,如果想要使用Thymeleaf,同时实现页面装饰,暂时还没有找到这样的实现方法。

    参考网址

    Spring Boot干货系列:(五)开发Web应用之JSP篇:http://tengj.top/2017/03/13/springboot5/
    springboot2试用2模板sitemesh:http://blog.sina.com.cn/s/blog_537517170102xve4.html
    

    相关文章

      网友评论

          本文标题:SpringBoot2+JSP+SiteMesh3实现页面“装饰

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