<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    @OverWrite BlogJava

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      128 隨筆 :: 0 文章 :: 29 評論 :: 0 Trackbacks

    2008年3月5日 #

    httpclient已停止維護,其替代產(chǎn)品為 Apache HttpComponents 。 官方聲明如下(詳細信息點擊這里):
    The Commons HttpClient project is now end of life, and is no longer being developed. It has been replaced by the Apache HttpComponents project in its HttpClient and HttpCore modules, which offer better performance and more flexibility.

    HttpClient 是 Apache Jakarta Common 下的子項目,可以用來提供高效的、最新的、功能豐富的支持 HTTP 協(xié)議的
    客戶端程工具包,并且它支持 HTTP 協(xié)議最新的版本和建議。本文首先介紹 HTTPClient,然后根據(jù)作者實際工作經(jīng)驗給出了一些常見問題的解決方法。 

    所以打算用HttpClient的朋友,可以考慮使用HttpComponents 了。
    HttpComponents 入門,筆者認為 iteye上的一篇文章寫的不錯,大家可以參考 《HttpComponents入門解析》
    posted @ 2012-08-12 17:50 vesung 閱讀(397) | 評論 (0)編輯 收藏

    現(xiàn)在本本屏幕越來越小, 在上面運行eclipse就會顯得字體小, 那么如何調(diào)整字體大小那?
    方法一:
        打開菜單 window->preferences->general->appearance->colors and fonts
    打開basec里面的text font 進行編輯會彈出一個字體編輯的窗口, 在里面調(diào)整字體即可。

    方法二:
        因為eclipse版本眾多,所以菜單路徑也會有所差異。 還有一種方法可以不用擔(dān)心不同版本的差異:
        開始先打開菜單 window->preferences   在左上角數(shù)據(jù)font 回車, eclipse就會自動搜索出可以設(shè)置字體的地方了。 接下來打開basec里面的text font 進行編輯會彈出一個字體編輯的窗口, 在里面調(diào)整字體即可。 


    一點小技巧希望對大家能有所幫助。
    posted @ 2012-07-26 14:46 vesung 閱讀(43764) | 評論 (1)編輯 收藏

    這篇文章在chinaunix上看到,寫的很不錯。希望能對學(xué)習(xí)linux的人有所幫助。

    隨著Linux應(yīng)用的擴展許多朋友開始接觸Linux,根據(jù)學(xué)習(xí)Windwos的經(jīng)驗往往有一些茫然的感覺:不知從何處開始學(xué)起。作為一個 Linux系統(tǒng)管理員,我看了許多有關(guān)Linux的文檔和書籍,并為學(xué)習(xí)Linux付出了許多艱苦的努力。當(dāng)真正獲得了一份正式的Linux系統(tǒng)管理工作 后,我更加深刻地理解了Linux的靈魂:服務(wù)與多用戶。Linux系統(tǒng)知識是非常廣博的,但是只要掌握了重點知識,管理它并沒有想象中的那么可怕。在下 面我會將作為系統(tǒng)管理員的一些工作心得和總結(jié)出來的經(jīng)驗系統(tǒng)地介紹給大家。

    一、 學(xué)習(xí)的目的

    通過Linux的學(xué)習(xí)掌握UNIX的目的想必不用多說了,在這個網(wǎng)絡(luò)人才身價倍增的年代,想靠技術(shù)吃飯又不想掌握網(wǎng)絡(luò)和編程技術(shù)是不明智的。當(dāng)一人第一次 聽說Linux并躍躍欲試的時候,總會提出幾個?,它是什么(What)? 為什么要用它(Why)? 怎樣學(xué)習(xí)它(How)?做為開放源碼運動的主要組成部分,Linux的應(yīng)用越來越廣泛,從我們平時的娛樂、學(xué)習(xí),到商業(yè)、政府辦公,再到大規(guī)模計算的應(yīng) 用。為了滿足人們的需求,各種各樣的、基于Linux的應(yīng)用軟件層出不窮。只要具備了LinuX的基本功,并具有了自學(xué)的能力之后,都可以通過長期的學(xué)習(xí) 將專項內(nèi)容予以掌握。

    二、 從命令開始從基礎(chǔ)開始

    常常有些朋友一接觸Linux 就是希望構(gòu)架網(wǎng)站,根本沒有想到要先了解一下Linux 的基礎(chǔ)。這是相當(dāng)困難的。雖然Linux桌面應(yīng)用發(fā)展很快,但是命令在Linux中依然有很強的生命力。Linux是一個命令行組成的操作系統(tǒng),精髓在命 令行,無論圖形界面發(fā)展到什么水平這個原理是不會變的,Linux命令有許多強大的功能:從簡單的磁盤操作、文件存取、到進行復(fù)雜的多媒體圖象和流媒體文 件的制作。這里筆者把它們中比較重要的和使用頻率最多的命令,按照它們在系統(tǒng)中的作用分成幾個部分介紹給大家,通過這些基礎(chǔ)命令的學(xué)習(xí)我們可以進一步理解 Linux系統(tǒng):

    ●安裝和登錄命令:login、 shutdown、 halt、 reboot 、mount、umount 、chsh
    ●文件處理命令:file、 mkdir、 grep、dd、 find、 mv 、ls 、diff、 cat、 ln
    ●系統(tǒng)管理相關(guān)命令: df、 top、 free、 quota 、at、 lp、 adduser、 groupadd kill、 crontab、 tar、 unzip、 gunzip 、last
    ●網(wǎng)絡(luò)操作命令:ifconfig、 ip 、ping 、 netstat 、telnet、 ftp、 route、 rlogin rcp 、finger 、mail 、nslookup
    ●系統(tǒng)安全相關(guān)命令: passwd 、su、 umask 、chgrp、 chmod、chown、chattr、sudo、 pswho

    三、 選擇一本好的Linux書籍

    無論在論壇還是讀者反饋中,我們看到最多的問題往往是某個新手,在安裝或使用linux的過程中遇到一個具體的問題就開始提問,很多都是重復(fù)性的問題,甚 至有不少人連基本的問題描述都不是很清楚。這說明很多初學(xué)linux的人還沒有掌握基本功。怎樣才能快速提高掌握linux的基本功呢? 最有效的方法莫過于學(xué)習(xí)權(quán)威的linux工具書,工具書對于學(xué)習(xí)者而言是相當(dāng)重要的。一本錯誤觀念的工具書卻會讓新手整個誤入歧途。目前國內(nèi)關(guān)于 linux的書籍有很多不過精品的不多,筆者強烈建議閱讀影印本的“o'reilly原版linux圖書”,而且出版社還提供了一個非常好的路線圖


    四 、養(yǎng)成在命令行下工作

    一定要養(yǎng)成在命令行下工作的習(xí)慣,要知道X-window只是運行在命令行模式下的一個應(yīng)用程序。在命令行下學(xué)習(xí)雖然一開始進度較慢,但是熟悉后,您未來 的學(xué)習(xí)之路將是以指數(shù)增加的方式增長的。從網(wǎng)管員來說,命令行實際上就是規(guī)則,它總是有效的,同時也是靈活的。即使是通過一條緩慢的調(diào)制解調(diào)器線路,它也 能操縱幾千公里以外地遠程系統(tǒng)。

    五、用Unix思維思考Linux

    由于Linux是參照Unix的思想來設(shè)計的,理解和掌握它就必須以Unix的思維來進行,而不能以Windows思維。不可否認,windows 在市場上的成功很大一部分在于技術(shù)思想的獨到之處。可是這個創(chuàng)新是在面對個人用戶的前提下進行的,而面對著企業(yè)級的服務(wù)應(yīng)用,它還是有些力不從心。多年來 在計算機操作系統(tǒng)領(lǐng)域一直是二者獨大:unix在服務(wù)器領(lǐng)域,Windows在個人用戶領(lǐng)域。由此可見,用戶需求決定了所采用的操作系統(tǒng)。不管什么原因, 如果要學(xué)習(xí)Linux,那么首先要將思維從Windows的“這個小河” 中拖出來,放入Unix的海洋。

    六 、學(xué)習(xí)shell

    對于Shell(中文名稱殼),習(xí)慣Windows的讀者肯定是非常陌生的,因為Windows只有一個“Shell”(如果可以說是Shell的話), 那就是Windows自己。用一句話容易理解的解釋就是,shell是用戶輸入命令與系統(tǒng)解釋命令之間的中介。最直觀的說法,一種Shell有一套自己的 命令。舉一個容易理解的例子,Linux的標(biāo)準(zhǔn)Shel是Bash Shel;Solaris的shell是B shell;Linux的Shell是以命令行的方式表現(xiàn)出來的。讀者可能會不理解,Windows從命令行“進化”到了圖形界面,那么Linux現(xiàn)在還 使用命令行豈不是一種倒退?

    當(dāng)初我剛剛接觸Linux時就曾有過這種想法。可是后來發(fā)現(xiàn),如果使用圖形界面,那么分配給應(yīng)用軟件的資源就少了,在價格昂貴的服務(wù)器上,能夠以較低的硬件配置實現(xiàn)同樣的功能是非常重要的。

    下面舉例說明,一臺服務(wù)器有1GB內(nèi)存,假設(shè)其中512MB用于處理圖形界面,若要安裝一個需要784MB內(nèi)存的數(shù)據(jù)庫軟件,惟一的辦法就是擴大內(nèi)存。但 是如果使用命令行,系統(tǒng)可能只需要64MB內(nèi)存,其它的內(nèi)存就可以供數(shù)據(jù)庫軟件使用了。使用命令行,不僅是內(nèi)存,而且CPU及硬盤等資源的占用都要節(jié)省很 多。所以,作為服務(wù)器使用命令行是優(yōu)點而不是缺點。既然Shell有這么多優(yōu)點,就必須要學(xué)習(xí)它。
    七、勤于實踐

    要增加自己Linux 的技能,只有通過實踐來實現(xiàn)了。所以,趕快找一部計算機,趕快安裝一個 Linux 發(fā)行版本,然后進入精彩的Linux世界。相信對于你自己的 Linux 能力必然大有斬獲。此外,人腦不像計算機的硬盤一樣,除非硬盤壞掉了或者是資料被你抹掉了,否則儲存的資料將永遠而且立刻的記憶在硬盤中。在人類記憶的曲 線中,你必須要不斷的重復(fù)練習(xí)才會將一件事情記得比較熟。

    同樣的,學(xué)習(xí) Linux 也一樣,如果你無法經(jīng)常學(xué)習(xí)的話,學(xué)了后面的,前面的忘了。你對Linux命令熟悉后你可以開始搭建一個小的Linux網(wǎng)絡(luò),這是最好的實踐方法。 Linux是網(wǎng)絡(luò)的代名詞,Linux網(wǎng)絡(luò)服務(wù)功能非常強大,不論是郵件服務(wù)器、Web服務(wù)器、DNS服務(wù)器等都非常完善。當(dāng)然你不需搭建所有服務(wù),可以 慢慢來。需要說明的是這個Linux網(wǎng)絡(luò)對于初學(xué)者有兩三臺計算機即可。自己多動手,不要非要等著別人幫你解決問題。

    八、學(xué)會使用文檔

    和私有操作系統(tǒng)不同,各個Linux的發(fā)行版本的技術(shù)支持時間都較短,這對于Linux初學(xué)者是往往不夠的。其實當(dāng)你安裝了一個完整的Linux系統(tǒng)后其 中已經(jīng)包含了一個強大的幫助,只是可能你還沒有發(fā)現(xiàn)和使用它們的技巧。主流Linux發(fā)行版都自帶非常詳細的文檔(包括手冊頁和FAQ),從系統(tǒng)安裝到系 統(tǒng)安全,針對不同層次的人的詳盡文檔,仔細閱讀文檔后40%問題都可在此解決。查閱經(jīng)典工具書和Howto,特別是Howto是全球數(shù)以萬計的 Linux、Unix的經(jīng)驗總結(jié)非常有參考價值通常40%的問題同樣可以解決。安裝一個新的軟件時先看README,再看INSTALL然后看FAQ,最 后才動手安裝,這樣遇到問題就知道為什么。如果說明文檔不看,結(jié)果出了問題再去論壇來找答案反而浪費時間。

    當(dāng)查找文檔時, 一定要看文檔是在何種版本、何種環(huán)境及何種狀態(tài)下出現(xiàn)的何種結(jié)果。對于文檔的有效性, 一時還無法在操作前就知道結(jié)論如何,那么對某個專題或問題,閱讀相關(guān)的多篇文章將會節(jié)省大量的時間,還可以保證盡量“干凈”的環(huán)境,有效避免因為不同操作 所造成的更多問題。操作時要仔細核對各個步驟及輸出的結(jié)果,盡量保持與文檔一致。

    九、在Linux論壇獲取幫助

    如果上面的措施沒有解決問題,此時你就需要Linux社區(qū)的幫助了。需要說明的是你要有周全的思考,準(zhǔn)備好你的問題,不要草率的發(fā)問,否則只會得到到草率 的回答或者根本得不到任何答案。越表現(xiàn)出在尋求幫助前為解決問題付出的努力,你越能得到實質(zhì)性的幫助。最好先搜尋一下論壇是否有您需要的文章。這樣可以獲 得事半功倍的效果。

    你需要提供精確有效的信息。這并不是要求你簡單的把成噸的出錯代碼或者數(shù)據(jù)完全轉(zhuǎn)儲摘錄到你的提問中。如果你有龐大而復(fù)雜的測試條件,盡量把它剪裁得越小 越好。可能你會遇到這種情況,對于一個問題會出現(xiàn)不同內(nèi)容回答,這時你需要通過實踐來驗證。另外把這個問題放在其他Linux社區(qū)請求幫助也是一種選擇。 如果得不到答案,請不要以為我們覺得無法幫助你。有時只是看到你問題的人不知道答案罷了。這時換一個社區(qū)是不錯的選擇。

    十、學(xué)習(xí)專業(yè)英文

    如果你想深入學(xué)習(xí)Linux,看不懂因為文檔實在是太難了。寫的最好的,最全面的文檔都是英語寫的,最先發(fā)布的技術(shù)信息也都是用英語寫的。即便是非英語國家的人發(fā)布技術(shù)文檔,也都首先翻譯成英語在國際學(xué)術(shù)雜志和網(wǎng)絡(luò)上發(fā)表。

    通過man、info等命令,可以從在線幫助中快速地獲得所需要的命令和操作方法。不要害怕海量的系統(tǒng)幫助,仔細閱讀幾個man或info文檔就會發(fā)現(xiàn), 這些幫助幾乎都按照固定格式寫成一命令名稱、參數(shù)、參數(shù)說明、使用例子、參考等。當(dāng)英語成為一種習(xí)慣,就會自覺地查找或訂閱互聯(lián)網(wǎng)上感興趣的英文材料。這 樣,在不知不覺中就已經(jīng)和世界同步。

    十一、在社區(qū)共享你的經(jīng)驗

    隨著Linux應(yīng)用的擴展,出現(xiàn)了不少Linux社區(qū)。其中有一些非常優(yōu)秀的社區(qū):水木清華、其中有一些非常優(yōu)秀的社區(qū):www.linuxforum.net(國內(nèi)最高水平GNU站點)、http://www.chinaunix.net/ (中國最大的Unix技術(shù)社區(qū)),隨著知識的不斷積累,就可以把自己動手解決一些前人沒有遇到的問題寫出文檔在網(wǎng)絡(luò)上共享給其他讀者。這個時候,也就成為 了一名“高手”。Linux的使用者一般都是專業(yè)人士,他們有著很好的電腦背景且愿意協(xié)助他人,Linux高手更具有鼓勵新手的文化精神。

    最后是一個筆者的Linux學(xué)習(xí)的路線圖(roadmap):

    ●了解Linux 的基礎(chǔ)知識,這些包含了用戶管理、群組的概念、權(quán)限的觀念等;
    ●掌握至少50個以上的常用命令;
    ●掌握.tgz、.rpm等軟件包的常用安裝方法
    ●學(xué)習(xí)添加外設(shè),安裝設(shè)備驅(qū)動程序(比如網(wǎng)卡)
    ●熟悉Linux文件系統(tǒng) 和目錄結(jié)構(gòu)。
    ●掌握vi,gcc,gdb等常用編輯器,編譯器,調(diào)試器 。
    ●理解shell別名、管道、I/O重定向、輸入和輸出以及shell腳本編程。
    ●網(wǎng)絡(luò)的基礎(chǔ)包括: 掌握路由概念、OSI七層網(wǎng)絡(luò)模型、TCP/IP模型及相關(guān)服務(wù)對應(yīng)的層次對于Linux學(xué)習(xí)非常重要的。然后學(xué)習(xí)Linux環(huán)境下的組網(wǎng)。
    posted @ 2008-07-31 17:49 vesung 閱讀(393) | 評論 (0)編輯 收藏

    國外開發(fā)者博客中有一篇有趣的文章,將程序員按水平像軟件版本號那樣劃分為不同的版本。相對于在招聘時分為初級,中級,高級程序員,直接表明需要某種語言N版本的程序員或許更方便直接。根據(jù)作者的觀點,可將WEB開發(fā)者大致分為以下幾個版本:

    Alpha:閱讀過一些專業(yè)書籍,大多數(shù)能用Dreamweaver或者FrontPage幫朋友制作一些Web頁面。但在他們熟練掌握HTML代碼以前,你大概不會雇傭他們成為職業(yè)的WEB制作人員。

    Beta:已經(jīng)比較擅長整合站點頁面了,在HTML技巧方面也有一定造詣,但還是用Tables來制作頁面,不了解CSS,在面對動態(tài)頁面或數(shù)據(jù)庫連接時還是底氣不足。

    Pre Version 1 (0.1):比Beta版的開發(fā)者水平要高。熟悉HTML,開始了解CSS是如何運作的,懂一點JavaScript,但還是基于業(yè)余水準(zhǔn),逐步開始關(guān)心動態(tài)站點搭建和數(shù)據(jù)庫連接的知識。這個版本的WEB開發(fā)人員還遠不能成為雇主眼中的香餑餑。

    1.0: 能夠基本把控整個站點開發(fā),針對每個問題盡可能的找到最直接的解決辦法。但對可測性,可擴展性以及在不同(層)框架下如何選擇最合適的WEB設(shè)計工具尚無概念。這個版本的WEB開發(fā)者有良好的技術(shù)基礎(chǔ),需要有進一步的幫助和指導(dǎo)。

     

    2.0:懂面向?qū)ο蟮木幊陶Z言,理解分層開發(fā)的必要性,關(guān)注代碼分離,對問題尋找更完美的解決方法,偶然也會考慮設(shè)計模式的問題,但對此仍然概念不清。屬于優(yōu)秀的初級開發(fā)者,能完成較松散的代碼開發(fā)(相對大型嚴(yán)謹?shù)恼军c開發(fā)而言),在面對較復(fù)雜問題尋找解決辦法時需要周邊人的幫助。

    3.0:開始較為深入的理解面向?qū)ο缶幊毯驮O(shè)計模式,了解他們的用途,當(dāng)看到好的設(shè)計模式時能看透其本質(zhì),逐步關(guān)注分層的架構(gòu)解決辦法和可測試性。理解不同的開發(fā)語言并能說出他們的異同(例如各自的優(yōu)勢)。屬于優(yōu)秀的中級別開發(fā)者,雇主也確信他們最終能找到問題的解決辦法,這個版本的人可以給1.0和2.0的開發(fā)者以指導(dǎo)。但他們對架構(gòu)的理解仍然不夠清晰,值得一提的是,只要給予一些指導(dǎo),他們能很快理解并熟記做出的決定,以及選定方案的優(yōu)勢所在。

    4.0:理解模式,重視用戶的反饋。著手研究方法論,架構(gòu)設(shè)計和軟件開發(fā)的最佳入口。頭腦中已經(jīng)形成了超越開發(fā)語言,技術(shù)架構(gòu)的整體方案,可根據(jù)需求解構(gòu)程序。能從理論的角度,不同模式如何融合成最佳形態(tài),將多種X-驅(qū)動的模式應(yīng)用到不同的方案中。是精通多語言的高手,理解不同系統(tǒng)和方法論的細微差別,屬于高級程序員。這個級別的人能夠輕易的輔導(dǎo)2.0和3.0的程序員,將他們推向更高的級別。

    5.0:從系統(tǒng)的角度考慮問題。對各種系統(tǒng)結(jié)構(gòu)有深入研究,能對整個代碼架構(gòu)中的問題進行改進。在團隊粘合性以及代碼安全性方面有杰出貢獻。對1.0到4.0版本的開發(fā)人員出現(xiàn)的問題能及時察覺,讓整個團隊保持積極性且保持興奮的狀態(tài)創(chuàng)建軟件解決辦法。舉例來說,他們總是對新的技術(shù)和信息保持饑渴狀態(tài),試圖用最簡便的方案解決開發(fā)任務(wù)。在整個IT團隊中獲得信任,屬于高級程序員和架構(gòu)師。

    那么,您屬于哪個版本的程序員呢?

    posted @ 2008-06-29 23:28 vesung 閱讀(625) | 評論 (1)編輯 收藏

    中國互聯(lián)網(wǎng)審查制度的不透明一直為人所詬病。現(xiàn)在還不清楚56.com是因為什么開罪了監(jiān)管機構(gòu),也不知道該網(wǎng)站會關(guān)閉多久。這些疑問也表明籠罩整個中國互聯(lián)網(wǎng)視頻領(lǐng)域的風(fēng)險,即使是那些有明智投資方支持的大型互聯(lián)網(wǎng)公司也面臨著同樣的問題。該網(wǎng)站至少募集了3,000萬美元資金,投資方中包括風(fēng)險投資巨頭Sequoia Capita和華特•迪斯尼(Walt Disney Co.)旗下的Steamboat Ventures。

    網(wǎng)絡(luò)視頻主管部門之一的中國國家廣電總局(SARFT)沒有回復(fù)記者就56.com問題的采訪申請。該網(wǎng)站首席財務(wù)長張福興(Jay Chang)拒絕發(fā)表評論,其投資方的人士也拒絕置評。

    看來清理行動開始下狠手了。
    posted @ 2008-06-23 08:54 vesung 閱讀(352) | 評論 (0)編輯 收藏

    不說廢話了,直接看代碼:
    頁面:
    <html>
    <head>
    <script type='text/javascript' src='jquery.js'></script>
    <script type='text/javascript'>
    //js代碼1
    <script>

    <body>
    <table>
     
    <tr>
      
    <td>級聯(lián)菜單</td>
      
    <td>
        
    <select name='city' class='amenu'>
         
    <option value=''>-市局全部-</option>
         
    <option value='1'>a市</option>
         
    <option value='2'>b市</option>
         
    <option value='3'>c市</option>
        
    </select>
      
    </td>
      
    <td>
        
    <select name='country' class='amenu'>
         
    <option value=''>-縣局全部-</option>
         
    <option value='1'>test</option>
        
    </select>
      
    </td>
      
    <td>
        
    <select name='taxOffice' class='amenu'>
         
    <option value=''>-所全部-</option>
         
    <option value='1'>test</option>    
        
    </select>
      
    </td>
      
    <td>
        
    <select name='taxOffical' class='amenu'>
         
    <option value=''>-職員全部-</option>
         
    <option value='1'>test</option>    
        
    </select>
      
    </td>
     
    </tr>
    </table>
    </body>

    對應(yīng)的js代碼:
    js代碼1:
    //本菜單是4級級聯(lián)菜單,采用jquery框架來實現(xiàn)
    $(document).ready(function(){
     
    //為所有class為amenu的元素綁定onchange事件
     $('.amenu').change(function(){
      
    //記錄本級菜單標(biāo)志
      var orgLevel = this.name;
      
    //下級菜單
      var nextMenu = $(this).parents().next().children[0];
      
    //ajax動作提交的對象(后臺采用java程序)
      var postUrl = 'pubOrgAjax.do';

      
    //如果本菜單是最后一級菜單的話則不做任何動作
      if(orgLevel=='taxOffical') return true;
      
    //本級菜單選擇為全部選項,則下級菜單也置為全部
      if(this.value == ''){
       
    var firstOption = nextMenu.option[0];
       nextMenu.length
    =0;
       nextMenu.options.add(firstOption);
       
    return true;
      }


      
    //ajax動作
      $.post(postUrl,{orgFlag:orgLevel,orgCode:this.value},function(xml){
        
    var dicts = $('dict',xml);
        
    if(dicts.length<1){alert('返回數(shù)據(jù)錯誤,請重新登陸');return false;}
        
    //清空nextMenu
        if(nextMenu.options[0].value == ''){
          
    var firstOption = nextMenu.options[0].text;
          nextMenu.length 
    = 0;
          nextMenu.options.add(
    new Option(firstOption,''));
        }
    else{
          nextMenu.length 
    = 0;
        }

        
    //為清空后的nextMenu填充新值
        for(var i=0;i<dicts.length;i++){
          
    var newOption = new Option($('name',dicts[i]).text(),$('code',dicts[i]).text());
          nextMenu.options.add(newOption);
        }

        
      }
    );
      
     }
    );
    }
    );

    后臺返回的數(shù)據(jù)格式:
    <?xml version="1.0" cencodeing="gbk"?>
    <ajax-response>
    <response>
     
    <dict>
        
    <code>1</code>
        
    <name>市局1</name>
     
    </dict>
     
    <dict>
     
     
    </dict>

     
    </response>
    </ajax-respnse>

    posted @ 2008-06-12 09:44 vesung 閱讀(9840) | 評論 (5)編輯 收藏

    Yahoo本周發(fā)表研發(fā)一年的Yahoo!BrowserPlus預(yù)覽版,這是一個用來延伸網(wǎng)絡(luò)應(yīng)用的平臺,開發(fā)人員可透過該平臺結(jié)合桌面程序,而用戶只要透過瀏覽器就能執(zhí)行利用該平臺開發(fā)的網(wǎng)絡(luò)應(yīng)用。

    現(xiàn)階段BrowserPlus平臺所提供的功能包括自桌面拖曳、客戶端的圖像處理,以及桌面通知工具等。Yahoo指出,BrowserPlus的最大特色就是可以直接新增或更新服務(wù)而不用重新啟動瀏覽器,甚至不需重新下載網(wǎng)頁,對使用者而言,這代表在執(zhí)行這些新應(yīng)用時不用進行安裝或受到其他干擾;開發(fā)人員則能透過單一的功能呼叫檢視或啟動新服務(wù)。

    Yahoo展示了基于BrowserPlus所設(shè)計的應(yīng)用范例,其中一個為照片上傳工具Photo Uploader,該工具參考了Flickr Uploader桌面應(yīng)用程序的功能,用戶可以透過瀏覽器,從桌面上拖曳照片,并進行諸如旋轉(zhuǎn)、改變大小以及特效等簡單的編輯功能。

    BrowserPlus屬于近來風(fēng)行的豐富網(wǎng)絡(luò)應(yīng)用程序(RIA)平臺,Yahoo利用該平臺替開發(fā)人員處理了復(fù)雜的軟件發(fā)表及更新功能,讓開發(fā)人員及使用者皆能從中受益。

    Yahoo目前僅允許Yahoo及其合作伙伴使用BrowserPlus,預(yù)計在公開版本發(fā)表后才會供其他開發(fā)人員使用。現(xiàn)階段BrowserPlus支持Windows XP及Mac OS X等操作系統(tǒng),以及IE、Firefox及Safari等瀏覽器,未來將支持更多的平臺。

    Yahoo指出,Yahoo致力于開發(fā)開放的平臺,其中一項重點是提供開發(fā)人員用來開發(fā)內(nèi)容的客戶端工具,Yahoo先前已釋出Yahoo用戶接口鏈接庫(Yahoo!User Interface Library,YUI)開放源碼計劃,BrowserPlus則是提供以瀏覽器為基礎(chǔ)的網(wǎng)站開發(fā)解決方案,該平臺之后也將朝開放的目標(biāo)前進。

    豐富網(wǎng)絡(luò)應(yīng)用程序平臺成為各大業(yè)者爭相競逐的領(lǐng)域,市場上類似的平臺還包括微軟發(fā)表的Silverlight、Adobe的AIR,以及Mozilla基金會所開發(fā)的Prism等

    posted @ 2008-06-05 08:50 vesung 閱讀(423) | 評論 (0)編輯 收藏

    (轉(zhuǎn)載)
    2007年6月項目準(zhǔn)備開始了,剛來到一個新的項目組,什么都是新的,除了我自己。

    需要一個新的框架來開發(fā)項目,香港的同事決定使用Dojo,DWR, 我開始學(xué)習(xí)使用dojo,時間很短,但是我還是基本上熟悉了dojo的基本控件和架構(gòu)。在此基礎(chǔ)上搭建起了項目的基本框架。這是一個單頁面,基于ajax和dojo widget的系統(tǒng),一切都那么的新奇,又充滿挑戰(zhàn),但是既然dojo有這么多后臺,又有香港同事的推薦,我顯得自信滿滿。

    框架搭建的同事,也開始后了緊鑼密鼓的招兵買馬,一起都像是從零開始。陸陸續(xù)續(xù),招了5個程序員和一個測試員。開始了整個項目的快速開發(fā),由于需求由香港負責(zé),而且需求做的比較細致,基本上問題很少。Dojo 卻是麻煩不斷。

    首先的一個壞消息是當(dāng)我們做完了幾乎全部300個頁面的時候,dojo宣布0.43不在得到支持,取而代之是完全不同的dojo0.9。 而且dojo0.9 還不是穩(wěn)定的版本,問題多多,讓我們騎虎難下,最后還是決定按兵不動。 隨之而來,是dojo1.0,dojo1.1 的陸續(xù)發(fā)布,但是一直都無法讓我看到希望的曙光。 與之相對的是ext在國內(nèi)的廣泛使用和熱烈追捧。

    Dojo 的控件有很多奇怪的地方,日期選擇控件的行為非常怪異,與國內(nèi)的使用習(xí)慣很不相同。而且樣式極其丑陋,當(dāng)字體放大縮小的時候更是丑陋。顯示的格式和保存的格式需要分別指定。我們修改了大量的代碼。

    dojo 的下拉框也被用戶投訴,過濾之后一定要再選擇一次或者按回車才能選定結(jié)果,前臺值和后臺值分開操作也帶來很多不變。

    dojo 的驗證文本框顏色現(xiàn)實有bug,我們不得不修改代碼

    dojo的對話框也有問題,對話框中無法在彈出對話框。對話框的操作和控制很不靈活。

    js代碼不利于管理,容易發(fā)生命名沖突。

     

    致命的問題發(fā)生在項目的后期,在客戶的系統(tǒng)進行測試時發(fā)現(xiàn)。dojo的性能非常差,在賽揚2G的電腦上,一個頁面顯示的時間竟然需要17秒。簡直就是噩夢。

    另外使用dojo的對話框時出現(xiàn)cpu占用100%而且一直不回落下來。

    頁面載入完成的時候,它有將整個頁面重新刷新一次,又需要花費額外的5到8s時間,不僅花費更多的時間,而且嚴(yán)重影響客戶體驗。

     

    還有開發(fā)過程中碰到的無數(shù)問題,雖然一個一個被解決,但是無疑是一次一次痛苦的煎熬。

     

    最后,在性能面前,我被dojo徹底打敗,如此的速度是任何客戶都無法忍受的,客戶不可能為了這個系統(tǒng)全部升級電腦cpu。而且還有很多未知的問題可能還沒有被發(fā)覺,不如內(nèi)存泄露,可能導(dǎo)致資源耗盡,內(nèi)存耗盡。cpu 的占用可能在使用時間長了之后越來越高,等等,這些都是我擔(dān)心的問題。

     

    使用Ajax或者說Rich client,一定要謹慎啊。使用新的技術(shù)和框架,一定要謹慎,這是我的教訓(xùn),希望給同行們一個參考。

    posted @ 2008-06-04 11:32 vesung 閱讀(2099) | 評論 (2)編輯 收藏

    看兩段代碼:
    import java.util.ArrayList;   
    import java.util.List;   
      
    public class TailRecursionTest {   
        
    public static void main(String[] args) {   
            TailRecursionTest t 
    = new TailRecursionTest();   
            
    for (int i = 0; i < 10000; i++)   
                t.a(
    0);   
        }
       
      
        
    public void a(int j) {   
            j
    ++;   
            List list 
    = new ArrayList<Integer>(100000);   
            
    // 對list進行處理   
        }
       
    }

    沒啥特殊的,僅僅是為了測試,我們將a方法調(diào)用10000次,a方法創(chuàng)建一個有100000個元素的list的局部變量。
    第二個程序:
    import java.util.ArrayList;   
    import java.util.List;   
      
    public class TailRecursionTest2 {   
        
    public static void main(String[] args) {   
            TailRecursionTest2 t 
    = new TailRecursionTest2();   
            t.a(
    0);   
        }
       
      
        
    public void a(int j) {   
            System.out.println(j);   
            j
    ++;   
            
    if (j == 10000)   
                
    return;   
            List list 
    = new ArrayList<Integer>(100000);   
            
    // 對list進行處理   
            a(j);   
        }
       
    }
      

    也沒啥特殊的,就是將循環(huán)換成了遞歸,a方法做的事情沒變。兩個都跑一下,程序1順利結(jié)束,程序2出問題了,啥問題?如下:
    161  
    162  
    163  
    164  
    165  
    Exception in thread 
    "main" java.lang.OutOfMemoryError: Java heap space   
        at java.util.ArrayList.
    <init>(Unknown Source)   
        at TailRecursionTest2.a(TailRecursionTest2.java:
    17)   
        at TailRecursionTest2.a(TailRecursionTest2.java:
    20)   
        at TailRecursionTest2.a(TailRecursionTest2.java:
    20)   
        at TailRecursionTest2.a(TailRecursionTest2.java:
    20)   
        at TailRecursionTest2.a(TailRecursionTest2.java:
    20

    我倒,才運行166次了,heap就滿了。問題在哪呢?oh,yep,你肯定想到了,是不是重復(fù)創(chuàng)建list這個大集合引起的呢?它不是局部變量嗎?怎么也會溢出?是的,list是局部變量,在a的方法棧里引用著,指向heap上的大對象,更關(guān)鍵的問題在于,java是沒有尾遞歸優(yōu)化的,遞歸方法是不會使用同一個棧幀,每一次遞歸調(diào)用,都將壓入新的棧幀,并且這個棧幀上又new了一個list變量,引用著heap上新的一個大集合。隨著棧深度的增加, jvm里維持著一條長長的方法調(diào)用軌跡以便你能回來,在方法沒有返回之前,這些list變量一直被各自的棧幀引用著,不能被GC,你說,能不OOM嗎?

        也許,你想到了個補救方法來挽救程序2,就是每次在處理完list后,我把它設(shè)置為null,不讓棧幀繼續(xù)引用著它,咱編寫對gc友好的代碼,這不就行了,試試:


    import java.util.ArrayList;   
    import java.util.List;   
      
    public class TailRecursionTest2 {   
        
    public static void main(String[] args) {   
            TailRecursionTest2 t 
    = new TailRecursionTest2();   
            t.a(
    0);   
        }
       
      
        
    public void a(int j) {   
            System.out.println(j);   
            j
    ++;   
            
    if (j == 10000)   
                
    return;   
            List list 
    = new ArrayList<Integer>(100000);   
            
    // 對list進行處理   
            list = null;  //gc友好   
            a(j);   
        }
       
    }
     

    得意洋洋,我跑一下看看,這次跑到4000多次,但是:
       
    4289  
    4290  
    4291  
    4292  
    java.lang.StackOverflowError   
        at sun.nio.cs.ext.DoubleByteEncoder.encodeArrayLoop(Unknown Source)   
        at sun.nio.cs.ext.DoubleByteEncoder.encodeLoop(Unknown Source)   
        at java.nio.charset.CharsetEncoder.encode(Unknown Source) 

    總結(jié):在java里,遞歸最好咱還是別用,老老實實地while、for;就算遞歸了,最好遞歸方法不要new太大的對象,除非你能確定遞歸的深度不是那么大,否則OOM和堆棧溢出的陰影將籠罩著你。
    posted @ 2008-06-03 09:14 vesung 閱讀(1565) | 評論 (0)編輯 收藏

    先看下面表格:

    作用域
    當(dāng)前類 同一package 子孫類
    其他package
    public √   
    √   
    √   
    √   
    protected
    √   
    √   
    √   
      × 
    default √   
    √   
      × 
      × 
    private √   
      × 
      × 
      × 

    不寫時默認為default

    我們先看類:

    public class  Test 可以在任何地方訪問,無論是否為當(dāng)前package
    class Test 只允許當(dāng)前的package使用,不允許其它package使用
    class 不與許prirvate和protected ,所以不討論了

    我們再看方法
    private 的只允許類自己使用,子類都不可見。但允許inner類調(diào)用,因為inner類屬于他自己。

    class Test 里面的方法
      public 和default和protected 方法,允許同包的訪問,因為類是default的,所以方法不可能大于它

    public class Test 里面的方法
      private 只允許自己內(nèi)部訪問
     default 只允許同包的訪問
      protected 只允許同包和子類訪問
      public 可以任意訪問
    posted @ 2008-06-02 09:12 vesung 閱讀(879) | 評論 (0)編輯 收藏

         摘要:   默認的序列化機制并不難操縱。然而,假若有特殊要求又該怎么辦呢?我們可能有特殊的安全問題,不希望對象的某一部分序列化;或者某一個子對象完全不必序列化,因為對象恢復(fù)以后,那一部分需要重新創(chuàng)建。 此時,通過實現(xiàn)Externalizable接口,用它代替Serializable接口,便可控制序列化的具體過程。這個Externalizable接口擴展了Serializable,并增添了兩個...  閱讀全文
    posted @ 2008-05-28 12:00 vesung 閱讀(677) | 評論 (0)編輯 收藏

    JNDI是J2EE中一個很重要的標(biāo)準(zhǔn),通常我們是在EJB編程中用到, 
    Tomcat4.0中提供了在JSP和Servelt中直接使用JNDI的方法,下面談一下在Tomcat4.0中配置和使用JNDI的方法 
    (以通過JNDI連接數(shù)據(jù)庫為例) 
    假設(shè)使用的數(shù)據(jù)庫是mysql,實驗例子在TOMCAT_HOME/webapps/DBTest目錄中 

    A.將mysql的JDBC連接庫mm.mysql-2.0.9-bin.jar放入TOMCAT_HOME/common/lib中 

    B.配置TOMCAT_HOME/conf/serer.xml文件在<Service>;段中加入一個Context: 
    <Context path="/DBTest" docBase="DBTest" 
    debug="5" reloadable="true" crossContext="true"> 
    </Context> 
    這是DBTest的根路徑,這是為了在DBTest中使用做準(zhǔn)備. 

    C.在上面加入的<Context>;段加入 
    <Resource name="jdbc/TestDB" 
    auth="Container" 
    type="javax.sql.DataSource"/> 

    <ResourceParams name="jdbc/TestDB">
    <parameter> 
    <name>;factory</name> 
    <value>;org.apache.commons.dbcp.BasicDataSourceFactory</value> 
    </parameter> 

    <!-- Maximum number of dB connections in pool. Make sure you 
    configure your mysqld max_connections large enough to handle 
    all of your db connections. Set to 0 for no limit. 
    --> 
    <parameter>
    <name>;maxActive</name>
    <value>;100</value>
    </parameter>

    <!-- Maximum number of idle dB connections to retain in pool. 
    Set to 0 for no limit. 
    -->
    <parameter> 
    <name>;maxIdle</name> 
    <value>;30</value> 
    </parameter> 

    <!-- Maximum time to wait for a dB connection to become available 
    in ms, in this example 10 seconds. An Exception is thrown if 
    this timeout is exceeded. Set to -1 to wait indefinitely. 
    --> 
    <parameter> 
    <name>;maxWait</name> 
    <value>;10000</value> 
    </parameter> 

    <!-- MySQL dB username and password for dB connections --> 
    <parameter> 
    <name>;username</name>; 
    <value>;test</value> 
    </parameter> 
    <parameter> 
    <name>;password</name> 
    <value>;test</value> 
    </parameter> 

    <!-- Class name for mm.mysql JDBC driver -->; 
    <parameter>; 
    <name>;driverClassName</name>; 
    <value>;org.gjt.mm.mysql.Driver</value> 
    </parameter> 

    <!-- The JDBC connection url for connecting to your MySQL dB.--> 
    <parameter> 
    <name>;url</name> 
    <value>;jdbc:mysql://localhost:3306/test</value> 
    </parameter> 
    </ResourceParams> 

    這里每一個小段都有英文注解,是Tomcat提供的,我們可以將按照Sample加入,主要修改的是driverClassName, 
    url,和用戶帳號;需要強調(diào)的是"jdbc/TestDB"就是JDNI要查找的Name.

    在web.xml中加入 
    <resource-ref> 
    <description>;DB Connection</description> 
    <res-ref-name>;jdbc/TestDB</res-ref-name> 
    <res-type>;javax.sql.DataSource</res-type> 
    <res-auth>;Container</res-auth> 
    </resource-ref> 
    這里的jdbc/TestDb要和C中Resource段的name匹配 

    posted @ 2008-04-25 09:02 vesung 閱讀(431) | 評論 (0)編輯 收藏

    一、DataSource接口是一個更好的連接數(shù)據(jù)源的方法:
      JDBC1.0是原來是用DriverManager類來產(chǎn)生一個對數(shù)據(jù)源的連接。JDBC2.0用一種替代的方法,使用DataSource的實現(xiàn),代碼變的更小巧精致,也更容易控制。
      一個DataSource對象代表了一個真正的數(shù)據(jù)源。根據(jù)DataSource的實現(xiàn)方法,數(shù)據(jù)源既可以是從關(guān)系數(shù)據(jù)庫,也電子表格,還可以是一個表格形式的文件。當(dāng)一個DataSource對象注冊到名字服務(wù)中,應(yīng)用程序就可以通過名字服務(wù)獲得DataSource對象,并用它來產(chǎn)生一個與DataSource代表的數(shù)據(jù)源之間的連接。
      關(guān)于數(shù)據(jù)源的信息和如何來定位數(shù)據(jù)源,例如數(shù)據(jù)庫服務(wù)器的名字,在哪臺機器上,端口號等等,都包含在DataSource對象的屬性里面去了。這樣,對應(yīng)用程序的設(shè)計來說是更方便了,因為并不需要硬性的把驅(qū)動的名字寫死到程序里面去。通常驅(qū)動名字中都包含了驅(qū)動提供商的名字,而在DriverManager類中通常是這么做的。如果數(shù)據(jù)源要移植到另一個數(shù)據(jù)庫驅(qū)動中,代碼也很容易做修改。所需要做的修改只是更改DataSource的相關(guān)的屬性。而使用DataSource對象的代碼不需要做任何改動。
      由系統(tǒng)管理員或者有相應(yīng)權(quán)限的人來配置DataSource對象。配置DataSource,包括設(shè)定DataSource的屬性,然后將它注冊到JNDI名字服務(wù)中去。在注冊DataSource對象的的過程中,系統(tǒng)管理員需要把DataSource對象和一個邏輯名字關(guān)聯(lián)起來。名字可以是任意的,通常取成能代表數(shù)據(jù)源并且容易記住的名字。在下面的例子中,名字起為:InventoryDB,按照慣例,邏輯名字通常都在jdbc的子上下文中。這樣,邏輯名字的全名就是:jdbc/ InventoryDB。
      一旦配置好了數(shù)據(jù)源對象,應(yīng)用程序設(shè)計者就可以用它來產(chǎn)生一個與數(shù)據(jù)源的連接。下面的代碼片段示例了如何用JNDI上下文獲得一個一個數(shù)據(jù)源對象,然后如何用數(shù)據(jù)源對象產(chǎn)生一個與數(shù)據(jù)源的連接。開始的兩行用的是JNDI API,第三行用的才是JDBC的API:
       Context ctx = new InitialContext(); DataSource ds = (DataSource)ctx.lookup("jdbc/InventoryDB");Connection con = ds.getConnection("myPassword", "myUserName");
      在一個基本的DataSource實現(xiàn)中,DataSource.getConnection方法返回的Connection對象和用DriverManager.getConnection方法返回的Connection對象是一樣的。因為DataSource提供的方便性,我們推薦使用DataSource對象來得到一個Connection對象。我們希望所以的基于JDBC2.0技術(shù)的數(shù)據(jù)庫驅(qū)動都包含一個基本的DataSource的實現(xiàn),這樣就可以在應(yīng)用程序中很容易的使用它。
      對于普通的應(yīng)用程序設(shè)計者,是否使用DataSource對象只是一個選擇問題。但是,對于那些需要用的連接池或者分布式的事務(wù)的應(yīng)用程序設(shè)計者來說,就必須使用DataSource對象來獲得Connection,原因在下面我們會提到。
       二、Connection pooling(連接池):
      連接池是這么一種機制,當(dāng)應(yīng)用程序關(guān)閉一個Connection的時候,這個連接被回收,而不是被destroy,因為建立一個連接是一個很費資源的操作。如果能把回收的連接重新利用,會減少新創(chuàng)建連接的數(shù)目,顯著的提高運行的性能。
      假設(shè)應(yīng)用程序需要建立到一個名字為EmpolyeeDB的DataSource的連接。使用連接池得到連接的代碼如下:
       Context ctx = new InitialContext(); DataSource ds = (DataSource)ctx.lookup("jdbc/EmployeeDB");Connection con = ds.getConnection("myPassword", "myUserName");除了邏輯名字以外,我們發(fā)現(xiàn)其代碼和上面舉的例子的代碼是一樣的。邏輯名字不同,就可以連接到不同的數(shù)據(jù)庫。DataSource對象的getConnection方法返回的Connection是否是一個連接池中的連接完全取決于DataSource對象的實現(xiàn)方法。如果DataSource對象實現(xiàn)與一個支持連接池的中間層的服務(wù)器一起工作,DataSource對象就會自動的返回連接池中的連接,這個連接也是可以重復(fù)利用的。
      是否使用連接池獲得一個連接,在應(yīng)用程序的代碼上是看不出不同的。在使用這個Connection連接上也沒有什么不一樣的地方,唯一的不同是在java的finally語句塊中來關(guān)閉一個連接。在finally中關(guān)閉連接是一個好的編程習(xí)慣。這樣,即使方法拋出異常,Connection也會被關(guān)閉并回收到連接池中去。代碼應(yīng)該如下所示:
      try{…
      }catch(){…
      }finally{ if(con!=null)con.close();}
      三、分布式事務(wù):
      獲得一個用來支持分布式事務(wù)的連接與獲得連接池中的連接是很相似的。同樣,不同之處在于DataSource的實現(xiàn)上的不同,而不是在應(yīng)用程序中獲得連接的方式上有什么不同。假設(shè)DataSource的實現(xiàn)可以與支持分布式事務(wù)中間層服務(wù)器一起工作,得到連接的代碼還是如下所示:
       Context ctx = new InitialContext(); DataSource ds = (DataSource)ctx.lookup("jdbc/EmployeeDB"); Connection con = ds.getConnection("myPassword", "myUserName");由于性能上的原因,如果一個DataSource能夠支持分布式的事務(wù),它同樣也可以支持連接池管理。
      從應(yīng)用程序設(shè)計者的觀點來看。是否支持分布式的事務(wù)的連接對它來說沒什么不同,唯一的不同是在事務(wù)的邊界上(開始一個事務(wù)的地方和結(jié)束一個事務(wù)的地方),開始一個事務(wù)或者結(jié)束一個事務(wù)都是由事務(wù)服務(wù)器來控制的。應(yīng)用程序不應(yīng)該做任何可能妨礙服務(wù)的事情。應(yīng)用程序不能夠直接調(diào)用事務(wù)提交commit或者回滾rollback操作,也不能夠使用事務(wù)的自動提交模式auto-commit mode(在數(shù)據(jù)庫操作完成的時候自動的調(diào)用commit或者rollback)。 
     
    在一個連接參與了分布式事務(wù)的時候,下面的代碼是你不能做的(con表示支持分布式事務(wù)的連接Connection)。
      con.commit();或者con.rollback();或者con.setAutoCommit(true);對于通常的Connection來說,缺省的是auto-commit模式。而對于支持分布式事務(wù)的Connection來說,缺省不是auto-commit模式。注意,即使Connection是支持事務(wù)的,它也可以用于沒有事務(wù)的情況。關(guān)于事務(wù)邊界的限制只是是對分布式事務(wù)的情況下才成立的。
      配置支持連接池的DataSource的時候,涉及到配置ConnectionPoolDataSource對象,這個對象是三層體系結(jié)構(gòu)中的中間層來管理連接池的。同樣的,在配置支持分布式事務(wù)的時候,需要配置XADataSource,XADataSource是中間層用來管理分布式事物的對象。ConnectionPoolDataSource和XADataSource是由驅(qū)動提供商提供的,對應(yīng)用程序的設(shè)計者來說是透明的。和基本的DataSource一樣,系統(tǒng)管理員來配置ConnectionPoolDataSource和XADataSource對象。
      四、結(jié)果集(RowSet接口):
      結(jié)果集對象是一行行數(shù)據(jù)的容器。根據(jù)其目的,可以通過多種方法實現(xiàn)。RowSet及其相關(guān)的接口與JDBC2.0的標(biāo)準(zhǔn)擴展API有點不同,他們并不是驅(qū)動的一部分,RowSet是在驅(qū)動的上層實現(xiàn)的,可以由其它的任何人來實現(xiàn)他們。
      任何類型的rowset都實現(xiàn)了RowSet接口,RowSet接口擴展了ResultSet接口。這樣RowSet對象就有了ResultSet對象所有的功能。能夠通過getXXX方法得到數(shù)據(jù)庫中的某列值,通過updateXXX方法可以修改某列值,可以移動光標(biāo),是當(dāng)前行變?yōu)榱硪恍小?
      當(dāng)然,我們更感興趣的是RowSet接口提供的新的功能。作為一個JavaBean組件,RowSet對象可以增加或者刪除一個listener(監(jiān)聽者),可以get或者set其屬性值,這些屬性中,有一個是字符串,表示一個對數(shù)據(jù)庫Query請求,RowSet接口定義了設(shè)定參數(shù)的方法,也提供了執(zhí)行這個請求的方法。這意味著RowSet對象能夠執(zhí)行查詢請求,可以根據(jù)它產(chǎn)生的結(jié)果集進行計算。同樣,RowSet也可以根據(jù)任何表格數(shù)據(jù)源進行計算,所以,它不局限于關(guān)系數(shù)據(jù)庫。
      從數(shù)據(jù)源得到數(shù)據(jù)之后,RowSet對象可以和數(shù)據(jù)源斷開連接,rowset也可以被序列化。這樣,RowSet就可以通過網(wǎng)絡(luò)傳遞給瘦客戶端。
      RowSet可以被重新連接到數(shù)據(jù)源,這樣,做的修改就可以存回到數(shù)據(jù)源中去。如果產(chǎn)生了一個listener,當(dāng)RowSet的當(dāng)前行移動,或者數(shù)據(jù)被修改的時候,監(jiān)聽者就會收到通知。例如,圖形用戶界面組件可以注冊成為監(jiān)聽者,當(dāng)RowSet更改的時候,圖形用戶界面接到通知,就可以修改界面,來符合它所表示的RowSet。
      根據(jù)不同的需要,RowSet接口可以通過多種方法來實現(xiàn)。Java software已經(jīng)寫了一個CachedRowSet實現(xiàn),從http://developer.java.sun.com/developer/earlyAccess/crs/index.html中可以得到這個實現(xiàn)。
      與CachedRowSet類不樣的是,JDBCRowSet類總是保持一個和數(shù)據(jù)源的連接。這樣,在ResultSet外圍簡單到加了一層,是基于JDBC技術(shù)的驅(qū)動看起來象是一個簡單的JavaBean組件一樣。

      總結(jié):JDBC2.0標(biāo)準(zhǔn)擴展API通過見DataSource注冊到JNDI名字服務(wù)上,將JDBC技術(shù)擴展為一個全新的概念。使應(yīng)用程序的代碼更加精巧,易于控制。新的API支持了連接池,支持分布式的事務(wù)。最后,還使java應(yīng)用程序可以在網(wǎng)絡(luò)上傳播結(jié)果集,是不可以滾動的ResultSet變成了可以滾動的RowSet。
    posted @ 2008-04-21 08:58 vesung 閱讀(3256) | 評論 (0)編輯 收藏

    JDBC 2.0 API被劃分為兩部分:JDBC 2.0核心API和JDBC 2.0標(biāo)準(zhǔn)擴展API。核心API在java.sql里面。這是原來的版本就實現(xiàn)了的基本的功能。標(biāo)準(zhǔn)擴展API在javax.sql里面。由JDBC2.0規(guī)范新規(guī)定的一些接口在這里面。當(dāng)然,JDBC2.0也對原來版本的java.sql核心做了一些改動。不過不是很大。原來JDBC1.0的程序可以不加修改的在JDBC2.0上運行。這是Java的一貫的良好的作風(fēng)。最新的JDBC包可以從sun公司的網(wǎng)站上下載。 
      JDBC2.0的擴展API增加了一些數(shù)據(jù)訪問和數(shù)據(jù)源訪問的重大的功能。這中間有一些是主要用來做企業(yè)計算的。用JDBC2.0的新的擴展包,JDBC提供了一個從JAVA2平臺的通用的數(shù)據(jù)訪問的方法。
      首先,我們來看看JDBC標(biāo)準(zhǔn)擴展的API怎樣來和JDBC2.0結(jié)合在一起的。JDBC2.0包括兩個包:
      1、 java.sql包,個包里面是JDBC2.0的核心API。它包括了原來的JDBC API(JDBC 1.0版本),再加上一些新的2.0版本的API。這個包在Java 2 Platform SDK里面有。
      2、 javax.sql包,這里面是JDBC2.0的標(biāo)準(zhǔn)擴展API。這個包是一個全新的,在Java 2 Platform SDK, Enterprise Edition里面單獨提供。
      JDBC2.0的核心API包括了JDBC1.0的API,并在此基礎(chǔ)上增加了一些功能,對某些性能做了增強。使java語言在數(shù)據(jù)庫計算的前端提供了統(tǒng)一的數(shù)據(jù)訪問方法,效率也得到了提高。
      JDBC是向后兼容的,JDBC1.0的程序可以不加修改的運行在JDBC2.0上。但是,假如程序中用到了JDBC2.0的新特性,就必須要運行在JDBC2.0版本上。
      概括的來說,JDBC核心API的新特性在兩個方面做了工作。一個是支持一些新的功能,另一個就是支持SQL3的數(shù)據(jù)類型。
      1、 在支持新功能方面:包括結(jié)果集可以向后滾動,批量的更新數(shù)據(jù)。另外,還提供了UNICODE字符集的字符流操作。
      2、 在支持SQL3的數(shù)據(jù)類型方面:包括新的SQL3數(shù)據(jù)類型,增加了對持久性對象的存貯。
      為了對數(shù)據(jù)的存取,操作更加方便,JDBC的新特性是應(yīng)用程序的設(shè)計更容易了。例如:數(shù)據(jù)塊的操作能夠顯著的提高數(shù)據(jù)庫訪問的性能。新增加的BLOB, CLOB,和數(shù)組接口能夠是應(yīng)用程序操作大塊的數(shù)據(jù)類型,而不必客戶端在存貯之前進行其它的處理。這樣,就顯著的提高了內(nèi)存的使用效率。
       下面我們來介紹JDBC2.0的標(biāo)準(zhǔn)擴展API。標(biāo)準(zhǔn)擴展API分為如下幾個方面:
      1、 DataSource接口:和Java名字目錄服務(wù)(JNDI)一起工作的數(shù)據(jù)源接口。它提供了對數(shù) 吹囊恢指玫牧臃椒ā?br>;  2、 Connection pooling(連接池):可以重復(fù)使用連接,而不是對每個請求都使用一個新的連接。
      3、 Distrubute transaction(分布式的事務(wù)):在一個事務(wù)中涉及到了多個數(shù)據(jù)庫服務(wù)器。
      4、 Rowsets:JavaBean組件包含了結(jié)果集,主要用來將數(shù)據(jù)傳給瘦客戶,或者提供一個可以滾動的結(jié)果集。
    posted @ 2008-04-10 11:29 vesung 閱讀(713) | 評論 (0)編輯 收藏

    1.$("#idName")
        獲取元素id為idName的元素 
     如:html
    <a id="myLinck" href="#"></a>
    $("#myLinck") 會返回<a id="myLinck"></a>元素
    -----------------------------------
    2.$(".className")
        獲取元素class屬性為className的元素集合
    如:html
    <a class="a1" href="#">1</a>
    <a class="a1" href="#">2</a>
    <a class="a2" href="#">3</a>
    $(".a1")返回[<a class="a1" href="#">1</a>,<a class="a1" href="#">2</a>]
    ---------------------------------------
    3.$("input[@type='text']")
        獲取所有type=text的input元素
    如:html
    <input type='text'/>
    <input type='text/>
    <input type='checkbox'/>
    $("input[@type='text']")返回[<input type='text'/><input type='text/>]
    posted @ 2008-03-24 17:53 vesung 閱讀(539) | 評論 (0)編輯 收藏

    普通的dom對象一般可以通過$()轉(zhuǎn)換成jquery對象。
    如:$(document.getElementById("msg"))則為jquery對象,可以使用jquery的方法。
    由于jquery對象本身是一個集合。所以如果jquery對象要轉(zhuǎn)換為dom對象則必須取出其中的某一項,一般可通過索引取出。
    如:$("#msg")[0],$("div").eq(1)[0],$("div").get()[1],$("td")[5]這些都是dom對象,可以使用dom中的方法,但不能再使用Jquery的方法。
    以下幾種寫法都是正確的: 字串8

    $("#msg").html();
    $("#msg")[0].innerHTML;
    $("#msg").eq(0)[0].innerHTML;
    $("#msg").get(0).innerHTML;

    posted @ 2008-03-24 17:38 vesung 閱讀(693) | 評論 (0)編輯 收藏

    為了支持 AJAX 功能。這個包定義了 Ajax.Request 類。

    假如你有一個應(yīng)用程序可以通過url http://yoursever/app/get_sales?empID=1234&year=1998與服務(wù)器通信。它返回下面這樣的XML 響應(yīng)。

     

     

    <?xml version="1.0" encoding="utf-8" ?>
    <ajax-response>
        
    <response type="object" id="productDetails">
            
    <monthly-sales>
                
    <employee-sales>
                    
    <employee-id>1234</employee-id>
                    
    <year-month>1998-01</year-month>
                    
    <sales>$8,115.36</sales>
                
    </employee-sales>
                
    <employee-sales>
                    
    <employee-id>1234</employee-id>
                    
    <year-month>1998-02</year-month>
                    
    <sales>$11,147.51</sales>
                
    </employee-sales>
            
    </monthly-sales>
        
    </response>
    </ajax-response>

     

    Ajax.Request對象和服務(wù)器通信并且得到這段XML是非常簡單的。下面的例子演示了它是如何完成的。

     

    <script>
        
    function searchSales()
        
    {
            
    var empID = $F('lstEmployees');
            
    var y = $F('lstYears');
            
    var url = 'http://yoursever/app/get_sales';
            var pars = 'empID=+ empID + '&year=+ y;
           
    var myAjax = new Ajax.Request(
                        url,
                        
    {method: 'get', parameters: pars, onComplete: showResponse}
                        );

        }


        
    function showResponse(originalRequest)
        
    {
            
    //put returned XML in the textarea
            $('result').value = originalRequest.responseText;
        }

    </script>

    <select id="lstEmployees" size="10" onchange="searchSales()">
        
    <option value="5">Buchanan, Steven</option>
        
    <option value="8">Callahan, Laura</option>
        
    <option value="1">Davolio, Nancy</option>
    </select>
    <select id="lstYears" size="3" onchange="searchSales()">
        
    <option selected="selected" value="1996">1996</option>
        
    <option value="1997">1997</option>
        
    <option value="1998">1998</option>
    </select>
    <br><textarea id=result cols=60 rows=10 ></textarea>


    你看到傳入 Ajax.Request構(gòu)造方法的第二個對象了嗎? 參數(shù){method: 'get', parameters: pars, onComplete: showResponse} 表示一個匿名對象的真實寫法。他表示你傳入的這個對象有一個名為 method 值為 'get'的屬性,另一個屬性名為 parameters 包含HTTP請求的查詢字符串,和一個onComplete 屬性/方法包含函數(shù)showResponse

    還有一些其它的屬性可以在這個對象里面定義和設(shè)置,如 asynchronous,可以為truefalse 來決定AJAX對服務(wù)器的調(diào)用是否是異步的(默認值是 true)。

    這個參數(shù)定義AJAX調(diào)用的選項。在我們的例子中,在第一個參數(shù)通過HTTP GET命令請求那個url,傳入了變量 pars包含的查詢字符串, Ajax.Request 對象在它完成接收響應(yīng)的時候?qū)⒄{(diào)用showResponse 方法。

    也許你知道, XMLHttpRequest在HTTP請求期間將報告進度情況。這個進度被描述為四個不同階段:Loading, Loaded, Interactive, 或 Complete。你可以使 Ajax.Request 對象在任何階段調(diào)用自定義方法 ,Complete 是最常用的一個。想調(diào)用自定義的方法只需要簡單的在請求的選項參數(shù)中的名為 onXXXXX 屬性/方法中提供自定義的方法對象。 就像我們例子中的 onComplete 。你傳入的方法將會被用一個參數(shù)調(diào)用,這個參數(shù)是 XMLHttpRequest 對象自己。你將會用這個對象去得到返回的數(shù)據(jù)并且或許檢查包含有在這次調(diào)用中的HTTP結(jié)果代碼的 status 屬性。

    還有另外兩個有用的選項用來處理結(jié)果。我們可以在onSuccess 選項處傳入一個方法,當(dāng)AJAX無誤的執(zhí)行完后調(diào)用, 相反的,也可以在onFailure選項處傳入一個方法,當(dāng)服務(wù)器端出現(xiàn)錯誤時調(diào)用。正如onXXXXX 選項傳入的方法一樣,這兩個在被調(diào)用的時候也傳入一個帶有AJAX請求的XMLHttpRequest對象。

    我們的例子沒有用任何有趣的方式處理這個 XML響應(yīng), 我們只是把這段XML放進了一個文本域里面。對這個響應(yīng)的一個典型的應(yīng)用很可能就是找到其中的想要的信息,然后更新頁面中的某些元素, 或者甚至可能做某些XSLT轉(zhuǎn)換而在頁面中產(chǎn)生一些HTML。
    完。
    摘自:https://compdoc2cn.dev.java.net

    posted @ 2008-03-21 17:45 vesung 閱讀(879) | 評論 (0)編輯 收藏

    ? Fed救市之舉令中國控制通脹難度加大 (原文地址)
            在援救完貝爾斯登公司(Bear Stearns Cos.)后,美國聯(lián)邦儲備委員會(Fed)主席貝南克(Ben Bernanke)今晚可能會再次送出減息良藥。(編者:最新消息,F(xiàn)ed周二已宣布將關(guān)鍵利率下調(diào)75個基點。)而這對于香港和中國大陸市場來說又意味著什么呢?對正面臨著十幾年來最高通貨膨脹率的中國貨幣政策制定者而言,F(xiàn)ed的“靈丹”卻可能產(chǎn)生副作用。但是,只要中國繼續(xù)堅持現(xiàn)行的匯率制度,就不得不生生吞下這顆藥丸,而且還必須硬著頭皮去應(yīng)對。中國央行(People's Bank of China)加息而Fed大幅降息,產(chǎn)生的直接影響就是中美利差進一步擴大,使得熱錢問題再次成為眾矢之的。上周公布的數(shù)據(jù)顯示,F(xiàn)ed 1月份的緊急降息造成中美貨幣市場利差達到了50個基點,并使得流入中國大陸的外商直接投資規(guī)模進一步增大。今年前兩個月流入中國大陸的外商直接投資較上年同期增長了75%。這些外資到底是進行商業(yè)投資還是純粹出于投機目的不得而知,不過可以肯定的一點是,中美利差的擴大勢必會增強人民幣升值預(yù)期。上周五人民幣升至匯改以來最高水平,達到1美元兌人民幣7.0844元。
    .... ...
    ? Fed救市之舉令中國控制通脹難度加大 
    posted @ 2008-03-19 09:24 vesung 閱讀(292) | 評論 (0)編輯 收藏

    struts響應(yīng)用戶請求的工作流程:

    Request

    |
    V

    ActionServlet

    |

    如果不存在相應(yīng)的Action則否則返回error,流程結(jié)束

    |
    V

    創(chuàng)建ActionForm

    |

    進行validatge校驗,如果沒有通過校驗則返回error


    創(chuàng)建Action

    |
    V

    執(zhí)行Action的execute方法,并返回ActionForword對象

    |
    V

    return respose
    結(jié)束

     

     

    posted @ 2008-03-11 11:22 vesung 閱讀(744) | 評論 (1)編輯 收藏

         摘要: 文章來源:新浪網(wǎng)

    基于城鎮(zhèn)居民和農(nóng)村居民的人均純收入實現(xiàn)較大躍升的現(xiàn)實,國務(wù)院總理溫家寶在今年的政府工作報告中特別強調(diào)了收入分配的問題,“逐步提高居民收入在國民收入分配中的比重,提高勞動報酬在初次分配中比重”。

      個中關(guān)鍵就是要“調(diào)整國民收入分配格局,深化收入分配制度改革。”并多渠道增加農(nóng)民收入,確保農(nóng)民工工資按時足額發(fā)放。還要“提高企業(yè)職工工資的水平,建立企業(yè)職工工資正常增長和支付保障機制,……健全并落實最低工資制度。”

      同時,改革國有企業(yè)工資總額管理辦法,加強對壟斷行業(yè)企業(yè)工資監(jiān)管。對此,勞動和社會保障部勞動工資司司長邱小平表示,既要通過采取措施,促進非壟斷行業(yè)的企業(yè)職工工資收入逐步提高;又要對壟斷行業(yè)的高收入采取措施,加以有效調(diào)控。
      閱讀全文
    posted @ 2008-03-06 08:57 vesung 閱讀(465) | 評論 (0)編輯 收藏

         摘要: -Xms

    設(shè)置虛擬機可用內(nèi)存堆的初始大小,缺省單位為字節(jié),該大小為1024的整數(shù)倍并且要大于1MB,可用k(K)或m(M)為單位來設(shè)置較大的內(nèi)存數(shù)。初始堆大小為2MB。
    例如:-Xms6400K,-Xms256M

    -Xmx
    設(shè)置虛擬機內(nèi)存堆的最大可用大小,缺省單位為字節(jié)。該值必須為1024整數(shù)倍,并且要大于2MB。可用k(K)或m(M)為單位來設(shè)置較大的內(nèi)存數(shù)。缺省堆最大值為64MB。
    例如:-Xmx81920K,-Xmx80M

    當(dāng)應(yīng)用程序申請了大內(nèi)存運行時虛擬機拋
      閱讀全文
    posted @ 2008-03-05 16:39 vesung 閱讀(1666) | 評論 (0)編輯 收藏

    Caucho Resin提供了最快的jsp/servlets運行平臺。它支持Servlet,XSL Filtering6并且具備XSLT和XPath1.0引擎。為方便開發(fā)人員能更方便的搭建一個易用的開發(fā)平臺,將Resin的配置案例如下:

    本文resin采用版本為:Resin 2.1.13
    本文所有代碼均已測試通過

    我的工程目錄結(jié)構(gòu)如下:

    /(root)
        |--resin(resin根目錄)
        |        |--bin
        |        |--conf
        |        |      |--resin.conf(resin配置文件 今天的主角)
        |        |--lib
        |--src
              |--java(用于放置java源文件)
              |--test(測試文件目錄)
              |--webapp(web應(yīng)用的根目錄,將來doc-dir會指向這里)
                        |---WEB-INF
                                    |------classes
                                    |------lib
                                    |------web.xml(web配置文件)
                                    |------applicationContext.xml(其他配置文件)



    以下是resin.conf文件源碼
    <caucho.com>
    <log id='/logs' href='stderr:' timestamp='[%Y-%m-%d %H:%M:%S.%s]'/>

    <http-server error-log="logs/errors.log">
        
    <doc-dir>../src/webapp</doc-dir>
      
      
    <!-- the http port -->
      
    <http port='82'/>

      
    <host id=''>
        
    <web-app id='/'>
            
    <work-dir>../../build/work</work-dir>
            
    <temp-dir>../../build/tmp</temp-dir>
            
    <cache-mapping url-pattern="/*" expires="2"/>
            
    <class-update-interval>
                100000000
            
    </class-update-interval>
            
    <jsp jsp-update-interval="1s"/>
            
            
    <classpath id='WEB-INF/classes'/>     

        
    </web-app>    
      
    </host>

    </http-server>
    </caucho.com>

    web.xml源代碼
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
    <web-app>

        
    <display-name>Acme Corp</display-name>

        
    <filter>
            
    <filter-name>webwork</filter-name>
            
    <filter-class>com.opensymphony.webwork.dispatcher.FilterDispatcher</filter-class>
        
    </filter>

        
    <filter-mapping>
            
    <filter-name>webwork</filter-name>
            
    <url-pattern>/*</url-pattern>
        
    </filter-mapping>

        
    <listener>
            
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        
    </listener>

        
    <welcome-file-list>
            
    <welcome-file>index.jsp</welcome-file>
            
    <welcome-file>default.jsp</welcome-file>
            
    <welcome-file>index.html</welcome-file>
        
    </welcome-file-list>

        
    <!--
            This typically isn't required, as the taglib is included in webwork.jar.
            If you really need a taglib configuration within web.xml, copy webwork/src/java/META-INF/taglib.tld
            to the WEB-INF directory as webwork.tld.
         
    -->
        
    <!--taglib>
            <taglib-uri>webwork</taglib-uri>
            <taglib-location>/WEB-INF/webwork.tld</taglib-location>
        </taglib
    -->
    </web-app>

    posted @ 2008-03-05 16:12 vesung 閱讀(11062) | 評論 (0)編輯 收藏

    主站蜘蛛池模板: 九月丁香婷婷亚洲综合色| 亚洲av无码一区二区三区不卡| 亚洲一区二区三区在线观看精品中文| 亚洲免费在线播放| 亚洲av无码一区二区三区天堂| 91成人免费福利网站在线| 在线观看AV片永久免费| 久久亚洲欧洲国产综合| 国产AV旡码专区亚洲AV苍井空| 久久久WWW免费人成精品| 成人免费无码视频在线网站| 一本久久a久久精品亚洲| 亚洲色偷偷综合亚洲AV伊人蜜桃| 在线观看免费视频网站色| 日韩精品视频免费观看| 久久亚洲AV成人无码| fc2成年免费共享视频18| 成年性生交大片免费看| 亚洲AV无一区二区三区久久| 久久精品国产亚洲av天美18 | 午夜视频免费成人| 亚洲AV无码久久精品色欲| 色九月亚洲综合网| 猫咪免费人成网站在线观看| 久久久久亚洲AV成人网| 亚洲精品中文字幕无码A片老| 无码人妻久久一区二区三区免费 | 国产美女做a免费视频软件| 亚洲综合久久成人69| 国产精品永久免费视频| 香蕉高清免费永久在线视频| 亚洲女人初试黑人巨高清| a级毛片在线免费观看| 免费h黄肉动漫在线观看| 亚洲国产乱码最新视频| 四虎国产精品永久免费网址 | 亚洲国产精品第一区二区三区| 亚洲国产美女精品久久| 免费精品一区二区三区第35| 亚洲国产精品成人AV无码久久综合影院 | 免费看黄网站在线看 |