springMVC、freemarker页面半自动静态化

SpringBoot/SpringCloud代码自动化生成工具:Freemarker模板应用 本文还有配套的精品资源,点击获取 简介:本文介绍了一款基于Freemarker模板引擎的SpringBoot/SpringCloud代码生成器,该工具允许用户自定义模板以快速生成项目的各类代码结构。Freemarker作为动态模板语言,在Web开发尤其是Spring框架中被广泛应用于视图层的渲染。通过预设的控制层、Dao层、Model模板等,开发者能够自动化生成与业务逻辑紧... 阅读详情

1,请求.do的URL时直接生成对应的.htm文件,并将请求转发到该htm文件
    2,自由控制某个页面是否需要静态化

 

如果看图不懂的呢,说白了这个中技术就是:java对象+ftl模型=输出html视图

1、在sprinMVC中:MVC框架中的View层组件、Html页面静态化、代码生成工具

2、为什么要用FreeMarker:简单容易学、逻辑分离明确

3、FreeMarker优点:FreeMarker不依赖于Servlet,网络或Web 环境(没一毛钱关系)

maven

复制代码
 1 <dependency>
 2   <groupId>org.freemarker</groupId>
 3   <artifactId>freemarker</artifactId>
 4   <version>2.3.20</version>
 5 </dependency>
 6 <dependency>
 7   <groupId>freemarker</groupId>
 8   <artifactId>freemarker</artifactId>
 9   <version>2.3.8</version>
10 </dependency>
11 <dependency>
12   <groupId>org.springframework</groupId>
13   <artifactId>spring-context-support</artifactId>
14   <version>4.2.4.RELEASE</version>
15 </dependency>
复制代码

 

 

一、web.xml配置(配置大部分都一样)

二、在springMVC文件中配置freemarker视图解析器

 

复制代码
<!--FreeMarker视图解析器 -->
    <bean id="viewResolver"
        class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
        <property name="suffix" value=".ftl" />
        <property name="contentType" value="text/html;charset=UTF-8"></property>
        <property name="viewClass" value="com.freemarker.Controller.FreeMarkerViewUtil" />
        <property name="exposeRequestAttributes" value="true" />
        <property name="exposeSessionAttributes" value="true" />
        <property name="exposeSpringMacroHelpers" value="true" />
    </bean>
    <bean id="fmXmlEscape" class="freemarker.template.utility.XmlEscape" />
    <!-- Freemarker配置 -->
    <bean id="freemarkerConfig"
        class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
        <property name="templateLoaderPath" value="/WEB-INF/view/" />
        <property name="freemarkerVariables">
            <map>
                <entry key="xml_escape" value-ref="fmXmlEscape" />
            </map>
        </property>
        <property name="freemarkerSettings">
            <props>
                <prop key="template_update_delay">1</prop>
                <prop key="default_encoding">UTF-8</prop>
                <prop key="number_format">0.##########</prop>
                <prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
                <prop key="classic_compatible">true</prop>
                <prop key="template_exception_handler">ignore</prop>
            </props>
        </property>
    </bean>
复制代码

 

 

三、建立模型文件(freemarker完全支持el表达式语言)

我的目录是:WebContent/WEB-INF/view/index.ftl,建立一个文件后缀为ftl即可!

复制代码
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
<head> 
  <title>演示${title}</title> 
  <meta http-equiv="pragma" content="no-cache"> 
  <meta http-equiv="cache-control" content="no-cache"> 
  <meta http-equiv="expires" content="0"> 
  <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 
  <meta http-equiv="description" content="This is my page"> 
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
</head> 
<body> 
  <#list users as user> 
  测试..............username : ${user.username} 
  测试..............password : ${user.password} 
  </#list>

</body> 
</html>
复制代码

 

四、编写视图解析器(FreeMarkerViewUtil.java),继承自org.springframework.web.servlet.view.freemarker.FreeMarkerView在这里对原类进行扩展

 

复制代码
 1 package com.freemarker.Controller;
 2 
 3 import java.io.BufferedWriter;
 4 import java.io.File;
 5 import java.io.FileOutputStream;
 6 import java.io.IOException;
 7 import java.io.OutputStreamWriter;
 8 import java.io.Writer;
 9 import java.util.Locale;
10 import java.util.Map;
11 import javax.servlet.ServletException;
12 import javax.servlet.http.HttpServletRequest;
13 import javax.servlet.http.HttpServletResponse;
14 import org.springframework.web.servlet.support.RequestContextUtils;
15 import org.springframework.web.servlet.view.freemarker.FreeMarkerView;
16 import freemarker.template.SimpleHash;
17 import freemarker.template.Template;
18 import freemarker.template.TemplateException;
19 
20 public class FreeMarkerViewUtil extends FreeMarkerView {
21     @Override
22     protected void doRender(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response)
23             throws Exception {
24         // Expose model to JSP tags (as request attributes).
25         exposeModelAsRequestAttributes(model, request);
26         // Expose all standard FreeMarker hash models.
27         SimpleHash fmModel = buildTemplateModel(model, request, response);
28 
29         if (logger.isDebugEnabled()) {
30             logger.debug("Rendering FreeMarker 模版 [" + getUrl() + "] in FreeMarkerView '" + getBeanName() + "'");
31         }
32         // Grab the locale-specific version of the template.
33         Locale locale = RequestContextUtils.getLocale(request);
34 
35         /*
36          * 默认生成静态文件,除非在编写ModelAndView时指定CREATE_HTML = false, 这样对静态文件生成的粒度控制更细一点
37          * 例如:ModelAndView mav = new ModelAndView("search");
38          * mav.addObject("CREATE_HTML", false);
39          */
40         if (Boolean.FALSE.equals(model.get("CREATE_HTML"))) {
41             processTemplate(getTemplate(locale), fmModel, response);
42         } else {
43             createHTML(getTemplate(locale), fmModel, request, response);
44         }
45     }
46 
47     public void createHTML(Template template, SimpleHash model, HttpServletRequest request,
48             HttpServletResponse response) throws IOException, TemplateException, ServletException {
49         // 站点根目录的绝对路径
50         String basePath = request.getSession().getServletContext().getRealPath("/");
51         String requestHTML = this.getRequestHTML(request);
52         // 静态页面绝对路径
53         String htmlPath = basePath + requestHTML;
54         System.out.println("静态页面绝对路径===========>>:"+htmlPath);
55         File htmlFile = new File(htmlPath);
56         if (!htmlFile.getParentFile().exists()) {
57             htmlFile.getParentFile().mkdirs();
58         }
59         if (!htmlFile.exists()) {
60             htmlFile.createNewFile();
61         }
62         Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(htmlFile), "UTF-8"));
63         // 处理模版
64         template.process(model, out);
65         out.flush();
66         out.close();
67         /* 将请求转发到生成的htm文件 */
68         request.getRequestDispatcher(requestHTML).forward(request, response);
69     }
70 
71     /**
72      * 计算要生成的静态文件相对路径 因为大家在调试的时候一般在Tomcat的webapps下面新建站点目录的,
73      * 但在实际应用时直接布署到ROOT目录里面,这里要保证路径的一致性。
74      * 
75      * @param request
76      *            HttpServletRequest
77      * @return /目录/*.htm
78      */
79     private String getRequestHTML(HttpServletRequest request) {
80         // web应用名称,部署在ROOT目录时为空
81         String contextPath = request.getContextPath();
82         // web应用/目录/文件.do
83         String requestURI = request.getRequestURI();
84         // basePath里面已经有了web应用名称,所以直接把它replace掉,以免重复
85         requestURI = requestURI.replaceFirst(contextPath, "");
86         // 将.do改为.html,稍后将请求转发到此html文件
87         requestURI = requestURI.substring(0, requestURI.indexOf(".")) + ".html"; 
88         return requestURI;
89     }
90 }
复制代码

 

五、测试类(Controller)

复制代码
 1 package com.freemarker.Controller;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 import javax.servlet.http.HttpServletRequest;
 7 import javax.servlet.http.HttpServletResponse;
 8 import org.springframework.stereotype.Controller;
 9 import org.springframework.web.bind.annotation.RequestMapping;
10 import org.springframework.web.servlet.ModelAndView;
11 import com.spring.vo.User;
12 
13 @Controller
14 @RequestMapping("/home")
15 public class FreeMarkerController {
16 
17     @RequestMapping("index1")
18     public ModelAndView Add(HttpServletRequest request, HttpServletResponse response) {
19         ModelAndView mav = new ModelAndView("index");
20         User user = new User();
21         user.setUsername("<h2>小明=========================================================></h2>");
22         user.setPassword("<a href='https://www.hao123.com/'>百度</a>");
23         List<User> users = new ArrayList<User>();
24         users.add(user);
25         mav.addObject("users", users);
26         return mav;
27     }
28 
29     @RequestMapping("index2")
30     public ModelAndView index() {
31         ModelAndView mav = new ModelAndView("index");
32         mav.addObject("title", "网站标题");
33         //说明:在这里可以控制不生成静态htm
34         mav.addObject("CREATE_HTML", false);
35         return mav;
36     }
37 }
复制代码

访问:http://localhost:1010/springMVC_FreeMarker/home/index1.do,访问index1.do才会生成html文件,生成的html文件是根据@RequestMapping("index1")name决定的.

   如果不需要生成静态化页面

mav.addObject("CREATE_HTML", false);

 

 

文件目录

 

FreeMarker教你如何生成html静态页面源码 立即下载

相关推荐

骁龙X Elite笔记本重装Windows 11 Arm64系统完整指南与避坑手册

UEFI安全启动和Arm64架构是理解现代计算设备系统部署的基础。UEFI取代传统BIOS,提供了更安全的启动环境和模块化固件接口,而Arm64架构则以其高能效特性,在移动和新兴PC领域日益重要。其技术价值在于为设备带来更快的启动速度、更强的安全防护以及更优的功耗表现。在应用场景上,这直接关系到搭载高通骁龙X Elite等Arm处理器的笔记本电脑的系统安装与维护。对于这类设备,重装系统远非插入通用安装盘那么简单,核心挑战在于必须使用专为Arm64编译的Windows镜像,并需提前集成芯片组、网络等硬件的专属

weixin_33428613的博客 478

基于SpringBoot和Freemarker的页面静态化

页面静态化能够缓轻数据库的压力,还能提高页面的并发能力,但是网页静态化是比较适合大规模且相对变化不太频繁的数据。页面静态化在实际应用中还是比较常见的,比如博客详情页、新闻网站或者文章类网站等等。这类数据变化不频繁比较适合静态化页面。该篇博客就是介绍博客详情页的页面静态化输出。

flash_love的博客 1620

ThinkPad T14 Gen 2与T14P系列对比

表格您的需求推荐机型日常办公、出差、文档处理、视频会议✅(够用、轻便、便宜)视频剪辑、3D建模、编程编译、AI训练、高色准设计✅(性能强、屏幕好、扩展佳)想要未来 5 年不换机✅T14p预算低于 5000 元✅T14 Gen 2(或考虑 T14 Gen 3/4)T14p 2025 款 ≠ 小改款,而是架构级升级它从“高性能笔记本”进化为“AI 移动工作站”,核心差异在于NPU + Ultra 平台 + 全面屏显 + 超长续航。如果您从事AI 开发、视频创作、工程仿真、多任务编程。

tecoes的博客 2738

freemar对date类型处理

${(foundDate?string("yyyy-MM-dd"))!}

u012325073的博客 505

富斯遥控器-ros机器人控制

富斯遥控器-ros机器人手柄控制

zkh7758的博客 1699

当AI换脸遇上内容审核:Facefusion NSFW检测的技术伦理与用户自主权之争

本文探讨了Facefusion开源AI换脸工具中NSFW检测机制的技术伦理困境与用户自主权之争。分析了其多层次防御机制的技术实现与社区规避方法,揭示了开源软件在安全与自由之间的平衡难题,并提出了分层权限设计等社区实践方案。

weixin_29165725的博客 681

【06】在springboot中使用Freemarker生成静态html页面

创建maven工程并导入Freemarker的maven坐标。

Wgwvs的博客 1560

基于形状的模板匹配之候选点选择

基于形状的匹配匹配,顶层金字塔提取候选点

manuoo的专栏 2767

【Spring MVC】_SpringMVC项目返回静态页面

2、其实Spring是一个容器(Container),而。

m0_63299495的博客 2700

运放单电源供电和双电源供电的实际应用案例

文章摘要:本文对比分析了运放单电源与双电源供电的典型应用场景及电路设计要点。单电源供电适用于低成本、小体积设备,如便携音箱(5V供电+中点偏置)、工业4-20mA信号转换(12V供电+电压跟随)和物联网传感器(3.3V低功耗设计);双电源供电则适合高精度要求场景,如Hi-Fi音响(±15V对称输出)、医疗设备(±5V微弱信号放大)和精密仪器(±15V宽动态范围)。文末提供常见运放选型对照表,涵盖LM324、TL082等型号的供电参数与核心特性,为不同应用场景提供选型参考。(149字)

qq_37999850的博客 608

java技术专家 【DDD(领域驱动设计)思想解读及优秀实践 22】|泛化建模(上):领域知识更抽象怎么办?

java技术专家 【DDD(领域驱动设计)思想解读及优秀实践 22】|泛化建模(上):领域知识更抽象怎么办?

大壮 1166

springboot集成FreeMarker一键式自动生成增删改查代码

一,前提知识储备 1,什么是FreeMarker? FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。 2,FreeMarker的基本用法 下面使用测试类来说明FreeMarker的基本用法,其实FreeMarker就是一个模板引擎,和thymeleaf和beetle等都是一个品种的,FreeMarker最初的目的只是为了

刻苦的樊同学 1431

一个中科大差生的8年程序员工作总结

今年终于从大菊花厂离职了,离职前收入大概60w不到吧,在某乎属于比较差的,今天终于有空写一下自己的职场故事,也算是给自己近8年的程序员工作做个总结复盘。近8年有些事情做对了,也有更多事情做错了,在这里记录一下,希望能够给后人一些帮助吧,也欢迎私信交流。文笔不好,见谅,有些细节记不清了,如果有出入,就当是我编的这个故事吧。 PS:有几个问题先在这里解释一下,评论就不一一回复了 1、关于差生,我本人在科大时确实成绩偏下,差生主要讲这一点,没其他意思。 2、因为买房是我人生中的大事,我认为需要记录和总结一下

陈小房的自我修炼 5万+

一、springMVC、freemarker页面半自动静态化

说明:刚刚接到公司的通知,实现(半自动化),即通过参数控制是否需要静态化页面(哪里我说错了,勿喷!谢谢)    1,请求.do的URL时直接生成对应的.htm文件,并将请求转发到该htm文件    2,自由控制某个页面是否需要静态化 如果看图不懂的呢,说白了这个中技术就是:java对象+ftl模型=输出html视图 1、在sprinMVC中:MVC框架中的View层组件、Html页面...

weixin_30877181的博客 166

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

SpringMVC+FreeMarker实现半自动静态化

SpringMVC+FreeMarker实现半自动静态化    感谢imyourgod的原贴http://topic.csdn.net/u/20090613/12/30302a5d-33c0-4ce4-b9e3-cd503dbafac1.html 这里对freemarker的代码进行了修改,效果: 1,请求.do的URL时直接生成对应的.htm文件,并将请求转发到该htm文件 2,自由控

System Architect 2573

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Spring MVC + freemarker实现半自动静态化

这里对freemarker的代码进行了修改,效果: 1,请求.do的URL时直接生成对应的.htm文件,并将请求转发到该htm文件 2,自由控制某个页面是否需要静态化 原理:对org.springframework.web.servlet.view.freemarker.FreeMarkerView类进行扩展 第一步:在web.xml中将*.do请求交给SpringMVC

viviju1989的专栏 1892

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Spring MVC freemarker使用

什么是 FreeMarker? FreeMarker 是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。 模板编写为FreeMarker Template Language (FTL)。它是简单的,专用的语言,不...

weixin_30675247的博客 90

Thymeleaf实现页面静态化

页面静态化 1.简介 1.1.问题分析 现在,我们的页面是通过Thymeleaf模板引擎渲染后返回到客户端。在后台需要大量的数据查询,而后渲染得到HTML页面。会对数据库造成压力,并且请求的响应时间过长,并发能力不高。 如何解决? 首先我们能想到的就是缓存技术,比如之前学习过的Redis。不过Redis适合数据规模比较小的情况。假如数据量比较大,例如我们的商品详情页。每个页面如果10kb,10...

weixin_43865344的博客 1299

案例--使用freemarker实现代码自动生成

freemarker是一款模板引擎,一种基于模板和数据,并用来生成输出文本(HTML、配置文件,源代码等)的工具。 freemarker模板文件相关语法 1、输出基本数据类型或对象属性 ${数据} 或者 ${对象.属性} 如: ${name} ${user.username} 2.输出集合 <#list userList as item> ${item.username} </#list> 3.if判断 #list userList as item

X80757的博客 1558

在Springboot中,使用freemarker生成静态化HTML文件

Springboot版本:2.3.9JDK版本:JDK 17。

wuhao2343的博客 949

springboot集成freemarker,生成静态化页面

FreeMarker 是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。模板编写为FreeMarker Template Language (FTL)。它是简单的,专用的语言,不是像PHP那样成熟的编程语言。那就意味着要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。

PiggyOne123的博客 2244
上一篇: 一篇很全面的freemarker教程
下一篇: mybatis中_parameter使用和常用sql
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值