今天基本上沒干活 ,呵呵,上午做了個測試servlet的例子,感覺不爽,用了一個叫 仙人掌 的 web 測試一框架,鬧半天還得找它自己的運行錯誤,不用說測試我自己的了,狗日的,不過測試技術(shù)還是很重要的,后天開始做項目,一定要設(shè)計一個好點的,哈哈,爭取能夠上線爽一爽。
發(fā)現(xiàn)google的搜索記錄功能真是好用,可以將以前搜索的東西記錄下來,可以找到很多以前找過的資料。
這兩天,蒸騰了兩個例子,聽說一個叫struts-menu的框架可以實現(xiàn)基于struts的菜單,照著網(wǎng)上的例子,自己擺弄了一個,哈哈,這東西好,可以做出不同樣式的菜單,然后又用struts\struts-menu\spring\hibernate\sqlserver2000實現(xiàn)一個從數(shù)據(jù)庫讀取的動態(tài)樹形菜單,好家伙這可折騰死我了,代碼早早的一口氣寫完了,剩下一堆錯誤,有些甚至莫名其妙的,大部分時間都在這上面了,這周在學(xué)junit,看來很重要,要養(yǎng)成測試的好習(xí)慣,按照模塊來測試,不能一個程序?qū)懞昧耍龠@找那找錯,太浪費時間了,這次就是,上來就給我一個下馬威,505錯誤(網(wǎng)絡(luò)服務(wù)器錯誤)actionServlet不可用,檢查struts-config.xml和applicationContext.xml的配置沒有見檢查出來不對,想必是spring或者hibernate的錯誤了,在struts-config.xml解除跟spring的關(guān)聯(lián),直接在action中調(diào)用,spring的dao方法,這下可好,哈哈,出來一堆錯誤,都是不小心的這錯那錯,一通改之后,最后卡在
hibernate java.lang.ClassCastException: [Ljava.lang.Object
上,是hibernate報的錯誤,發(fā)現(xiàn)在查詢后得到的List不知道里面是什么類型,不能強制轉(zhuǎn)換成我的持久類,不能轉(zhuǎn)換成map,那是什么呢,因為我的查詢語句是復(fù)合查詢,最后發(fā)現(xiàn)List是Object[],是個Object類型的數(shù)組,我見過List里面是Map,持久類,Object[]了,Map是在spring里面通過spring的jdbcTemplete返回的List,里面是Map集合,Map的鍵是數(shù)據(jù)庫表的字段名,后兩個是在hibernate里,一個表查詢可能就是返回持久類類型,多個表查詢就是Object[]類型了?但Object[]里面是什么,我這里發(fā)現(xiàn)里面是每條記錄的值,在網(wǎng)上查到,還有可能是多個持久類(多表查詢,這個說法我沒試過呢),這樣把List里取出的轉(zhuǎn)換成Object[],這個錯誤算是通過了,還有個hibernate java.lang.ClassCastException: java.lang.Integer
哈哈,下午沒上課,今天開始的Junit,上午睡了一半的覺,下午無意中看到一個利用google翻譯實現(xiàn)的控制臺程序,拿過來,剛學(xué)的ajax,復(fù)制粘貼添加刪除,哈哈就成了,但是有個小bug,中文翻譯成英文是亂碼,其他語言倒是基本沒問題,哈哈,可能是編碼的問題。還不知道怎么解決。
javascript腳本
function doTranslate()
{
var text = document.getElementById("source").value;
var langpair = document.getElementById("langpair_t").value;
if(text=="")
{
return;
}
alert(text);
var requestURL = "http://translate.google.com/translate_t?langpair="+langpair+"&text=" + text;
httpRequest = getHttpRequestObject();
httpRequest.onreadystatechange = processHttpResponse;
httpRequest.open("GET",requestURL,true);
httpRequest.send(null);
}
function parseXMLResponseInText()
{
if(httpRequest.responseText!="")
{
var content = httpRequest.responseText;
var s1 = "<div id=result_box dir=ltr>";
var s2 = "</div>";
var begin = content.indexOf(s1);
var end = content.indexOf(s2,begin);
var restr = content.substring(begin + s1.length,end);
document.getElementById("result_box").innerText = restr;
}
}
function processHttpResponse()
{
if(httpRequest.readyState == 4)
{
if(httpRequest.status == 200)
{
parseXMLResponseInText();
}
}
else
{
document.getElementById("result_box").innerText = "正在翻譯...";
}
}
function getHttpRequestObject()
{
var httpRequestObject;
if (window.XMLHttpRequest)
{
httpRequestObject = new XMLHttpRequest();
}
else
{
if (window.ActiveXObject)
{
try
{
httpRequestObject = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
try
{
httpRequestObject = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e2)
{
alert("您的瀏覽器有問題!");
}
}
}
}
return httpRequestObject;
}
明天接著Junit,呵呵。
對了,剛聽說一個struts-menu,回去研究研究,好像以前在.net里見過一個實現(xiàn)類似樹形框架的控件,還可以實現(xiàn)權(quán)限控制,這個也差不多,在網(wǎng)上搜了搜,有好多介紹,等做了例子出來。
為了一個用jbuilder2006+weblogic部署webservices,老師弄不出來,而且運行jbuilder再加上weblogic機器慢的要死,一次一次的重試,時間啊。就是不動,哈哈。
最后在網(wǎng)上搜到下面的問題。說是因為jbuilder和weblogic的lib文件版本兼容問題,還有就是weblogic8.1sp3以前的版本不支持sourcerootforupload,所幸重裝了weblogic,原來是
Why am I getting the error Unrecognized option or flag, -sourcerootforupload ?
In order to maintain compatibility between the 8.1 and 9.0 version of the plugin I used a new flag on the deployment engine.
The flag was added with service pack 4 on 8.1. If you are not on service pack 4 or later you will see this error. If you send a note
to the mojo mailing list I can create a special version for service pack 3 and earlier.
還有就是如果出現(xiàn)
Build Failed: The failure is due to a known compatibility issue with WebLogic and Ant 1.6 as WebLogic includes an older version of
的錯誤就刪除WebLogic安裝目錄下的weblogic81/server/lib/ant下的ant.jar和optional.jar就行了,而我重裝成了weblogic9.2以后也沒報這樣的錯誤。暈,真讓人暈頭轉(zhuǎn)向。
昨天看effective java第二條,建立單立模式,有兩種方式,兩者都需要構(gòu)造函數(shù)是私有的,一種是,聲明一個public static final的屬性初始化為這個類的實例,然后直接用類名.屬性名返回這個對象,另一種是聲明一個private static final的屬性,在靜態(tài)方法中返回這個static final 的對象,這么做的好處就是有回旋的余地,比如不想永遠只返回一個相同的對象了,容易修改。在效率上,兩種方式應(yīng)該是不相上下的,因為好的編譯器能夠監(jiān)測到內(nèi)聯(lián)。
時間在一天一天的過,快過年了,這個年不好過啊。
被熊貓燒香病毒折騰了一中午,我被間接傳染了,我的移動硬盤里查到了五個,還好沒有在我的電腦里感染,在網(wǎng)上下了個專殺,專殺鏈接。
另:怎樣預(yù)防熊貓燒香系列病毒?
轉(zhuǎn)自:金山毒霸信息安全網(wǎng)
最近那個熊貓燒香病毒讓所有用電腦的人很生氣,熊貓這個國寶似乎不再可愛,而成了人人喊打的過街老鼠。熊貓變種實在太多,中招后的損失很嚴重,殺毒軟件一直在救火中。以下幾招很簡單易行,幫你預(yù)防熊貓燒香病毒,至少能明顯減少你中招的幾率。
1.立即檢查本機administrator組成員口令,一定放棄簡單口令甚至空口令,安全的口令是字母數(shù)字特殊字符的組合,自己記得住,別讓病毒 猜到就行。修改方法,右鍵單擊我的電腦,選擇管理,瀏覽到本地用戶和組,在右邊的窗格中,選擇具備管理員權(quán)限的用戶名,單擊右鍵,選擇設(shè)置密碼,輸入新密 碼就行。
2.利用組策略,關(guān)閉所有驅(qū)動器的自動播放功能。
步驟:單擊開始,運行,輸入gpedit.msc,打開組策略編輯器,瀏覽到計算機配置,管理模板,系統(tǒng),在右邊的窗格中選擇關(guān)閉自動播 放,該配置缺省是未配置,在下拉框中選擇所有驅(qū)動器,再選取已啟用,確定后關(guān)閉。最后,在開始,運行中輸入gpupdate,確定后,該策略就生效了。
3.修改文件夾選項,以查看不明文件的真實屬性,避免無意雙擊騙子程序中毒。
步驟:打開資源管理器(按windows徽標(biāo)鍵+E),點工具菜單下文件夾選項,再點查看,在高級設(shè)置中,選擇查看所有文件,取消隱藏受保護的操作系統(tǒng)文件,取消隱藏文件擴展名。
4.時刻保持操作系統(tǒng)獲得最新的安全更新,建議用毒霸的漏洞掃描功能,汗,很可惜,現(xiàn)在光纜還沒修好,網(wǎng)不通,不好修復(fù)。
5.啟用windows防火墻保護本地計算機。
Today,webservice,axis,jbuilder2006
今天做了兩個基于Tomcat的webservice,Tomcat本身不支持webservice,需要有一個axis的插件,說白了就是jar包來支持,webservice利用xml基于soap協(xié)議傳輸來調(diào)用遠程方法,在客戶端和服務(wù)器端都有業(yè)務(wù)提供類的一個接口,他們通過wsdl語言來定義提供的哪些服務(wù),客戶端解析服務(wù)器端提供的wsdl生成業(yè)務(wù)類的接口,這樣客戶端就可以遠程調(diào)用了。
利用jbuilder2006構(gòu)建webservice是很簡單的,所有復(fù)雜的都自動生成了,但其中還是有些一些bug,比如今天遇到的,建立了一個web應(yīng)用程序用來提供服務(wù),在通過向?qū)砑?/span>webservice服務(wù)器端的時候,就是不出現(xiàn)先前建好的web應(yīng)用,最后在網(wǎng)上查原來是:在JBuilder 2006中建立WebService的服務(wù)器端程序的時候,不管怎么試都是卡在建立WEB MODULE這個地方了。主要是JB2006自帶的TOMCAT的問題--------把建立WEB MODULE時的 SERVLET版本改成SERVLET 2.3,JSP版本改成JSP1.2就不會卡住了。暈。
昨天看effective java,第一條,試著用靜態(tài)工廠方法替代構(gòu)造函數(shù),原因有:
1、靜態(tài)工廠方法有名字,可以讓人知道這個對象構(gòu)造出來是什么,比如一個類需要提供幾個構(gòu)造函數(shù),它們有不同的函數(shù)原形(函數(shù)原型包括函數(shù)名和函數(shù)的參數(shù)但不包括函數(shù)的返回類型),這樣很可能讓用戶不能清楚地知道每個構(gòu)造函數(shù)是做什么用的,除非去看文檔,而將其中幾個構(gòu)造函數(shù)用靜態(tài)工廠方法代替,解決了這個問題。
2、靜態(tài)工廠方法可以返回不同的對象,這特別適用于面向接口編程,按照提供的參數(shù)可以返回接口的不同的實現(xiàn)。
3、靜態(tài)工廠方法可以不象構(gòu)造函數(shù)那樣每次都創(chuàng)建新的對象,可以是單立的,也可以不創(chuàng)建重復(fù)的對象,也就是如果兩個對象的屬性值相等就不創(chuàng)建新的返回已經(jīng)存在的。
另外,還提到了靜態(tài)工廠方法的缺點,1、如果一個類將構(gòu)造函數(shù)設(shè)成了private的,用靜態(tài)工廠方法來創(chuàng)建對象,那么這個類將不能被繼承,因為子類不能調(diào)用父類的構(gòu)造方法(已設(shè)成私有)。2、靜態(tài)工廠方法跟其它靜態(tài)方法沒有任何區(qū)別,所以必須給它們起一個合適的名字,比如getInstance().,這種說法破壞了已有的規(guī)則,但規(guī)則,對象都是由構(gòu)造函數(shù)創(chuàng)建的,但使用靜態(tài)工廠方法又有它的獨到的好處。所以在取舍上,作者這樣說,在實際開發(fā)中,如果沒有足夠的理由,還是老老實實的使用構(gòu)造方法來創(chuàng)建對象,畢竟這是已有的規(guī)則。
今天練習(xí)了dwr與struts和spring集成,其中與struts集成有點小錯誤還沒查出來,在網(wǎng)上找資料也沒有解決。Spring集成倒是挺爽的,順便回顧了spring的設(shè)置,如果spring和strtus集成,首先無論哪種方式都需要在struts-config.xml中以插件方式引入spring的一個加載類ContextLoaderPlugin
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml" />
</plug-in>
可以用spring的一個接口DelegatingRequestProcessor替換org.apache.struts.action.RequestProcessor類,在web.xml中設(shè)置.
還可以將struts的Action類交給spring的代理類來處理。
還有就是如果只是簡單web應(yīng)用,不用struts,那么在web.xml配置文件中配置一個spring監(jiān)聽器或者servlet,例如
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
這樣在用到spring Ioc中的對象時就用WebApplicationContextUtils來加載。
在IBM的developerworks網(wǎng)站上看java的基礎(chǔ)教程,將編寫修良java代碼的建議
1是保持類最小,如果你的類有100個方法,可能就要考慮考慮是不是要設(shè)計成幾個對象。呵呵,100個,還沒寫過,不過想象中應(yīng)該有,大型的復(fù)雜系統(tǒng)。
2是保持方法最小,一個方法只做一件事。
3是給方法取個好名字,好名字用處太大了,呵呵呵,特別是別人看別人的代碼時,特別是過了一段時間以后,再來看寫的代碼,特別是系統(tǒng)比較大比較復(fù)雜時,我們的腦子沒計算機好使。
4是保持類的數(shù)量最小,有時間看看極限編程的東西。這句話好象和第一句話有點矛盾,類的數(shù)量少了,類就變大了,類變小了,類的數(shù)量多了,呵呵,這可能具體情況具體分析吧,讓它們之間達到個平衡點,教程上一句話說的好:在不影響清晰度的情況下盡量的減少類。
5是保持注釋的數(shù)量最少,我剛剛看到這一點的時候,有點吃驚,因為我遇到的老師都鼓勵我們有良好的注釋習(xí)慣,而且是邊寫代碼邊加注釋,而不是寫完代碼后統(tǒng)一再加注釋,總之是強烈建議寫注釋的,因為這樣便于閱讀代碼,而這里建議我們保持注釋最少,理由是,當(dāng)更新代碼時維護代碼時還要同時更新注釋,因為那些注釋同時也過期了,這回徒增工作量,解決辦法是盡可能的使代碼清晰。經(jīng)可能的,想盡一切辦法的。
6是一致的代碼風(fēng)格,C# C++的代碼風(fēng)格好象和java的不太一樣。有人喜歡習(xí)慣這樣有人喜歡那樣。
7是避免switch.優(yōu)先用if,然后再switch.
8是public的,有足夠的理由不是public的,呵呵/作者把最有爭議性的放在了最后.
9是追隨Fower,這是個人名,寫了本書叫Refactoring,因式分解呵呵,查了查chinpub,中文版叫《重構(gòu):改善既有代碼的設(shè)計》,明天去逛逛書店。
引用作者的一句話
"
編寫 Java 代碼相當(dāng)簡單。編寫優(yōu)良的 Java 代碼則是一門手藝。傾力成為一個手藝人。
"
繼續(xù)作dwr的練習(xí),做了個動態(tài)顯示用戶信息,最后因為一個相對路徑問題郁悶了我半天,原來在用eclipse新建jsp頁的時候它給自動加了個<base href="<%=basePath%>">,以至于我的圖片一直顯示不出來,找相對路徑,想了好多法,最后發(fā)現(xiàn)原來癥結(jié)在這,刪了它,皆大歡喜,哈哈,圖片讀出來了,哈哈,是個小人兒鞠躬的小圖片,一列小人在那鞠躬,哈哈,有成就感,要不早出來了,以為這么個小小的問題,耽誤了那么多時間,還有,小郭的那個更簡單的錯誤,找了半天,最后發(fā)現(xiàn)一個單詞錯了,display寫成display了,好家伙,不仔細看,還真看不出來。
明天又休息了,租的房子該到期了,剛在跳蚤市場上轉(zhuǎn)了轉(zhuǎn),有點膽怯,哈哈,怕掉進陷阱,呵呵,再有手頭的資金也不寬裕,錢啊。
DWR,哈哈,又是一個框架,的確讓開發(fā)者少寫了很多代碼,又是配置配置,哈哈,一路的東西,dwr的配置,首先引入dwr.jar這個包,還有兩個用于生成日志的兩個包,然后在web.xml中配置啟動dwr的servlet,并且配置dwr.xml的路徑,跟struts配置一樣,在dwr.xml文件中配置要映射的類以及方法,然后啟動服務(wù)器,在<webroot>/dwr中查看是否配置正確,在這個頁面中dwr告訴我們每映射一個類,就要添加一個相應(yīng)的js文件引用,之后在自己的js文件中調(diào)用映射的文件就可以了。
今天注冊中國移動的那個飛信,氣死我了,說我驗證碼不正確,打客服,接電話的小姐真實嘴皮子利落,都不給我插嘴的機會,移動怎么培訓(xùn)的,個人性格問題,先頭打得那個就比較老實,呵呵呵。
今天做了兩個ajax的簡單小例子,領(lǐng)略到javascript查找錯誤的困難了,呵呵,真是想象不出那些大型網(wǎng)站的應(yīng)用,那么多的javascript腳本代碼,是怎么調(diào)試的呢,明天看看那個DWR,看看這能不能帶來驚喜,呵呵呵,ajax確實能給用戶帶來極爽的用戶體驗,但是編碼麻煩了許多,代碼多了許多,體驗了幾個ajax應(yīng)用的網(wǎng)站,google的在線office,Gmail,yahoo的email也是ajax的了。
以為今天周四了呢,哈哈,過的真慢,有時候嫌過的快,有時候嫌過的慢,真難伺候,有人說我挺快樂的還,那語氣好像我正常情況下應(yīng)該是郁悶的,沒錯,我就是沉浸在那些代碼里的時候,暫時忘掉暫時不去想那些只能嘆氣的事,所以不想出來,出來了發(fā)現(xiàn)現(xiàn)實還是現(xiàn)實,呵呵,我佛保佑,平平靜靜。
看編程思想去。
寫了這么多,回過頭,也不知所云。
快樂的秘訣
想快樂一點嗎?美國加州大學(xué)心理學(xué)家桑雅‧柳柏莫斯基在幾經(jīng)研究之后,提出八點具體可行的做法:
心存感激:
拿一本「感恩簿」,將三至五件你目前心存感激的事項記下來。這些可以是俗事(養(yǎng)的牡丹花盛開了),可以是驚喜之事(小孩開始學(xué)走路了)。每周記錄一次(例如,固定星期日晚間),保持鮮活,內(nèi)容愈常更換愈好。
時時行善:
可分隨機的(排隊時,讓趕時間的人排前面),有系統(tǒng)的(每周日固定拿晚餐給鄰居那位老人)。對朋友或陌生人仁慈一點,會產(chǎn)生積極效果,讓自己感覺很慷慨、很有能力,也會贏得別人笑容、贊許及仁慈回饋。這些都會讓人感覺快樂。
品嘗樂趣:
多注意那些能讓人短暫快樂及驚喜之事,例如草莓的甜味、陽光的和煦。心理學(xué)家建議,不妨將快樂時光如照相一般「印存腦海中」,在痛苦時翻出來回味。
感謝貴人:
如果有人在你人生走到十字路時,提攜或指導(dǎo)過你,要趕快向他答謝。越詳盡越好,最好是親自答謝。
學(xué)習(xí)諒解:
如果有人傷害你、誤會你,就寫封信給他表示原諒,也讓自己怒氣怨恨得以發(fā)泄。無法諒解他人會讓自己積怨、心懷報復(fù),諒解則會讓你大步往前。
珍惜親友:
對生活滿意與否,其實與錢財、頭銜、甚至健康關(guān)系不大。最大因素是人際關(guān)系的和諧。多花點時間及精力在朋友親人身上。
照顧身體:
充足睡眠、運動、伸展四肢、笑口常開都可短時間內(nèi)改善心情。常做這些動作會提升生活滿意度。
因應(yīng)難關(guān):
人生不免有難。宗教信仰可助你度過。不過一些平凡無奇信條也可。例如「事情總會過去。這次也一樣!」、「任何打不死我的事,會讓我變得更堅強。」關(guān)鍵就在,你必須相信這些信條。

不知道什么時候,也重新關(guān)注起這些來了,呵呵,我想回到從前...,我要回到從前,即便前面的路并不好走,那才是我自己,呵呵,好了不說了。
做了個應(yīng)用ajax的小練習(xí),最后部署看結(jié)果的時候出了莫名其妙的問題。
引用js文件出錯的問題
將javaScript單獨放在一個js文件里,執(zhí)行沒反應(yīng),把javaScript直接放在jsp頁中正常。
js代碼都是復(fù)制的,用得都是一樣的,瘋了都,讓旁邊幾個人看了甚至老師也看不出問題,代碼上沒有任何問題,無奈在qq群里問,大伙給出了好多注意,也都不行,有人認為是文件路徑問題,有人為使大小寫問題,經(jīng)檢查都沒錯,真瘋了,在網(wǎng)上搜,google翻了五頁,看到一哥們的blog寫類似的問題,正合我的癥狀,原來是編碼的問題,要把js文件保存成和其他jsp文件保存成相同的編碼,否則就不認,我暈,問題總算解決了,原來我的js文件為了不使中文變成亂碼用EditPlus保存成UTF-8了,而我的jsp頁用eclipse建的是ISO-8859-1編碼。
哈哈,問題解決了,甚感輕松。
昨天晚上看編程思想的類型檢查,關(guān)于RTTI運行時類型檢查的原理,在每個類編譯成class的時候,就會產(chǎn)生一個特殊的對象,Class對象,被保存在.class文件中,這個Class對象來標(biāo)識這個類,當(dāng)要生成這個類的對象的時候,JVM虛擬機會查找這個類的Class對象是否存在,若不存在就查找這個類的.calss文件,并將其加載,看來這個Class對象就像這個類的一個標(biāo)識,也可以從Class對象得知這個類的類型(當(dāng)一個類被加載的時候,static代碼塊被執(zhí)行,如果有,這讓我理解了在jdbc中初始化數(shù)據(jù)源的時候,為什么要用Class.forName()來加載驅(qū)動程序類,可能是就是為了執(zhí)行驅(qū)動程序中的靜態(tài)語句塊吧)
開始了一門新課,也是個新東西,ajax,這東西,剛開始,簡單的接觸,由javascript、xml實現(xiàn)的一種無刷新技術(shù)。
Javascript是一種解釋型腳本語言,所謂腳本語言,區(qū)別于編程語言,它不需要一個完成的程序文件的形式就能存在,只需要一組代碼就能運行,這是跟編程語言的最大區(qū)別,編程語言必須有一個完整的程序文件。
Javascript的內(nèi)置對象,String、Math、Date、Array、Screen、
瀏覽器內(nèi)置對象window,navigator
Window下有location\history\document
Navigator主要提供一些瀏覽器信息。
今天不知怎么的了,老困,今天早點睡,呵呵!