關于freemark FreeMarker是Quake Wang推薦我使用的。剛學FreeMarker的時候,發(fā)現(xiàn)freemarker真的很棒!簡單易用,功能強大。但是用它做了幾個項目以后開始不爽了。
一宗罪:freemarker的變量必須有值,沒有被賦值的變量就會拋出異常,那個黃黃的freemarker出錯頁面,真是讓人看了太難過了。
freemarker的
FAQ上面冠冕堂皇的說,未賦值的變量強制拋錯可以杜絕很多潛在的錯誤,如缺失潛在的變量命名,或者其他變量錯誤。但是實際的效果是:帶來的是非常大的編
程麻煩,程序里面幾乎所有可能出現(xiàn)空值的變量統(tǒng)統(tǒng)需要加上${xxx?if_exists},有些循環(huán)條件還需要寫if判斷,這樣不但沒有杜絕應該杜絕的
錯誤,反而極大增加了編程的麻煩。
二宗罪:freemarker的map限定key必須是string,其他數(shù)據(jù)類型竟然無法操作!這一點就不講了,JavaEye上面已經(jīng)有人抱怨過了。連Webwork的開發(fā)人員Pat Lightboy都在抱怨這一點。
三宗罪:freemarker為了編程方便把不可序列化的東西往session里面放!
freemarker支持在頁面里面直接操作Session,request等,例如${Session[...]},方便確實很方便,但是一旦需要做群集,就會報錯。
今天是b051問起我這個問題,他在做Tomcat群集的時候發(fā)現(xiàn)freemarker報錯,HttpSessionHashModel不可序列化。他修改該類源代碼,讓他實現(xiàn)序列化接口,仍然報錯。我一看,HttpSessionHashModel包含的屬性:
- private HttpSession session;
- private final ObjectWrapper wrapper;
-
-
- private final FreemarkerServlet servlet;
- private final HttpServletRequest request;
- private final HttpServletResponse response;
登時暈倒,這樣的東西還往Session里面放?bad smell!
嚴重警告應用需要往群集上面發(fā)布應用的同學們,千萬別用freemarker!
不過瑕不掩瑜,freemarker也是有優(yōu)點的:
1、易學易用
我是看了一天文檔就用得挺熟練了,freemarker文檔寫得太好了,例子豐富,照做一遍全都會了。
2、功能強大
比Velocity強大多了,還支持JSP Tag。不過最有意義的是macro功能,可以自定義常用的macro,實現(xiàn)頁面常規(guī)操作的可復用性。
3、報錯信息友好
很多應用服務器的JSP報錯信息是無法定位到源代碼行的。不過freemarker報錯定位很準確,絲毫不差,而且信息豐富,一看就知道怎么回事(雖然那個黃黃的頁面看起來讓人難受) ExtJS教程- Hibernate教程- Struts2 教程- Lucene教程
|
|
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
---|
22 | 23 | 24 | 25 | 26 | 27 | 28 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 1 | 2 | 3 | 4 |
|
公告
要冒一險!整個生命就是一場冒險,走得最遠的人常是愿意去做、愿意去冒險的人。
隨筆分類(153)
實用連接
積分與排名
最新評論

|
|