`
zzc1684
  • 浏览: 1223126 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

FreeMarker页面静态化 -之批量静态化

阅读更多

在上篇博客中说到我采用第二种方案实现静态化,也就是通过扩展FreeMarker的FreeMarkerView类(参考【我的博客】)。上次说到这种方式更加优雅,节省不少的工作量,而且降低了后期的维护成本。这篇博客将指出这种方案的一个缺点,以及解决方案。

 

该静态化方案中,FreeMarker渲染页面的工作发生在Controller层return之后,如下形式:

        @RequestMapping(value = "detail")  
        @NeedNavigation  
        public String detail(HttpServletRequest request, Model model, Integer id, String createHtml){  
            ……页面数据处理逻辑略……          
            //页面静态化  
            if (createHtml != null && "true".equals(createHtml)) {  
                StaticSupportInfo staticSupportInfo = new StaticSupportInfo();  
                //设置静态化文件名  
                staticSupportInfo.setTargetHtml("detail_" + id + ".html");  
                //将静态化信息支持对象放到Attribute中,注意key值不要写错  
                request.setAttribute("staticSupportInfo", staticSupportInfo);  
            }  
            return "web/blog/detail";   
        }  

 我们向上层容器返回了模板页的路径,也就是web/home/index.ftl,然后渲染页面以及向客户端返回结果的工作就交给了 FreeMarker,然后其他的事就不由我们管了。那么批量静态化怎么办呢?这是一个问题,因为我们没法通过循环向一个方法传递不同的参数让其静态化这 一批页面,无论我们怎么循环,上层的FreeMarker都只是处理我们return给它的那一个模板页。

 

其实解决办法很简单,在一次访问的内部循环不行,那我们就在外部循环嘛,让每一次循环都是一次完整的http访问。代码如下:

    @RequestMapping("static_all")  
    public void staticAll(HttpServletRequest request, HttpServletResponse response) throws IOException {  
        ……业务逻辑略……  
        for (Integer id : ids) { //ids获取的具体业务逻辑略  
            String urlString = "www.test.com/web/blog/detail.htm?id=" + id + "&createHtml=true";  
            try {  
                UrlResource urlResource = new UrlResource(urlString);  
                EncodedResource encodedResource = new EncodedResource(urlResource,"utf-8");  
                String result = FileCopyUtils.copyToString(encodedResource.getReader());  
            } catch (Exception e) {  
                e.printStackTrace();  
                continue;  
            }  
        }  
        ……response中返回处理结果的逻辑略……  
    }  

 注:这里UrlResource是spring对java接口的封装,用java的URL和HttpURLConnection也可以。

 

url中用的是域名,服务器要记得配置host。

如此,我们就解决了批量静态化的问题,从理论上讲,相比于静态化方案一(参考【我的博客】),这种方式效率较低,因为每一次循环都是一次完整的http访问。静态化功能本来就是提供给公司内部的,因此不用在这个问题上纠结。在效率要求不高的前提下这种方案不失为一种简单的解决方案。

分享到:
评论

相关推荐

    freemarker生成静态HTML例子

    - 结合持续集成/部署(CI/CD)流程,自动批量生成大量静态页面。 通过上述步骤和示例,你可以了解并实现使用Freemarker生成静态HTML的基本过程。在实际开发中,这个功能可以用于构建静态站点、邮件模板或者API文档等...

    代码生成器必备jar包:Freemarker-2.3.23

    在Java Web开发中,Freemarker常用于生成静态HTML页面,例如在MVC框架如Spring MVC中作为视图层的技术。在给定的"代码生成器必备jar包:Freemarker-2.3.23"中,我们主要关注的是`freemarker.template....

    word模板静态化

    通过Freemarker,我们可以将Word文档中的静态文本和变量区分开,变量部分由代码动态填充,从而生成个性化文档。例如,一个模板可能包含多个${variable}占位符,这些占位符在运行时会被程序提供的实际值替换。 具体...

    freemarker生成html

    这种方式可以在数据变化时批量生成静态页面,大大减轻服务器负担。 #### 四、Freemarker标签基础 Freemarker提供了丰富的标签库,用于控制逻辑和数据处理。其中一些常用标签包括: - `#foreach`:循环遍历集合或...

    freemarker导出word完整案例

    这个模板包含静态文本和Freemarker表达式,用于填充动态数据。 2. 数据准备:在服务器端,我们需要准备要导出的数据,并封装成Map或其他对象结构。 3. 渲染:使用Freemarker API,将模板和数据模型合并,生成Word...

    java 企业站源码 兼容手机平板PC 自适应响应式 freemarker 静态引擎 SSM 框架(csdn)————.pdf

    它利用Freemarker作为静态引擎,将动态内容转化为HTML,从而提高网页加载速度和降低服务器压力。网站设计上,它提供了五种主风格和三种时尚单页风格的模板,可以在后台自由切换,以满足不同的设计需求。 在系统功能...

    auto-apache-freemarker:apache-free标记的任务运行器

    通过自动化的FreeMarker任务运行器,开发者可以更高效地管理大量的模板,比如批量更新模板内容、预览模板效果、自动生成文档等。这对于大型网站或者需要频繁更新内容的应用来说尤其有用,因为它减少了手动编辑HTML的...

    java中freemarker实现对word的操作

    Java中使用FreeMarker和Apache POI处理Word文档的场景非常广泛,如自动化报告生成、批量生成合同模板等。通过这种方式,开发者可以灵活地定制文档内容,同时保持模板的可维护性和可复用性。 总结,利用Java中的...

    java+freemarker实现对word的操作myeclipse工程javalearnsa资料分享

    通过Java结合Freemarker,我们可以实现高效且灵活的Word文档生成,这对于自动化报告生成、批量文档处理等任务非常有帮助。`javalearnsa`工程为学习者提供了一个实战平台,通过实际操作加深理解。在实际项目中,理解...

    FreeMarker导出word

    这对于批量生成定制化的Word文档非常有用,比如报告、合同或发票等。 以下是使用FreeMarker导出Word的关键步骤和相关知识点: 1. **模板设计**:首先,你需要创建一个FreeMarker模板,这是一个包含静态文本和动态...

    网站海量数据和高并发解决方案(一).docx

    模版技术如Freemarker和Velocity可帮助生成静态页面,而Squid和Nginx等缓存服务器可以在更高层次实现页面静态化,进一步提高性能。 2. **数据库优化**: - **表结构优化**:良好的表结构设计是数据库性能的基础。...

    Public CMS 开源Java CMS系统 v4.0.190312

    6. **动态页面局部静态化**:除了全站静态化,局部静态化也是优化策略之一,它允许将动态网页的一部分内容提前生成为静态,提高部分复杂内容的加载速度。 7. **数据库管理**:作为CMS系统,Public CMS应该提供了...

    基于SpringMVC3+Spring3+Hibernate3+Freemarker+HTML5的开源项目jeecms

    ├ 批处理 (批量移动文章/栏目、批量删除、批量上传图片/附件等) ├ 一键排版 ├ 定时任务 ├ tag自动提取 站点配置 ├ 网站参数配置 ├ 用户注册配置 ├ RSS配置 ├ RSS订阅 ├ TAG管理 ├ 文件上传配置 ...

    模仿大的门户网站将数据库的内容批量生成 HTML 文件

    静态化可以提高页面加载速度,减轻服务器压力。 5. 并行处理:如果数据库内容庞大,可以使用多线程或多进程进行并行处理,加快HTML文件的生成速度。这需要对并发编程有深入的理解,如Python的`concurrent.futures`...

    CreateNewsHtml

    在IT行业中,生成静态页面是常见的网页开发技术之一,它涉及到HTML、CSS和JavaScript等基础知识。"CreateNewsHtml"这个项目或工具显然专注于将新闻数据转换为静态HTML页面,这在提升网站性能、降低服务器压力以及...

    JSP转换HTML

    4. **自动化工具**:为了批量处理大量JSP文件,可以编写脚本或者使用现成的工具,如Apache Ant或Maven插件,来自动化转换过程。这些工具可以调用服务器环境,运行JSP并保存结果为HTML。 5. **CDN集成**:转换后的...

    利用模板导出word

    "利用模板导出word"这一主题涉及到的是自动化生成Word文档的技术,主要使用了Freemarker这一强大的模板语言。Freemarker是一个开源的Java库,主要用于生成动态HTML、XML、Word文档等,尤其适合于Web应用程序中的视图...

    自整理Java关于基础和框架的面试题

    - **PageContext**:提供了对页面上可用的变量和对象的访问,是JSP页面的上下文。 ##### Ajax总结 - **Asynchronous JavaScript and XML**:一种在不重新加载整个网页的情况下更新部分网页的技术。 - 使用场景:...

    java面试知识

    - **pageContext**:表示当前页面上下文,可以访问当前页面内的任何对象。 - **request**:客户端请求对象。 - **response**:服务器响应对象。 - **out**:输出流对象,用于输出内容到客户端。 - **session**:用户...

Global site tag (gtag.js) - Google Analytics