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

使用FreeMarker替換JSP的10個(gè)理由

開發(fā) 開發(fā)工具
與 JSP 不同的是FreeMarker 模板可以在 servlet 容器之外使用。可以使用它們來生成電子郵件、 配置文件、 XML 映射等。你甚至可以使用它們來生成 web 頁 并將它們保存在服務(wù)器端的緩存中。 請(qǐng)?jiān)谙乱粋€(gè) web 項(xiàng)目嘗試使用 FreeMarker把 web 開發(fā)的樂趣給找回來。

[[153793]]

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

1、類加載沒有 PermGen 問題

如果你已經(jīng)開發(fā)Java Web應(yīng)用程序一段時(shí)間,那么對(duì)于 JVM 的 PermGen 問題可能并不陌生。由于 FreeMarker 模板不編譯成類,它們不占用 PermGen 空間,并不需要一個(gè)新的類加載器加載。

2、模板加載器

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

FreeMarker 也可以將多個(gè)加載器鏈在一起形成一個(gè)系列模板裝載器。我通常使用 WebappTemplateLoader 指向 WEB—INF 下一個(gè)內(nèi)容文件夾。

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

3、可以在運(yùn)行時(shí)嵌入模板

FreeMarker 能讓你創(chuàng)建真正的模板,而不只是片段 ,還記得 JSP 中的 header 和 footer 嗎?FreeMarker 允許你使用一個(gè)模板(在本例中為 head.ftl)

  1. <head> 
  2. <title>${title}</title> 
  3. </head> 

并將其添加到另一個(gè)模板(site.ftl body區(qū)域)。

  1. <html> 
  2. ${body} 
  3. </html> 

可以以編程的方式選擇哪個(gè)模板進(jìn)入 body 區(qū)。還可以添加多個(gè)模板一起放入同一區(qū)域。甚至可以將字符串值或計(jì)算的值放入 body 區(qū)域。在 JSP 中試試做到這些。

4、沒有導(dǎo)入

JSP 要求你導(dǎo)入每個(gè)你需要使用的類,就像一個(gè)常規(guī)的 Java 類一樣。FreeMarker 模板,嗯,僅僅是模板。可以被包括在另一個(gè)模板中,但目前還不需要導(dǎo)入類。

5、支持 JSP 標(biāo)簽

使用 Jsp 的一個(gè)理由是有可用性很好的標(biāo)簽庫。好消息是 FreeMarker 支持 JSP 標(biāo)簽。壞消息是它們使用 FreeMarker 的語法,不是 JSP 語法。

6、表達(dá)式語言中的方法調(diào)用

除非你的目標(biāo)是 Servlet 3.0/El 2.2 標(biāo)準(zhǔn)的容器,那么表達(dá)式語言中方法調(diào)用是不可用的。不是所有人都同意 EL 表達(dá)式中方法調(diào)用是一件好事,但是當(dāng)你需要它們的時(shí)候,使用 JSP 真的太痛苦了。 但是 FreeMarker 同等對(duì)待其中每個(gè)引用。

  1. ${customer.address.country}
  1. ${customer.getAddress().country} 

7. 內(nèi)置空字符串處理

FreeMarker 和 Jsp 都可以在表達(dá)式語言中處理空值,但 FreeMarker 在可用性上更先進(jìn)一些。

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

感嘆號(hào)告訴 FreeMarker 對(duì)表達(dá)式自動(dòng)檢查 null 值和空字符串。如果 customer、invoice 或者 date 中有一個(gè)為空值或空字符串,你只會(huì)得到標(biāo)簽:

  1. Invoice Date: 

另一個(gè)選擇是感嘆號(hào)后包括你的默認(rèn)值。

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

如果所有值丟失,你會(huì)得到:

  1. Invoice Date: No Invoice Available 

請(qǐng)參見處理缺少的值了解更多細(xì)節(jié)。

8、共享變量

FreeMarker 的共享變量是我最喜歡的“隱藏”功能之一。此功能可以讓你設(shè)置自動(dòng)添加到所有模板的值。 例如,可以設(shè)置應(yīng)用程序的名稱作為共享變量。

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

然后像任何其他變量一樣訪問它。

  1. App: ${app} 

在過去使用共享變量一般引用資源包 然后使用像 ${i18n.resourceBundle.key} 這樣的表達(dá)式來獲取值。

  1. ${i18n.countries.CA} 
  2. ${i18n.countries['CA']} 
  3. ${i18n.countries[countryCode]} 

上面這些行都引用 countries_en.properties 資源包內(nèi)的 key “CA”對(duì)應(yīng)的值。你需要執(zhí)行自己的 TemplateHashModel,然后將其添加為一個(gè)共享變量來實(shí)現(xiàn)這一目標(biāo)。

9、支持 JSON

FreeMarker 內(nèi)置 JSON 支持。 比方說你有以下的 JSON 存儲(chǔ)到變量命名 user 的字符串中。

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

使用 ?eval 將從字符串轉(zhuǎn)換為一個(gè) JSON 對(duì)象,然后像其他數(shù)據(jù)一樣在表達(dá)式中使用。

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

10、不只是為了 Web 開發(fā)

***與 JSP 不同的是FreeMarker 模板可以在 servlet 容器之外使用。可以使用它們來生成電子郵件、 配置文件、 XML 映射等。你甚至可以使用它們來生成 web 頁 并將它們保存在服務(wù)器端的緩存中。 請(qǐng)?jiān)谙乱粋€(gè) web 項(xiàng)目嘗試使用 FreeMarker把 web 開發(fā)的樂趣給找回來。

原文鏈接: stackhunter 翻譯: ImportNew.com - 光光頭去打醬油
譯文鏈接: http://www.importnew.com/16944.html

 

 

 

責(zé)任編輯:王雪燕 來源: ImportNew - 光光頭去打醬油
相關(guān)推薦

2015-10-26 13:16:11

FreeMarkerJSP

2024-06-24 08:00:00

網(wǎng)絡(luò)安全WAFWeb應(yīng)用程序防火墻

2020-10-24 08:00:56

前端開發(fā)Web

2023-08-02 18:44:47

JavaScript命名web

2019-11-12 16:44:50

Go語言泛函編程設(shè)計(jì)

2009-03-11 17:52:36

LinuxGnomeKDE

2012-07-13 17:48:34

大數(shù)據(jù)Hadoop

2012-07-18 09:21:22

iPhone 5

2018-05-16 07:48:55

2020-06-04 08:15:53

Kubernetes容器PaaS

2011-03-02 09:34:58

AppFuse

2012-05-30 09:23:57

蒂姆 庫克

2019-07-12 13:59:21

Docker軟件技術(shù)

2012-03-08 09:17:14

程序員

2012-06-21 15:59:21

2011-05-19 13:13:43

2016-11-09 15:11:17

安全云存儲(chǔ)云服務(wù)

2012-11-21 10:01:35

RubyWeb

2021-02-05 17:47:53

GraphQLAPI開發(fā)

2024-07-26 08:59:33

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 一级欧美 | 欧美一区二区在线 | 不卡一区 | 一级在线观看 | 草久久免费视频 | 男女污网站| 一区在线播放 | 日日日日日日bbbbb视频 | 成人妇女免费播放久久久 | 久久国产成人午夜av影院武则天 | 久久久久亚洲 | 精品国产一级 | 国产欧美一区二区三区日本久久久 | 精品一区二区三区免费视频 | 欧美美女爱爱视频 | 羞羞涩涩在线观看 | 成人在线视| 午夜免费在线 | 国产一级片免费看 | 精品在线99 | 涩涩鲁亚洲精品一区二区 | 久草福利 | 日本在线综合 | 国产精品久久久久久亚洲调教 | 免费观看一级毛片视频 | av日韩在线播放 | 美女一区二区在线观看 | 高清国产一区二区 | 欧美福利三区 | 欧美激情一区二区三区 | 免费看国产一级特黄aaaa大片 | 精品免费国产一区二区三区四区 | 欧美一级久久久猛烈a大片 日韩av免费在线观看 | 国产97碰免费视频 | 亚洲国产成人精品久久久国产成人一区 | 成人免费xxxxx在线视频 | 欧美一区二区三区在线观看 | 国产精品久久久久久久久免费桃花 | 给我免费的视频在线观看 | 国产视频一区二区 | 欧美一区二区三区大片 |