這篇文章主要講解了“為什么要用FreeMarker替換JSP”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“為什么要用FreeMarker替換JSP”吧!
創(chuàng)新互聯(lián)于2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目網(wǎng)站建設(shè)、網(wǎng)站制作網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元海淀做網(wǎng)站,已為上家服務(wù),為海淀各地企業(yè)和個人服務(wù),聯(lián)系電話:13518219792
1、類加載沒有 PermGen 問題
如果你已經(jīng)開發(fā)Java Web應(yīng)用程序一段時間,那么對于 JVM 的 PermGen 問題可能并不陌生。由于 FreeMarker 模板不編譯成類,它們不占用 PermGen 空間,并不需要一個新的類加載器加載。
2、模板加載器
直接從數(shù)據(jù)源加載頁面和模板豈不是很好?也許從 CMS 或數(shù)據(jù)庫。也許你只想把它們放在一個地方,可以不重新部署整個應(yīng)用程序就能更新它們。那么在 JSP 中你是很難做到這一點的,但 FreeMarker 提供的模板加載器就是為了 這個目的。你可以使用內(nèi)建類或者創(chuàng)建你自己的實現(xiàn)。
ClassTemplateLoader:從classpath中加載模板。
FileTemplateLoader:在文件系統(tǒng)中從指定文件夾加載模板。
StringTemplateLoader:從一個字符串 Map 中加載模板。
URLTemplateLoader:從 URL 中加載模板。 你必須要實現(xiàn) getURL 方法,但應(yīng)該很容易做到。
WebappTemplateLoader:從 servlet 上下文中加載模板。
FreeMarker 也可以將多個加載器鏈在一起形成一個系列模板裝載器。我通常使用 WebappTemplateLoader 指向 WEB—INF 下一個內(nèi)容文件夾。
Configuration configuration = new Configuration();
configuration.setTemplateLoader(
new WebappTemplateLoader(servletContext, "WEB-INF/content"));
3、可以在運行時嵌入模板
FreeMarker 能讓你創(chuàng)建真正的模板,而不只是片段 ,還記得 JSP 中的 header 和 footer 嗎?FreeMarker 允許你使用一個模板(在本例中為 head.ftl)
<head>
<title>${title}</title>
</head>
并將其添加到另一個模板(site.ftl body區(qū)域)。
<html>
${body}
</html>
可以以編程的方式選擇哪個模板進入 body 區(qū)。還可以添加多個模板一起放入同一區(qū)域。甚至可以將字符串值或計算的值放入 body 區(qū)域。在 JSP 中試試做到這些。
4、沒有導(dǎo)入
JSP 要求你導(dǎo)入每個你需要使用的類,就像一個常規(guī)的 Java 類一樣。FreeMarker 模板,嗯,僅僅是模板。可以被包括在另一個模板中,但目前還不需要導(dǎo)入類。
5、支持 JSP 標簽
使用 Jsp 的一個理由是有可用性很好的標簽庫。好消息是 FreeMarker 支持 JSP 標簽。壞消息是它們使用 FreeMarker 的語法,不是 JSP 語法。
6、表達式語言中的方法調(diào)用
除非你的目標是 Servlet 3.0/El 2.2 標準的容器,那么表達式語言中方法調(diào)用是不可用的。不是所有人都同意 EL 表達式中方法調(diào)用是一件好事,但是當(dāng)你需要它們的時候,使用 JSP 真的太痛苦了。 但是 FreeMarker 同等對待其中每個引用。
${customer.address.country}
${customer.getAddress().country}
7. 內(nèi)置空字符串處理
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
請參見處理缺少的值了解更多細節(jié)。
8、共享變量
FreeMarker 的共享變量是我最喜歡的“隱藏”功能之一。此功能可以讓你設(shè)置自動添加到所有模板的值。 例如,可以設(shè)置應(yīng)用程序的名稱作為共享變量。
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 資源包內(nèi)的 key “CA”對應(yīng)的值。你需要執(zhí)行自己的 TemplateHashModel,然后將其添加為一個共享變量來實現(xiàn)這一目標。
9、支持 JSON
FreeMarker 內(nèi)置 JSON 支持。 比方說你有以下的 JSON 存儲到變量命名 user 的字符串中。
{ 'firstName': 'John', 'lastName': 'Smith', 'age': 25, 'address': { 'streetAddress': '21 2nd Street', 'city': 'New York', 'state': 'NY', 'postalCode': 10021 }}
使用 ?eval 將從字符串轉(zhuǎn)換為一個 JSON 對象,然后像其他數(shù)據(jù)一樣在表達式中使用。
<#assign user = user?eval>
User: ${user.firstName}, ${user.address.city}
10、不只是為了 Web 開發(fā)
***,與 JSP 不同的是FreeMarker 模板可以在 servlet 容器之外使用??梢允褂盟鼈儊砩呻娮余]件、 配置文件、 XML 映射等。你甚至可以使用它們來生成 web 頁 并將它們保存在服務(wù)器端的緩存中。 請在下一個 web 項目嘗試使用 FreeMarker把 web 開發(fā)的樂趣給找回來。
感謝各位的閱讀,以上就是“為什么要用FreeMarker替換JSP”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對為什么要用FreeMarker替換JSP這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
分享題目:為什么要用FreeMarker替換JSP
標題路徑:http://aaarwkj.com/article24/ijpece.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、商城網(wǎng)站、網(wǎng)站導(dǎo)航、Google、品牌網(wǎng)站設(shè)計、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)