成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用 FreeMarker 替換 JSP 的 10 個理由

開發 開發工具 前端
與 JSP 不同的是FreeMarker 模板可以在 servlet 容器之外使用??梢允褂盟鼈儊砩呻娮余]件、 配置文件、 XML 映射等。你甚至可以使用它們來生成 web 頁 并將它們保存在服務器端的緩存中。

 

 

 

你還在使用 Java 服務器頁面(俗稱JSP)嗎?我曾經也是,但是幾年前我拋棄了它們,并且再也沒有用過JSP了。JSP 是個很好的概念,但是它卻剝奪了 web 開發的樂趣。 對我而言,這些都是小事,比如無法在頁面模板上使用單獨的文件header.jsp 和 footer.jsp,不能調用表達式語言的方法,在運行時無法合并,重新排列頁面的各個部分。所以我轉而使用 FreeMarker 模板。FreeMarker 已經存在一段時間了,如果你最近沒有關注過 FreeMarker 的話,那這有些建議給你,讓你考慮下個 web 應用使用 FreeMarker。

[[153392]]

1、類加載沒有 PermGen 問題

如果你已經開發Java Web應用程序一段時間,那么對于 JVM 的 PermGen 問題可能并不陌生。由于 FreeMarker 模板不編譯成類,它們不占用 PermGen 空間,并不需要一個新的類加載器加載。

2、模板加載器

直接從數據源加載頁面和模板豈不是很好?也許從 CMS 或數據庫。也許你只想把它們放在一個地方,可以不重新部署整個應用程序就能更新它們。那么在 JSP 中你是很難做到這一點的,但 FreeMarker 提供的模板加載器就是為了 這個目的。你可以使用內建類或者創建你自己的實現。

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 開發的樂趣給找回來。

責任編輯:王雪燕 來源: ImportNew
相關推薦

2015-10-28 10:04:29

FreeMarkerJSP

2024-06-24 08:00:00

網絡安全WAFWeb應用程序防火墻

2020-10-24 08:00:56

前端開發Web

2023-08-02 18:44:47

JavaScript命名web

2019-11-12 16:44:50

Go語言泛函編程設計

2009-03-11 17:52:36

LinuxGnomeKDE

2020-06-04 08:15:53

Kubernetes容器PaaS

2011-03-02 09:34:58

AppFuse

2012-07-13 17:48:34

大數據Hadoop

2012-07-18 09:21:22

iPhone 5

2018-05-16 07:48:55

2012-05-30 09:23:57

蒂姆 庫克

2019-07-12 13:59:21

Docker軟件技術

2012-03-08 09:17:14

程序員

2012-06-21 15:59:21

2011-05-19 13:13:43

2016-11-09 15:11:17

安全云存儲云服務

2012-11-21 10:01:35

RubyWeb

2021-02-05 17:47:53

GraphQLAPI開發

2013-08-21 09:50:19

Windows 8
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久精品99 | 无吗视频 | 日日日视频 | xx性欧美肥妇精品久久久久久 | 伊人一区| 亚洲乱码一区二区三区在线观看 | av中文网 | 一区二区三区亚洲 | 欧美无乱码久久久免费午夜一区 | 日韩av免费在线观看 | av高清 | 中文字幕av亚洲精品一部二部 | 午夜一级黄色片 | 国产一级视频免费播放 | 国产网站在线免费观看 | 81精品国产乱码久久久久久 | 国产视频久久 | 在线观看视频你懂得 | 亚洲国产成人精品久久久国产成人一区 | 中文在线视频观看 | 欧美中文视频 | 精品一区二区不卡 | 色频| a在线视频| 毛片在线免费 | 一区二区三区欧美 | 国产视频黄色 | 综合久久久 | 91久久国产综合久久 | 日韩成人在线电影 | 久久精品青青大伊人av | 欧洲色 | 免费国产视频 | 欧美成年人 | 综合久久综合久久 | 国产激情一区二区三区 | 精品1区2区3区4区 | 久久久免费在线观看 | 亚洲国产二区 | 久久性色| 美女黄视频网站 |