欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
使用FreeMarker替換JSP的10個(gè)理由

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



1、類(lèi)加載沒(méi)有 PermGen 問(wèn)題


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


2、模板加載器


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


  • ClassTemplateLoader:從classpath中加載模板。

  • FileTemplateLoader:在文件系統中從指定文件夾加載模板。

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

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

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


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


Configuration configuration = new Configuration();

configuration.setTemplateLoader(

new WebappTemplateLoader(servletContext, "WEB-INF/content"));


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


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


<head>

<title>${title}</title>

</head>


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


<html>

${body}

</html>


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


4、沒(méi)有導入


JSP 要求你導入每個(gè)你需要使用的類(lèi),就像一個(gè)常規的 Java 類(lèi)一樣。FreeMarker 模板,嗯,僅僅是模板??梢员话ㄔ诹硪粋€(gè)模板中,但目前還不需要導入類(lèi)。


5、支持 JSP 標簽


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


6、表達式語(yǔ)言中的方法調用


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


${customer.address.country}

${customer.getAddress().country}


7. 內置空字符串處理


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


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


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


Invoice Date:


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


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


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


Invoice Date: No Invoice Available


請參見(jiàn)處理缺少的值了解更多細節。


8、共享變量


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


Configuration configuration = new Configuration();

configuration.setSharedVariable("app", "StackHunter");


然后像任何其他變量一樣訪(fǎng)問(wèn)它。


App: ${app}


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


${i18n.countries.CA}

${i18n.countries['CA']}

${i18n.countries[countryCode]}


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


9、支持 JSON


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


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


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


<#assign user = user?eval>

User: ${user.firstName}, ${user.address.city}


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


最后,與 JSP 不同的是FreeMarker 模板可以在 servlet 容器之外使用??梢允褂盟鼈儊?lái)生成電子郵件、 配置文件、 XML 映射等。你甚至可以使用它們來(lái)生成 web 頁(yè) 并將它們保存在服務(wù)器端的緩存中。 請在下一個(gè) web 項目嘗試使用 FreeMarker把 web 開(kāi)發(fā)的樂(lè )趣給找回來(lái)。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
FreeMarker標簽與使用
FreeMarker設計指南(完整整理)_狼的原野
freemarker 語(yǔ)法 | 封建王朝
Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實(shí)例詳解(五)
五、案例
Freemarker 使用
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久