十六苍狰、FreeMarker描述
FreeMarker是一個(gè)用Java語言編寫的模板引擎,它是基于模板來生成文本輸出的通用工具烘绽。Freemarker可以生成HTML淋昭, XML,JSP或Java等多種文本輸出诀姚。
工作原理:定義模板文件响牛,嵌入數(shù)據(jù)源,通過模板顯示準(zhǔn)備的數(shù)據(jù)
(數(shù)據(jù) + 模板 = 輸出)
我們?cè)谑褂媚0逯邪l(fā)現(xiàn)freemarker具有許多優(yōu)點(diǎn)赫段,它徹底的分離表現(xiàn)層和業(yè)務(wù)邏輯呀打,模板只負(fù)責(zé)數(shù)據(jù)在頁面中的表現(xiàn),不涉及任何的邏輯代碼糯笙,所以使得開發(fā)過程中的人員分工更加明確贬丛,作為界面開發(fā)人員,只需專心創(chuàng)建HTML文件给涕、圖像以及Web頁面的其他可視化方面豺憔,不用理會(huì)數(shù)據(jù)额获;而程序開發(fā)人員則專注于系統(tǒng)實(shí)現(xiàn),負(fù)責(zé)為頁面準(zhǔn)備要顯示的數(shù)據(jù)恭应。
如果使用jsp來展示抄邀,開發(fā)階段進(jìn)行功能調(diào)適時(shí),需要頻繁的修改JSP昼榛,每次修改都要編譯和轉(zhuǎn)換境肾,浪費(fèi)了大量時(shí)間,F(xiàn)reeMarker模板技術(shù)不存在編譯和轉(zhuǎn)換的問題胆屿,在開發(fā)過程中奥喻,我們?cè)诓槐卦诘却缑嬖O(shè)計(jì)開發(fā)人員完成頁面原型后再來開發(fā)程序。由此使用freemarker還可以大大提高開發(fā)效率非迹。
十七环鲤、webService描述
(主動(dòng)說)
webservice是SOA(面向服務(wù)編程)的一種實(shí)現(xiàn),
主要是用來實(shí)現(xiàn)異構(gòu)平臺(tái)通信也就
是不同平臺(tái)不同項(xiàng)目之間的數(shù)據(jù)傳輸憎兽,從而避免了信息孤島的問題冷离,
它之所以能夠
進(jìn)行異構(gòu)平臺(tái)通信是因?yàn)樗峭耆趚ml的,
所以說唇兑,webService是跨平臺(tái)酒朵,
跨語言,跨框架的扎附,在java中通常有三種技術(shù)框架分別是xfire,cxf,axis2蔫耽。
我們?yōu)榱吮WC
webservice的安全性,采用了基于
WS-Security標(biāo)準(zhǔn)的安全驗(yàn)證(使用回調(diào)函數(shù))留夜。
(沒必要主動(dòng)說)
webservice的三要素分別是:
wsdl(webservice description language)
用來描述發(fā)布的接口(服務(wù))
soap(simple object access protocol)
是xml和http的結(jié)合匙铡,是webservice數(shù)據(jù)通信的協(xié)議
uddi 用來管理,查詢webService的服務(wù)
(沒必要主動(dòng)說)
webservice的具體三種實(shí)現(xiàn)方式(框架)或者三種實(shí)現(xiàn)框架的區(qū)別
1. Axis2:可以用多種語言開發(fā)碍粥,
是一個(gè)重量級(jí)框架鳖眼,功能非常強(qiáng)大,
但是它的性能比較低嚼摩。
2. Xfire:它相比Axis2來說是一個(gè)輕量級(jí)框架钦讳,
它的性能要比Axis2高。
3. cxf:是Xfire的升級(jí)版枕面,就好比是愿卒,
struts2是webwork的升級(jí),
然后cxf和spring集成起來非常方便潮秘,簡易琼开,
性能方面也要比Xfire高。
【注】jdk6 自帶的webservice jws
(主動(dòng)說)
業(yè)務(wù)場景
我在以前做項(xiàng)目的時(shí)候枕荞,其中遇到一個(gè)功能柜候,
需要進(jìn)行兩個(gè)項(xiàng)目之間的數(shù)據(jù)的傳輸搞动,
項(xiàng)目經(jīng)理讓我去完成這個(gè)任務(wù),我根據(jù)以往的項(xiàng)目經(jīng)驗(yàn)渣刷,
想到兩種解決方案鹦肿,第一種
就是開放另外一個(gè)項(xiàng)目的數(shù)據(jù)庫的權(quán)限給我,
然后我直接通過訪問另外一個(gè)項(xiàng)目的數(shù)據(jù)
庫辅柴,來得到需要的信息狮惜,但后來我分析了下,覺的這種方式不安全碌识,
而且因?yàn)楫?dāng)時(shí)
這個(gè)項(xiàng)目是另外一家公司負(fù)責(zé)在做,所以數(shù)據(jù)庫里面的表結(jié)構(gòu)虱而,
以及以后牽涉
到的責(zé)任問題都很多筏餐,所以我就采用了第二種方案,
即通過webservices的方式牡拇,進(jìn)行
異構(gòu)系統(tǒng)之間數(shù)據(jù)信息的傳遞魁瞪,webservices的具體實(shí)現(xiàn),
有xfire,cxf,axis2,
我根據(jù)以往的項(xiàng)目經(jīng)驗(yàn)惠呼,了解到cxf是xfire的升級(jí)版本导俘,適用于java語言,
xfire/cxf 性能比axis2要高剔蹋,并且和spring整合起來也比較方便旅薄,
而axis2支持更多的語言,
性能相對(duì)于cxf要低泣崩,通過上面分析少梁,
結(jié)合我們目前的兩個(gè)項(xiàng)目都是基于java
語言的,所以我采用cxf這種方式實(shí)現(xiàn)了兩個(gè)項(xiàng)目之間數(shù)據(jù)的傳遞矫付,
我們?yōu)榱吮WC
webservice的安全性我們采用了基于
WS-Security標(biāo)準(zhǔn)的安全驗(yàn)證(使用CXF回調(diào)函數(shù))凯沪。
(沒必要主動(dòng)說)
webservice服務(wù)端配置流程
首先在web.xml中引入cxfServlet核心類,
指定對(duì)以/cxf開頭的url路徑提供webservice服務(wù)买优,
之后我們?cè)谝l(fā)布成webservice接口上添加@Webservice 注解妨马,
而且還要在實(shí)現(xiàn)類上添加同樣的webservice注解并且要說明實(shí)現(xiàn)了哪個(gè)接口,
之后在spring-webservice.xml中發(fā)布webservice服務(wù)杀赢,
通過jaxws:endpoint這個(gè)標(biāo)簽烘跺,
并且在標(biāo)簽配置implementor和address來表明實(shí)現(xiàn)服務(wù)的類,
以及發(fā)布的地址葵陵,
最后在瀏覽器中輸入相關(guān)的webservice地址?wsdl來驗(yàn)證服務(wù)是否發(fā)布成功液荸。
(沒必要主動(dòng)說)
webservice客戶端的配置
首先通過wsdl2java根據(jù)發(fā)布的webservice服務(wù)端地址的wsdl
生成客戶端調(diào)用的中間橋梁java類,
將生成的java類拷貝到客戶端項(xiàng)目中脱篙,
配置spring-client.xml文件娇钱,
通過jaxws:client定義一個(gè)bean,
并通過address屬性指明要訪問的webservice的服務(wù)地址伤柄,
通過serviceClass指明充當(dāng)中間橋梁的服務(wù)類,之后獲取該bean,
就可以通過它來訪問發(fā)布的webservice接口中的方法文搂。
十八适刀、oracle索引概述
索引呢 是與表相關(guān)的一個(gè)可選結(jié)構(gòu),可以提高sql語句的檢索效率煤蹭,相當(dāng)于我們的字典目錄 笔喉,可以快速進(jìn)行定位 ,所以可以減少磁盤I/O, 但是因?yàn)樗饕谖锢砼c邏輯上都是獨(dú)立于表的數(shù)據(jù) 它會(huì)占用一定的物理空間(額外磁盤空間) 所以并不是索引越多越好,而我們應(yīng)該根據(jù)業(yè)務(wù)需求去創(chuàng)建索引,而且進(jìn)行增刪改操作時(shí) oracle又要自動(dòng)維護(hù)索引 所以在一定程度上也降低了維護(hù)速度硝皂,而且我們?cè)趧?chuàng)建索引和維護(hù)索引要耗費(fèi)時(shí)間常挚,這種時(shí)間隨著數(shù)據(jù)量的增加而增加,我們一般創(chuàng)建索引呢 是這樣創(chuàng)建的 create index 索引名 on 表名(字段)稽物,索引又分為普通索引 唯一索引(unique) 單個(gè)索引 復(fù)合索引(又叫組合索引奄毡,在索引建立語句中同時(shí)可包含多個(gè)字段名),順序索引贝或,散列索引,位圖索引吼过。
十九、oracle存儲(chǔ)過程
存儲(chǔ)過程就是封裝一些sql的集合咪奖,也就是一條條的sql語句盗忱,過程的優(yōu)點(diǎn)就是簡化了sql命令加上它是預(yù)編譯的,所以它的執(zhí)行效率和性能較高羊赵,再者趟佃,如果不調(diào)用過程的話就要和數(shù)據(jù)庫發(fā)生多次交互,調(diào)用過程只需傳一個(gè)命令所有的那些執(zhí)行邏輯都在數(shù)據(jù)庫端執(zhí)行慷垮,所以說它降低了網(wǎng)絡(luò)的通信量揖闸,其次,存儲(chǔ)過程大大提高了安全性料身,這就是優(yōu)點(diǎn)
缺點(diǎn)呢汤纸,就是不同的數(shù)據(jù)庫對(duì)過程支持的關(guān)鍵字支持的關(guān)鍵字都是不一樣的,所以它的移植性是非常差的芹血,再者贮泞,它的維護(hù)性難度也比較大,因?yàn)樗鼪]有專業(yè)的調(diào)試和維護(hù)工具幔烛,所以說它維護(hù)起來比較麻煩啃擦,這就是存儲(chǔ)過程的基本概述.
二十、Junit 業(yè)務(wù)場景
在我們開發(fā)項(xiàng)目的時(shí)候?yàn)榱颂岣叽a的性能和保證邏輯正確性饿悬,在我們編寫代碼后往往都要進(jìn)行單元測試令蛉,來驗(yàn)證代碼,當(dāng)時(shí)我們公司開發(fā)人員全部使用的main方法來進(jìn)行驗(yàn)證,但是使用mian的最大缺點(diǎn)就是不能將多個(gè)類同時(shí)進(jìn)行驗(yàn)證珠叔,驗(yàn)證的結(jié)果不直觀蝎宇,測試復(fù)雜(每個(gè)類都要寫main方法,單個(gè)運(yùn)行)祷安,一定程度上浪費(fèi)時(shí)間姥芥,所有我和項(xiàng)目經(jīng)理提議使用專業(yè)測試工具Junit來進(jìn)行測試,因?yàn)镴unit是一個(gè)Java語言的單元測試框架 汇鞭,測試簡單凉唐,不僅可以提供工作效率和代碼的質(zhì)量,也提高團(tuán)隊(duì)的合作能力霍骄,我提議后我們進(jìn)行了Junit的培訓(xùn)使用Junit4加注解的方式來測試台囱。