iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >为什么要用FreeMarker替换JSP
  • 294
分享到

为什么要用FreeMarker替换JSP

2024-04-02 19:04:59 294人浏览 薄情痞子
摘要

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

这篇文章主要讲解了“为什么要用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这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: 为什么要用FreeMarker替换JSP

本文链接: https://www.lsjlt.com/news/68228.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • 为什么要用FreeMarker替换JSP
    这篇文章主要讲解了“为什么要用FreeMarker替换JSP”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“为什么要用FreeMarker替换JSP”吧!1、...
    99+
    2024-04-02
  • python替换用什么函数
    python中使用replace函数进行替换,具体方法如下:replace:replace()函数的作用是把字符串中的old替换成 new。replace()函数语法:str.replace(old, new[, max])参数:old:将...
    99+
    2024-04-02
  • 怎么使用PHP替换回车为br
    这篇“怎么使用PHP替换回车为br”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使用PHP替换回车为br”文章吧。使用P...
    99+
    2023-07-06
  • C#替换是什么
    这篇“C#替换是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C#替换是什么”文章吧。替换替换是替换模式中使用的正则表达...
    99+
    2023-06-17
  • 为什么要从Mac换到Linux
    这篇文章主要为大家展示了“为什么要从Mac换到Linux”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“为什么要从Mac换到Linux”这篇文章吧。我在个人电脑上的首次 Linux 体验我记得,我...
    99+
    2023-06-16
  • 为什么javascript不是jsp
    这篇文章主要讲解了“为什么javascript不是jsp”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“为什么javascript不是jsp”吧! ...
    99+
    2024-04-02
  • 什么是替换IP软件
    这篇文章主要讲解了“什么是替换IP软件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“什么是替换IP软件”吧!随著网络的发展,ip交换软件在网络营销中的作用越来越重要。IP全名Internet...
    99+
    2023-06-20
  • 为什么要做IPV6的转换服务
    为什么要做IPV6的转换服务?随着互联网用户和互联网连接设备的数量的不断增长,全球可用的IPv4地址已经接近耗尽。运营商、服务提供商以及借助互联网实现信息交流的各种组织对 IP 地址的需求日益增强。为了应对这个挑战,IPV6应运而生。然而...
    99+
    2024-02-22
    IPV6转换 ipv6转换服务 为什么要做IPV6的转换服务 云服务器知识
  • jsp虚拟主机租用要注意什么
    jsp虚拟主机租用要注意:1、jsp虚拟主机的月流量,月流量超过IIS连接数和流量的限制会导致网站无法正常打开;2、服务商是否提供足...
    99+
    2023-02-10
    jsp虚拟主机租用 虚拟主机
  • 如何使用PHP替换回车为br
    在网页中显示文本内容时,常常需要将文本内容中的回车换行符(\n)替换为HTML中的换行符(br)以正确的显示出来。在PHP中,我们可以使用一些简单的函数来实现这样的替换。使用PHP内置的nl2br()函数nl2br()函数是PHP内置的函数...
    99+
    2023-05-14
  • 为什么要用ecshop
    用ecshop的原因:1、具备丰富的功能和灵活的配置选项;2、拥有强大的后台管理功能;3、具备良好的用户体验和友好的界面设计;4、有强大的社区支持和技术团队;5、提供了完善的售后服务和技术支持。本文的操作环境:Windows10系统、ECS...
    99+
    2023-07-13
  • linux的替换命令是什么
    本篇文章给大家分享的是有关linux的替换命令是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。linux的替换命令:1、利用vim中“:s/原内容/替换内容/”命令来替换内...
    99+
    2023-06-29
  • CSS可替换元素是什么
    这篇文章主要讲解了“CSS可替换元素是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“CSS可替换元素是什么”吧! 什么是可替换元素? 在 CSS 中...
    99+
    2024-04-02
  • 为什么查询ElasticSearch用SQL代替DSL
    这篇文章主要讲解了“为什么查询ElasticSearch用SQL代替DSL”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“为什么查询ElasticSearch...
    99+
    2024-04-02
  • 为什么要使用MySQL
    这篇文章给大家分享的是有关为什么要使用MySQL的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。什么是MySQL  MySQL原本是一个开放源码的关系数据库管理系统,原开发者为瑞典...
    99+
    2024-04-02
  • 为什么要使用Hive
    这篇文章将为大家详细讲解有关为什么要使用Hive,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。什么是HiveHive:由Facebook开源用于解决海量结构化日志的数据统计。 Hive是基于Ha...
    99+
    2023-06-02
  • 为什么要使用JRebel
    这篇文章给大家分享的是有关为什么要使用JRebel的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。为什么要使用JRebel?  在开发过程中有一个很头疼的问题:每次修改后台代码之后,都需要重新将...
    99+
    2023-06-04
  • 为什么要使用video.js
    这篇文章主要介绍为什么要使用video.js,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!为什么要使用video.js? PC端浏览器并不支持video直接播放m3u8格式的视频 手机端各式各样的浏览器定制的vide...
    99+
    2023-06-09
  • 为什么要少用Iframe
    今天给大家介绍一下为什么要少用Iframe。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。下图显示创建 100 个不同的元素中iframe到底有多耗费时间。 创...
    99+
    2023-06-08
  • 为什么要使用GraphQL
    这篇文章主要介绍“为什么要使用GraphQL”,在日常操作中,相信很多人在为什么要使用GraphQL问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”为什么要使用GraphQL”...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作