為什么要用FreeMarker替換JSP

這篇文章主要講解了“為什么要用FreeMarker替換JSP”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“為什么要用FreeMarker替換JSP”吧!

創(chuàng)新互聯(lián)于2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站建設(shè)、網(wǎng)站制作網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢想脫穎而出為使命,1280元海淀做網(wǎng)站,已為上家服務(wù),為海淀各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792

1、類加載沒有 PermGen 問題

如果你已經(jīng)開發(fā)Java Web應(yīng)用程序一段時(shí)間,那么對于 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)。

  • ClassTemplateLoader:從classpath中加載模板。

  • FileTemplateLoader:在文件系統(tǒng)中從指定文件夾加載模板。

  • StringTemplateLoader:從一個(gè)字符串 Map 中加載模板。

  • URLTemplateLoader:從 URL 中加載模板。 你必須要實(shí)現(xiàn) getURL 方法,但應(yīng)該很容易做到。

  • WebappTemplateLoader:從 servlet 上下文中加載模板。

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

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

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

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

<head>
<title>${title}</title>
</head>

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

<html>
${body}
</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 同等對待其中每個(gè)引用。

${customer.address.country}

${customer.getAddress().country}

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

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

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

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

Invoice Date:

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

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

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

Invoice Date: No Invoice Available

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

8、共享變量

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

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

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

App: ${app}

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

${i18n.countries.CA}
${i18n.countries['CA']}
${i18n.countries[countryCode]}

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

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)換為一個(gè) JSON 對象,然后像其他數(shù)據(jù)一樣在表達(dá)式中使用。

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

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

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

感謝各位的閱讀,以上就是“為什么要用FreeMarker替換JSP”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對為什么要用FreeMarker替換JSP這一問題有了更深刻的體會,具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!

分享題目:為什么要用FreeMarker替換JSP
標(biāo)題路徑:http://bm7419.com/article24/ijpece.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、商城網(wǎng)站、網(wǎng)站導(dǎo)航、Google品牌網(wǎng)站設(shè)計(jì)、外貿(mào)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站