页面静态化是网站开发过程中经常遇到的一个问题,今天主要讲的是spring boot 结合freemarker的静态化的方法。

第一步,引入相应的jar包

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


第二步,注入Configuration

    @Autowired 
    private Configuration configuration;


注意引入的包路径

读取模板生成静态文件

StringWriter out = new StringWriter(); 
        try { 
            // 第三步:设置模板文件使用的字符集。一般就是utf-8.   
            configuration.setDefaultEncoding("utf-8");   
            // 第四步:加载一个模板,创建一个模板对象。   
            Template template = configuration.getTemplate("works_share.ftl"); 
            template.process(dataModel, out);   
            String url_suffix = "works/"+reportType+"/"+vts_MyWorks.getPkWorks()+".html"; 
            PubAliyunUtil.putObjectToResouceALL(out.toString().getBytes("UTF-8"), url_suffix); 
        } catch (Exception e) { 
            e.printStackTrace(); 
        } finally{ 
            try { 
                out.close(); 
            } catch (IOException e) { 
                e.printStackTrace(); 
            } 
        }


这里是直接写入OSS的,所以采用的字符流的方式。

注意一个特殊的地方,springboot在集成freemarker的有一些默认配置。默认的模板路径在classpath:/templates/下面,所以需要在resources下新建templates文件夹

这样模板文件才能被读取到。spring boot的默认设置如下: 

# FREEMARKER (FreeMarkerAutoConfiguration) 
spring.freemarker.allow-request-override=false # Set whether HttpServletRequest attributes are allowed to override (hide) controller generated model attributes of the same name. 
spring.freemarker.allow-session-override=false # Set whether HttpSession attributes are allowed to override (hide) controller generated model attributes of the same name. 
spring.freemarker.cache=false # Enable template caching. 
spring.freemarker.charset=UTF-8 # Template encoding. 
spring.freemarker.check-template-location=true # Check that the templates location exists. 
spring.freemarker.content-type=text/html # Content-Type value. 
spring.freemarker.enabled=true # Enable MVC view resolution for this technology. 
spring.freemarker.expose-request-attributes=false # Set whether all request attributes should be added to the model prior to merging with the template. 
spring.freemarker.expose-session-attributes=false # Set whether all HttpSession attributes should be added to the model prior to merging with the template. 
spring.freemarker.expose-spring-macro-helpers=true # Set whether to expose a RequestContext for use by Spring's macro library, under the name "springMacroRequestContext". 
spring.freemarker.prefer-file-system-access=true # Prefer file system access for template loading. File system access enables hot detection of template changes. 
spring.freemarker.prefix= # Prefix that gets prepended to view names when building a URL. 
spring.freemarker.request-context-attribute= # Name of the RequestContext attribute for all views. 
spring.freemarker.settings.*= # Well-known FreeMarker keys which will be passed to FreeMarker's Configuration. 
spring.freemarker.suffix= # Suffix that gets appended to view names when building a URL. 
spring.freemarker.template-loader-path=classpath:/templates/ # Comma-separated list of template paths. 
spring.freemarker.view-names= # White list of view names that can be resolved.


此种配置,只能读取classpath下的路径。如果想要读取其他路径则要重写freemarker的默认配置,在spring boot中,你可以这样做:

@Configuration 
public class TemplateLoader extends WebMvcConfigurerAdapter { 
    @Bean 
    public ViewResolver viewResolver() { 
        FreeMarkerViewResolver resolver = new FreeMarkerViewResolver(); 
        resolver.setCache(true); 
        resolver.setPrefix(""); 
        resolver.setSuffix(".ftl"); 
        resolver.setContentType("text/html; charset=UTF-8"); 
        return resolver; 
    } 
  
    @Bean 
    public FreeMarkerConfigurer freemarkerConfig() throws IOException, TemplateException { 
        FreeMarkerConfigurer configurer = new FreeMarkerConfigurer(); 
        configurer.setTemplateLoaderPaths("file:绝对路径","http://www.xxx.com/"); 
        configurer.setDefaultEncoding("UTF-8"); 
        return configurer; 
    } 
  
}


 
 

原文地址:CSDN


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

彻底解决POI 读写excel 发生OOM问题