我的编程空间,编程开发者的网络收藏夹
学习永远不晚

为什么要用FreeMarker替换JSP

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

为什么要用FreeMarker替换JSP

这篇文章主要讲解了“为什么要用FreeMarker替换JSP”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“为什么要用FreeMarker替换JSP”吧!

1、类加载没有 PermGen 问题

如果你已经开发Java Web应用程序一段时间,那么对于 JVM 的 PermGen 问题可能并不陌生。由于 FreeMarker 模板不编译成类,它们不占用 PermGen 空间,并不需要一个新的类加载器加载。

2、模板加载器

直接从数据源加载页面和模板岂不是很好?也许从 CMS  或数据库。也许你只想把它们放在一个地方,可以不重新部署整个应用程序就能更新它们。那么在 JSP 中你是很难做到这一点的,但 FreeMarker  提供的模板加载器就是为了 这个目的。你可以使用内建类或者创建你自己的实现。

  • ClassTemplateLoader:从classpath中加载模板。

  • FileTemplateLoader:在文件系统中从指定文件夹加载模板。

  • StringTemplateLoader:从一个字符串 Map 中加载模板。

  • URLTemplateLoader:从 URL 中加载模板。 你必须要实现 getURL 方法,但应该很容易做到。

  • WebappTemplateLoader:从 servlet 上下文中加载模板。

FreeMarker 也可以将多个加载器链在一起形成一个系列模板装载器。我通常使用 WebappTemplateLoader 指向 WEB—INF 下一个内容文件夹。

Configuration configuration = new Configuration();
configuration.setTemplateLoader(
new WebappTemplateLoader(servletContext, "WEB-INF/content"));

3、可以在运行时嵌入模板

FreeMarker 能让你创建真正的模板,而不只是片段 ,还记得 JSP 中的 header 和 footer 吗?FreeMarker 允许你使用一个模板(在本例中为 head.ftl)

<head>
<title>${title}</title>
</head>

并将其添加到另一个模板(site.ftl body区域)。

<html>
${body}
</html>

可以以编程的方式选择哪个模板进入 body 区。还可以添加多个模板一起放入同一区域。甚至可以将字符串值或计算的值放入 body 区域。在 JSP 中试试做到这些。

4、没有导入

JSP 要求你导入每个你需要使用的类,就像一个常规的 Java 类一样。FreeMarker 模板,嗯,仅仅是模板。可以被包括在另一个模板中,但目前还不需要导入类。

5、支持 JSP 标签

使用 Jsp 的一个理由是有可用性很好的标签库。好消息是 FreeMarker 支持 JSP 标签。坏消息是它们使用 FreeMarker 的语法,不是 JSP 语法。

6、表达式语言中的方法调用

除非你的目标是 Servlet 3.0/El 2.2 标准的容器,那么表达式语言中方法调用是不可用的。不是所有人都同意 EL  表达式中方法调用是一件好事,但是当你需要它们的时候,使用 JSP 真的太痛苦了。 但是 FreeMarker 同等对待其中每个引用。

${customer.address.country}

${customer.getAddress().country}

7. 内置空字符串处理

FreeMarker 和 Jsp 都可以在表达式语言中处理空值,但 FreeMarker 在可用性上更先进一些。

Invoice Date: ${(customer.invoice.date)!}

感叹号告诉 FreeMarker 对表达式自动检查 null 值和空字符串。如果 customer、invoice 或者 date 中有一个为空值或空字符串,你只会得到标签:

Invoice Date:

另一个选择是感叹号后包括你的默认值。

Invoice Date: ${(customer.invoice.date)!'No Invoice Available'}

如果所有值丢失,你会得到:

Invoice Date: No Invoice Available

请参见处理缺少的值了解更多细节。

8、共享变量

FreeMarker 的共享变量是我最喜欢的“隐藏”功能之一。此功能可以让你设置自动添加到所有模板的值。 例如,可以设置应用程序的名称作为共享变量。

Configuration configuration = new Configuration();
configuration.setSharedVariable("app", "StackHunter");

然后像任何其他变量一样访问它。

App: ${app}

在过去使用共享变量一般引用资源包 然后使用像 ${i18n.resourceBundle.key} 这样的表达式来获取值。

${i18n.countries.CA}
${i18n.countries['CA']}
${i18n.countries[countryCode]}

上面这些行都引用 countries_en.properties 资源包内的 key “CA”对应的值。你需要执行自己的 TemplateHashModel,然后将其添加为一个共享变量来实现这一目标。

9、支持 JSON

FreeMarker 内置 JSON 支持。 比方说你有以下的 JSON 存储到变量命名 user 的字符串中。

{ 'firstName': 'John', 'lastName': 'Smith', 'age': 25, 'address': { 'streetAddress': '21 2nd Street', 'city': 'New York', 'state': 'NY', 'postalCode': 10021 }}

使用 ?eval 将从字符串转换为一个 JSON 对象,然后像其他数据一样在表达式中使用。

<#assign user = user?eval>
User: ${user.firstName}, ${user.address.city}

10、不只是为了 Web 开发

***,与 JSP 不同的是FreeMarker 模板可以在  servlet 容器之外使用。可以使用它们来生成电子邮件、 配置文件、 XML 映射等。你甚至可以使用它们来生成 web 页  并将它们保存在服务器端的缓存中。 请在下一个 web 项目尝试使用 FreeMarker把 web 开发的乐趣给找回来。

感谢各位的阅读,以上就是“为什么要用FreeMarker替换JSP”的内容了,经过本文的学习后,相信大家对为什么要用FreeMarker替换JSP这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

为什么要用FreeMarker替换JSP

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么使用PHP替换回车为br

这篇“怎么使用PHP替换回车为br”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使用PHP替换回车为br”文章吧。使用P
2023-07-06

为什么要从Mac换到Linux

这篇文章主要为大家展示了“为什么要从Mac换到Linux”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“为什么要从Mac换到Linux”这篇文章吧。我在个人电脑上的首次 Linux 体验我记得,我
2023-06-16

为什么要做IPV6的转换服务

为什么要做IPV6的转换服务?随着互联网用户和互联网连接设备的数量的不断增长,全球可用的IPv4地址已经接近耗尽。运营商、服务提供商以及借助互联网实现信息交流的各种组织对 IP 地址的需求日益增强。为了应对这个挑战,IPV6应运而生。然而,转变并非一蹴而就,为此,需要实现IPv6的转换过渡。
为什么要做IPV6的转换服务
2024-02-22

jsp虚拟主机租用要注意什么

jsp虚拟主机租用要注意:1、jsp虚拟主机的月流量,月流量超过IIS连接数和流量的限制会导致网站无法正常打开;2、服务商是否提供足够丰富的网站空间,保证满足自身网站需求;3、根据个人需求选择jsp虚拟主机型号,保证能满足网站用户需求。具体
2023-02-10

为什么要用ecshop

用ecshop的原因:1、具备丰富的功能和灵活的配置选项;2、拥有强大的后台管理功能;3、具备良好的用户体验和友好的界面设计;4、有强大的社区支持和技术团队;5、提供了完善的售后服务和技术支持。本文的操作环境:Windows10系统、ECS
2023-07-13

为什么要使用Hive

这篇文章将为大家详细讲解有关为什么要使用Hive,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。什么是HiveHive:由Facebook开源用于解决海量结构化日志的数据统计。 Hive是基于Hadoop的
2023-06-02

为什么要使用video.js

这篇文章主要介绍为什么要使用video.js,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!为什么要使用video.js?1. PC端浏览器并不支持video直接播放m3u8格式的视频2. 手机端各式各样的浏览器定制的
2023-06-09

为什么要使用docker

小编给大家分享一下为什么要使用docker,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! 一款产品从开发到上线,从操作系统,到运行环境,再到应用配置。做为开发+运维之间的协作,我们需要关心很多东西,这也就是很多互联网
2023-06-04

为什么要使用JRebel

这篇文章给大家分享的是有关为什么要使用JRebel的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。为什么要使用JRebel? 在开发过程中有一个很头疼的问题:每次修改后台代码之后,都需要重新将项目部署到tomca
2023-06-04

为什么要少用Iframe

今天给大家介绍一下为什么要少用Iframe。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。下图显示创建 100 个不同的元素中iframe到底有多耗费时间。 创
2023-06-08

为什么要使用String

本篇文章为大家展示了为什么要使用String,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。最近在培训课期间指导初学者。任务之一就是要大家完成一个类,要求这个类对key为String类型的map执行d
2023-06-17

oracle替换函数的使用方法是什么

在Oracle中,可以使用REPLACE函数来进行替换操作。其基本语法如下:REPLACE(string, old_substring, new_substring)其中,string代表要进行替换操作的字符串,old_substring
oracle替换函数的使用方法是什么
2024-04-09

hive替换函数的使用方法是什么

在Hive中,可以使用REPLACE函数来替换字符串中的指定子字符串。REPLACE函数的语法如下:REPLACE(string, search_string, replacement_string)其中,string是要进行替换操作的字
hive替换函数的使用方法是什么
2024-03-12

为开发者和用户而言,pip源替换的实际价值是什么?

pip换源对于开发者和用户来说有什么实际价值?随着Python语言的流行和应用范围的扩大,pip作为Python的包管理工具也变得越来越重要。然而,默认的pip源通常在国内访问速度较慢,甚至无法连接。这就导致了很多开发者和用户在使用pip
为开发者和用户而言,pip源替换的实际价值是什么?
2024-01-13

编程热搜

目录