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

使用FreeMarker替換JSP的10個理由

開發 開發工具
與 JSP 不同的是FreeMarker 模板可以在 servlet 容器之外使用。可以使用它們來生成電子郵件、 配置文件、 XML 映射等。你甚至可以使用它們來生成 web 頁 并將它們保存在服務器端的緩存中。 請在下一個 web 項目嘗試使用 FreeMarker把 web 開發的樂趣給找回來。

[[153793]]

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

1、類加載沒有 PermGen 問題

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

2、模板加載器

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

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

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

3、可以在運行時嵌入模板

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

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

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

  1. <html> 
  2. ${body} 
  3. </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 同等對待其中每個引用。

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

7. 內置空字符串處理

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

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

感嘆號告訴 FreeMarker 對表達式自動檢查 null 值和空字符串。如果 customer、invoice 或者 date 中有一個為空值或空字符串,你只會得到標簽:

  1. Invoice Date: 

另一個選擇是感嘆號后包括你的默認值。

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

如果所有值丟失,你會得到:

  1. Invoice Date: No Invoice Available 

請參見處理缺少的值了解更多細節。

8、共享變量

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

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

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

  1. App: ${app} 

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

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

上面這些行都引用 countries_en.properties 資源包內的 key “CA”對應的值。你需要執行自己的 TemplateHashModel,然后將其添加為一個共享變量來實現這一目標。

9、支持 JSON

FreeMarker 內置 JSON 支持。 比方說你有以下的 JSON 存儲到變量命名 user 的字符串中。

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

使用 ?eval 將從字符串轉換為一個 JSON 對象,然后像其他數據一樣在表達式中使用。

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

10、不只是為了 Web 開發

***與 JSP 不同的是FreeMarker 模板可以在 servlet 容器之外使用。可以使用它們來生成電子郵件、 配置文件、 XML 映射等。你甚至可以使用它們來生成 web 頁 并將它們保存在服務器端的緩存中。 請在下一個 web 項目嘗試使用 FreeMarker把 web 開發的樂趣給找回來。

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

 

 

 

責任編輯:王雪燕 來源: ImportNew - 光光頭去打醬油
相關推薦

2015-10-26 13:16:11

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

2012-07-13 17:48:34

大數據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軟件技術

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技術棧公眾號

主站蜘蛛池模板: 精品免费 | 久久一区二区三区电影 | 岛国av一区二区三区 | 精品中文字幕在线观看 | 久久久久久久久国产成人免费 | 老子午夜影院 | 国内久久 | 欧美国产日韩在线观看 | 日韩欧美精品 | 国产区精品视频 | 超碰天天 | 午夜亚洲 | 国产9999精品| 亚洲国产午夜 | 超碰97免费在线 | 91精品国产91 | 日皮视频免费 | 亚洲欧美中文日韩在线v日本 | 91精品一区二区三区久久久久 | 国产亚洲人成a在线v网站 | 亚洲一区二区三区视频免费观看 | 天天射视频 | 一区网站| 亚洲国产一区二区三区 | 亚洲一级在线 | 综合二区 | 亚洲国产成人久久综合一区,久久久国产99 | 成年人在线视频 | 午夜精品久久久久久久星辰影院 | 成人久久18免费 | 久久久国产一区二区三区 | 日韩无| av中文在线| 欧美日韩在线一区二区 | 久久精品国产亚洲 | av黄色在线| 亚洲人成人一区二区在线观看 | 亚洲国产精品一区 | 久久成人免费视频 | 欧美一区二区三区在线看 | 国产婷婷精品 |