改快捷鍵之類的經(jīng)理就不介紹了。
最近發(fā)現(xiàn)很多朋友連攔截器都不知道,于是想寫個(gè)BLOG總結(jié)一下。
java攔截器的基本原理其實(shí)非常簡(jiǎn)單,說白了就是動(dòng)態(tài)代理類。
下面來看一個(gè)簡(jiǎn)單的例子
首先,我建立一個(gè)攔截器的類InterceptorClass,這里的before()和after()方法是以后攔截器會(huì)執(zhí)行的方法
CODE清單一:
我們模擬一個(gè)業(yè)務(wù)組件接口BusinessInterface,和一個(gè)業(yè)務(wù)組件實(shí)現(xiàn)類BusinessClass
CODE清單二:
CODE清單三:
然后,創(chuàng)建一個(gè)動(dòng)態(tài)代理類DynamicProxyHandler,這個(gè)類是集成InvocationHandler接口的,動(dòng)態(tài)類的原理實(shí)際上是使得當(dāng)你執(zhí)行一個(gè)動(dòng)態(tài)方
法的時(shí)候,他可以把這個(gè)動(dòng)態(tài)方法dispatch到這個(gè)動(dòng)態(tài)類上來。這樣,你就可以在這個(gè)方法的前后嵌入自己的一些方法。
CODE清單四:
//包含了業(yè)務(wù)對(duì)象綁定動(dòng)態(tài)代理類的處理,并實(shí)現(xiàn)了InvocationHandler接口的invoke方法
// 代理要調(diào)用的方法,并在方法調(diào)用前后調(diào)用連接器的方法
OK,我們來寫個(gè)類測(cè)試一下
CODE清單五:
來看看結(jié)果:
近期struts2很流行,而且攔截器是struts2里面一個(gè)比較好的功能,下面舉個(gè)例子說明一下攔截器在struts2中的用法。
struts2對(duì)攔截器實(shí)現(xiàn)做了一個(gè)封裝,使得我們?cè)趯?shí)現(xiàn)的時(shí)候比較簡(jiǎn)單。
首先我們要建一個(gè)攔截器類
CODE清單六:
這個(gè)類是必須要繼承struts2包中提供的AbstractInterceptor類,這個(gè)類有一個(gè)抽象方法intercept,這個(gè)方法是必須要實(shí)現(xiàn)的。
那么經(jīng)理在這個(gè)攔截器里面寫了一個(gè)簡(jiǎn)單的實(shí)現(xiàn),對(duì)url用戶合法性做了一個(gè)限制。
接下來比較關(guān)鍵的是過濾器在struts2中的配置,先看看代碼
CODE清單七:
在interceptors節(jié)點(diǎn)里,我們可以定義多個(gè)攔截器,這里的名為authority的只是其中的一個(gè)。struts2的攔截器棧我是先執(zhí)行struts2默認(rèn)的攔
截器defaultStack,然后再執(zhí)行我的。然后只需要用default-interceptor-ref標(biāo)簽設(shè)置好這個(gè)system包中的默認(rèn)攔截器為這個(gè)攔截器就OK了。
struts2中引入了package這個(gè)概念,我覺得十分實(shí)用,當(dāng)然這對(duì)struts2攔截器也是個(gè)實(shí)惠,我們可以根據(jù)不同的action來分包和不同的攔截器
ok,來運(yùn)行測(cè)試一下。
結(jié)果..
摘要: 在FLEX開發(fā)中有一些小技巧,經(jīng)理在這里總結(jié)下,方便以后查閱,也希望能和大家一起交流。 這些小功能在實(shí)際開發(fā)中是很經(jīng)常用的。 一、在DataGrid的列中加圖片 做報(bào)表的時(shí)候經(jīng)常會(huì)在DataGrid中加入一些刻度條或者增減的圖片表示一些API指標(biāo)值,其實(shí)這個(gè)功能FLEX可以實(shí)現(xiàn)。 在DataGrid-colums-DataGridColumn中有個(gè)itemRenderer屬性,... 閱讀全文
在使用flex過程中經(jīng)常會(huì)對(duì)調(diào)樣式感到頭痛,經(jīng)理在這里準(zhǔn)備把常用的一些東東總結(jié)一下,以便以后查閱。
以后慢慢總結(jié)。
一、公用
1.includeInLayout:它的作用是當(dāng)使用visible隱藏對(duì)象的時(shí)候,該對(duì)象不會(huì)占位。
2.字體:fontsize:全局字體大小,推薦設(shè)置12。font-family:"ARIAL"。這些在CSS中設(shè)定好
二、Panel
1.headerHeight:Panel頭的寬度,這里一般設(shè)置成15比較舒服。
2.borderThicknessBottom:Panel控件下邊框的粗細(xì),一般設(shè)置成2比較舒服。
3.borderThicknessLeft:Panel左邊框的粗細(xì),一般設(shè)置成2比較舒服。
4.borderThicknessRight:Panel右邊框的粗細(xì),一般設(shè)置成2比較舒服。
5.backgroundImage:如果覺得Panel的白色北京太丑,那就用這個(gè)換一個(gè)漸變背景吧。
三、DataGrid&AdvancedDataGrid
1.headerColors:用于繪制標(biāo)題背景漸變的兩種顏色的數(shù)組。推薦[#60beff,#1273ce],藍(lán)色漸變
2.alternatingItemColors:交替模式中行的顏色。此值可以是由多種顏色中任意兩種所組成的數(shù)組。推薦[#FFFDCE, #C8ECFF],淺藍(lán)和黃色。
3.headerWordWrap:則指定標(biāo)題文本不適合一行時(shí)將換行。(這是在AdvancedDataGridColumnGroup中設(shè)置的)。
4.一個(gè)標(biāo)志,指示當(dāng)此列中各行的文本不能在一行中顯示時(shí),是否能夠自動(dòng)換行(這是在DataGridColumn中設(shè)置的)。
四、Chart
1.showDataTips:指定Flex是否顯示圖表的提示窗口控件。
2.verticalAxis-CategoryAxis-Title:?jiǎn)挝豢梢约釉谧鴺?biāo)軸上。
3.GradientEntry:設(shè)置圖表的漸變色。詳見第..
http://www.aygfsteel.com/zhangyuan/archive/2010/09/03/330847.html
如下CODE
cognos中有列表和圖形,但是表和圖之間總是孤立的,刷新頁(yè)面也都是全頁(yè)面刷新,于是經(jīng)理在想,是否有個(gè)方法能在點(diǎn)擊cognos列
表時(shí)旁邊的cognos圖表能夠?qū)崟r(shí)的變動(dòng),類似flex中的綁定效果。在老板的強(qiáng)烈催促下,經(jīng)理也沒什么時(shí)間去網(wǎng)上去找去問,覺得憑自己以前
的一些J2EE老底子加上report studio中強(qiáng)大的HTML項(xiàng)目貌似可以搞定,于是開搞了...
首先給大家看看數(shù)據(jù)庫(kù)
一、先用report studio建立一個(gè)帶參數(shù)的cognos餅圖報(bào)表(這里可以隨便是什么圖),報(bào)表灰常簡(jiǎn)單
設(shè)置參數(shù)名為par3,并把此報(bào)表保存為a1
二、再用report studio建立一個(gè)列表,如圖
經(jīng)理在這里多用了html項(xiàng)目,因?yàn)閏ognos在頁(yè)面上封裝的太好了,只能這樣拼湊腳本。
基本的原理就是在列表旁邊放置一個(gè)html項(xiàng)目,其內(nèi)容是一個(gè)iframe,其連接也就是剛剛做好的那個(gè)帶參數(shù)的餅圖報(bào)表。
然后在列表中放置一個(gè)label,在label中設(shè)置點(diǎn)擊事件出來iframe鏈接(其實(shí)這樣就換了一個(gè)參數(shù))及重新載入。
其中
1的代碼如下,他主要是點(diǎn)擊的列表觸發(fā)的事件
2到6主要就是定義一個(gè)含有點(diǎn)擊事件的label
2的代碼為
3其實(shí)是一個(gè)報(bào)表表達(dá)式,它是參數(shù)
4的代碼為
5也是一個(gè)報(bào)表表達(dá)式,他是設(shè)置該列顯示的內(nèi)容
6的代碼為,他收個(gè)尾
7的代碼主要是iframe,然后就是刷新等待時(shí)候的一個(gè)等待提示
7的代碼為
拼滴我累死了.....
OK,我們來看看效果
我先點(diǎn)擊一下第一個(gè)單元格
再點(diǎn)擊第二個(gè)
注意,列表不會(huì)刷新哦,有點(diǎn)像ajax的效果。
后來想想,其實(shí)功能挺簡(jiǎn)單的。
例子比較簡(jiǎn)陋,只是想傳達(dá)一個(gè)思想,希望以后大家有好東西能一起交流。
對(duì)COGNOS有一定了解以后,經(jīng)理逐漸發(fā)現(xiàn)COGNOS的強(qiáng)大之處,特別的立方體模型使數(shù)據(jù)倉(cāng)庫(kù)更有條理而且訪問速度更快。但是也了解到了COGNOS的劣勢(shì),應(yīng)該說是IBM整體的劣勢(shì),也就是界面太丑。雖然COGNOS也包含了幾乎所有的圖表,樣式也可以調(diào)整。但是對(duì)COGNOS的界面調(diào)整太復(fù)雜,幾乎看的比較好的COGNOS顯示界面都要有HTML對(duì)象來調(diào),更或者無論你怎么調(diào)也是基于HTML,在色彩和動(dòng)畫方面不會(huì)有很大的空間了。
于是經(jīng)理在想,是不是可以把只用COGNOS對(duì)數(shù)據(jù)的抓取優(yōu)勢(shì)而在顯示層用別的方式呈現(xiàn)呢(比如flex或者別的)?如果COGNOS能開發(fā)更多的前端顯示接口固然好,但這是不可能的,當(dāng)然,經(jīng)理知道這樣做會(huì)損失一部分性能,但是對(duì)現(xiàn)在大多對(duì)界面都很挑剔的客戶,這肯定是一條比較好的路。
OK,那么現(xiàn)在經(jīng)理把做的一個(gè)java調(diào)用cognos端直接返回XML字節(jié)流的例子和大家分享下。
一、環(huán)境
硬件環(huán)境:主屏2.0Hz+內(nèi)存3gb+系統(tǒng)32位
軟件環(huán)境:cognos 8.41+Myeclipse8.5ga+sqlserver2000sp4
二、IBM Cognos Connection部分
首先,我用framework做了了一個(gè)灰常簡(jiǎn)單的包(所謂非常簡(jiǎn)單就是里面完全沒有維度和亮度,直接隱射的數(shù)據(jù)庫(kù)表列),并把他發(fā)布到公共文件夾,名為test_sdk_paser
然后在這個(gè)包下用report studio做了一個(gè)灰常簡(jiǎn)單的報(bào)表,名為test
這個(gè)報(bào)表就是我們之后要在java中獲取其數(shù)據(jù)的報(bào)表。
三、COGNOS SDK調(diào)用程序
0.準(zhǔn)備步驟.
我們先要把sdk所需要的包考到項(xiàng)目中來。必要包的位置在D:\cognos\c8\sdk\java\lib\下,先給大家看看我的目錄結(jié)構(gòu)
1.我建立了一個(gè)config.properties文件用來存放congos服務(wù)器的ip和端口
在java中對(duì)應(yīng)寫一個(gè)從properties中獲取數(shù)據(jù)的方法
2.弄清楚報(bào)表的xpath
這個(gè)xpath我們可以在報(bào)表的 設(shè)置屬性-->常規(guī) 找到
xpath是十分重要的,其實(shí)報(bào)表ID也十分重要,這個(gè)經(jīng)理以后會(huì)跟大家寫。
3.連接cognos服務(wù)器
經(jīng)理這里用ReportService_ServiceLocator對(duì)象的getreportService方法來獲得一個(gè)ReportService_Port對(duì)象。
getreportService需要一個(gè)參數(shù),是cognos服務(wù)器地址,http://localhost/p2pd/servlet/dispatch
ReportService_Port是報(bào)表操作對(duì)象,我們就是用這個(gè)對(duì)象的run方法來運(yùn)行cognos端報(bào)表。
4.設(shè)置cognos認(rèn)證信息
經(jīng)理這里的cognos設(shè)置了NTML認(rèn)證,那么是需要在sdk代碼中設(shè)置認(rèn)證信息的。
用CAM方式進(jìn)行登陸
5.設(shè)置report的參數(shù)
本例中用HashMap來傳遞report的參數(shù),用循環(huán)的方式把外界的參數(shù)從HashMap中取出來,設(shè)置到ParameterValue的value中去。
6.cognos運(yùn)行報(bào)表設(shè)置
每項(xiàng)代表什么經(jīng)理已經(jīng)把注釋寫的很清楚了。
這里尤其提醒大家注意的一點(diǎn)是,RunOptionEnum.prompt這個(gè)參數(shù)一定要設(shè)置,設(shè)置這個(gè)參數(shù)是當(dāng)cognos運(yùn)行有參數(shù)的report時(shí)候,不彈出html提示窗口。經(jīng)理之前就是沒有設(shè)置這個(gè)參數(shù),所以在測(cè)試帶參數(shù)報(bào)表的時(shí)候搞了一天都沒搞出來。
那么這個(gè)option到底還有多少參數(shù)呢?經(jīng)理給大家看啊看你cognos sdk的官方API
大家看到了吧,官方的API只是把枚舉值做了一個(gè)羅列,具體他們是做什么的?有什么作用?什么都沒說。經(jīng)理當(dāng)然也看了sdk的源碼,希望能在源碼中找到一點(diǎn)注釋,結(jié)果是:sdk的java文件沒有一行注釋代碼。
經(jīng)理在這里不想罵人,現(xiàn)在終于知道為什么cognos sdk這個(gè)領(lǐng)域這么弱了。
7.運(yùn)行cognos報(bào)表并返回xml數(shù)據(jù)
經(jīng)理在這里統(tǒng)計(jì)了一下用sdk返回?cái)?shù)據(jù)的時(shí)間。
之前講過用ReportService_Port的run方法可以讓report運(yùn)行,然后返回一個(gè)叫AsynchReply的對(duì)象,這個(gè)對(duì)象中有details[]屬性,這個(gè)里面基本上包含了report返回的所有信息。而他的status屬性則標(biāo)識(shí)了此次請(qǐng)求是否成功。
OK,現(xiàn)在代碼都解釋完了,現(xiàn)在來測(cè)試下。
經(jīng)理在這里寫了一個(gè)簡(jiǎn)單的測(cè)試?yán)樱弥爸v到的test_sdk_paser包中的test進(jìn)行測(cè)試
下面再測(cè)試一個(gè)帶參數(shù)的報(bào)表
把之前的那個(gè)報(bào)表加一個(gè)參數(shù)
然后在這里輸入一個(gè)1
得到這樣的數(shù)據(jù)
稍微改動(dòng)下代碼,然后run一下
然后得到結(jié)果是這樣的
正好和剛剛的結(jié)果一樣~~
sdk取數(shù)據(jù)關(guān)鍵的也就是上面說的7個(gè)步驟。最后依然要BS一下cognos的開發(fā)者,居然在源碼中一行注釋都沒有,幫助文檔也不全面。
所以還是集結(jié)大家的力量一起研究一起分享研究后的成果。
歡迎大家一起來博客上討論。
謝謝~
很早以前用過VSS的人都知道,相比之下SVN的確是個(gè)好東東。他以副本式的版本管理模式很好的解決了VSS單數(shù)據(jù)源下的簽入簽出混亂問題。但是最近發(fā)現(xiàn)很多人都不會(huì)裝SVN,經(jīng)理在這里寫個(gè)博客跟大家分享一下。
環(huán)境:
Win7系統(tǒng)
Myeclipse 8.5GA
JDK1.6
一、準(zhǔn)備工作
首先,當(dāng)然是下載軟件安裝包。(經(jīng)理這里以svn1.6為例)這里需要2個(gè)安裝程序和1個(gè)解壓包。
Setup-Subversion-1.6.6.msi這個(gè)是SVN服務(wù)器。
(你可以在這里 http://subversion.tigris.org 下載到最新版本)
TortoiseSVN-1.6.10.19898-win32-svn-1.6.12.msi是SVN 版本控制系統(tǒng)的一個(gè)免費(fèi)開源客戶端。
(可以在這里下載 http://tortoisesvn.net/downloads )
site-1.6.12.zip是Myeclipse的插件包。
(可以在這里下載 subclipse.tigris.org)
二、安裝svn服務(wù)器
首先安裝svn服務(wù)器(也就是Setup-Subversion-1.6.6.msi這個(gè)),按照常規(guī)安裝就OK了。然后把tortoise也安裝起來(也就是TortoiseSVN-1.6.10.19898-win32-svn-1.6.12.msi這個(gè))。
在安裝tortoise的時(shí)候會(huì)提示重啟,這里最好重啟下。
這是經(jīng)理的安裝目錄
Setup-Subversion-1.6.6.msi --> Subversion目錄
TortoiseSVN-1.6.10.19898-win32-svn-1.6.12.msi --> TortoiseSVN目錄
svnroot目錄是什么呢?接著往下看
三、建立SVN資源庫(kù)(Repository)
svnroot是經(jīng)理建立的svn資源庫(kù)根目錄,然后在這個(gè)目錄里建立了一個(gè)名為repos的目錄。(這個(gè)目錄是經(jīng)理打算做svn資源庫(kù)的目錄)
然后在這個(gè)目錄點(diǎn)右鍵->TortoiseSVN->Create repository here
當(dāng)看到被建立的repos目錄中多了很多文件夾后證明資源庫(kù)創(chuàng)建成功。
在網(wǎng)上也看到有用cmd命令來創(chuàng)建的,如svnadmin create D:\svn\repository
四、配置用戶和權(quán)限
打開剛剛建立的資源庫(kù)文件夾(repos),里面有一個(gè)名為conf的文件夾,這個(gè)文件夾里都是svn的配置信息。首先打開svnserve.conf文件
這里行前凡是有#的都等于是被注釋忽略了, 你可以把#去掉讓那一行生效, 或者自己新添加行。經(jīng)理對(duì)這個(gè)文件主要修改3處
把" #anon-access = read"改為"anon-access = none"
(他表示沒有經(jīng)過驗(yàn)證的用戶無任何權(quán)限,之前的意思是沒經(jīng)過驗(yàn)證的用戶可以進(jìn)行讀操作。經(jīng)理強(qiáng)烈建議該成none,不然別人沒有驗(yàn)證的人都可以看到項(xiàng)目文件)
把" #auth-access = write"去掉#為"auth-access = write"
(通過驗(yàn)證的用戶有寫操作,寫操作是包含讀操作的)
把" #password-db = passwd"去掉#為"password-db = passwd"
(密碼數(shù)據(jù)存放到passwd文件中)
打開passwd文件
設(shè)置一個(gè)用戶名如 manager=jingli
還有一個(gè)文件authz
這個(gè)文件主要是用來針對(duì)不同的目錄給用戶分配不同的權(quán)限的。
如:
[groups]
team1 = manager,staff
表示劃定一個(gè)小組,組員有manager和staff用戶
[repository:/baz/fuz]
@team1= rw
* = r
表示team1這個(gè)組對(duì)資源有讀寫權(quán)限,資源對(duì)所有人有讀權(quán)限
[/foo/bar]
manager = rw
* =r
也可以像這樣對(duì)個(gè)人設(shè)置權(quán)限,manager有讀寫權(quán)限,該資源對(duì)所有人有讀權(quán)限
這些可以根據(jù)個(gè)人需要修改
五、運(yùn)行svn服務(wù)器
在安裝的Subversion目錄下有個(gè)bin目錄里svnserve.exe,我們直接運(yùn)行這個(gè)文件是無效的。需要在控制臺(tái)來啟動(dòng)他。直接在cmd命令中輸入svnserve -d -r D:\SVN\svnroot這樣服務(wù)就啟動(dòng)了(注意,這里指定的是svnroot文件即資源根目錄,而不是資源目錄repos)。當(dāng)然你關(guān)閉dos窗口的時(shí)候svn服務(wù)也就關(guān)閉了。svn的所有操作都需要在這個(gè)服務(wù)器啟動(dòng)的基礎(chǔ)上進(jìn)行。但是一直開著這個(gè)dos命令窗口很不爽,所以經(jīng)理在這里寫個(gè)程序讓他開機(jī)自動(dòng)啟動(dòng)。
首先我們需要為svnserve創(chuàng)建一個(gè)系統(tǒng)服務(wù)。
以經(jīng)理本機(jī)的安裝目錄為例,在cmd命令行輸入
binpath指svnserve.exe的路徑
(注意:如果你的路徑里有空格記得要在binpath的頭尾用轉(zhuǎn)義字符/"把整個(gè)個(gè)binpath框起來,D:\SVN\svnroot指svn資源庫(kù)根目錄)
displayname指服務(wù)名稱
depend指協(xié)議是tcpid
start指開機(jī)自動(dòng)啟動(dòng)
注意:以上的=后面的一個(gè)空格千萬不要丟了
然后我們打開服務(wù)可以看到我們的服務(wù)已經(jīng)是自動(dòng)啟動(dòng)了
六、安裝subeclipse插件
打開之前下載的site-1.6.12.zip文件可以看到里面有features、plugins兩個(gè)文件夾
用之前我講過的Myeclipse安裝插件的方法安裝就可以了
參考:
(http://www.aygfsteel.com/zhangyuan/archive/2010/07/28/327371.html)
在這里要注意一點(diǎn)
安裝插件時(shí)要去掉features中的org.tigris.subversion.subclipse.mylyn_3.0.0.jar文件
去掉plugins中的org.tigris.subversion.subclipse.core_1.6.8.jar和org.tigris.subversion.subclipse.mylyn_3.0.0.jar
經(jīng)理用Myeclipse8.5配這一套svn如果不刪這些文件的話,啟動(dòng)Myeclipse時(shí)會(huì)報(bào)錯(cuò)
這樣SVN就搭建好了..