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

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

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

    paulwong

    #

    RUP

    一 前言
    軟件過程是指實施於軟件開發(fā)和維護中的階段、方法、技術(shù)、實踐及相關(guān)產(chǎn)物(計劃、文檔、模型、代碼、測試用例和手冊等)的集合。行之有效的軟件過程可以提高開發(fā)軟件組織的生產(chǎn)效率、提高軟件質(zhì)量、降低成本並減少風險。

    RUP具有較高認知度的原因之一恐怕是因為其提出者Rational軟件公司聚集了物件導(dǎo)向領(lǐng)域三位傑出專家Booch、Rumbaugh和 Jacobson,同時它又是物件導(dǎo)向開發(fā)的行業(yè)標準語言——標準建模語言(UML)的創(chuàng)立者。RUP是由Objectory過程演化而來。本文主要討論 RUP的主要內(nèi)容和特點。

    二 RUP的二維開發(fā)模型

    RUP可以用二維坐標來描述。橫軸通過時間組織,是過程展開的生命週期特徵,體現(xiàn)開發(fā)過程的動態(tài)結(jié)構(gòu),用來描述它的術(shù)語主要包括週期 (Cycle)、階段(Phase)、迭代(Iteration)和里程碑(Milestone);縱軸以內(nèi)容來組織為自然的邏輯活動,體現(xiàn)開發(fā)過程的靜態(tài)結(jié)構(gòu),用來描述它的術(shù)語主要包括活動(Activity)、產(chǎn)物(Artifact)、工作者(Worker)和工作流(Workflow)。

    三 開發(fā)過程中的各個階段和里程碑

    RUP中的軟件生命週期在時間上被分解為四個順序的階段,分別是:初始階段(Inception)、細化階段(Elaboration)、構(gòu)建階段(Construction)和交付階段(Transition)。每個階段結(jié)束於一個主要的里程碑(Major Milestones);每個階段本質(zhì)上是兩個里程碑之間的時間跨度。在每個階段的結(jié)尾執(zhí)行一次評估以確定這個階段的目標是否已經(jīng)滿足。如果評估結(jié)果令人滿意的話,可以允許項目進入下一個階段。

    初始階段(Inception Phase)

    初始階段的目標是為系統(tǒng)建立商業(yè)案例並確定項目的邊界。為了達到該目的必須識別所有與系統(tǒng)交互的外部實體,在較高層次上定義交互的特性。本階段具有非常重要的意義,在這個階段中所關(guān)注的是整個項目進行中的業(yè)務(wù)和需求方面的主要風險。對於建立在原有系統(tǒng)基礎(chǔ)上的開發(fā)項目來講,初始階段可能很短。

    初始階段結(jié)束時是第一個重要的里程碑:生命週期目標(Lifecycle Objective)里程碑。生命週期目標里程碑評價項目基本的生存能力。

    細化階段(Elaboration Phase)

    細化階段的目標是分析問題領(lǐng)域,建立健全的體系結(jié)構(gòu)基礎(chǔ),編製項目計劃,淘汰項目中最高風險的元素。為了達到該目的,必須在理解整個系統(tǒng)的基礎(chǔ)上,對體系結(jié)構(gòu)作出決策,包括其範圍、主要功能和諸如性能等非功能需求。同時為項目建立支持環(huán)境,包括創(chuàng)建開發(fā)案例,創(chuàng)建模板、準則並準備工具。

    細化階段結(jié)束時第二個重要的里程碑:生命週期結(jié)構(gòu)(Lifecycle Architecture)里程碑。生命週期結(jié)構(gòu)里程碑為系統(tǒng)的結(jié)構(gòu)建立了管理基準並使項目小組能夠在構(gòu)建階段中進行衡量。此刻,要檢驗詳細的系統(tǒng)目標和範圍、結(jié)構(gòu)的選擇以及主要風險的解決方案。

    構(gòu)建階段(Construction Phase)

    在構(gòu)建階段,所有剩餘的構(gòu)件和應(yīng)用程序功能被開發(fā)並集成為產(chǎn)品,所有的功能被詳細測試。從某種意義上說,構(gòu)建階段是一個製造過程,其重點放在管理資源及控制運作以優(yōu)化成本、進度和質(zhì)量。

    構(gòu)建階段結(jié)束時是第三個重要的里程碑:初始功能(Initial Operational)里程碑。初始功能里程碑決定了產(chǎn)品是否可以在測試環(huán)境中進行部署。此刻,要確定軟件、環(huán)境、用戶是否可以開始系統(tǒng)的運作。此時的產(chǎn)品版本也常被稱為「beta」版。

    交付階段(Transition Phase)

    交付階段的重點是確保軟件對最終用戶是可用的。交付階段可以跨越幾次迭代,包括為發(fā)佈做準備的產(chǎn)品測試,基於用戶反饋的少量的調(diào)整。在生命週期的這一點上,用戶反饋應(yīng)主要集中在產(chǎn)品調(diào)整,設(shè)置、安裝和可用性問題,所有主要的結(jié)構(gòu)問題應(yīng)該已經(jīng)在項目生命週期的早期階段解決了。

    在交付階段的終點是第四個里程碑:產(chǎn)品發(fā)佈(Product Release)里程碑。此時,要確定目標是否實現(xiàn),是否應(yīng)該開始另一個開發(fā)週期。在一些情況下這個里程碑可能與下一個週期的初始階段的結(jié)束重合。

    四 RUP的核心工作流(Core Workflows)

    RUP中有9個核心工作流,分為6個核心過程工作流(Core Process Workflows)和3個核心支持工作流(Core Supporting Workflows)。儘管6個核心過程工作流可能使人想起傳統(tǒng)瀑布模型中的幾個階段,但應(yīng)注意迭代過程中的階段是完全不同的,這些工作流在整個生命週期中一次又一次被訪問。9個核心工作流在項目中輪流被使用,在每一次迭代中以不同的重點和強度重複。

    商業(yè)建模(Business Modeling)

    商業(yè)建模工作流描述了如何為新的目標組織開發(fā)一個構(gòu)想,並基於這個構(gòu)想在商業(yè)用例模型和商業(yè)對像模型中定義組織的過程,角色和責任。

    需求(Requirements)

    需求工作流的目標是描述系統(tǒng)應(yīng)該做什麼,並使開發(fā)人員和用戶就這一描述達成共識。為了達到該目標,要對需要的功能和約束進行提取、組織、文檔化;最重要的是理解系統(tǒng)所解決問題的定義和範圍。

    分析和設(shè)計(Analysis & Design)

    分析和設(shè)計工作流將需求轉(zhuǎn)化成未來系統(tǒng)的設(shè)計,為系統(tǒng)開發(fā)一個健壯的結(jié)構(gòu)並調(diào)整設(shè)計使其與實現(xiàn)環(huán)境相匹配,優(yōu)化其性能。分析設(shè)計的結(jié)果是一個設(shè)計模型和一個可選的分析模型。設(shè)計模型是源代碼的抽像,由設(shè)計類和一些描述組成。設(shè)計類被組織成具有良好接口的設(shè)計包(Package)和設(shè)計子系統(tǒng) (Subsystem),而描述則體現(xiàn)了類的對象如何協(xié)同工作實現(xiàn)用例的功能。

    設(shè)計活動以體系結(jié)構(gòu)設(shè)計為中心,體系結(jié)構(gòu)由若干結(jié)構(gòu)視圖來表達,結(jié)構(gòu)視圖是整個設(shè)計的抽像和簡化,該視圖中省略了一些細節(jié),使重要的特點體現(xiàn)得更加清晰。體系結(jié)構(gòu)不僅僅是良好設(shè)計模型的承載媒介,而且在系統(tǒng)的開發(fā)中能提高被創(chuàng)建模型的質(zhì)量。

    實現(xiàn)(Implementation)

    實現(xiàn)工作流的目的包括以層次化的子系統(tǒng)形式定義代碼的組織結(jié)構(gòu);以組件的形式(源文件、二進制文件、可執(zhí)行文件)實現(xiàn)類和對像;將開發(fā)出的組件作為單元進行測試以及集成由單個開發(fā)者(或小組)所產(chǎn)生的結(jié)果,使其成為可執(zhí)行的系統(tǒng)。

    測試(Test)

    測試工作流要驗證對像間的交互作用,驗證軟件中所有組件的正確集成,檢驗所有的需求已被正確的實現(xiàn), 識別並確認缺陷在軟件部署之前被提出並處理。RUP提出了迭代的方法,意味著在整個項目中進行測試,從而儘可能早地發(fā)現(xiàn)缺陷,從根本上降低了修改缺陷的成本。測試類似於三維模型,分別從可靠性、功能性和系統(tǒng)性能來進行。

    部署(Deployment)

    部署工作流的目的是成功的生成版本並將軟件分發(fā)給最終用戶。部署工作流描述了那些與確保軟件產(chǎn)品對最終用戶具有可用性相關(guān)的活動,包括:軟件打包、生成軟件本身以外的產(chǎn)品、安裝軟件、為用戶提供幫助。在有些情況下,還可能包括計劃和進行beta測試版、移植現(xiàn)有的軟件和數(shù)據(jù)以及正式驗收。

    配置和變更管理(Configuration & Change Management)

    配置和變更管理工作流描繪了如何在多個成員組成的項目中控制大量的產(chǎn)物。配置和變更管理工作流提供了準則來管理演化系統(tǒng)中的多個變體,跟蹤軟件創(chuàng)建過程中的版本。工作流描述了如何管理並行開發(fā)、分佈式開發(fā)、如何自動化創(chuàng)建工程。同時也闡述了對產(chǎn)品修改原因、時間、人員保持審計記錄。

    項目管理(Project Management)

    軟件項目管理平衡各種可能產(chǎn)生衝突的目標,管理風險,克服各種約束併成功交付使用戶滿意的產(chǎn)品。其目標包括:為項目的管理提供框架,為計劃、人員配備、執(zhí)行和監(jiān)控項目提供實用的準則,為管理風險提供框架等。

    環(huán)境(Environment)

    環(huán)境工作流的目的是向軟件開發(fā)組織提供軟件開發(fā)環(huán)境,包括過程和工具。環(huán)境工作流集中於配置項目過程中所需要的活動,同樣也支持開發(fā)項目規(guī)範的活動,提供了逐步的指導(dǎo)手冊並介紹了如何在組織中實現(xiàn)過程。

    五 RUP的迭代開發(fā)模式

    RUP中的每個階段可以進一步分解為迭代。一個迭代是一個完整的開發(fā)循環(huán),產(chǎn)生一個可執(zhí)行的產(chǎn)品版本,是最終產(chǎn)品的一個子集,它增量式地發(fā)展,從一個迭代過程到另一個迭代過程到成為最終的系統(tǒng)。

    傳統(tǒng)上的項目組織是順序通過每個工作流,每個工作流只有一次,也就是我們熟悉的瀑布生命週期。這樣做的結(jié)果是到實現(xiàn)末期產(chǎn)品完成並開始測試,在分析、設(shè)計和實現(xiàn)階段所遺留的隱藏問題會大量出現(xiàn),項目可能要停止並開始一個漫長的錯誤修正週期。

    一種更靈活,風險更小的方法是多次通過不同的開發(fā)工作流,這樣可以更好的理解需求,構(gòu)造一個健壯的體系結(jié)構(gòu),並最終交付一系列逐步完成的版本。這叫做一個迭代生命週期。在工作流中的每一次順序的通過稱為一次迭代。軟件生命週期是迭代的連續(xù),通過它,軟件是增量的開發(fā)。一次迭代包括了生成一個可執(zhí)行版本的開發(fā)活動,還有使用這個版本所必需的其他輔助成分,如版本描述、用戶文檔等。因此一個開發(fā)迭代在某種意義上是在所有工作流中的一次完整的經(jīng)過,這些工作流至少包括:需求工作流、分析和設(shè)計工作流、實現(xiàn)工作流、測試工作流。其本身就像一個小型的瀑布項目。

    與傳統(tǒng)的瀑布模型相比較,迭代過程具有以下優(yōu)點:

    降低了在一個增量上的開支風險。如果開發(fā)人員重複某個迭代,那麼損失只是這一個開發(fā)有誤的迭代的花費。

    降低了產(chǎn)品無法按照既定進度進入市場的風險。通過在開發(fā)早期就確定風險,可以儘早來解決而不至於在開發(fā)後期匆匆忙忙。

    加快了整個開發(fā)工作的進度。因為開發(fā)人員清楚問題的焦點所在,他們的工作會更有效率。

    由於用戶的需求並不能在一開始就作出完全的界定,它們通常是在後續(xù)階段中不斷細化的。因此,迭代過程這種模式使適應(yīng)需求的變化會更容易些。

    六 總結(jié)

    RUP具有很多長處:提高了團隊生產(chǎn)力,在迭代的開發(fā)過程、需求管理、基於組件的體系結(jié)構(gòu)、可視化軟件建模、驗證軟件質(zhì)量及控制軟件變更等方面,針對所有關(guān)鍵的開發(fā)活動為每個開發(fā)成員提供了必要的準則、模板和工具指導(dǎo),並確保全體成員共享相同的知識基礎(chǔ)。它建立了簡潔和清晰的過程結(jié)構(gòu),為開發(fā)過程提供較大的通用性。但同時它也存在一些不足: RUP只是一個開發(fā)過程,並沒有涵蓋軟件過程的全部內(nèi)容,例如它缺少關(guān)於軟件運行和支持等方面的內(nèi)容;此外,它沒有支持多項目的開發(fā)結(jié)構(gòu),這在一定程度上降低了在開發(fā)組織內(nèi)大範圍實現(xiàn)重用的可能性??梢哉fRUP是一個非常好的開端,但並不完美。

    posted @ 2010-03-26 10:29 paulwong 閱讀(347) | 評論 (0)編輯 收藏

    RUP overview

    作者:李訓軍博士

    隨著現(xiàn)代信息產(chǎn)業(yè)的蓬勃發(fā)展,軟件開發(fā)已經(jīng)成為一項浩大繁複的工程。 就像是建造一座宏偉的宮殿, 從計劃、設(shè)計到施工, 每一個環(huán)節(jié)都必須嚴格把關(guān), 稍有不慎, 整個工程就會失敗。 據(jù)統(tǒng)計, 僅在美國, 每年就有180,000個信息技術(shù)項目, 耗資大約$2500億美元, 其中25-30%的項目會流產(chǎn)。 由此可見, 由於管理不善和設(shè)計上的失誤所造成的損失是巨大的?,F(xiàn)代軟件開發(fā)的管理和方法論顯得比以往任何時候都更為重要。

    軟件開發(fā)的過程由方法論和工具構(gòu)成(process = methodology + tools)。正如裝配電子設(shè)備一樣,僅有工具就可以勝任裝配任務(wù)。但為了減少失誤和提高效率,人們往往採用流水線作業(yè),流水線作業(yè)便是一種應(yīng)用於電子設(shè)備裝配中的方法論。目前,信息技術(shù)市場流行的方法論有RUP(Rational Unified Process), The Zachman Framework, XP (Extreme Programming)等。在這些方法論中,最流行的要數(shù)RUP。RUP是由Rational Software公司首創(chuàng)的。因它與當前流行的JAVA, J2EE技術(shù)和麵向?qū)ο蟮脑O(shè)計思想(OOAD)緊密的結(jié)合在一起,所以在大型的信息技術(shù)項目中得到了廣泛的應(yīng)用。在這篇文章中,我們試圖對RUP的特點作一個初步的探討,並且討論它是如何貫穿在整個軟件開發(fā)的生命週期之中的。

    RUP最重要的它有三大特點:1)軟件開發(fā)是一個疊代過程,2)軟件開發(fā)是由Use Case驅(qū)動的,3)軟件開發(fā)是以構(gòu)架設(shè)計(Architectural Design)為中心的。

    按照傳統(tǒng)的瀑布(Waterfall)開發(fā)模式,軟件開發(fā)大致經(jīng)歷如下幾個步驟:商務(wù)需求分析(Business Requirement Analysis),系統(tǒng)分析(System Analysis),系統(tǒng)設(shè)計(System Design),開發(fā)實現(xiàn)(Implementation),測試(Test),發(fā)佈(Deployment),系統(tǒng)支持(Supporting)和系統(tǒng)變更管理(Change Management)。傳統(tǒng)的瀑布開發(fā)模式假定在進行新的開發(fā)過程時,上一個過程已經(jīng)完成,而且不會回到上一個過程。初看起來,這似乎是一個非常合理,高效率的解決方案,但20多年的實踐證明,這個開發(fā)模式存在著很大的弊病,原因是軟件開發(fā)是一個非常複雜的工程,有諸多的因素影響工程的效率和成敗。軟件開發(fā)需要許多不同背景的個人和團隊參與。由於這些複雜性,在軟件開發(fā)的整個生命週期中每一個階段都有可能留下隱患和錯誤。如果等到系統(tǒng)已經(jīng)開發(fā)實現(xiàn)完畢,在測試階段發(fā)現(xiàn)了重大問題,這時的返工將會造成人力、物力、財力及時間上的巨大浪費。鑑於以上的考慮,RUP強調(diào)軟件開發(fā)是一個疊代模型(Iterative Model),RUP定義了四個階段(Phase):開端(Inception),闡述 (Elaboration),建造(Construction),過渡(Transition)。其中每個階段都有可能經(jīng)歷以上所提到的從商務(wù)需求分析開始的各個步驟,只是每個步驟的高峰期會發(fā)生在相應(yīng)的階段。例如開發(fā)實現(xiàn)的高峰期是發(fā)生在建造階段。實際上這樣的一個開發(fā)方法論是一個二維模型。這種疊代模型的實現(xiàn)在很大程度上提供了及早發(fā)現(xiàn)隱患和錯誤的機會,因此被現(xiàn)代大型信息技術(shù)項目所採用。

    RUP 的另一大特徵是Use Case 驅(qū)動。Use Case 是RUP方法論中一個非常重要的概念。簡單地說,一個 Use Case就是系統(tǒng)的一個功能。例如在一個基於電子商務(wù)的醫(yī)療系統(tǒng)中,病人可以坐在家裡通過網(wǎng)上瀏覽器與醫(yī)生約定看病的時間 (Make appointment),這樣,「Make appointment」就是系統(tǒng)的一個Use Case。在系統(tǒng)分析和系統(tǒng)設(shè)計中, Use Case被用來將一個複雜的龐大系統(tǒng)分割、定義成一個個小的單元,這個小的單元就是Use Case,然後以每個小的單元為對象進行開發(fā)。按照 RUP, Use Case貫穿整個軟件開發(fā)的生命週期。在商務(wù)需求分析中,客戶或用戶對Use Case進行描述,在系統(tǒng)分佈和系統(tǒng)設(shè)計過程中,設(shè)計師對Use Case進行分析,在開發(fā)實現(xiàn)過程中,開發(fā)編程人員對Use Case進行實現(xiàn),在測試過程中,測試人員對Use Case進行檢驗。

    RUP的第三大特徵是它強調(diào)軟件開發(fā)是以構(gòu)架為中心的。構(gòu)架設(shè)計(Architectural Design)是系統(tǒng)設(shè)計的一個重要組成部分。在構(gòu)架設(shè)計過程中,設(shè)計師(Architect)必須完成對技術(shù)和運行平臺的選取,整個項目的基礎(chǔ)框架(Framework)的設(shè)計,完成對公共組件的設(shè)計,如審計(Auditing)系統(tǒng),日誌(Log)系統(tǒng),錯誤處理(Exception Handling)系統(tǒng),安全 (Security)系統(tǒng)等。設(shè)計師必須對系統(tǒng)的可擴展性(Extensibility),安全性(Security),可維護性 (Maintainability),可延拓性(Scalability),可重用性(Reusability)和運行速度(Performance)提出可行的解決方案。

    在RUP方法論中,不同的角色可以從不同的側(cè)面來認識同一個項目。RUP定義了「4+1」個場景(View): Use Case場景(Use Case View),邏輯場景(Logic View),進程場景(process View),實現(xiàn)場景 (Implementation View)和發(fā)佈場景(Deployment View)。在Use Case場景中,客戶和商務(wù)分析員對 Use Case進行描述,在邏輯場景中,設(shè)計師對系統(tǒng)進行分析和設(shè)計,在進程場景中,設(shè)計師對系統(tǒng)可能出現(xiàn)的併發(fā)性,運行速度和分佈特性進行描述。實現(xiàn)場景則反映了程序開發(fā)員開發(fā)實現(xiàn)的過程。發(fā)佈場景是描述系統(tǒng)管理員和組裝人員實施系統(tǒng)發(fā)佈和管理的過程。值得強調(diào)的是,系統(tǒng)構(gòu)架的設(shè)計是在邏輯場景中描述的。

    RUP還定義了4個模型,即Use Case模型(Use Case Model),分析模型 (Analysis Model),設(shè)計模型(Design Model)和實現(xiàn)模型(Implementation Model)。Use Case模型包含Use Case Diagram和Use Case文檔。Use Case模型是其他三個模型的基礎(chǔ),分析模型即是概念模型 (Conceptual Model),是系統(tǒng)分析所得到的結(jié)果,分析模型包含了類圖(Class Diagram),次序圖 (Sequence Diagram)以及活動圖(Activity Diagram)。設(shè)計模型則是構(gòu)架設(shè)計和系統(tǒng)設(shè)計的結(jié)果。當設(shè)計模型完成後,開發(fā)編程人員便可以進行編程了。設(shè)計模型主要包含了類圖,次序圖和狀態(tài)圖(State Chart Diagrams)。分析模型和設(shè)計模型看起來有許多相似之處,但兩者的含義有本質(zhì)的區(qū)別。分析模型強調(diào)的是問題的範圍,但並不給出解決問題的方案,分析模型並不涉及具體的技術(shù)和平臺。例如它並不關(guān)心是否應(yīng)用 EJB或一般的JAVA BEANS,系統(tǒng)是安裝在WebSphere或是在WebLogic。但是與之相反,設(shè)計模型要考慮這些細節(jié),而且要提供解決這些問題的全部方案。當然設(shè)計模型是建立在分析模型之上的,分析模型中的一個類可直接映射成為設(shè)計模型中的類,但這種映射關(guān)係一般並不是一一對應(yīng)的,最後一個模型是實現(xiàn)模型。實現(xiàn)模型包含構(gòu)件圖(Component Diagram),從這個模型出發(fā),開發(fā)編程人員可以產(chǎn)生骨架源程序 (Skeleton Source Code),也可以從源程序出發(fā)更新設(shè)計模型。

    目前應(yīng)用於系統(tǒng)分析和設(shè)計的工具主要有Rational Rose和Together Software Center (TogetherJ)。JAVA和J2EE的開發(fā)工具有IBM Websphere Application Developer(WSAD), Borland Jbuilde和WebGain VisualCafe. WSAD和WebSphere Application Server應(yīng)用在一起,使得服務(wù)器端的排錯和系統(tǒng)的發(fā)布變得非常的容易。Jbuilder和VisualCafe一般與WebLogic Server緊密結(jié)合在一起。目前WebSphere Server和WebLogic Server佔據(jù)了Application Server市場的66%,其中 WebSphere Server佔據(jù)了37%,成為同類產(chǎn)品的No.1。在單位測試和集成測試中,廣泛應(yīng)用的工具和框架有Junit, JunitPerf和Cactus.。

    綜上所述,軟件開發(fā)的方法論已經(jīng)成為現(xiàn)代軟件工程過程中不可缺少的一個重要部分。是目前在Java/J2EE和麵向?qū)ο蟮拇笮晚椖恐袕V泛被採用的一種方法論。他對整個軟件開發(fā)的生命週期提供了基礎(chǔ)框架和指導(dǎo)。RUP, UML/Rational Rose, Java/J2EE, WSAD, Websphere Application Server和Oracle這樣的技術(shù)、工具和平臺的組合是目前許多公司、政府信息技術(shù)項目中採用的方案。因此,RUP的知識和經(jīng)驗也是現(xiàn)在求職市場所需求的熱門技能。

    posted @ 2010-03-25 18:17 paulwong 閱讀(313) | 評論 (0)編輯 收藏

    Javascript 篇 之 擴展String 函數(shù)

    /**
     * @brief  擴展原生字符串 
     
    */


    var StringEx = 

        
    /**
         * @brief 去除字符串前后空格
         
    */

        trim : 
    function()
        
    {
            
    return this.replace(/(^\s*)|(\s*$)/g, "");
        }
    ,
        
        
    /**
         * @brief 去除左邊空格
         
    */

        ltrim : 
    function()
        

            
    return this.replace(/(^\s*)/g, ""); 
        }
    ,
        
        
    /**
         * @brief 去除右邊空格
         
    */

        rtrim : 
    function()
        

            
    return this.replace(/(\s*$)/g, "");      
        }
    ,
        
        
    /**
         * @brief 避免XSS 攻擊
         
    */

        avoidXSS : 
    function()
        
    {
            
    var strTemp = this.replace(/&/g, "&amp;");
            strTemp 
    = strTemp.replace(/</g, "&lt;");
            strTemp 
    = strTemp.replace(/>/g, "&gt;");
            strTemp 
    = strTemp.replace(/\"/g, "&quot;");
            return strTemp;    
        } ,
        
        /**
         * @brief 獲取字符串的字節(jié)長度 漢字默認雙字節(jié)
         */
        byteLength : function()
        {
              return this.replace(/[^\x00-\xff]/g,
    "**").length;
        },
        
        /**
         * @brief     除去HTML標簽
         * @example    <div id=
    "test1">aaaa</div>  =>  aaaa 
         */
        removeHTML : function()
        {
            return this.replace(/<\/?[^>]+>/gi, '');
        },
        
        /**
         * @brief      格式化字符串
         * @example 
    "<div>{0}</div>{1}".format(txt0,txt1)
         */
        format : function()
        {
            var args = [];
            
            for (var i = 0, il = arguments.length; i < il; i++)
            {
                args.push(arguments[i]);
            }
            
            return this.replace(/\{(\d+)\}/g, function(m, i)
            {
                return args[i];
            });
        },
        
        /**
         * @brief 字符串轉(zhuǎn)數(shù)字
         */
        toInt : function() 
        {
            return Math.floor(this);
        }    
    }


    for (var it in StringEx) 
    {
        String.prototype[it] = StringEx[it];
    }


    test:


        var strTest = "   -{0}這里是擴展原生字符串test{1}- ";
                
                alert(strTest.length);                 
    // output : 26
                alert(strTest.ltrim().length);      // 23
                alert(strTest.rtrim().length);      // 25
                
                alert(strTest.byteLength());        
    // 36
                
                alert(strTest.format(
    "abc","def")); //   -abc這里是擴展原生字符串testdef- 
                
                
    var strNumber = "89989";
                
                alert(
    typeof strNumber.toInt());    // number
                
                
    var domTest = document.getElementById("test1").outerHTML;
                
                alert(domTest);
                
                alert(domTest.avoidXSS());
                alert(domTest.removeHTML());


    下載 string.js 及  demo 

    posted @ 2010-03-25 00:38 paulwong 閱讀(382) | 評論 (0)編輯 收藏

    Spring Security 3.x 完整入門教程(轉(zhuǎn))

         摘要: Spring Security 3.x 出來一段時間了,跟Acegi是大不同了,與2.x的版本也有一些小小的區(qū)別,網(wǎng)上有一些文檔,也有人翻譯Spring Security 3.x的guide,但通過閱讀guide,無法馬上就能很容易的實現(xiàn)一個完整的實例。 我花了點兒時間,根據(jù)以前的實戰(zhàn)經(jīng)驗,整理了一份完整的入門教程,供需要的朋友們參考。 1,建一個web project,并導(dǎo)入所有需要的l...  閱讀全文

    posted @ 2010-03-10 21:56 paulwong 閱讀(4465) | 評論 (1)編輯 收藏

    洗衣小竅門集錦(絕對值得收藏)

    (1)衣服會變黃,多半是熒光劑變?nèi)跛拢胍挛锘謴?fù)潔白亮麗,就得想法子。
    洗米水+橘子皮簡單又有效:
    保留洗米水或是將橘子皮放入鍋內(nèi)加水燒煮后,將泛黃的衣服浸泡其中搓洗就可以輕松讓衣服恢復(fù)潔白。不但簡單,也不像市面販售的熒光增白劑會對皮膚產(chǎn)生副作用且不傷衣料,是值得一試的好方法。
    流汗產(chǎn)生的黃漬,用氨水去除:
    流汗產(chǎn)生的汗?jié)n,因為含有脂肪的汗液,容易在布質(zhì)纖維內(nèi)凝結(jié),所以在洗滌時加入約2湯匙的氨水,浸泡幾分鐘后,搓洗一下,然后用清水洗凈,依照一般的洗衣程序處理,就可以將黃黃的汗?jié)n去除嘍!
    (2)有時,白色的衣服或淺顏色的衣服日久顏色會變黃,引起白色或淺色衣服泛黃的主要原因是人身體分泌的油脂,特別是聚酯面料的衣物,更易泛黃。另外還有洗滌時殘留的肥渣滓(最明顯的見于尾酮亞麻纖維),如果沒有沖洗干凈,會使衣服大面積的變黃。對于這一現(xiàn)象是有方法可以去掉的,例如在洗滌耐高溫水洗的衣服時,大量的使用清潔劑。一個傳統(tǒng)的辦法是將泛黃的衣服在烈日下懸掛暴曬,但在此之前,應(yīng)在泛黃處上新鮮的檸檬汁,再放些鹽并輕輕的揉搓。
    警告:要小心操作,避免使用氯漂劑。斯潘德克斯彈性纖維、絲綢、羊毛等面料,接觸氯漂劑會使其更黃。
    (3)如果白衣服放久衣服了就會變的發(fā)黃,上的黃污漬成分主要是蛋白質(zhì),菠菜經(jīng)過水煮後會釋出可溶解蛋白質(zhì)的成份哦。
    1.買一把菠菜, 經(jīng)過熱水滾燙後,菠菜撈起來只留下滾湯待用
    2.將有黃污漬的地方放入菠菜水中搓揉, 在浸泡10分鐘
    3.浸泡後撈起衣物, 在以正常的洗衣程序洗凈衣物.完成。衣物又恢復(fù)潔白了!
    洗衣小竅門集錦:
    1、清洗白衣、白襪
    白色衣物上的頑漬很難根除,這個時候取一個檸檬切片煮水后把白色衣物放到水中浸泡,大約15分鐘后清洗即可。
    2、清洗衣物怪味
    有時衣物因晾曬不得當,會出現(xiàn)難聞的汗酸味,取白醋與水混合,浸泡有味道的衣服大約五分鐘,然后把衣服在通風處晾干就可以了!
    3、對付衣服上筆印
    首先將酒精倒在衣服上自來水筆的劃痕上,每一道劃痕上都要均勻的覆蓋上酒精,酒精要選用濃度不小于75%的醫(yī)藥用酒精。把衣服上倒了酒精的這一面向上放,盡量不要接觸衣服的其它面,否則鋼筆或者圓珠筆的印記顏色有可能會染到衣服的其它部分。用普通的洗臉盆,準備好大半盆水,接下來將滿滿兩瓶蓋的漂白水倒在了清水中,注意一定要是滿滿兩瓶蓋才行。捎做攪拌,之后再加少許的洗衣粉,這個量您可以自己掌握。之后也稍做攪拌,讓洗衣粉能充分溶于水中。好了,現(xiàn)在將衣服完全浸泡在水里,時間是二十分鐘。時間到了,清洗衣服,一點印記也沒有了!
    如果是圓珠筆痕跡而且痕跡較重,用上述方法后若尚存遺跡,最后用牙膏加肥皂輕輕揉搓,再用清水沖凈。(但嚴禁用開水泡?。?br /> 衣物沾到筆圓珠筆痕跡另外還有一個辦法解決:那就是別急著把衣服下水,而是先用汽油洗一洗沾到的部分再洗。
    4、清洗衣服上的醬油漬
    辦法一:需要用到白糖。首先把沾上污漬的地方用水浸濕,然后再撒上一勺白糖,用手揉搓。我們可以看到一部分醬油跡已經(jīng)沾到了白糖上,然后用水清洗,可除去漬。
    辦法二:需要用到蘇打粉。將白背心浸濕后,在沾有醬油漬的地方涂上蘇打粉,10分鐘后用清水洗凈,即可除掉醬油漬。
    辦法三:需要用到新鮮的蓮藕,用刀把新鮮的蓮藕切開,將新鮮的蓮藕汁涂在醬油跡處,10分鐘后在水中清洗,可除掉醬油漬。
    5、清洗衣服上油漆
    衣服上蹭到油漆該怎么辦呢?方法就是把清涼油抹到粘有油漆的部位,因為清涼油里所含的物質(zhì)可溶解油漆,之后在沖洗干凈即可。若沾上水溶性漆(如水溶漆、乳膠漆)及家用內(nèi)墻涂料,及時用水一洗即掉;若尼龍織物被油漆沾污,可先涂上豬油揉搓,然后用洗滌劑浸洗,清水漂凈。
    6、清洗草漬
    您需要準備一百克食鹽,另外您還需要準備1000克清水。把水倒入容器中,用手攪勻,將沾有草漬的衣服放入盆中,在鹽水中泡10分鐘。將衣服入在水中清洗,這時您會發(fā)現(xiàn),輕輕松松就可以把頑固的草漬洗掉了。
    7、清洗染色衣服
    在洗衣機里放入溫水,啟動洗衣機進行漂洗,加入84消毒液,半缸水加大約三分之一瓶消毒液,溶解稀釋,放入衣服,蓋上機蓋,漂洗大約25分鐘, 25分鐘后撈出衣物,衣服晾干后,就回復(fù)原來的顏色了。
    如果想避免衣服不掉色,剛買回來的新衣衣,必須在水里放些鹽(一桶水一小匙),洗后要馬上用清水漂洗干凈,不要泡太久哦!最后,不要在陽光下曝曬,陽光會使染料變性的哦。應(yīng)放在陰涼通風處晾干。
    8、清洗血跡
    剛沾染上時,應(yīng)立即用冷水或淡鹽水洗(禁用熱水,因血內(nèi)含蛋白質(zhì),遇熱會凝固,不易溶化),再用肥皂或10%的碘化鉀溶液清洗;
    用白蘿卜汁或搗碎的胡蘿卜拌鹽皆可除去衣物上的血跡;
    用10%的酒石酸溶液來揩拭沾污處,再用冷水洗凈;
    用加酶洗衣粉除去血漬,效果甚佳;
    若沾污時間較長,可用10%的氨水或3%的雙氧水揩拭污處,過一會兒,再用冷水強洗。
    如仍不干凈,再用10-15%的草酸溶液洗滌,最后用清水漂洗干凈。
    無論是新跡,陳跡,均可用硫磺皂揉搓清洗。
    用搽手油涂抹在血跡上,停留15分鐘左右的時間,在用清水肥皂清洗即可。
    9、輕松洗掉衣服上的霉點
    由于天氣悶熱空氣潮濕,或換季的時候,洗過的衣服很容易長霉點,特別是白色的衣服,一旦長上霉點,是很郁悶的事情。
    沒關(guān)系,對付這些霉點,也有很多的方法:
    綠豆芽;把嫩嫩的綠豆芽放在霉點上,雙手使勁搓揉,是不是干凈了一些呢?再放一些綠豆芽接著搓,哼哼,顏色又淺了很多,再搓,功夫不負有心人,霉點沒有了,最后再用清水沖洗,哈哈,就這么簡單,問題迎刃而解;
    衣物上的霉斑可先在日光下暴曬,后用刷子清霉毛,再用酒精洗除;
    把被霉斑污染的衣服放入濃肥皂水中浸透后,帶著皂水取出,置陽光下曬一會,反復(fù)晾曬幾次,待霉斑清除后,再用清水漂凈;
    絲綢衣物可用檸檬酸洗滌,后用冷水洗漂;
    麻織物的霉?jié)n,可用氯化鈣液進行清洗;
    毛織品上的污漬還可用芥末溶液或硼砂溶液(一桶水中加芥末二湯匙或硼砂二湯匙)清洗;
    用2%的肥皂酒精溶液(250克酒精內(nèi)加一把軟皂片、攪拌均勻)擦拭,然后用漂白劑3-5%的次氯酸鈉或用雙氧水擦拭,最后再洗滌。這種方法限用于白色衣物,陳跡可在溶液中浸泡1小時。
    10、清洗紅、紫藥水
    紅藥水漬可先用白醋洗,然后用清水漂凈;
    另外可先將紅藥水污處浸濕后用甘油刷洗,再用含氨皂液反復(fù)洗,若加入幾滴稀醋酸液,再用肥皂水洗,效果更佳;
    處理紫藥水漬,可將少量保險粉用開水稀釋后,用小毛刷蘸該溶液擦拭。反復(fù)用保險粉及清水擦洗,直至除凈(毛粘料、改染衣物、絲綢及直接染料色物禁用哦?。。?br /> 11、清洗膏藥
    有時衣衣蹭上了膏藥可以用酒精加幾滴水(或用高梁酒亦可),放在沾有膏藥漬的地方搓揉,待膏藥去凈,再用清水漂洗,或用焙過的白礬末揉,再用水洗亦可;
    也可用食用堿面撒于污處,加些溫水,揉搓幾次,即可除去。若將堿面置鐵勺內(nèi)加熱后撒至污處,再加溫水揉洗,去污更快。
    12、清洗泛黃的衣服
    其實,衣服會變黃,多半是熒光劑變?nèi)?,想要衣物恢?fù)潔白亮麗,就得想法子。
    洗米水+橘子皮簡單又有效:
    保留洗米水或是將橘子皮放入鍋內(nèi)加水燒煮后,將泛黃的衣服浸泡其中搓洗就可以輕松讓衣服恢復(fù)潔白。不但簡單,也不像市面販售的熒光增白劑會對皮膚產(chǎn)生副作用且不傷衣料,是值得一試的好方法;
    流汗產(chǎn)生的黃漬,用氨水去除:流汗產(chǎn)生的汗?jié)n,因為含有脂肪的汗液,容易在布質(zhì)纖維內(nèi)凝結(jié),所以在洗滌時加入約2湯匙的氨水,浸泡幾分鐘后,搓洗一下,然后用清水洗凈,依照一般的洗衣程序處理,就可以將黃黃的汗?jié)n去除嘍!
    13、清洗啤酒、黃酒漬
    新染上的污跡,放清水中立即搓洗即掉。
    陳跡可先用清水洗滌后,再用2%氨水和硼砂混合液揉洗,最后用洗水漂洗干凈;黃酒的陳跡,在用清水洗后,再用5%的硼砂溶液及3%雙氧水揩拭污處,最后用清水漂凈。
    14、清洗果汁印
    新漬可用濃鹽水揩拭污處,或立即把食鹽撒在污處,用手輕搓,用水潤濕后浸入洗滌劑溶液中洗凈,也可用溫水搓肥皂強力洗除;
    重跡及陳跡清除后,可先用5%的氨水中和果汁中的有機酸,然后再用洗滌劑清洗。對含羊毛的化纖混紡物可有酒石酸清洗;
    如織物為白色的,可在3%的雙氧水里加入幾滴氨水,用棉球或布塊蘸此溶液將沾污處潤濕,再用干凈布揩擦、陰干;
    用3-5%的次氯酸鈉溶液揩拭沾污處,再用清水漂凈。若是陳跡,可將其浸泡在該溶液中過1-2個小時后,再刷洗、漂凈;
    對桃汁跡,因其中含有高價鐵,所以可用草酸溶液除之。對柿子漬,立即用葡萄酒加濃鹽水揉搓,再用溫洗滌劑溶液清洗,清水漂凈;
    番茄醬可先刮去干跡,用溫洗滌劑清洗。果醬可用水潤濕后拿洗發(fā)香波刷洗,再用肥皂酒精液洗,清水沖凈。
    15、清洗鐵銹
    干家務(wù)活是不是經(jīng)常碰到這個?
    取鮮檸檬,可榨出其汁液滴在銹漬上用手揉擦之,反復(fù)數(shù)次,直至銹漬除去,再用肥皂水洗凈。
    16、清洗碘酒
    對碘酒漬可先用淀粉浸濕揉擦(淀粉遇碘立即呈黑色),再用肥皂水輕輕洗去。
    淡的碘漬可用熱水或酒精,也可用碘化鉀溶液搓拭。濃漬可浸入15-20%的大蘇打溫熱的溶液中,約2小時左右,再用清水漂洗。
    17、清洗印油印
    當毛料或布料沾上印油時,應(yīng)先用熱水或開水沖洗,然后用肥皂水搓洗,再用清水漂凈,即可干凈。千萬不要用涼水洗,因為這會使顏色浸入纖維,很難再洗凈。
    18、清洗黃油印
    因黃油漬的主要成分是脂肪,可用酒精或氨水再進行洗除。
    19、清洗口紅印
    需要化妝的JM,估計最怕就是脫衣服是蹭到口紅印啦;
    如染上口紅印,可先用小刷蘸汽油輕輕刷擦,去凈油脂后,再用溫洗滌劑溶液洗除;
    如果沒有汽油也可以用氣泡式礦泉水或是調(diào)酒用的蘇打水,倒在干凈的布上輕拍有印痕的地方,很有效喔!
    20、清洗茶、咖啡漬
    被茶、咖啡這些飲料污染的衣服,可立即用70-80%的熱水洗滌,便可除去。
    舊茶跡,可用濃食鹽水浸洗,或用氨水與甘油混合液(1:10)揉洗。絲和毛織物禁用氨水,可用10%的甘油溶液揉搓,再用洗滌劑洗后用水沖凈。
    舊茶及咖啡跡,可用甘油和蛋黃混合溶液擦拭,稍干后用清水漂凈。或在污漬處涂上甘油,再撒上幾粒硼砂,用開水浸洗。亦可用稀釋的氨水、硼砂加溫水擦拭。
    舊咖啡跡可用3%的雙氧水溶液揩拭,再以清水洗凈,亦可用食鹽或甘油溶液清洗。
    21、去除蠟燭油
    先用小刀輕輕刮去表面蠟質(zhì),然后用草紙兩張分別托在污漬的上下,用熨斗熨兩三次,用熨斗的熱量把布纖維內(nèi)的蠟質(zhì)熔化,熔化的蠟油被草紙吸收掉。反復(fù)數(shù)次,蠟燭油印即可除凈。
    22、去處口香糖:
    黏到口香糖的衣服,可以用棉花沾醋,輕輕松松就可以把口香糖擦掉了;
    對衣物上的口香糖膠跡,可先用小刀刮去,取雞蛋清抹在遺跡上使其松散,再逐一擦凈,最后在肥皂水中清洗,清水洗凈;
    還可以先把衣服用塑料袋包好,放到冰箱中冷凍半天,等衣服上的口香糖變硬了取出來,輕輕揉搓,口香糖很快就掉了,而且一點痕跡也沒有!
    23、巧洗白球鞋
    提到白球鞋,您可能也有過同樣的煩惱――辛苦洗干凈的白球鞋曬干后卻出現(xiàn)這樣黃黃的印記,真難看啊!不妨試試熱心觀眾于小姐提供的這個竅門,讓白球鞋洗后依舊亮白如新吧!
    先用肥皂或洗衣粉將鞋子洗刷干凈,把洗好的球鞋浸泡在啤酒中三分鐘 ,然后把球鞋拿到陽臺,放在陰涼處,并且在鞋面上用衛(wèi)生紙蓋上,晾! 效果顯而易見哦!
    24、巧洗毛巾
    毛巾使用久了,常常會濕濕黏黏的,可用鹽搓揉后,用清水洗凈,則可除去濕黏之物。
    25、去除鋼筆漬
    網(wǎng)上有朋友留言問“怎樣去除鋼筆漬”,如下,供參考:
    從化工商店買一點兒草酸(顆粒狀),將染有鋼筆漬的衣服用溶解草酸的水浸泡搓洗,可去處痕跡。由于草酸屬于弱酸,不會腐蝕衣物。

    posted @ 2010-02-23 20:12 paulwong 閱讀(183) | 評論 (0)編輯 收藏

    Java實現(xiàn)遠程屏幕監(jiān)視(轉(zhuǎn))

    遠程屏幕監(jiān)視使得控制方可以在遠程主機上監(jiān)視其它一臺機器,其主要實現(xiàn)原理就是將被控制機器的屏幕作為圖片傳送給監(jiān)視方,在Java中要實現(xiàn)遠程屏幕監(jiān)視,主要解決以下幾個問題即可:
    1:將當前屏幕的顯示內(nèi)容捕捉為圖片
    2:將捕捉的圖片發(fā)送到遠程控制主機
    3:遠程控制主機接收到在本地顯示
    4:利用多線程重復(fù)上面三步達到實時更新

    說起來怎么這么簡單啊,今天試著做了一下遠程屏幕監(jiān)視的實驗,發(fā)現(xiàn)還真不是這么簡單的,把我的心得總結(jié)出來共享一下,希望對你有用。

    將當前屏幕顯示內(nèi)容捕捉為圖片

    1Robot robot = new Robot();
    2//要捕捉的屏幕顯示范圍,下面以全屏示例說明
    3Rectangle rect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
    4BufferedImage bm = robot.createScreenCapture(rect);

    通過上面幾行代碼就把屏幕的當前顯示內(nèi)容保存為內(nèi)存中的BufferedImage對象,這個確實簡單.

    將捕捉的圖片發(fā)送到遠程控制主機
    要達到實時監(jiān)控,怎么保證發(fā)送效率,在網(wǎng)絡(luò)狀況不良好時怎么保證發(fā)送時使用帶寬
    因為要不停地往控制機上發(fā)送圖片,所以傳送的圖片不能太大,否則會影響實時性,當網(wǎng)絡(luò)狀況不好時,占用帶寬過多則更加會給實時性帶來嚴峻的考驗,解決的方法有兩個:
    1:使用jpg格式的圖片進行傳輸。
    jpg是一種支持高度壓縮技術(shù)的圖片格式,它所存儲的信息不包含透明度,同等質(zhì)量的情形下相對來說比png,gif等格式的圖片要小很多,當然,文件大小是以圖像質(zhì)量為代價的,如果你一味地追求壓縮后的大小,圖像質(zhì)量就會受損了。我在實驗中使用大小為28394字節(jié)的png圖片經(jīng)過jpg壓縮后大小僅剩5815字節(jié)(不是PS,整個過程全部使用Java完成)。
    2:將用圖片生成的字節(jié)數(shù)據(jù)先壓縮再傳送。
    這一步是仁者見仁,智者見智了,有人說沒有必要,jgp格式的圖片再壓縮也小不了多少。確實是這樣的,我在實驗中把5815字節(jié)大小的jpg經(jīng)過zip壓縮后為大小變?yōu)?702,有點小作用,實際應(yīng)用中壓縮與否就看你了(壓縮其它格式的圖片效果可能會明顯一點,我在實驗中把一個大小為883078字節(jié)的bmp圖片壓縮后大小僅為16849字節(jié),很可觀,達到了52:1)。

    我能想到的就是這兩點了,歡迎各位仁智雙全的人補充。下面就是這兩點用到的Java技術(shù),Java高手就直接跳過吧。

    使用Java將圖片處理成jpg格式
    1//outputstream就是要寫入處理后的jpg圖片的輸出流,要保存到文件的話就用FileOutputStream
    2JPEGCodec.createJPEGEncoder(outputstream).encode(bm);
    3ImageIO.write(bm, "jpg", outputstream);

    這兩種方法有什么差別呢?別的我不知道,就平均效率來說,第二種是第一種的2倍,我實驗中轉(zhuǎn)換了10次,使用的時間分別是125和250(單位是百分之一毫秒,機子有點慢的說).

    把圖片數(shù)據(jù)轉(zhuǎn)換為字節(jié)數(shù)組
    1ByteArrayOutputStream bos = new ByteArrayOutputStream();
    2JPEGCodec.createJPEGEncoder(bos).encode(bm);
    3// 上句也可以用 ImageIO.write(bm, "jpg", bos)實現(xiàn)
    4bos.flush();
    5byte[] data = bos.toByteArray();

    將生成的字節(jié)數(shù)組進行zip壓縮
    1ZipOutputStream zos = new ZipOutputStream(bos);
    2zos.setLevel(Deflater.BEST_COMPRESSION);
    3//下面我以ScreenCapture.jpg說明
    4zos.putNextEntry(new ZipEntry("ScreenCapture.jpg"));
    5zos.write(data);
    6zos.closeEntry();

    好了,這個時候就可以把字節(jié)數(shù)組發(fā)往監(jiān)控機器了,如果你發(fā)了,你就知道,問題又來了(不會吧?。?。
    1:既然是采用多線程發(fā)送多張圖片,那么對于一張圖片,接收方怎么知道你發(fā)完了呢?
    2:如果要發(fā)其它的數(shù)據(jù),比如鼠標點擊等,接收方又怎么區(qū)分什么時候發(fā)的是圖片,什么時候發(fā)的是其它的……

    對于這兩點問題,最直接的解決方法是當數(shù)據(jù)發(fā)送完成后關(guān)閉發(fā)送字節(jié)的輸出流,第二次發(fā)送時重新建立連接(網(wǎng)上確實有人這樣肆無忌憚地做),這種方法采用不采用就看良心了(汗)。我采用的解決方法是,每次發(fā)送數(shù)據(jù)前都告訴接收方要發(fā)什么東西(解決問題2),同時告訴它我發(fā)了多少字節(jié)(解決問題1),接收方只要接收了這么多字節(jié)數(shù),就表示本次發(fā)送完成,最后再發(fā)送真正要發(fā)送的內(nèi)容(圖片等),說簡單點就是,發(fā)送的消息結(jié)構(gòu)如下:
    【標識位 大小 消息】 
    標識位:采用一個整型,其實是一個byte,占一個字節(jié)
    大?。阂粋€整型,占四個字節(jié)
    消息:實際要發(fā)送的字節(jié)數(shù)組,長度就是字節(jié)數(shù)組的長度
    這樣接收方每次都是先讀取一個整數(shù),判斷發(fā)送方是要發(fā)送什么消息,然后再判斷消息的大小,然后再接收指定大小的消息,最后完成本次發(fā)送轉(zhuǎn)入下一次接收工作。

    采用Socket的方式進行消息的發(fā)送
    1DataOutputStream dos = new DataOutputStream(client.getOutputStream());
    2//SEND_IMAGE_SYMBOL是一個標識位,你隨便定義,只要保證能與其它標識位區(qū)分就行
    3dos.write(SEND_IMAGE_SYMBOL);
    4
    5dos.writeInt(data.length);
    6dos.write(data);
    7dos.flush();

    啊,真不容易,終于發(fā)送出去了!不知道那邊接收到了沒有?那現(xiàn)在就去追蹤報道吧。


    遠程控制主機接收消息 
     1//先要判斷消息的類型
     2DataInputStream reader = new DataInputStream(socket.getInputStream());
     3int msgSymbol = reader.read();
     4//還記得這個SEND_IMAGE_SYMBOL嗎
     5if (msgSymbol == SEND_IMAGE_SYMBOL)
     6{
     7    //哦,是要發(fā)送圖片啊。讓我看看你的圖片有多大
     8    int msgSize = reader.readInt();
     9
    10    //暈,你網(wǎng)速好也不用發(fā)這么大吧,我一次接收不完的,不過幸好我有準備
    11    byte[] buffer = new byte[msgSize];
    12    int length = 0;
    13
    14    while (length < msgSize)
    15    {
    16        int readSize = reader.read(buffer, length, msgSize - length);
    17
    18        if (readSize > 0)
    19        {
    20            length = length + readSize;
    21        }

    22        else
    23        {
    24            break;
    25        }

    26    }

    27    //這是非常關(guān)鍵的,圖片太大時一次性是讀不完的,一定要使用緩沖重復(fù)讀取。
    28
    29    //人家給我發(fā)送的消息是圖片,怎么把字節(jié)數(shù)組還原成圖片呢?
    30    ByteArrayInputStream bis = new ByteArrayInputStream(buffer);
    31    ZipInputStream zis = new ZipInputStream(bis);
    32    //讀取壓縮的數(shù)據(jù)內(nèi)容。
    33    ZipEntry ze = zis.getNextEntry();
    34    BufferedImage bi = ImageIO.read(zis);
    35    //或者BufferedImage bi = JPEGCodec.createJPEGDecoder(zis).decodeAsBufferedImage();
    36    //上面兩行代碼的差別已經(jīng)說過了
    37    //另外,如果在發(fā)送的時候你沒有進行壓縮,把上面的zis換成bis就行。
    38
    39
    40    //有了BufferedImage對象,剩下的就是把它顯示出來了進行遠程"偷窺",任何一個支持圖片顯示的swing組件你都以用,我在實驗中用的是JPanel,一個簡單又支持雙緩沖的組件。
    41}


    最后,就是使用多線程重復(fù)上面的步驟進行實時監(jiān)控了。有什么問題歡迎指正。

    本次實驗進行的還算成功,成功偷窺了自己的桌面。謝謝你堅持看完我這么爛的文章,向你致敬!


    下面是本次實驗的運行圖:


    本文所使用的源代碼:  源代碼下載

    posted @ 2010-02-10 23:45 paulwong 閱讀(461) | 評論 (0)編輯 收藏

    掃盲加扯淡——網(wǎng)友隨筆畫之云計算

         摘要: 今天在論壇看到網(wǎng)友自創(chuàng)的漫畫,也許就是隨筆畫畫吧, 且不說這位網(wǎng)友是否真的理解云計算(老實說,我也不清楚云計算是什么。),但確實是這位網(wǎng)友還是很有才的,能把自己的看法用這種形式表達出來,已經(jīng)很難為可貴了。

    “我看了N多的相關(guān)介紹也找不到一個好的解釋,應(yīng)該說是我看不懂吧。

    誰給個簡單通俗點的解釋啊

    我看了大概就像是網(wǎng)絡(luò)硬盤吧可以上傳電腦備份和文件的還可以在線編輯本人啥的,沒啥特別的啊不是已經(jīng)實現(xiàn)了,只覺的現(xiàn)在大頭就是想把他們規(guī)劃下罷了,
    沒啥特別的怎么那么多公司參與呢”
    網(wǎng)絡(luò)硬盤不是云計算。
    ————————
    什么是云計算呢?
    最開始,人們使用算盤。

      閱讀全文

    posted @ 2010-01-29 00:27 paulwong 閱讀(384) | 評論 (0)編輯 收藏

    華佗偏方

    1.冠心病:干山楂30克,決明子10克,白菊花10克,加水稍煎當茶飲,每日一劑,半月愈.

      2.慢性干病:茵陳1兩,大棗10個,白菊花10克,水煎服,每天一劑,連續(xù)服100天痊愈.

      3:肺結(jié)核:活烏龜一只,用泥包住,用暗火,慢火燒焦去泥,研成龜粉,開水沖服,每天三次,每次一錢,效果良佳,一百日即愈.(忌狗肉酸辣食物)

      4:陽痿不舉:活蝦2個,蛤蚧一點,一棵整蔥白,把蔥白花開,再把活嚇,蛤蚧夾在蔥里烤干研面,睡前服下,當晚見效.

      5:肝硬化腹水;純綠豆面一斤,豬膽4個,用膽汁調(diào)綠面成丸,如綠豆大小,每天三次,每次6丸特效.

      6肺氣腫:仙人掌2兩,去皮切片,香油炸黃,加水一碗,燒開七次,剩半碗即可,每日暮途窮3次,7天痊愈.

      7全身浮腫;小麥麩炒黃1斤,加紅糖拌勻,大棗湯沖服,每日2次,每次60克,連服15天即愈.

      8肺炎:魚星草一把,燉七個荷包雞蛋吃,每日一次,十天愈.

      9:高血壓:每天用八個干香蕉皮,煮開水灌瓶內(nèi)當茶喝,連續(xù)喝八天,不能減斷,不級少于六十四個香蕉皮,連續(xù)喝八天痊愈.

      10:糖尿病:大白公雞一只,殺掉去腸雜,內(nèi)加陳醋四兩,不加油鹽,燉熟吃肉喝湯,三天吃一只,輕者吃1-2只,重的吃三只痊愈.

      11:腎炎:玉米須,西瓜皮,冬瓜皮,赤小豆各一兩,煮湯代茶,持續(xù)服見奇效.

      12:腎炎腹水:巴豆,黃蠟,用大針串在巴豆上,放蠟燈燒出油后,沾蜂黃蠟吃,每日2次,每次4粒,連吃半月痊愈.

      13:羊羔風:落地羊羔一個全毛小雞沒出蛋殼的七個開白花的桃葉七片,共煮熟分幾次吃完自愈.

      14:前列腺炎:生南瓜籽二兩,每天分3次吃完,連續(xù)吃七天痊愈.或用黃瓜尾巴五個切碎,加水250毫升,煮開后分二次,喝完半月愈.

      15:血脂稠:每天用野山棗樹根一尺長,短的也得配一尺長,玉米須干的一兩,濕的二兩,煮開水當茶喝,連續(xù)喝十五天痊愈,不再復(fù)發(fā).

      16:貧血癥:菠菜3兩,豬肝3兩,牛羊肝各2兩,不加油鹽,燉熟吃,每日1付分3次吃完,半月愈.

      17:胃病潰瘍:白芨,疾黎各3錢,煎水服,每日一劑,煎兩次服,外加2片痢特靈,七天痊愈.

      18:食道炎:木灰一兩,紅棗七個,用火燒紅開水捕滅,研灰粉,紅糖水沖服,每日一次,連服七日痊愈.

      19:慢性腸炎,每天4個個雞蛋,分2次炒,炒時不加油鹽水,連續(xù)吃半月特效.或用半熟的無花果,用單不用雙,3,5,7,個都行,煮開水當茶喝,半月痊愈.

      20:紅白痢疾:早晨起床后,空腹吃七個變蛋,每日一次,三日痊愈.或用拉拉秧頭七個,加紅白糖各一兩,煮開水1碗喝下痊愈.

      21:低血壓:甘草15克,桂枝30克,肉桂30克,水煎當茶大量喝,3日血壓升高,少者2日恢復(fù)正常.

      22:氣管炎,哮喘:紅砂糖1000克,烏賊骨500克,烏賊骨焙干研面,與砂糖拌勻,每日三次,每次20克,半月痊愈,不再復(fù)發(fā).

      23:肺結(jié)核,氣管炎:羊肉500克,小麥仁(小麥去皮)60克,生姜9克,熬燉成稀粥,每天早晚各服一次,連服一月痊愈.

      24:性病流精不止:強的松片,鹽酸四環(huán)素片,維生素c片,每天服三次,每次各2片,開水送下,3天除根,不再復(fù)發(fā).

      25:夢遺滑精:荷葉100克,陰干轡烘干,研面,每日3次,每次十克,黃酒沖服,連服3日愈.

      26:甲狀腺腫大:浙貝母,海藻,牡蠣各12克,共研未每日2次,每次6克,飯前用白酒一蠱送下,7天愈.

      27:胃下垂:豬肚半斤,白胡椒25克,同煮后,吃肚喝湯,每日一次,3日愈,胃下垂蹲著吃飯,時間長了就痊愈.

      28:治療翻胃:牛乳一杯,韭菜法半杯,生姜2調(diào)羹,和勻微火上沌溫,空腹飲用,對反胃,噎隔,大便熾結(jié),嘔吐有特效.

      29:經(jīng)前腹痛:五靈脂10克,香附15克,炒香附時灑點酒,加水煎至300毫升,分早晚各服一次,兩次痊愈.

      30:白帶污臭:雞蛋打一小孔,放入白果2克,蒸熟吃,每日2個,7日痊愈.

      31:陰癢滴蟲病:蛇床子,苦參各15克,煮開水先熏后洗,兩次痊愈.

      32:乳腺炎:鮮葡萄葉500克,搗爛敷患處,每天換一次,連用15天痊愈.

      33:慢性咽炎:干黃花菜30克,加水400毫升,文火煎爛,調(diào)入蜂蜜100毫升,每日3次,細嚼慢咽,7天痊愈.

      34:十二脂腸潰瘍:維生素B6,28片,痢特靈28片,用法:第一天吃四次各四片,第二吃三次各二片,第三天吃兩次各兩片,第四天吃一次各兩片.休息一天再服一劑痊愈.

      35:腎虧腰酸疼:黑豆50克,豬腰子4個,小茴香一錢,食鹽少許,煮服吃,每日一劑,7劑痊愈.

      36:腎炎蛋白尿:黃芪,玉米須,糯稻根各30克,炒糯米15克,煎水當茶飲,每天一會,15天痊愈.

      37:腎結(jié)石:用拉拉秧根,煮開水當茶喝,連喝十天愈.

      38:膽結(jié)石:雞內(nèi)金粉15克,沖泡3百毫升開水浸泡15分鐘后,即可服用,然后慢跑步,以助結(jié)石排出,連服1月痊愈.

      39:膽襄炎:玉米須2兩,茵陳1兩,山枳子5錢,廣郁金5錢,水煎服,每日一劑,連服15劑痊愈.

      40:頭痛病:麥麩半斤,加醋炒熱后,分兩袋裝,放頭上頂,兩袋互換頂涼了加熱,12小時不出屋一次愈.

      41:偏頭痛:用蘿卜汁滴鼻孔,仰臥,左邊頭疼滴右邊鼻孔,右邊頭疼滴左邊鼻孔,效果即佳.

      42:腮腺炎:活泥鰍20條,洗凈加白糖250克,拌15分鐘,用滑液糖漿涂患處,干了即換,每日數(shù)次,3日痊愈.

      43:急性扁桃體炎:取蝎尾一條,冰片0.3克,研細未,撒在小膏藥中間,貼于患處,24小時更換一次,2至3次即愈.

      44:頭暈:用才出小雞的蛋殼,焙干研面,紅糖水沖服,每日3次,每次10克,3日愈.

      45:鼻子出血:用七七芽一把,煮碗水喝下即愈.

      46:鼻炎,鼻竇炎:河里青苔鮮的,從潮濕處刮下,裝入瓶內(nèi),紗布卷青苔條,塞入鼻孔內(nèi),4小時更換一次,五日即愈,鼻塞得用10至15日痊愈.

      47:耳內(nèi)流膿:柳樹上生的莪子2克,入老青瓦上焙干研面,香油調(diào)各,滴入耳內(nèi),用棉花堵住,一次愈神效.

      48:耳鳴:生豬皮,香蔥各100克,同剁爛,稍加食鹽,蒸熟后一次吃完,連吃3天.對疲勞過度,上火引起的有效.

      49耳聾:口內(nèi)含一根大鐵釘,耳上放塊磁鐵聽,每天聽六次,每次2分鐘,數(shù)日愈.

      50:口腔炎:用食鹽水漱口,再含冰糖即可,如潰瘍,取雞蛋殼軟膜貼之,疼痛立止,2次痊愈.

      51:咳嗽無痰:冬瓜子一兩,水豆腐一方,冰糖二兩,燉熟服下有效如神,連用3次,不妨一試.

      52:牙疼:兩方,神經(jīng)性火牙疼,用蛇皮焙黃研面,白酒調(diào)稀糊,點在牙上立即止痛,30年不發(fā);蛀牙痛,把豬肚洗凈,

      刮一點粘膜,包在小沙布內(nèi),一次根治.

      53:黑黃牙變白:烏賊骨研面,拌牙膏刷牙,潔白如玉.

      54:洗眼仙方:中藥青皮15克,皮硝15克,加六碗水煎至兩碗水,裝在瓶內(nèi),洗時倒點碗內(nèi),用小紗布棉花沾藥水洗眼,每天三次,白內(nèi)障和一切眼病洗之即愈.

      55:百蟲入耳:貓尿滴耳內(nèi),百蟲自出來,大蒜擦貓鼻自尿.

      56:魚刺卡喉:鴨子倒提,取口中涎水咽下,魚刺自化.別的骨頭,用狗液咽下自化.

      57:少白頭變黑發(fā):1:柏殼裝枕頭,枕頭半年即黑.2:黑芝麻三兩,何首烏三兩,加糖水煮沸分三次吃完,連吃半月后,白發(fā)逐漸變黑.

      58:脫發(fā):取黑芝麻30克,大米100克,放鍋內(nèi)煮粥,當早飯食用,每天一劑,連服10天可再生新發(fā).

      59:吐血:用韭菜根搗汁,兌冷開水喝特效.

      60:神經(jīng)衰弱:浮小麥50克,甘草15克,大棗10克,酸棗仁15克,水煎服,每日一付即愈.

      61:感冒:二兩生姜,二兩紅糖,把姜切碎,放鍋內(nèi)加水煎剩一碗喝下睡覺,一次即愈.

      62:咳嗽:香油一兩,羊肝三兩,炒熟吃,每日3次,3日即愈.痰多用蘿卜搗絞汁二兩,冰糖二兩,煎服,每日早晚各服一次,3日愈.

      63:去口臭:甘草,桔皮,泡過的茶葉各五錢,研未先含后服,每日2次,3日即愈.

      64:大便干燥:1豬油一兩,白糖一兩,開水一杯沖服即愈.2:每天早晨喝一杯淡鹽開水特效.

      65:小兒氣管炎;石榴子一把,搗爛加冰糖調(diào)水喂,每天三次,三天斷根.

      66:小兒腹瀉:清涼油,涂小兒肚臍上,和尾骨上,每天2次,3天痊愈.

      67:小兒尿床:鲇魚一條,放鍋里加水煮,不加油鹽,留一碗喝下,第一天尿,向后永不尿床.

      68:小兒夜哭:茶葉適量,放嘴嚼碎制成餅狀,敷于小兒肚臍上立即停哭.

      69:小兒百日咳:雞苦膽一個,紅糖適量,兩者調(diào)勻,每日一次,三日即愈.

      70:大人尿床:雞腸子四付,洗凈,放新瓦上加熱,放雞腸焙干研面,每日二次,每次10克,黃酒沖服,四付服完痊愈,再復(fù)發(fā).

      71:疝氣:用發(fā)岔的茄子,切碎煮熟吃,每天2次連吃5次愈.或用紅糖1兩,葵花桿瓤子一棵整個煮水喝,2次愈.

      72:多尿癥:穿山甲15克,五香粉適量,放鍋內(nèi)加水燉熟食穿山甲肉,每日一次,4日即愈.

      73:蕁麻疹:糯米60克,慢火把米炒開花,取米花燉湯服,每日一次,3日愈.

      74:麻疹:香菜500克,水燒開后,芫荽下鍋煮一二開即可,先熏后洗手足,可治麻疹應(yīng)出不出,或不透的.

      75:濕疹:中藥蒼耳子50克,煎水洗患處,每日二次,二日愈.

      76:全身癢:中藥蛇床子30克,苦參30克,加雄黃鹽少許,煮開水洗全身,每日一次,3日愈.

      77:失眠:白芍60克,雞肝一具,先煎白芍,去藥渣且,把雞肝搗爛,煎溫服,每晚一次,5次神效.

      78:打呃逆:鮮生姜30克,蜂蜜30克,生姜取汁去渣,與蜂蜜調(diào)勻一次服下卻愈.

      79:細菌性腹瀉:3-5棵大蔥,去皮洗凈,沾油象吃菜那樣吃下,隔2-3小時再吃一次即愈.

      80:病后不語:服龜,每天2次,每次10克,3天后自能說話,(大蒜抹龜鼻自尿)

      81:口吃:舌頭上放塊小糖,慢慢練習說話,幾日見效.

      82:紅眼病:桑葉,菊花各15克,水煎,去渣,溫洗患眼,一日二次,三日即愈.

      83:尿血:葡萄根,白糖各9克,水煎服,七日即愈.

      84:秀球風:桃葉,明礬搗泥擦患處,3次特效.

      85:暈船暈車:生姜二片,綠豆七粒,把二片姜中間夾七個綠豆粒,敷有寸脈內(nèi)關(guān)上,膠布固定,神效.

      86:臉上粉刺:香油炸蝎子吃,每日10克,7日痊愈.

      87:臉上雀斑:檸檬一兩,硼砂三錢,封瓶三天涂雀斑,每日一次,七日掉.

      88:臉上黑痣:生石灰,白堿面各3克,用酒精調(diào)糊狀,點在黑痣上,四小時即掉.

      89:盜汗:五倍子9克,研末加水調(diào)成糊狀,睡前敷肚臍上紗布固定,一次即愈.

      90:睡覺打呼嚕:枕頭不要太高,睡前點滴鼻通良效.

      91:頭昏:生豬腦一個,加紅糖一兩,燉熟吃,每日一次,七日愈.

      92:減肥:海帶50克,草決明75克,水煎服,每日一次,15日達到理想,不妨一試.

      93:鵝掌風:半斤食醋,加幾滴白酒,燒開洗手,每天3至5次,5天即愈.

      94:米面不生蟲:花椒殼,小茴香兩把,用紗布包住,放在米面缸里,蓋好常年不生蟲.

      95:燒燙傷:用白紙泡白酒內(nèi),敷患處,要急時,紙干即換,消毒,止痛,好得快,不妨一試.

      96:痔瘡:不論什么痔瘡,用無花果樹葉6片,煮開水連葉倒入桶內(nèi),先熏后洗,每天一次,3天痊愈.

      97:脫肛:用白礬,白芋各等份,搗成糊狀,砂布包條寒入肛門,每天一次二小時取出,連續(xù)七次即愈.

      98:牛皮癬,頭癬:用韭菜根30克,上藥曬干研面,香油調(diào)糊狀,涂患處,隔日一次,5次即愈.或用大蒜先擦刀銹,再擦癬,每日3次,頑癬10天愈.

      99:皮膚過敏:每日3次,每次吃15-25枚紅棗,生食熟食,一般十天后見效.

      100狐臭:明礬30克,樟腦3克,冰片1.5克,共研細面,水調(diào)糊狀擦患處,每晚一次,7日愈.

      101:凍瘡:夏天冶凍瘡冬天不凍,用芝麻中間的葉子,摘下擦凍過的皮膚一次,冷天再不凍.

      102.灰指甲:用冰醋酸泡指甲草,1斤冰醋酸,泡3兩鳳仙花連葉花梗一起泡在冰醋酸內(nèi),泡七天即可用,每天5次,1月即愈。

      103。腳汗:茄子棵、辣椒棵,煮開水洗腳,3日愈。

      104。腳氣:白礬研細面撒在鞋子里邊,每天撒一次,三次神效,不再復(fù)發(fā),不妨一試。

      105:腳手裂:用醋煮楊樹葉,泡腳手,3日即愈。

      106:腳雞眼:中藥鴨蛋子,去皮研面,先刺破患處點滴醋,再把藥面抹上,膠布固定,3次愈。

      107:腳骨刺:沒石子,牙皂各5克,研面,白醋精調(diào)糊狀,敷患處固定,2天愈。

      108:腳手麻木:生姜60克,陳醋100克,煎湯洗1月愈。

      109:腳臭:開水里加茶葉和鹽少許,水溫,泡雙腳搓洗,3次愈。

      110:腳腿抽筋:抽筋時用食指和拇指按壓人中穴,按不抽筋為止,結(jié)其他部位也管用。

      111:刺猴:七個生菜雞蛋在醋里泡七天,再把雞蛋煮吃,每天吃一個,七個吃完,刺猴全掉。

      112:骨質(zhì)增生:獨頭大蒜3頭,蘿卜一片,蔥白一段,搗成糊狀,灘在布上,敷患處,兩小時去掉,過兩天一次,5次愈?;蛏F屑炒熱加醋裝布袋內(nèi)敷患處,4次愈。

      113:肩周炎:食鹽500克,小茴香80克,放鍋內(nèi)炒熟,裝入布包內(nèi),敷患處,每晚一次,出汗止痛,四次即愈。

      114:關(guān)節(jié)炎:每日早倒退四-五百步,每晚用細黃砂1斤,食鹽半斤,炒熱后裝布袋內(nèi),敷關(guān)節(jié)一次,再重的關(guān)節(jié)炎1月痊愈。

      115:類風濕關(guān)節(jié)炎:生姜,大蔥,辣椒各9克,煮面條,乘熱吃下,以出汗為度,每日2次,連續(xù)10天特效。

      116:坐骨神經(jīng)痛:石決明,蛇脫,蘇薄荷各15克,加黃酒一斤,煎30分鐘,分2次服下,半月即愈。

      117:脈管炎:將田螺洗凈,搗碎如泥敷患處,連用七天愈。

      118:腰腿疼:反走路膝蓋不要彎曲,每天早晨起床后,倒走200至300步,治療腰腿,關(guān)節(jié)炎有特效,不妨一試。

      119:小便不通:大蔥白3棵,搗如泥,按揉關(guān)元穴即尿。

      120:夜晚磨牙:半夏,茯苓,桔紅,石昌蒲,炒焦荷葉各6克,甘草5克,水煎服,每日一劑分2次服,3劑痊愈。

      121:戒煙妙法:中藥檳榔一棵,鉆一小孔,灌入煙油,放米水中泡四天,清水洗凈,來煙癮就聞,幾日內(nèi)戒掉。

      122:喝酒不醉:葛花,葛根二種不管哪種15克,加點茶葉,泡杯茶喝下,10分鐘后,再去喝酒,如同喝水。

      123:酒醉立醒:冰片0。2克,甘草5克,沖水一杯喝下可醒。

      124:丹毒:用海蟄皮不要洗,接開敷患處,4小時換一次?;蛴玫佚埾慈ツ?,加白糖化液涂患處,每天3次,特效。

      125:食道癌:核桃葉一個,雞蛋一個,把核桃葉切碎,同雞蛋放鍋內(nèi),不加油鹽和水,單找個鍋炒熟吃,每天3次,吃好為止。

      126:白癜風:用燒酒泡生姜7天,用生姜沾酒擦患處每日3次,每次3分鐘,擦紅為止,數(shù)日即愈。

    posted @ 2010-01-12 23:44 paulwong 閱讀(460) | 評論 (0)編輯 收藏

    jbpm4.3與spring集成

    jbpm4.2與spring集成有點問題,直接跟據(jù)它自己的“開發(fā)指南”提供的方法是不能集成的。在官網(wǎng)查到的信息是發(fā)布4.2時,忘記更新集成spring的文件。不過4.3已經(jīng)把該bug改過來了。下面是集成方法。

    版本:
    jbpm4.3
    spring2.5.6
    mysql5.1.40

    直接從jbpm4.3自帶的文件到src目錄:
    從jbpm-4.3"install"src"cfg"hibernate"jdbc復(fù)制mysql.hibernate.cfg.xml到src目錄,文件名改為hibernate.cfg.xml。
    從jbpm-4.3"install"src"cfg"spring復(fù)制applicationContext.xml到src目錄。
    從jbpm-4.3"install"src"cfg"jbpm復(fù)制spring.jbpm.cfg.xml到src目錄,文件名改為jbpm.cfg.xml。
    修改applicationContext.xml、hibernate.cfg.xml的數(shù)據(jù)庫配置信息,jbpm4.3與spring的集成就完成了,可以自己寫測試文件測試,集成非常容易。

    不過在applicationContext.xml和hibernate.cfg.xml兩個文件都要改數(shù)據(jù)庫信息有點麻煩,所以只復(fù)制applicationContext.xml、spring.jbpm.cfg.xml兩個文件到src目錄,把hibernate.cfg.xml的配置整進spring的配置文件applicationContext.xml中。
    applicationContext.xml
    <beans xmlns="http://www.springframework.org/schema/beans" 
             xmlns:aop
    ="http://www.springframework.org/schema/aop" 
             xmlns:context
    ="http://www.springframework.org/schema/context"
              xmlns:p
    ="http://www.springframework.org/schema/p"
             xmlns:tx
    ="http://www.springframework.org/schema/tx"
           xmlns:xsi
    ="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation
    ="
              http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
              http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
              http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
              http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"
    >
     
     
    <context:annotation-config />

    <bean
      
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
      p:location
    ="hibernate.properties"
      p:ignoreUnresolvablePlaceholders
    ="true" />
      
    <bean id="springHelper" class="org.jbpm.pvm.internal.processengine.SpringHelper" />
      
    <bean id="processEngine" factory-bean="springHelper" factory-method="createProcessEngine" />
      
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        
    <property name="dataSource" ref="dataSource" />
        
    <property name="mappingResources">
            
    <list>
                
    <value>jbpm.repository.hbm.xml</value>
                
    <value>jbpm.execution.hbm.xml</value>
                
    <value>jbpm.history.hbm.xml</value>
                
    <value>jbpm.task.hbm.xml</value>
                
    <value>jbpm.identity.hbm.xml</value>
            
    </list>
        
    </property>
        
    <property name="hibernateProperties">
            
    <props>
                    
    <prop key="hibernate.dialect">${dataSource.dialect}</prop>
                    
    <prop key="hibernate.hbm2ddl.auto">${dataSource.hbm2ddl.auto}</prop>
                
    </props>
        
    </property>
      
    </bean>
      
    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        
    <property name="sessionFactory" ref="sessionFactory" />
        
    <property name="dataSource" ref="dataSource" />
      
    </bean>
      
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        
    <property name="driverClassName" value="${dataSource.driverClassName}" />
        
    <property name="url" value="${dataSource.url}" />
        
    <property name="username" value="${dataSource.username}" />
        
    <property name="password" value="${dataSource.password}" />
      
    </bean>
    </beans>


    新建文件hibernate.properties,主要用來配置連接數(shù)據(jù)庫信息

    dataSource.password=123
    dataSource.username
    =root
    dataSource.databaseName
    =jbpmdb
    dataSource.driverClassName
    =com.mysql.jdbc.Driver
    dataSource.dialect
    =org.hibernate.dialect.MySQLInnoDBDialect
    dataSource.serverName
    =localhost:3306
    dataSource.url
    =jdbc:mysql://${dataSource.serverName}/${dataSource.databaseName}
    dataSource.properties
    =user=${dataSource.username};databaseName=${dataSource.databaseName};serverName=${dataSource.serverName};password=${dataSource.password}
    dataSource.hbm2ddl.auto=update

    以后要改數(shù)據(jù)庫配置信息也只在這個文件修改就可以了。

    測試用的流程swing.jpdl.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <process name="swing" xmlns="http://jbpm.org/4.3/jpdl">
       
    <start g="94,64,48,48" name="start1">
          
    <transition g="-52,-22" name="A" to="A"/>
       
    </start>
       
    <task assignee="A" g="73,195,92,52" name="A">
          
    <transition g="-52,-22" name="B" to="B"/>
       
    </task>
       
    <task assignee="B" g="266,192,92,52" name="B">
          
    <transition g="-40,-21" name="end" to="end1"/>
       
    </task>
       
    <end g="290,327,48,48" name="end1"/>
    </process>


    測試代碼

    public class Main {
        
    public static void main(String[] args)  {
            ClassPathXmlApplicationContext applicationContext 
    = new ClassPathXmlApplicationContext("applicationContext.xml");
            applicationContext.start();
            ProcessEngine processEngine 
    = (ProcessEngine)applicationContext.getBean("processEngine");
            ExecutionService executionService 
    = processEngine.getExecutionService();
            TaskService taskService 
    = processEngine.getTaskService();

            
    //發(fā)布流程
            String deploymentId = processEngine.getRepositoryService().createDeployment()
            .addResourceFromClasspath(
    "resource/swing.jpdl.xml").deploy();
            System.out.println(
    "流程發(fā)布ID:"+deploymentId);
            
            
    //啟動一個流程實例
            ProcessInstance processInstance = executionService.startProcessInstanceByKey("swing");
            System.out.println(
    "流程實例ID:" + processInstance.getId());

            
    //A處理任務(wù)
            List<Task> taskList_A = taskService.findPersonalTasks("A");
            System.out.println(
    "A待處理任務(wù)數(shù):" + taskList_A.size());
            
    if(taskList_A.size() > 0){
                Task task 
    = taskList_A.get(0);
                taskService.completeTask(task.getId());
            }

            
            
    //B處理任務(wù)
            List<Task> taskList_B = taskService.findPersonalTasks("B");
            System.out.println(
    "B待處理任務(wù)數(shù):" + taskList_B.size());
            
    if(taskList_B.size() > 0){
                Task task 
    = taskList_B.get(0);
                taskService.completeTask(task.getId());
            }

            
        }

    }


    附件是完整的集成文件和測試代碼,僅在spring2.5.6測試過,要運行該部分代碼,需要添加jbpm4.3和spring的相關(guān)庫文件。
    源代碼:jbpm4.3-spring

    posted @ 2010-01-08 12:40 paulwong 閱讀(838) | 評論 (0)編輯 收藏

    FCKeditor

         摘要: 在線編輯器對于我們作新聞產(chǎn)品之類的程序是很重要的,在網(wǎng)上找錄了好了好一段時間,發(fā)現(xiàn)FCKeditor,跨平臺的,正在進行的jsp項目正需要這款html在線編輯器。試用了一下FCKeditor,根據(jù)網(wǎng)上的文章小結(jié)一下:

    1.下載
    FCKeditor.java 2.3 (FCKeditot for java)
    FCKeditor 2.2 (FCKeditor基本文件)
    以下是下載地址:
    http://www.fckeditor.net/download/default.html
      閱讀全文

    posted @ 2009-12-14 15:42 paulwong 閱讀(139) | 評論 (0)編輯 收藏

    僅列出標題
    共115頁: First 上一頁 100 101 102 103 104 105 106 107 108 下一頁 Last 
    主站蜘蛛池模板: 最近中文字幕大全中文字幕免费| 亚洲国产精品VA在线观看麻豆| 亚洲色大成网站www久久九| 免费一区二区视频| 亚洲国产精品综合久久久 | 亚洲乱码一二三四五六区| 免费在线一级毛片| 久久久久久精品成人免费图片| 瑟瑟网站免费网站入口| 亚洲国产日产无码精品| 亚洲精品乱码久久久久久自慰| 伊人久久大香线蕉免费视频| 久久久久国产成人精品亚洲午夜 | 亚洲中文无码av永久| 日本大片在线看黄a∨免费| 亚洲最大免费视频网| 亚洲一区中文字幕| www.999精品视频观看免费| jizz免费观看视频| 另类小说亚洲色图| 亚洲啪AV永久无码精品放毛片| 亚洲好看的理论片电影| 亚洲色欲一区二区三区在线观看| 爱情岛论坛网亚洲品质自拍| 亚洲av无码成人精品区| 在线观看免费成人| 日本不卡在线观看免费v| 日本免费一二区在线电影| 国产免费AV片无码永久免费| 日日AV拍夜夜添久久免费| 国产极品美女高潮抽搐免费网站| 毛片a级毛片免费观看免下载| 波多野结衣在线免费视频| 亚洲电影免费观看| 最近中文字幕无吗高清免费视频| 成人毛片免费观看视频在线| 国产精品免费一级在线观看| 国产免费观看黄AV片| 亚洲国产精品毛片av不卡在线| 亚洲美日韩Av中文字幕无码久久久妻妇| 亚洲精品乱码久久久久久蜜桃|