Java Home

          Java技術(shù)修煉中...
          posts - 20, comments - 22, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          2007年6月6日

          FreeMarker是一個(gè)模板引擎,一個(gè)基于模板生成文本輸出的通用工具,使用純Java編寫

          FreeMarker被設(shè)計(jì)用來生成HTML Web頁面,特別是基于MVC模式的應(yīng)用程序

          雖然FreeMarker具有一些編程的能力,但通常由Java程序準(zhǔn)備要顯示的數(shù)據(jù),由FreeMarker生成頁面,通過模板顯示準(zhǔn)備的數(shù)據(jù)

          FreeMarker不是一個(gè)Web應(yīng)用框架,而適合作為Web應(yīng)用框架一個(gè)組件

          FreeMarker與容器無關(guān),因?yàn)樗⒉恢繦TTP或Servlet;FreeMarker同樣可以應(yīng)用于非Web應(yīng)用程序環(huán)境

          FreeMarker更適合作為Model2框架(如Struts)的視圖組件,你也可以在模板中使用JSP標(biāo)記庫

          FreeMarker是免費(fèi)的

          1、通用目標(biāo)

          能夠生成各種文本:HTML、XML、RTF、Java源代碼等等

          易于嵌入到你的產(chǎn)品中:輕量級(jí);不需要Servlet環(huán)境

          插件式模板載入器:可以從任何源載入模板,如本地文件、數(shù)據(jù)庫等等

          你可以按你所需生成文本:保存到本地文件;作為Email發(fā)送;從Web應(yīng)用程序發(fā)送它返回給Web瀏覽器

          2、強(qiáng)大的模板語言

          所有常用的指令:include、if/elseif/else、循環(huán)結(jié)構(gòu)

          在模板中創(chuàng)建和改變變量

          幾乎在任何地方都可以使用復(fù)雜表達(dá)式來指定值

          命名的宏,可以具有位置參數(shù)和嵌套內(nèi)容

          名字空間有助于建立和維護(hù)可重用的宏庫,或者將一個(gè)大工程分成模塊,而不必?fù)?dān)心名字沖突

          輸出轉(zhuǎn)換塊:在嵌套模板片段生成輸出時(shí),轉(zhuǎn)換HTML轉(zhuǎn)義、壓縮、語法高亮等等;你可以定義自己的轉(zhuǎn)換

          3、通用數(shù)據(jù)模型

          FreeMarker不是直接反射到Java對(duì)象,Java對(duì)象通過插件式對(duì)象封裝,以變量方式在模板中顯示

          你可以使用抽象(接口)方式表示對(duì)象(JavaBean、XML文檔、SQL查詢結(jié)果集等等),告訴模板開發(fā)者使用方法,使其不受技術(shù)細(xì)節(jié)的打擾

          4、為Web準(zhǔn)備

          在模板語言中內(nèi)建處理典型Web相關(guān)任務(wù)(如HTML轉(zhuǎn)義)的結(jié)構(gòu)

          能夠集成到Model2 Web應(yīng)用框架中作為JSP的替代

          支持JSP標(biāo)記庫

          為MVC模式設(shè)計(jì):分離可視化設(shè)計(jì)和應(yīng)用程序邏輯;分離頁面設(shè)計(jì)員和程序員

          5、智能的國(guó)際化和本地化

          字符集智能化(內(nèi)部使用UNICODE)

          數(shù)字格式本地化敏感

          日期和時(shí)間格式本地化敏感

          非US字符集可以用作標(biāo)識(shí)(如變量名)

          多種不同語言的相同模板

          6、強(qiáng)大的XML處理能力

          <#recurse> 和<#visit>指令(2.3版本)用于遞歸遍歷XML樹

          在模板中清楚和直覺的訪問XML對(duì)象模型

          posted @ 2007-06-19 08:26 Yemoo'S Java Blog 閱讀(499) | 評(píng)論 (0)編輯 收藏

          當(dāng)jsp程序出現(xiàn)異常時(shí),往往是直接輸出到瀏覽器頁面上的,這樣以來,可能使最終用戶感到不知所措,也可能因?yàn)楸┞斗?wù)器某些信息而導(dǎo)致服務(wù)器的安全性問題。在jsp里我們可以通過制定errorPage="xxx"以使當(dāng)程序出現(xiàn)錯(cuò)誤時(shí)轉(zhuǎn)向指定的錯(cuò)誤頁面,但如果前期沒有考慮到這個(gè)辦法而在系統(tǒng)完成后再去這些工作則工作量可能會(huì)很大,好在jsp規(guī)范提供了一種簡(jiǎn)單的解決辦法,通過在web.xml中設(shè)定全局錯(cuò)誤處理頁面來對(duì)整個(gè)項(xiàng)目有效,web.xml中對(duì)于不同的http返回結(jié)果或異常類型可以有不同的處理方式。
          在xml中配置如下:
          <error-page>
          ???<error-code>500</error-code>
          ???<location>error.jsp</location>
          </error-page>
          <error-page>
          ???<error-code>404</error-code>
          ???<location>notfound.jsp</location>
          </error-page>

          通過以上配置,程序會(huì)自動(dòng)根據(jù)錯(cuò)誤類型轉(zhuǎn)向不同的錯(cuò)誤頁面。

          posted @ 2007-06-06 15:59 Yemoo'S Java Blog 閱讀(1759) | 評(píng)論 (0)編輯 收藏

          前段時(shí)間作了一個(gè)簡(jiǎn)單的系統(tǒng),其中涉及到后臺(tái)管理,當(dāng)然也就遇到了權(quán)限驗(yàn)證的問題,由于初次做J2EE項(xiàng)目,所有這些東西懂我來說都是個(gè)開始。
          對(duì)于權(quán)限驗(yàn)證,如果程序由目錄劃分,如管理員訪問的頁面都放在admin下,這樣我們可以寫一個(gè)權(quán)限驗(yàn)證的過濾器,然后配置admin目錄都要經(jīng)過這個(gè)過濾器即可。這樣對(duì)于jsp頁面的權(quán)限驗(yàn)證比較容易。但對(duì)于action(控制器類)就不好控制了,因?yàn)閍ction是沒有目錄概念的,如我們?cè)L問action的地址為:http://xxx/sample/ac1.action,同時(shí)如果使用http://xxx/sample/xx/xx/ac1.action同樣可以訪問,這是因?yàn)橹灰谶@個(gè)項(xiàng)目目錄下,訪問的頁面如果為action則struts就會(huì)去查詢這個(gè)action名字對(duì)應(yīng)的類,而不管前面的目錄結(jié)構(gòu)。因此我們不能再用過濾器對(duì)管理員部分的action進(jìn)行驗(yàn)證。經(jīng)過查看struts2的相關(guān)資料發(fā)現(xiàn)了攔截器這個(gè)有用的東西。通過struts2的配置文件的包管理功能和攔截器可以輕松的對(duì)指定的action做管理(攔截),如
          ===================================================
          <package name="user" extends="struts-default">
          ??<!-- 前臺(tái)用戶操作部分 -->
          ??<!-- 框架頁,顯示分類 -->
          ??<action name="queryCateForwardUI"
          ???class="com.topsoft.bookmanage.web.action.QueryCateForwardActionUI">
          ???<result>/mainPage.jsp</result>
          ??</action>
          ??? 。。。。。
          </package>
          <!-- 管理員操作部分 -->
          ?<package name="manager" extends="struts-default">
          ??<!-- 攔截器 -->
          ??<interceptors>
          ???<interceptor name="auth" class="com.topsoft.common.LogonInterceptor" />
          ???<interceptor-stack name="authStack">?
          ??????????????? <interceptor-ref name="auth"/>?
          ??????????????? <interceptor-ref name="paramsPrepareParamsStack"/>?
          ??????????? </interceptor-stack>?
          ??</interceptors>
          ??<!-- 默認(rèn)執(zhí)行的攔截器 -->
          ??<default-interceptor-ref name="authStack"/>
          ??<!-- 全局Action映射 -->
          ??<global-results>
          ???<result name="login" type="redirect">/managerLoginUI.action</result>
          ??</global-results>
          ??
          ??<!-- 后臺(tái)管理首頁面UI -->
          ??<action name="managerIndexUI"
          ???class="com.topsoft.bookmanage.web.action.ManagerIndexActionUI">
          ???<result>/admin/index.jsp</result>
          ??</action>
          ?。。。。。。
          </package>
          =================================================

          通過使用攔截器+過濾器可以完美解決權(quán)限驗(yàn)證的問題。

          posted @ 2007-06-06 15:17 Yemoo'S Java Blog 閱讀(4979) | 評(píng)論 (6)編輯 收藏

          主站蜘蛛池模板: 南雄市| 吉林省| 色达县| 广州市| 无为县| 汉川市| 青海省| 林甸县| 进贤县| 扶沟县| 清水县| 银川市| 麻江县| 南岸区| 丰县| 鹰潭市| 巴林左旗| 景谷| 都匀市| 洞口县| 大厂| 灵宝市| 成安县| 尤溪县| 凤城市| 潮州市| 碌曲县| 铁岭县| 安阳市| 百色市| 阿克陶县| 弋阳县| 新竹市| 章丘市| 微山县| 梓潼县| 武陟县| 将乐县| 土默特左旗| 明水县| 呼和浩特市|