在上篇博客中说到我采用第二种方案实现静态化,也就是通过扩展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访问。静态化功能本来就是提供给公司内部的,因此不用在这个问题上纠结。在效率要求不高的前提下这种方案不失为一种简单的解决方案。
相关推荐
- 结合持续集成/部署(CI/CD)流程,自动批量生成大量静态页面。 通过上述步骤和示例,你可以了解并实现使用Freemarker生成静态HTML的基本过程。在实际开发中,这个功能可以用于构建静态站点、邮件模板或者API文档等...
在Java Web开发中,Freemarker常用于生成静态HTML页面,例如在MVC框架如Spring MVC中作为视图层的技术。在给定的"代码生成器必备jar包:Freemarker-2.3.23"中,我们主要关注的是`freemarker.template....
通过Freemarker,我们可以将Word文档中的静态文本和变量区分开,变量部分由代码动态填充,从而生成个性化文档。例如,一个模板可能包含多个${variable}占位符,这些占位符在运行时会被程序提供的实际值替换。 具体...
这种方式可以在数据变化时批量生成静态页面,大大减轻服务器负担。 #### 四、Freemarker标签基础 Freemarker提供了丰富的标签库,用于控制逻辑和数据处理。其中一些常用标签包括: - `#foreach`:循环遍历集合或...
这个模板包含静态文本和Freemarker表达式,用于填充动态数据。 2. 数据准备:在服务器端,我们需要准备要导出的数据,并封装成Map或其他对象结构。 3. 渲染:使用Freemarker API,将模板和数据模型合并,生成Word...
它利用Freemarker作为静态引擎,将动态内容转化为HTML,从而提高网页加载速度和降低服务器压力。网站设计上,它提供了五种主风格和三种时尚单页风格的模板,可以在后台自由切换,以满足不同的设计需求。 在系统功能...
通过自动化的FreeMarker任务运行器,开发者可以更高效地管理大量的模板,比如批量更新模板内容、预览模板效果、自动生成文档等。这对于大型网站或者需要频繁更新内容的应用来说尤其有用,因为它减少了手动编辑HTML的...
Java中使用FreeMarker和Apache POI处理Word文档的场景非常广泛,如自动化报告生成、批量生成合同模板等。通过这种方式,开发者可以灵活地定制文档内容,同时保持模板的可维护性和可复用性。 总结,利用Java中的...
通过Java结合Freemarker,我们可以实现高效且灵活的Word文档生成,这对于自动化报告生成、批量文档处理等任务非常有帮助。`javalearnsa`工程为学习者提供了一个实战平台,通过实际操作加深理解。在实际项目中,理解...
这对于批量生成定制化的Word文档非常有用,比如报告、合同或发票等。 以下是使用FreeMarker导出Word的关键步骤和相关知识点: 1. **模板设计**:首先,你需要创建一个FreeMarker模板,这是一个包含静态文本和动态...
模版技术如Freemarker和Velocity可帮助生成静态页面,而Squid和Nginx等缓存服务器可以在更高层次实现页面静态化,进一步提高性能。 2. **数据库优化**: - **表结构优化**:良好的表结构设计是数据库性能的基础。...
6. **动态页面局部静态化**:除了全站静态化,局部静态化也是优化策略之一,它允许将动态网页的一部分内容提前生成为静态,提高部分复杂内容的加载速度。 7. **数据库管理**:作为CMS系统,Public CMS应该提供了...
├ 批处理 (批量移动文章/栏目、批量删除、批量上传图片/附件等) ├ 一键排版 ├ 定时任务 ├ tag自动提取 站点配置 ├ 网站参数配置 ├ 用户注册配置 ├ RSS配置 ├ RSS订阅 ├ TAG管理 ├ 文件上传配置 ...
静态化可以提高页面加载速度,减轻服务器压力。 5. 并行处理:如果数据库内容庞大,可以使用多线程或多进程进行并行处理,加快HTML文件的生成速度。这需要对并发编程有深入的理解,如Python的`concurrent.futures`...
在IT行业中,生成静态页面是常见的网页开发技术之一,它涉及到HTML、CSS和JavaScript等基础知识。"CreateNewsHtml"这个项目或工具显然专注于将新闻数据转换为静态HTML页面,这在提升网站性能、降低服务器压力以及...
4. **自动化工具**:为了批量处理大量JSP文件,可以编写脚本或者使用现成的工具,如Apache Ant或Maven插件,来自动化转换过程。这些工具可以调用服务器环境,运行JSP并保存结果为HTML。 5. **CDN集成**:转换后的...
"利用模板导出word"这一主题涉及到的是自动化生成Word文档的技术,主要使用了Freemarker这一强大的模板语言。Freemarker是一个开源的Java库,主要用于生成动态HTML、XML、Word文档等,尤其适合于Web应用程序中的视图...
- **PageContext**:提供了对页面上可用的变量和对象的访问,是JSP页面的上下文。 ##### Ajax总结 - **Asynchronous JavaScript and XML**:一种在不重新加载整个网页的情况下更新部分网页的技术。 - 使用场景:...
- **pageContext**:表示当前页面上下文,可以访问当前页面内的任何对象。 - **request**:客户端请求对象。 - **response**:服务器响应对象。 - **out**:输出流对象,用于输出内容到客户端。 - **session**:用户...