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

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

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

    posts - 32, comments - 153, trackbacks - 0, articles - 0
      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    2006年11月25日

    1. 在創(chuàng)建Human Task的UI項(xiàng)目時(shí),請(qǐng)注意保證每個(gè)Project的package名都不相同,否則在BPM Workspace中會(huì)出現(xiàn)DataControl的NullPointerException。最簡(jiǎn)單的方法就是不要設(shè)置Application的package prefix,然后讓每個(gè)項(xiàng)目都使用auto-generate的package名。
    2. 在Human Task中可以動(dòng)態(tài)指定審批人,具體做法是在Assign標(biāo)簽頁(yè)中,選擇Single類型(當(dāng)然也完全可以是別的類型),然后選擇User,By Expression,后面的表達(dá)式是一個(gè)字符串,比如'weblogic,wfaulk,jstein',注意要使用單引號(hào),也可以從payload中讀取。不過(guò)這種方式有時(shí)會(huì)出錯(cuò),出錯(cuò)原因不明,不過(guò)在Organization中添加一個(gè)用戶,deploy,然后再把這個(gè)用戶刪除就解決了,不得不說(shuō)非常汗。
    3. 如果需要對(duì)某個(gè)Human Task定時(shí)做一些操作,可以使用Catch Timer Event,注意這里指向End1,說(shuō)明Timer觸發(fā)以后直接走Update Database & Send Email這條分支,然后結(jié)束,并不是主流程結(jié)束。


    posted @ 2011-04-07 10:35 Zou Ang 閱讀(1261) | 評(píng)論 (0)編輯 收藏

         摘要: JAVA相關(guān)基礎(chǔ)知識(shí) 1、面向?qū)ο蟮奶卣饔心男┓矫?nbsp;  1.抽象: 抽象就是忽略一個(gè)主題中與當(dāng)前目標(biāo)無(wú)關(guān)的那些方面,以便更充分地注意與當(dāng)前目標(biāo)有關(guān)的方面。抽象并不打算了解全部問(wèn)題,而只是選擇其中的一部分,暫時(shí)不用部分細(xì)節(jié)。抽象包括兩個(gè)方面,一是過(guò)程抽象,二是數(shù)據(jù)抽象。 2.繼承: 繼 承是一種聯(lián)結(jié)類的層次模型,并且允許和鼓勵(lì)類的重用,它提供了一種明確表述共性的方法...  閱讀全文

    posted @ 2007-12-25 07:14 Zou Ang 閱讀(518) | 評(píng)論 (0)編輯 收藏

         摘要: 使用Hessian開(kāi)發(fā)C/S模式的小系統(tǒng)
    之所以叫小系統(tǒng),主要是因?yàn)镠essian不支持Hibernate的延遲加載,所以需要在DAO層使用Hibernate的同學(xué)請(qǐng)注意了。

    Hessian其實(shí)是一種RMI技術(shù),已經(jīng)被集成在Spring Framework中,這樣就很方便了。

    首先看客戶端

    第一步:
    先定義Client與Server交互的接口。  閱讀全文

    posted @ 2007-07-28 10:48 Zou Ang 閱讀(3851) | 評(píng)論 (4)編輯 收藏

    Another Quiz : " Which Programming Language Are You?"

    http://www.bbspot.com/News/2006/08/language_quiz.php

    You are Java.  You are very strong and sturdy, but this makes you a bit sluggish.

    posted @ 2007-05-07 12:09 Zou Ang 閱讀(520) | 評(píng)論 (0)編輯 收藏

    測(cè)到最后我才發(fā)現(xiàn)原來(lái)我是一個(gè)內(nèi)向的人啊~~真是,搞得我一直都不知道呢
    大家有空也去玩玩
    http://www.psytopic.com/mag/post/820.html

    Psytopic分析:您的性格類型是“ISTJ”(內(nèi)向+實(shí)感+思維+判斷)

    沉靜,認(rèn)真;貫徹始終、得人信賴而取得成功。講求實(shí)際,注重事實(shí)和有責(zé)任感。能夠合情合理地去決定應(yīng)做的事情,而且堅(jiān)定不移地把它完成,不會(huì)因外界事物而分散精神。以做事有次序、有條理為樂(lè)---不論在工作上, 家庭上或者生活上。重視傳統(tǒng)和忠誠(chéng)。

    ISTJ型的人是嚴(yán)肅的、有責(zé)任心的和通情達(dá)理的社會(huì)堅(jiān)定分子。他們值得信賴,他們重視承諾,對(duì)他們來(lái)說(shuō),言語(yǔ)就是莊嚴(yán)的宣誓。 ISTJ型的人工作縝密,講求實(shí)際,很有頭腦也很現(xiàn)實(shí)。他們具有很強(qiáng)的集中力、條理性和 準(zhǔn)確性。無(wú)論他們做什么,都相當(dāng)有條理和可靠。他們具有堅(jiān)定不移、深思熟慮的思想,一旦他們著手自己相信是最好的行動(dòng)方法時(shí),就很難轉(zhuǎn)變或變得沮喪。ISTJ型的人特別安靜和勤奮,對(duì)于細(xì)節(jié)有很強(qiáng)的記憶和判斷。 他們能夠引證準(zhǔn)確的事實(shí)支持自己的觀點(diǎn),把過(guò)去的經(jīng)歷運(yùn)用到現(xiàn)在的決策中。他們重視和利用符合邏輯、客觀的分析,以堅(jiān)持不懈的態(tài)度準(zhǔn)時(shí)地完成工作,并且總是安排有序,很有條理。他們重視必要的理論體系和傳統(tǒng) 慣例,對(duì)于那些不是如此做事的人則很不耐煩。ISTJ型的人總是很傳統(tǒng)、謹(jǐn)小甚微。他們聆聽(tīng)和喜歡確實(shí)、清晰地陳述事物。ISTJ型的人天生不喜歡顯露,即使危機(jī)之時(shí),也顯得很平靜。他們總是顯得責(zé)無(wú)旁貸、堅(jiān)定不變 、但是在他們冷靜的外表之下,也許有強(qiáng)烈卻很少表露的反應(yīng)。

    您適合的領(lǐng)域有:工商業(yè)領(lǐng)域、政府機(jī)構(gòu) 金融銀行業(yè)、政府機(jī)構(gòu)、技術(shù)領(lǐng)域、醫(yī)務(wù)領(lǐng)域

    您適合的職業(yè)有:

    · 審計(jì)師
    · 會(huì)計(jì)
    · 財(cái)務(wù)經(jīng)理
    · 辦公室行政管理
    · 后勤和供應(yīng)管理
    · 中層經(jīng)理
    · 公務(wù)(法律、稅務(wù))執(zhí)行人員
    · 銀行信貸員
    · 預(yù)算分析師
    · 保險(xiǎn)精算師
    · 稅務(wù)經(jīng)紀(jì)人
    · 稅務(wù)檢查員
    · 機(jī)械、電氣工程師
    · 計(jì)算機(jī)程序員
    · 數(shù)據(jù)庫(kù)管理員
    · 地質(zhì)、氣象學(xué)家
    · 法律研究者
    · 律師
    · 外科醫(yī)生
    · 藥劑師
    · 實(shí)驗(yàn)室技術(shù)人員
    · 牙科醫(yī)生
    · 醫(yī)學(xué)研究員
    · 信息總監(jiān)
    · 電腦編程員
    · 證券經(jīng)紀(jì)人
    · 會(huì)計(jì)
    · 文字處理專業(yè)人士

    posted @ 2007-05-06 08:09 Zou Ang 閱讀(1533) | 評(píng)論 (2)編輯 收藏

    基于求函數(shù)f(x,y,z)=xyz*sin(xyz)最大值問(wèn)題的演示程序:


    截圖:








     

    壓縮包:
    genetic_algorithm.part1.rar
    genetic_algorithm.part2.rar
    genetic_algorithm.part3.rar
    genetic_algorithm.part4.rar

    運(yùn)行方法:
    解壓后在命令行輸入:java -jar genetic_algorithm.jar

    posted @ 2007-04-29 12:11 Zou Ang 閱讀(6219) | 評(píng)論 (75)編輯 收藏

         摘要: 最近學(xué)習(xí)遺傳算法,寫(xiě)了這么一個(gè)小程序來(lái)計(jì)算函數(shù) f(x,y,z) = xyz*sin(xyz)的最大值,這段程序經(jīng)過(guò)小小改變就可以適應(yīng)其他的函數(shù)最大值求解問(wèn)題首先介紹一下遺傳算法,遺傳算法就是模擬自然界中物競(jìng)天擇,適者生存的法則,通過(guò)對(duì)解空間進(jìn)行進(jìn)化從而求得最優(yōu)方案的方法,遺傳算法的好處在于,即使算法中的某些參數(shù)不起作用了,整個(gè)算法還是可以正常地工作,也就是說(shuō),整體種群的走向是越來(lái)越好的遺傳算法的...  閱讀全文

    posted @ 2007-04-26 21:41 Zou Ang 閱讀(7045) | 評(píng)論 (14)編輯 收藏

         摘要: 用Java從控制臺(tái)輸入密碼

    本來(lái)以為是很簡(jiǎn)單的問(wèn)題,查了一下發(fā)現(xiàn)Java居然沒(méi)提供這樣一個(gè)方法。目前實(shí)現(xiàn)的方式有2個(gè),一個(gè)是利用JNI來(lái)調(diào)用C/C++方法,另一個(gè)是使用多線程。
    本文使用JNI調(diào)用C/C++的方法實(shí)現(xiàn)  閱讀全文

    posted @ 2007-02-24 22:06 Zou Ang 閱讀(3675) | 評(píng)論 (6)編輯 收藏

         摘要: JDK6.0發(fā)布有段時(shí)間了,新的JDK也有不少新的特性,我去網(wǎng)上搜集了一下,列在下面和大家一起學(xué)習(xí).1.Desktop和SystemTray. 在JDK6中 ,AWT新增加了兩個(gè)類:Desktop和SystemTray,前者可以用來(lái)打開(kāi)系統(tǒng)默認(rèn)瀏覽器瀏覽指定的URL,打開(kāi)系統(tǒng)默認(rèn)郵件客戶端給指定的郵箱發(fā)郵件,用默認(rèn)應(yīng)用程序打開(kāi)或編輯文件(比如,用記事本打開(kāi)以txt為后綴名的文件),用系統(tǒng)默認(rèn)的打印...  閱讀全文

    posted @ 2007-02-09 12:00 Zou Ang 閱讀(2422) | 評(píng)論 (3)編輯 收藏

    這幾天突然遇到了一個(gè)問(wèn)題:Tomcat跑不起來(lái)了!提示錯(cuò)誤信息:
    Error Listener Start
    org.springframework.web.context.ContextLoaderListener
    Error Listener Start
    ....
    就這么2行,讓人一頭霧水。昨天檢查了一個(gè)下午也沒(méi)發(fā)現(xiàn)問(wèn)題。今天突然在查看錯(cuò)誤日志時(shí)發(fā)現(xiàn):
    Context initialization failed

    org.springframework.beans.factory.BeanDefinitionStoreException: Line 14 in XML document from ServletContext resource [/WEB-INF/springctx-datareport.xml] is invalid; nested exception is org.xml.sax.SAXParseException: Element type "bean" must be followed by either attribute specifications, ">" or "/>".

    仔細(xì)查看了一下配置文件,原來(lái)是同組的組員在寫(xiě)配置文件的時(shí)候在class="...."后面多了一個(gè)引號(hào)!
    這個(gè)Listener Start的問(wèn)題太隱蔽,如果沒(méi)有做錯(cuò)誤日志估計(jì)一直很難發(fā)現(xiàn)了
    不過(guò)這次有了教訓(xùn),以后也有方向了

    posted @ 2007-02-03 09:33 Zou Ang 閱讀(3701) | 評(píng)論 (1)編輯 收藏

         摘要: 根據(jù)Ajax in Action書(shū)進(jìn)行調(diào)整,修改了原書(shū)上的錯(cuò)誤,調(diào)試通過(guò)。
    可重用的Ajax輸入提示類,功能類似Google的輸入提示  閱讀全文

    posted @ 2007-02-01 22:39 Zou Ang 閱讀(3937) | 評(píng)論 (7)編輯 收藏

         摘要: JSP與Tomcat亂碼解決方法  閱讀全文

    posted @ 2007-01-23 21:12 Zou Ang 閱讀(4380) | 評(píng)論 (6)編輯 收藏

    經(jīng)常開(kāi)各種各樣的會(huì)議,要達(dá)成共識(shí)很不容易,尤其技術(shù)會(huì)議更是容易吵架。舊年最后一天,寫(xiě)點(diǎn)關(guān)于“開(kāi)會(huì)”的想法。

    首先,要注意聽(tīng)別人發(fā)言。盡量不要打斷別人的發(fā)言,抓住對(duì)方的主要思想和依據(jù)。不要帶著偏見(jiàn)聽(tīng),有時(shí)候可能覺(jué)得對(duì)方不如你,但是不代表他現(xiàn)在說(shuō)的就不對(duì)。把口頭禪從“不,……”改成“對(duì),……”,即使有時(shí)候你不同意他的觀點(diǎn),但是先肯定一下,可以緩和很多氣氛。

    然后,盡量先把自己的理論基礎(chǔ)表達(dá)清楚,有時(shí)候爭(zhēng)了半天,發(fā)現(xiàn)兩個(gè)人想法是一樣的,不過(guò)是換了種表達(dá)方式……

    最后,不要長(zhǎng)篇大論,給別人一個(gè)插口的機(jī)會(huì)。有些人講話,喜歡停頓一下,然后在別人馬上要開(kāi)口講話的時(shí)候接著講。我很反感這種人,耍猴呢啊?給別人一個(gè)提出意見(jiàn)和疑問(wèn)的機(jī)會(huì)。盡量把自己放到討論的主導(dǎo)地位上來(lái),就是說(shuō),要慢慢地讓大家圍繞著你的觀點(diǎn)提問(wèn)題,然后你再來(lái)進(jìn)行解答。但是千萬(wàn)不要不讓別人說(shuō)話,有時(shí)候給別人機(jī)會(huì)說(shuō)話對(duì)自己理清思路也非常有好處。

    最近看一本叫《人件集-人性化的軟件開(kāi)發(fā)》的書(shū),里面第一篇文章就講如何作出決策和達(dá)成一致意見(jiàn)。一致意見(jiàn)應(yīng)該做到綜合各方的優(yōu)點(diǎn),而不應(yīng)該是各方意見(jiàn)的“折衷”。書(shū)里有一個(gè)稍顯極端的例子:假如你的團(tuán)隊(duì)正在開(kāi)發(fā)一個(gè)圖形用戶界面的項(xiàng)目,一部分人強(qiáng)烈建議直接將控制按鈕放在屏幕底部,而另一部分人建議在屏幕左側(cè)放置一個(gè)控制窗口。兩種意見(jiàn)中,一個(gè)是水平放置,一個(gè)是垂直放置,形成了兩個(gè)極端。那么一個(gè)最具代表意義的折衷方案就是,將控制按鈕沿著對(duì)角線放置在屏幕的中央。在很多時(shí)候,由折衷所產(chǎn)生的解決方案比任何一個(gè)原始方案都差勁,但是“技術(shù)性一致意見(jiàn)”就恰恰相反,它所產(chǎn)生的解決方案要比任何一個(gè)原有的方案都好。書(shū)上給的“一致意見(jiàn)”解決方法是給控制按鈕窗體加上選項(xiàng),讓用戶來(lái)決定是水平放置還是垂直放置。

    在團(tuán)隊(duì)中的表現(xiàn)是很重要的,通過(guò)一個(gè)團(tuán)隊(duì)來(lái)改變團(tuán)隊(duì)中的個(gè)體,要比單獨(dú)改變一個(gè)個(gè)體容易得多。所以在團(tuán)隊(duì)中發(fā)揮影響,比單獨(dú)對(duì)每一個(gè)人發(fā)揮影響要有用得多。

    有人說(shuō)軟件工程更像是“社會(huì)學(xué)”,而不是“工程學(xué)”,我也越來(lái)越有這種感覺(jué)了。

    posted @ 2006-12-31 15:22 Zou Ang 閱讀(1471) | 評(píng)論 (3)編輯 收藏

    圣誕到了,祝所有的朋友圣誕快樂(lè)!!

    posted @ 2006-12-24 14:05 Zou Ang 閱讀(305) | 評(píng)論 (0)編輯 收藏

    原貼地址:
    http://news.csdn.net/n/20061221/99748.html

    從根本上說(shuō),面向服務(wù)的架構(gòu)能夠使企業(yè)內(nèi)部動(dòng)態(tài)數(shù)據(jù)服務(wù)的創(chuàng)建變得更加方便,同時(shí),還能夠使企業(yè)開(kāi)發(fā)人員創(chuàng)建影響這些服務(wù)的復(fù)合應(yīng)用程序。Web2.0提供了一個(gè)豐富的Web體驗(yàn),用戶能夠以高效的、充滿希望的、有益的方式參與合作。

      如果我們把這兩個(gè)現(xiàn)象結(jié)合起來(lái),那么,通過(guò)企業(yè)社團(tuán)成員之間的互相交流,以及成員與不斷變化的企業(yè)數(shù)據(jù)之間的交互,我們就能夠?qū)崿F(xiàn)這一關(guān)鍵的提高效率的新方法。

      協(xié)作型企業(yè)相互融合,下一代的Web應(yīng)用程序也已露端倪,但是,開(kāi)發(fā)團(tuán)體的推測(cè)是,為了實(shí)現(xiàn)明顯的利益,企業(yè)所采用的各種技術(shù)之間存在著根本性 的差異。標(biāo)準(zhǔn)必須朝哪個(gè)方向發(fā)展才能夠滿足SOA與Web2.0概念的結(jié)合,為了更好的理解這個(gè)問(wèn)題,我們將致力于檢驗(yàn)Java表示技術(shù)的狀態(tài)。

      Ajax化JavaServer Faces

      標(biāo)準(zhǔn)奠定了SOA的基本結(jié)構(gòu),但是,在Web2.0的世界中卻不存在著標(biāo)準(zhǔn)。為了支持Web2.0的功能,市場(chǎng)上出現(xiàn)了太多的方法,其中大多數(shù) 在JavaScript的實(shí)現(xiàn)(影響Ajax的技術(shù))上卻非常繁雜。在Java EE的規(guī)范中,JavaServer Faces提供了表示層,但是,相比起Ajax技術(shù)和Web2.0概念的流行,它目前的修訂版出現(xiàn)的更早。

      事實(shí)證明,在組件層,JSF中的可擴(kuò)展組件架構(gòu)非常適合與Ajax技術(shù)協(xié)同使用,但是,組件層Ajax技術(shù)存在的問(wèn)題是,它們是存在于狹小的規(guī) 避JSF生命周期的交互空間內(nèi)。解決這一問(wèn)題所需要的是,一種更加全面的方式,以實(shí)現(xiàn)在JSF生命周期內(nèi)的Ajax交互。具體來(lái)說(shuō),有以下兩點(diǎn)需要著重闡 述。

      1.改進(jìn)的用戶交互模型: 在JSF中,目前的用戶交互模型是基于表格的,它過(guò)于粗略而無(wú)法傳輸豐富的Web2.0特性。組件層的Ajax交互粒度,以及JSF目前依賴的基于表格的子任務(wù)模型,這兩者之間存在著顯著的差異。交互類型應(yīng)當(dāng)包含以下幾種形式:

    •   純粹的本地客戶端JavaScript交互,沒(méi)有服務(wù)器通信、不需要執(zhí)行JSF生命周期。這種類型的例子可以是,在日期選擇組件中通過(guò)日歷來(lái)進(jìn)行導(dǎo)航。目前,通過(guò)組件層JavaScript實(shí)現(xiàn)能夠支持這個(gè)模型。
    •   組件層的Ajax交互,不需要執(zhí)行JSF生命周期。這種類型的例子可以是,基于當(dāng)前用戶在文本框中的輸入,從而形成一個(gè)列表。這里的關(guān)鍵是,用戶與組件的交互僅僅影響到該組件的表示。同樣,目前,通過(guò)組件層JavaScript實(shí)現(xiàn)能夠支持這個(gè)模型。
    •   組件層的提交,引發(fā)JSF生命周期的執(zhí)行。生命周期的執(zhí)行結(jié)果將成為新的表示,該表示可能會(huì)影響到頁(yè)面中的多種組件。這這種類型的例子可以是,在日期選擇組件中完成日期的選擇,結(jié)果是引發(fā)顯示不同的日期安排信息。目前在JSF中,還無(wú)法支持這種形式的交互。

      2. 增量表示更新: 為了使用Ajaxian 方式(不是頁(yè)面刷新)實(shí)現(xiàn)第三種交互模型,JSF需要一個(gè)增量更新機(jī)制,僅僅是把頁(yè)面中應(yīng)用到的表示層所做的必要修改從一個(gè)表現(xiàn)處理傳向下一個(gè)表現(xiàn)處理。 下面這個(gè)圖示表明了這個(gè)概念。它需要一個(gè)Ajax橋,在服務(wù)器端把表示的改變組合起來(lái),在客戶端的DOM把那些變化重組。

    JSF Push模式

      Ajaxified JSF實(shí)現(xiàn)和多數(shù)其它的Ajax方式從遺留的Web應(yīng)用程序模型中繼承了一個(gè)共同的特征,該模型是一個(gè)客戶端發(fā)起的交互模型。這意味著,客戶端的表示層只需要針對(duì)用戶與表示層的交互進(jìn)行相應(yīng)變化。

      與使用遺留應(yīng)用程序相比,使用Ajax技術(shù),這個(gè)交互是細(xì)粒度的,但是,它仍然是客戶發(fā)起的。現(xiàn)在,當(dāng)你檢驗(yàn)支持應(yīng)用程序的SOA數(shù)據(jù)模型的動(dòng) 態(tài)特性、了解眾多同步用戶采用這一動(dòng)態(tài)數(shù)據(jù)所進(jìn)行的協(xié)調(diào)互操作時(shí),你就能夠意識(shí)到,在客戶端推動(dòng)動(dòng)態(tài)表示變化的機(jī)制是非常重要的,這一點(diǎn)越來(lái)越清晰。它是 達(dá)到Web2.0模型所需要的真正的動(dòng)態(tài)特性的唯一途徑。

    在產(chǎn)業(yè)中已經(jīng)證明,對(duì)于JSF規(guī)范與一個(gè)表示push模型的協(xié)作來(lái)說(shuō),Ajax push技術(shù),也指Comet,是十分必要的。前文已經(jīng)描述的這個(gè)增量更新特性,提供了在實(shí)現(xiàn)JSF Push模式時(shí)所需要的基于Ajax的更新機(jī)制。除此之外,當(dāng)應(yīng)用程序邏輯發(fā)現(xiàn)出現(xiàn)了一些將會(huì)影響客戶端表示層狀態(tài)的變化時(shí),延長(zhǎng)JSF的生命周期來(lái)允許 一個(gè)強(qiáng)制的表現(xiàn)處理是很有必要的。

    雖然,JSF push模型相對(duì)而言實(shí)現(xiàn)起來(lái)更加容易,但是,生產(chǎn)經(jīng)驗(yàn)表明,為使得開(kāi)發(fā)人員能夠有效繼承,僅僅暴露JSF API中底層強(qiáng)制的表示機(jī)制是遠(yuǎn)遠(yuǎn)不夠的。關(guān)于基本的push機(jī)制,JSF規(guī)范很有必要對(duì)表現(xiàn)API進(jìn)行介紹,從而呈現(xiàn)給開(kāi)發(fā)人員一個(gè)清晰有效的機(jī)制,用 于請(qǐng)求強(qiáng)制表示。API尤其需要提供以下幾個(gè)方面:

      1.觸發(fā)的表現(xiàn):應(yīng)用程序開(kāi)發(fā)人員應(yīng)當(dāng)能夠在發(fā)出表示處理請(qǐng)求的業(yè)務(wù)邏輯中定義觸發(fā)點(diǎn)。

      2. 群組表現(xiàn): 一個(gè)觸發(fā)點(diǎn)能夠影響一個(gè)單一客戶端、多個(gè)客戶端,或者是所有連接到該應(yīng)用程序上的客戶端。因此,為觸發(fā)表現(xiàn)提供群組管理結(jié)構(gòu),這是很有必要的。

      3. 預(yù)定的表現(xiàn):有許多合適的計(jì)劃?rùn)C(jī)制應(yīng)當(dāng)被支持,包括,按需表現(xiàn)、推遲表現(xiàn),以及內(nèi)部表現(xiàn)。預(yù)定的表現(xiàn)架構(gòu)應(yīng)當(dāng)具備可擴(kuò)展性,以支持其他用戶預(yù)先設(shè)定的需 求。很重要的一點(diǎn)是,觸發(fā)表現(xiàn)機(jī)制應(yīng)當(dāng)能夠更加有效的傳輸。由于存在著大量的觸發(fā),它們潛在地以各種方式影響著客戶端,因此,管理表現(xiàn)的處理這一任務(wù)不能 僅僅落在開(kāi)發(fā)人員身上。觸發(fā)表現(xiàn)的實(shí)現(xiàn),必須有效地合并表現(xiàn)處理請(qǐng)求、處理必要的同步,而且,這些操作都是以一種線程有效的方式。

      多視圖支持

      現(xiàn)存的為JSF定義的階段和需求范圍,根本不足以支持滿足Ajax的JSF應(yīng)用程序——用戶能夠在同一應(yīng)用程序上獲得多個(gè)活動(dòng)視圖。階段范圍能 夠維護(hù)所有視圖共同的狀態(tài),但是,它不足以處理視圖之間不同的狀態(tài)。由于多個(gè)同步請(qǐng)求都必須是活動(dòng)狀態(tài),所以,需求范圍也不充分。因此,需要一個(gè)新的范 圍,來(lái)管理滿足Ajax 的JSF應(yīng)用程序的會(huì)話方面。JBoss的Seam 方案提出了會(huì)話范圍,它主要提供JSF中所需要的額外范圍。除了支持多視圖之外,會(huì)話范圍還能夠帶來(lái)其他優(yōu)勢(shì),例如,在應(yīng)用程序中,通過(guò)會(huì)話中對(duì)一系列用 戶交互的明確描述,就能夠有效地支持書(shū)簽和返回按鈕特性。

      長(zhǎng)期存在的HTTP請(qǐng)求

      回到前面所提到的push模型,你可能注意到,機(jī)制需要一個(gè)特殊的HTTP請(qǐng)求,它能夠異步地響應(yīng)從應(yīng)用程序中發(fā)出的觸發(fā)表現(xiàn)出理請(qǐng)求。依據(jù)更 新的頻率,這個(gè)特殊HTTP請(qǐng)求能夠長(zhǎng)期存在。由于在響應(yīng)之前,每一個(gè)請(qǐng)求都占用其線程,所以,在處理這個(gè)長(zhǎng)期存在的請(qǐng)求時(shí),現(xiàn)存的Servlet模型無(wú) 法很好的響應(yīng)。因此,為了支持push模型,必須對(duì)Servlet模型進(jìn)行改變,使它能夠以線程有效的方式來(lái)處理長(zhǎng)期存在的請(qǐng)求。再?gòu)?qiáng)調(diào)一次,有很多生產(chǎn) 方案與異步Servlets和HTTP服務(wù)器相關(guān),Java EE規(guī)范能夠在此基礎(chǔ)上定義一個(gè)解決方案。

      結(jié)論

      人們?nèi)匀挥行┵|(zhì)疑:SOA與Web2.0世界將會(huì)發(fā)生抵觸,新一代的協(xié)作型企業(yè)應(yīng)用程序已露端倪。也存在著這樣的質(zhì)疑,現(xiàn)存的Java EE規(guī)范無(wú)法完全處理Web2.0提出的請(qǐng)求,以及JSR處理必須開(kāi)始在直接項(xiàng)中考慮這些請(qǐng)求。然而,產(chǎn)業(yè)中的重大進(jìn)步,已經(jīng)能夠處理出現(xiàn)的請(qǐng)求,并且能 夠?qū)崿F(xiàn)擴(kuò)展現(xiàn)存Java EE基礎(chǔ)結(jié)構(gòu)的商業(yè)化的可行方案。即將使用JSR 172來(lái)生成JSF2.0規(guī)范,非常重要的是,包含Ajax特性,以及產(chǎn)業(yè)參與者貢獻(xiàn)相關(guān)技術(shù),來(lái)確保能夠及時(shí)做出基于標(biāo)準(zhǔn)的解決方案。

    posted @ 2006-12-23 17:39 Zou Ang 閱讀(601) | 評(píng)論 (0)編輯 收藏

    原帖地址:
    http://www.tkk7.com/errorfun/archive/2006/12/09/86584.html
    亂碼問(wèn)題好像跟我們中國(guó)程序員特別有緣,一直困擾著我們,從開(kāi)始的JSP亂碼問(wèn)題,STRUTS亂碼問(wèn)題,到現(xiàn)在的AJAX亂碼問(wèn)題,無(wú)一不是搞得許多程序員焦頭爛額的,整天罵XXX產(chǎn)品對(duì)中文支持不了,UTF-8無(wú)法使用中文啊什么的,其實(shí)這里面被罵的產(chǎn)品中其實(shí)99%以上是對(duì)中文支持非常好的,而出現(xiàn)亂碼的原因只是因?yàn)樽陨韺?duì)國(guó)際化支持以及文件編碼等信息的認(rèn)識(shí)不知造成的。要知道一個(gè)產(chǎn)品那么流行,怎么可能對(duì)中文支持不了呢,下面就開(kāi)始一一幫大家解決這些問(wèn)題。


    1
    、編碼
    ????? --
    想要解決好中文問(wèn)題,對(duì)編碼肯定是不能一概不懂了,編碼是解決中文亂碼問(wèn)題的根本。
    ???? ?
    編碼比較常用的有: UTF-8 GBK GB2312 ISO-8859-1 ,除了 iso-8859-1 之外的其它三個(gè)編碼都能很好的支持中文,但它們都兼容 ISO-8859-1 的編碼(就是說(shuō)無(wú)論編碼怎么改變,只要是 ISO-8859-1 中的字符,永遠(yuǎn)不會(huì)出現(xiàn)亂碼)。
    ?????
    這四種編碼中, GB2312 是中國(guó)規(guī)定的漢字編碼,也可以說(shuō)是簡(jiǎn)體中文的字符集編碼 ; GBK GB2312 的擴(kuò)展 , 除了兼容 GB2312 外,它還能顯示繁體中文,還有日文的假名 ; UTF-8 雖然也支持中文,但卻 GB 碼不兼容(編碼值不同) UTF-8 使用的是可變長(zhǎng)的 UNICODE 編碼,編碼可能是 1 16 進(jìn)制(即 ISO-8859-1 中的字符,其編碼也是相同的)也有可能是 2 位或 3 位的 16 進(jìn)制。 UTF-8 的優(yōu)點(diǎn)是: 1 CPU 字節(jié)順序無(wú)關(guān) , 可以在不同平臺(tái)之間交流。 2 、容錯(cuò)能力高 , 任何一個(gè)字節(jié)損壞后 , 最多只會(huì)導(dǎo)致一個(gè)編碼碼位損失 , 不會(huì)鏈鎖錯(cuò)誤 ( GB 碼錯(cuò)一個(gè)字節(jié)就會(huì)整行亂碼 ) ,所以在國(guó)際化處理中基本都是建議使用 UTF-8 作為編碼。

    2、文件的編碼
    ????? --雖然說(shuō)只要設(shè)置了正確的編碼就可以使字符正確顯示了,但如果忽略了文件保存時(shí)的編碼的話,那可是會(huì)讓你走進(jìn)迷霧中的。
    ????? 文件編碼最常使用的有兩種:ANSI和UTF-8,光看名字估計(jì)你都可以猜到了,ANSI就是我們保存文件時(shí)使用的默認(rèn)編碼,而UTF-8則需自己設(shè)置。對(duì)于編碼的改變,我使用的工具是NOTEPAD和ECLIPSE,NOTEPAD使用最簡(jiǎn)單,只要打開(kāi)文件后在另存為中選擇相應(yīng)的編碼就行了,而且它對(duì)編碼的支持非常好;而在ECLIPSE中,只要稍微設(shè)置一下就行了,打開(kāi)首選項(xiàng),然后選擇:常規(guī)->內(nèi)容類型(ContentType),在右邊選中你想改變保存編碼的文件類型,然后在下方的缺省編碼中改變其值,最后點(diǎn)擊更新(UPDATE)按鈕即可。



    而在其它的編輯器中,默認(rèn)保存的內(nèi)容都是GB2312或者GBK(NOTEPAD中對(duì)應(yīng)ANSI).而根據(jù)前面所說(shuō)的UTF-8和GBK,GB2312等的編碼值是不同的這一點(diǎn),可以知道,如果文件使用了UTF-8,那么字符編碼就必須使用UTF-8,否則編碼值的不同就可能造成亂碼。而這也就是為什么那么多的人使用了UTF-8編碼后還會(huì)產(chǎn)生亂碼的根本原因。(JS和JSP都是這個(gè)道理)

    3、JSP,STRUTS等的中文亂碼解決方案
    ?????其實(shí)解決的方法只有一個(gè):

    ?request.setCharacterEncoding(encoding);

    ???方法只有一種,但處理方式就多種多樣了,初學(xué)者會(huì)在JSP頁(yè)面上直接使用,而有經(jīng)驗(yàn)的程序員會(huì)使用過(guò)濾器。而現(xiàn)在所要說(shuō)的方法也是過(guò)濾器。這里以統(tǒng)一使用UTF-8作為編碼作為例子說(shuō)明。具體過(guò)程就不多說(shuō)了,網(wǎng)上有很多教程。偷懶一點(diǎn)的,到TOMCAT中復(fù)制就行了。在TOMCAT的目錄下的\webapps\jsp-examples\WEB-INF\classes\filters\找到SetCharacterEncodingFilter.java 這個(gè)類,放到你的程序中并配置好映射路徑。配置好后基本上你的亂碼問(wèn)題就解決了。但要映射路徑中需要注意的就是不能使用 '*'

    ?? < filter-mapping >
    ????
    < filter-name > Set?Character?Encoding </ filter-name >
    ????
    < servlet-name > * </ servlet-name >
    ??
    </ filter-mapping >

    像上面這樣配置的話(可能也是網(wǎng)上大多教程的做法,想當(dāng)年也是害苦了我),可能你只有JSP的亂碼解決了,要解決STRUTS的亂碼需要映射 *.do 或者 servletActionName。然后在初始化參數(shù)中設(shè)置encoding的值就行了。

    < init-param >
    ??????
    < param-name > encoding </ param-name >
    ??????
    < param-value > UTF-8 </ param-value >
    </ init-param >

    當(dāng)然,最重要的是要記得根據(jù)前面所說(shuō)的方法,改變你所使用的編輯器保存文件的編碼要與使用的字符編碼一致。
    而在JSP內(nèi)容中,還是使用如網(wǎng)上教程所說(shuō)的那種技倆,在所有頁(yè)面的頁(yè)首加入:

    <% @?page?language = "java"?contentType = " text / html;?charset = UTF - 8 "
    ????pageEncoding
    = "UTF - 8 " %>

    至此,相信JSP,ACTION都不太可能出現(xiàn)亂碼了。

    4、資源文件的亂碼解決方案
    ????? 資源文件誰(shuí)都知道是國(guó)際化支持不可或缺的一部分,如果資源文件都出現(xiàn)亂碼了那還了得?其實(shí)資源文件的亂碼是很好解決的,其原因也是因?yàn)槭褂昧薝TF-8做為JSP編碼后,沒(méi)有相應(yīng)地改變資源文件的文件編碼造成的,所以只要對(duì)資源文件保存的編碼進(jìn)行更正后,亂碼問(wèn)題也就解決了。當(dāng)然,你的中文要使用 native2ascii 命令進(jìn)行正確的轉(zhuǎn)換。

    5、調(diào)用JS時(shí),JS內(nèi)容亂碼的解決方案。
    ???? 其實(shí)JS的亂碼還是跟文件的編碼有關(guān)系的,如果JS中有中文的話,那JS文件保存的編碼就必須跟調(diào)用此JS的頁(yè)面編碼相同,否則,你的所有中文都要從JSP頁(yè)面?zhèn)鹘oJS才會(huì)顯示正常。可以看出對(duì)于調(diào)用JS出現(xiàn)的亂碼是最容易解決的(也是建立在前面的辛苦之下的)。

    6、AJAX提交數(shù)據(jù)亂碼,返回?cái)?shù)據(jù)亂碼的解決方案
    ???? 隨著AJAX的流行,亂碼問(wèn)題也開(kāi)始困擾著許多剛開(kāi)始使用它的程序員,幸好我之前對(duì)JSP亂碼有過(guò)一點(diǎn)研究,在遇到AJAX后,并沒(méi)有給我?guī)?lái)多大的困擾,在此將我的一些心得共享給大家。
    ???? 萬(wàn)變不離其宗,AJAX的亂碼問(wèn)題自然跟編碼有關(guān)了,其實(shí)很多人跟我一樣想到了對(duì)文件編碼進(jìn)行設(shè)置,并且在接數(shù)據(jù)時(shí)設(shè)置了requet的編碼,在返回的數(shù)據(jù)時(shí)設(shè)置了response的編碼一切都以為會(huì)很順利,可是這一切都是徒勞無(wú)功的,討厭的亂碼再一次出現(xiàn)在你眼前。在你試了N多種方法,包括JS自身的escape,unescape方法后,你發(fā)現(xiàn)亂碼仍然猖狂地出現(xiàn)在屏幕上。
    ??? 其實(shí)在試過(guò)這N多方法后,很多人都沒(méi)發(fā)現(xiàn),解決的方法其實(shí)很簡(jiǎn)單,而且其答案就在我們之前處理的JSP亂碼之中。讓我們先看一下AJAX的經(jīng)典請(qǐng)求代碼

    xmlhttp.open(?"post",?url,?async?);
    xmlhttp.setRequestHeader(?
    "Content-Type",?"text/html"
    ?);
    xmlhttp.send(?params?);

    通過(guò)前面的說(shuō)明,不知道你現(xiàn)在看出端倪了沒(méi)有。不知道是受了網(wǎng)上教程的影響還是其它方面影響,setRequestHeader并是萬(wàn)年不變的,也沒(méi)人想過(guò)去改它,而問(wèn)題就正好出在這個(gè)地方。回想一個(gè)JSP頁(yè)面內(nèi)容的編碼設(shè)置,其中有這么一節(jié):
    contentType="text/html;?charset=UTF-8"

    現(xiàn)在知道問(wèn)題了吧,所以我們要把第二句代碼改為:
    xmlhttp.setRequestHeader(?"Content-Type",?"text/html;charset=UTF-8"?);

    最后別忘了在返回?cái)?shù)據(jù)時(shí)也設(shè)置上:
    response.setContentType(?"text/xml"?);
    response.setCharacterEncoding(?
    "UTF-8"?);

    是不是很簡(jiǎn)單,一點(diǎn)都不麻煩呢?
    如果要問(wèn)為什么的話,其實(shí)我們可以把xmlhttp看成是一個(gè)臨時(shí)頁(yè)面,它由瀏覽器動(dòng)態(tài)生成,主要作用是在后臺(tái)獲得請(qǐng)求的數(shù)據(jù)(可以看成是一個(gè)高級(jí)的iframe)。所以對(duì)于普通頁(yè)面設(shè)置的編碼,對(duì)它也要同樣設(shè)置。而在servlet中返回?cái)?shù)據(jù)為什么要設(shè)置contentType和encoding其道理也是一樣的。眾所周知,jsp的最后形態(tài)就是servlet,而jsp頁(yè)首設(shè)置的那個(gè)內(nèi)容其實(shí)也就是讓生成的servlet中生成這么兩句話:
    response.setContentType(?"text/html"?);
    response.setCharacterEncoding(?
    "UTF-8"?);

    而pageEncoding則是跟jvm說(shuō)明了這個(gè)頁(yè)面的內(nèi)容要使用什么編碼保存(這跟之后生成的CLASS有關(guān)系)。所以在servlet設(shè)置response的編碼也是理所當(dāng)然的了。

    一口氣把自己一年以來(lái)遇到的亂碼問(wèn)題和解決的方案寫(xiě)出來(lái)了,希望對(duì)你有所幫助。

    posted @ 2006-12-11 11:04 Zou Ang 閱讀(3302) | 評(píng)論 (11)編輯 收藏

    好象轉(zhuǎn)眼間,大三也要過(guò)去一半了..畢業(yè)的日子也隱隱可見(jiàn)了,到底要怎么走呢..本來(lái)一心打算出國(guó),但是考慮到需要6個(gè)月左右的時(shí)間來(lái)準(zhǔn)備GRE,就覺(jué)得不太值得了.用6個(gè)月學(xué)習(xí)英語(yǔ),而且還不是說(shuō)GRE考好了就能去好學(xué)校,那有必要么?頭腦中一團(tuán)亂麻...

    posted @ 2006-12-09 09:27 Zou Ang 閱讀(344) | 評(píng)論 (1)編輯 收藏

    今天去聼了MS的軟件過(guò)程技術(shù)的課,講的是軟件設(shè)計(jì)。其實(shí)這兩天聼下來(lái)的感覺(jué),就是以客戶為中心,已滿足客戶作爲(wèi)第一要求,永遠(yuǎn)要優(yōu)先考慮“Money and Time"。然後到了工程的方面,也就是面向“技術(shù)”的方面,那就是做設(shè)計(jì)不要只做一個(gè),至少要有一個(gè)alternative的design。先盡量將問(wèn)題“量化”,盡可能細(xì)緻地描述要做的東西,也就是要把requirement變成specification,這種規(guī)格的粒度需要自己控制,最好能做到設(shè)計(jì)做完以後,拿給SDE的時(shí)候,他會(huì)有一種強(qiáng)烈的開(kāi)始寫(xiě)代碼的衝動(dòng)。

    其實(shí),工科,我覺(jué)得永遠(yuǎn)都要考慮到實(shí)際的環(huán)境。畢竟現(xiàn)實(shí)世界不是理想囯,我們能做到的,就是在有限的條件下,綜合考慮所有的因素,然後給出性價(jià)比最高的方案。

    ps.今天沒(méi)拿到U盤(pán),很遺憾

    posted @ 2006-12-06 22:42 Zou Ang 閱讀(295) | 評(píng)論 (0)編輯 收藏

    今天在學(xué)習(xí)Web Service的時(shí)候得知Amazon提供了一個(gè)搜索的Web Service,于是考慮寫(xiě)一個(gè)方法訪問(wèn)一下看看..
    Amazon Web Service 的WSDL: http://soap.amazon.com/schemas2/AmazonWebServices.wsdl
    得到了WSDL以后,在命令行執(zhí)行:
    java org.apache.axis.wsdl.WSDL2Java http://soap.amazon.com/schemas2/AmazonWebServices.wsdl
    就會(huì)在%AXIS_HOME%目錄下生成一個(gè)包結(jié)構(gòu):com.amazon.soap.*;里面有很多包,不過(guò)如果看了上面那個(gè)wsdl的話應(yīng)該知道主要的類是
    AmazonSearchService和AmazonSearchPort,前面是服務(wù),后面是調(diào)用方法的對(duì)象..

    AmazonSearchService:
    public?interface?AmazonSearchService?extends?javax.xml.rpc.Service?{
    ????
    public?java.lang.String?getAmazonSearchPortAddress();

    ????
    public?com.amazon.soap.AmazonSearchPort?getAmazonSearchPort()?throws?javax.xml.rpc.ServiceException;

    ????
    public?com.amazon.soap.AmazonSearchPort?getAmazonSearchPort(java.net.URL?portAddress)?throws?javax.xml.rpc.ServiceException;
    }

    AmazonSearchPort:
    package?com.amazon.soap;

    public?interface?AmazonSearchPort?extends?java.rmi.Remote?{
    ????
    public?com.amazon.soap.ProductInfo?keywordSearchRequest(com.amazon.soap.KeywordRequest?keywordSearchRequest)?throws?java.rmi.RemoteException;
    ????
    public?com.amazon.soap.ProductInfo?powerSearchRequest(com.amazon.soap.PowerRequest?powerSearchRequest)?throws?java.rmi.RemoteException;
    ????
    public?com.amazon.soap.ProductInfo?browseNodeSearchRequest(com.amazon.soap.BrowseNodeRequest?browseNodeSearchRequest)?throws?java.rmi.RemoteException;
    ????
    public?com.amazon.soap.ProductInfo?asinSearchRequest(com.amazon.soap.AsinRequest?asinSearchRequest)?throws?java.rmi.RemoteException;
    ????
    public?com.amazon.soap.ProductLine[]?blendedSearchRequest(com.amazon.soap.BlendedRequest?blendedSearchRequest)?throws?java.rmi.RemoteException;
    ????
    public?com.amazon.soap.ProductInfo?upcSearchRequest(com.amazon.soap.UpcRequest?upcSearchRequest)?throws?java.rmi.RemoteException;
    ????
    public?com.amazon.soap.ProductInfo?authorSearchRequest(com.amazon.soap.AuthorRequest?authorSearchRequest)?throws?java.rmi.RemoteException;
    ????
    public?com.amazon.soap.ProductInfo?artistSearchRequest(com.amazon.soap.ArtistRequest?artistSearchRequest)?throws?java.rmi.RemoteException;
    ????
    public?com.amazon.soap.ProductInfo?actorSearchRequest(com.amazon.soap.ActorRequest?actorSearchRequest)?throws?java.rmi.RemoteException;
    ????
    public?com.amazon.soap.ProductInfo?manufacturerSearchRequest(com.amazon.soap.ManufacturerRequest?manufacturerSearchRequest)?throws?java.rmi.RemoteException;
    ????
    public?com.amazon.soap.ProductInfo?directorSearchRequest(com.amazon.soap.DirectorRequest?directorSearchRequest)?throws?java.rmi.RemoteException;
    ????
    public?com.amazon.soap.ProductInfo?listManiaSearchRequest(com.amazon.soap.ListManiaRequest?listManiaSearchRequest)?throws?java.rmi.RemoteException;
    ????
    public?com.amazon.soap.ProductInfo?wishlistSearchRequest(com.amazon.soap.WishlistRequest?wishlistSearchRequest)?throws?java.rmi.RemoteException;
    ????
    public?com.amazon.soap.ListingProductDetails?exchangeSearchRequest(com.amazon.soap.ExchangeRequest?exchangeSearchRequest)?throws?java.rmi.RemoteException;
    ????
    public?com.amazon.soap.MarketplaceSearch?marketplaceSearchRequest(com.amazon.soap.MarketplaceRequest?marketplaceSearchRequest)?throws?java.rmi.RemoteException;
    ????
    public?com.amazon.soap.SellerProfile?sellerProfileSearchRequest(com.amazon.soap.SellerProfileRequest?sellerProfileSearchRequest)?throws?java.rmi.RemoteException;
    ????
    public?com.amazon.soap.SellerSearch?sellerSearchRequest(com.amazon.soap.SellerRequest?sellerSearchRequest)?throws?java.rmi.RemoteException;
    ????
    public?com.amazon.soap.ProductInfo?similaritySearchRequest(com.amazon.soap.SimilarityRequest?similaritySearchRequest)?throws?java.rmi.RemoteException;
    ????
    public?com.amazon.soap.ShoppingCart?getShoppingCartRequest(com.amazon.soap.GetShoppingCartRequest?getShoppingCartRequest)?throws?java.rmi.RemoteException;
    ????
    public?com.amazon.soap.ShoppingCart?clearShoppingCartRequest(com.amazon.soap.ClearShoppingCartRequest?clearShoppingCartRequest)?throws?java.rmi.RemoteException;
    ????
    public?com.amazon.soap.ShoppingCart?addShoppingCartItemsRequest(com.amazon.soap.AddShoppingCartItemsRequest?addShoppingCartItemsRequest)?throws?java.rmi.RemoteException;
    ????
    public?com.amazon.soap.ShoppingCart?removeShoppingCartItemsRequest(com.amazon.soap.RemoveShoppingCartItemsRequest?removeShoppingCartItemsRequest)?throws?java.rmi.RemoteException;
    ????
    public?com.amazon.soap.ShoppingCart?modifyShoppingCartItemsRequest(com.amazon.soap.ModifyShoppingCartItemsRequest?modifyShoppingCartItemsRequest)?throws?java.rmi.RemoteException;
    }


    我打算調(diào)用keywordSearchRequest這個(gè)方法,這個(gè)方法有一個(gè)keywordRequest參數(shù),返回一個(gè)ProductInfo對(duì)象
    public?com.amazon.soap.ProductInfo?keywordSearchRequest(com.amazon.soap.KeywordRequest?keywordSearchRequest)?throws?java.rmi.RemoteException;
    下面是調(diào)用Web Service的類:
    /**
    ?*?org.zsu.zouang
    ?*?2006-11-30
    ?
    */

    package?org.zsu.zouang;

    import?java.rmi.RemoteException;

    import?javax.xml.rpc.ServiceException;

    import?com.amazon.soap.AmazonSearchPort;
    import?com.amazon.soap.AmazonSearchServiceLocator;
    import?com.amazon.soap.Details;
    import?com.amazon.soap.KeywordRequest;
    import?com.amazon.soap.ProductInfo;

    /**
    ?*?2006-11-30
    ?*?
    @author?Zou?Ang
    ?*?Contact?<a?href?="mailto:richardeee@gmail.com">Zou?Ang</a>
    ?
    */

    public?class?MyAmazonClient?{

    ????
    /**
    ?????*?
    @param?args
    ?????
    */

    ????
    public?static?void?main(String[]?args)?{
    ????????KeywordRequest?keyword?
    =?new?KeywordRequest();
    ????????keyword.setKeyword(
    "Java");
    ????????keyword.setMode(
    "books");
    ????????keyword.setTag(
    "D3HW0PG66IPLAM");
    ????????keyword.setDevtag(
    "D3HW0PG66IPLAM");
    ????????keyword.setPage(
    "1");
    ????????keyword.setType(
    "heavy");
    ????????keyword.setSort(
    null);
    ????????keyword.setVariations(
    null);
    ????????keyword.setLocale(
    null);
    ????????
    //?TODO?Auto-generated?method?stub
    ????????try?{
    ????????????AmazonSearchPort?port?
    =?new?AmazonSearchServiceLocator().getAmazonSearchPort();
    ????????????ProductInfo?info?
    =?port.keywordSearchRequest(keyword);
    ????????????System.out.println(
    "Number?of?Results?:"?+?info.getTotalResults());
    ????????????Details[]?details?
    =?info.getDetails();
    ????????????
    for(Details?d?:?details){
    ????????????????System.out.println(
    "ISBN?:"?+?d.getIsbn()?+?"?Name:"?+?d.getProductName());
    ????????????}

    ????????}
    ?catch?(RemoteException?e)?{
    ????????????
    //?TODO?Auto-generated?catch?block
    ????????????e.printStackTrace();
    ????????}
    ?catch?(ServiceException?e)?{
    ????????????
    //?TODO?Auto-generated?catch?block
    ????????????e.printStackTrace();
    ????????}

    ????}

    }
    返回的結(jié)果:
    -?Unable?to?find?required?classes?(javax.activation.DataHandler?and?javax.mail.internet.MimeMultipart).?Attachment?support?is?disabled.
    Number?of?Results?:
    5161
    ISBN?:
    0072253606?Name:SCJP?Sun?Certified?Programmer?for?Java?5?Study?Guide?(Exam?310-055)?(Certification?Press?Study?Guides)
    ISBN?:
    0596007124?Name:Head?First?Design?Patterns?(Head?First)
    ISBN?:
    0553803905?Name:Ship?of?Ghosts:?The?Story?of?the?USS?Houston,?FDR's?Legendary?Lost?Cruiser,?and?the?Epic?Saga?of?Her?Survivors
    ISBN?:0596009410?Name:Mac?OS?X?Tiger:?Missing?Manual
    ISBN?:
    0596101996?Name:JavaScript:?The?Definitive?Guide
    ISBN?:
    0131483986?Name:Java?How?to?Program?(6th?Edition)?(How?to?Program?(Deitel))
    ISBN?:
    0596009208?Name:Head?First?Java,?2nd?Edition
    ISBN?:
    1591968097?Name:What?is?WebSphere??Java,?J2EE,?Portal?and?Beyond!?(Demystifying?IBM's?Middle?Tier?Technology,?Vol.?1)
    ISBN?:0596005407?Name:Head?First?Servlets?and?JSP:?Passing?the?Sun?Certified?Web?Component?Developer?Exam?(SCWCD)
    ISBN?:
    1932394613?Name:Ajax?in?Action

    下一步可能打算寫(xiě)個(gè)GUI的Amazon搜索客戶端

    posted @ 2006-11-30 23:32 Zou Ang 閱讀(769) | 評(píng)論 (1)編輯 收藏

    昨天把Web服務(wù)架好了,那今天自然要想怎么來(lái)遠(yuǎn)程調(diào)用了.
    于是寫(xiě)了如下代碼:
    /**
    ?*?org.zsu.zouang
    ?*?2006-11-29
    ?
    */

    package?org.zsu.zouang;

    import?java.net.MalformedURLException;
    import?java.net.URL;
    import?java.rmi.RemoteException;

    import?javax.xml.namespace.QName;
    import?javax.xml.rpc.ServiceException;

    import?org.apache.axis.client.Call;
    import?org.apache.axis.client.Service;

    /**
    ?*?2006-11-29
    ?*?
    @author?Zou?Ang
    ?*?Contact?<a?href?="mailto:richardeee@gmail.com">Zou?Ang</a>
    ?
    */

    public?class?MyBookServiceClient?{
    ????
    private?static?final?String?endPoint?=?"http://localhost:8080/axis/org/zsu/zouang/BookTitleService.jws?wsdl";
    ????
    public?static?void?main(String?args[]){
    ????????Service?service?
    =?new?Service();
    ????????
    try?{
    ????????????Call?call?
    =?(Call)service.createCall();
    ????????????call.setTargetEndpointAddress(
    new?URL(endPoint));
    ????????????call.setOperationName(
    new?QName("getBookTitle"));
    ????????????String?result?
    =?(String)call.invoke(new?Object[]{"0130895601"});
    ????????????System.out.println(result);
    ????????}
    ?catch?(ServiceException?e)?{
    ????????????
    //?TODO?Auto-generated?catch?block
    ????????????e.printStackTrace();
    ????????}
    ?catch?(MalformedURLException?e)?{
    ????????????
    //?TODO?Auto-generated?catch?block
    ????????????e.printStackTrace();
    ????????}
    catch(RemoteException?e){
    ????????????e.printStackTrace();
    ????????}

    ????}

    }

    控制臺(tái)輸出:
    -?Unable?to?find?required?classes?(javax.activation.DataHandler?and?javax.mail.internet.MimeMultipart).?Attachment?support?is?disabled.
    Advanced?Java?
    2?Platform?How?to?Program
    成功啦!
    在代碼中加上這一句:
    System.out.println(call.getResponseMessage().getSOAPPartAsString());
    會(huì)看到控制臺(tái)輸出:
    <?xml?version="1.0"?encoding="utf-8"?>
    <soapenv:Envelope?xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"?xmlns:xsd="http://www.w3.org/2001/XMLSchema"?xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    ????
    <soapenv:Body>
    ????
    <getBookTitleResponse?soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
    ????????
    <getBookTitleReturn?xsi:type="xsd:string">
    ????????????Advanced?Java?2?Platform?How?to?Program
    ????????
    </getBookTitleReturn>
    ????
    </getBookTitleResponse>
    ????
    </soapenv:Body>
    </soapenv:Envelope>

    改進(jìn)了一下,使用Swing建立一個(gè)圖形化界面:
    /**
    ?*?2006-11-29
    ?*?
    @author?Zou?Ang
    ?*?Contact?<a?href?="mailto:richardeee@gmail.com">Zou?Ang</a>
    ?
    */

    public?class?MyBookClient?extends?JFrame?{

    ????
    private?final?static?int?FRAME_WIDTH?=?500;
    ????
    private?final?static?int?FRAME_HEIGHT?=?100;
    ????
    ????
    public?MyBookClient(String?title)?{
    ????????
    super(title);
    ????????getContentPane().setLayout(
    new?GridLayout(2?,?2));
    ????????
    final?String?endPoint?=?"http://localhost:8080/axis/org/zsu/zouang/BookTitleService.jws?wsdl";
    ????????
    final?JLabel?resultLabel?=?new?JLabel();
    ????????
    final?JComboBox?bookISDNBox?=?new?JComboBox();
    ????????bookISDNBox.addItem(
    "0130895601");
    ????????bookISDNBox.addItem(
    "0430895717");
    ????????bookISDNBox.addItem(
    "0430293636");
    ????????bookISDNBox.addItem(
    "0130923613");
    ????????
    ????????
    this.setSize(FRAME_WIDTH,?FRAME_HEIGHT);
    ????????JButton?serviceButton?
    =?new?JButton("Get?Book?Title");
    ????????serviceButton.addActionListener(
    new?ActionListener(){

    ????????????
    public?void?actionPerformed(ActionEvent?e)?{
    ????????????????
    //?TODO?Auto-generated?method?stub
    ????????????????try?{
    ????????????????????Service?service?
    =?new?Service();
    ????????????????????Call?call?
    =?(Call)service.createCall();
    ????????????????????call.setTargetEndpointAddress(
    new?URL(endPoint));
    ????????????????????call.setOperationName(
    new?QName("getBookTitle"));
    ????????????????????String?result?
    =?(String)call.invoke(bookISDNBox.getSelectedObjects());
    ????????????????????resultLabel.setText(result);
    ????????????????}
    ?catch?(AxisFault?e1)?{
    ????????????????????
    //?TODO?Auto-generated?catch?block
    ????????????????????e1.printStackTrace();
    ????????????????}
    ?catch?(MalformedURLException?e1)?{
    ????????????????????
    //?TODO?Auto-generated?catch?block
    ????????????????????e1.printStackTrace();
    ????????????????}
    ?catch?(RemoteException?e1)?{
    ????????????????????
    //?TODO?Auto-generated?catch?block
    ????????????????????e1.printStackTrace();
    ????????????????}
    ?catch?(ServiceException?e1)?{
    ????????????????????
    //?TODO?Auto-generated?catch?block
    ????????????????????e1.printStackTrace();
    ????????????????}

    ????????????}

    ????????}
    );
    ????????
    ????????getContentPane().add(
    new?JLabel("Please?ISDN?number"));
    ????????getContentPane().add(bookISDNBox);
    ????????getContentPane().add(resultLabel);
    ????????getContentPane().add(serviceButton);
    ????}

    ????
    ????
    public?static?void?main(String?args[]){
    ????????MyBookClient?client?
    =?new?MyBookClient("Book?Title?Service");
    ????????client.setDefaultCloseOperation(EXIT_ON_CLOSE);
    ????????client.setVisible(
    true);
    ????}

    }

    posted @ 2006-11-29 22:15 Zou Ang 閱讀(818) | 評(píng)論 (4)編輯 收藏

    Java基礎(chǔ)知識(shí),打好基礎(chǔ)才能更好地學(xué)習(xí)!
    原帖地址:http://www.linuxmine.com/44702.html
    對(duì)象引用應(yīng)用程序設(shè)計(jì)接口是JDKTM1.2中新定義的。該應(yīng)用程序設(shè)計(jì)接口允許應(yīng)用程序以對(duì)象引用的方式與JVM的內(nèi)存管理器進(jìn)行交互。當(dāng)應(yīng)用程序需管理大量?jī)?nèi)存對(duì)象或者在新的Java對(duì)象創(chuàng)建之前需刪除原有對(duì)象時(shí),Java對(duì)象引用應(yīng)用程序設(shè)計(jì)接口具有相當(dāng)大的用途,例如:
      
      ● 基于Web的應(yīng)用程序常常要求顯示大量圖片,當(dāng)用戶離開(kāi)某一Web頁(yè)時(shí),往往不能確定是否能夠順利的返回。在這種程序中,應(yīng)用Java對(duì)象引用API可以創(chuàng)建這樣一個(gè)環(huán)境,即當(dāng)堆內(nèi)存以最小程度運(yùn)行時(shí),內(nèi)存管理器創(chuàng)建對(duì)象。當(dāng)用戶返回時(shí),應(yīng)用程序就會(huì)重新載入已經(jīng)創(chuàng)建的圖片。
      
      ● 應(yīng)用對(duì)象引用隊(duì)列可以創(chuàng)建這樣一個(gè)環(huán)境,當(dāng)通過(guò)對(duì)象引用獲得某一對(duì)象時(shí),應(yīng)用程序得到通知。然后,應(yīng)用程序就可以對(duì)相關(guān)對(duì)象進(jìn)行清除操作,同時(shí)使這些對(duì)象在內(nèi)存管理器中合法化。
      
      內(nèi)存管理器的工作機(jī)制
      
      下面將首先介紹未嵌入引用對(duì)象時(shí)內(nèi)存管理器的工作機(jī)制,然后討論引用對(duì)象加入之后Java堆發(fā)生的變化。
      
      內(nèi)存管理器的作用就是識(shí)別程序中不再使用的對(duì)象,并且回收其內(nèi)存。
      
      一個(gè)Java應(yīng)用程序由一系列線程組成,每個(gè)線程執(zhí)行一系列方法,而每個(gè)方法通過(guò)參數(shù)或局部變量來(lái)引用對(duì)象。這些引用屬于引用集合中的一部分,直接進(jìn)入應(yīng)用程序。另外,引用集合中還包括類庫(kù)中定義的靜態(tài)引用變量,以及通過(guò)Java本地接口(JNI)API獲得的引用。引用集合中的所有引用對(duì)象都可以被當(dāng)前應(yīng)用程序獲取,而不必被回收。同樣地,這些對(duì)象可能包含對(duì)其它對(duì)象的引用,也可以被應(yīng)用程序獲取,依此類推。Java堆中的其它對(duì)象視為不可獲取的,而所有這些不可獲取的對(duì)象在內(nèi)存管理中也是合法的。如果一個(gè)不可獲取的對(duì)象使用finalize()方法,任務(wù)就交給了對(duì)象所調(diào)用的收尾器(finalizer)。在內(nèi)存回收期間,不具有收尾器的不可獲取對(duì)象和已經(jīng)調(diào)用收尾器的對(duì)象被簡(jiǎn)單回收。
      
      內(nèi)存回收的算法是不斷變化的,共性的方面是從引用集合中識(shí)別可獲取的對(duì)象以及回收被其它對(duì)象占據(jù)的內(nèi)存空間。
      
      加入引用對(duì)象之后的引用與常規(guī)引用的區(qū)別在于,引用對(duì)象中的引用專門(mén)由內(nèi)存管理器來(lái)處理。引用對(duì)象封裝了其它一些對(duì)象的引用,我們稱之為指示對(duì)象。在引用對(duì)象創(chuàng)建的同時(shí),也就定義了該引用對(duì)象的指示對(duì)象。
      
      Java對(duì)象引用
      
      圖1所示為對(duì)象引用應(yīng)用程序設(shè)計(jì)接口中定義的類層次。其中SoftReference類、WeakReference類和PhantomReference類中分別定義了三種引用對(duì)象以及相應(yīng)的三種獲取對(duì)象的能力。因此按照由強(qiáng)到弱,對(duì)象可獲取程度可劃分為如下五種類型:強(qiáng)獲取(strongly reachable)、次獲取(softly reachable)、弱獲取(weakly reachable)、虛獲取(phantomly reachable)和不可獲取(unreachable)。
       
      圖1 對(duì)象應(yīng)用類層次
      
      根據(jù)應(yīng)用程序要求,對(duì)象可以是強(qiáng)引用(strong references)、次引用(soft references)、弱引用(weak references)、虛引用(phantom references)的任意組合。為了確定對(duì)象的可獲取程度,JVM內(nèi)存管理器從引用集合出發(fā)遍尋堆中所有到對(duì)象的路徑。當(dāng)?shù)竭_(dá)某對(duì)象的任意路徑都不含有引用對(duì)象時(shí),則稱該對(duì)象具有強(qiáng)獲取能力;當(dāng)路徑中含有一個(gè)或幾個(gè)引用對(duì)象時(shí),根據(jù)內(nèi)存管理器所查詢的引用對(duì)象的類型分別歸為次獲取、弱獲取、虛獲取。
      
      另外,對(duì)象引用API中還定義了引用對(duì)象隊(duì)列(java.lang.ref.ReferenceQueue),這是內(nèi)存管理器對(duì)引用對(duì)象進(jìn)行管理的一種簡(jiǎn)單數(shù)據(jù)結(jié)構(gòu)。值得注意的是,在進(jìn)行引用對(duì)象定義時(shí),要求phantom reference對(duì)象必須產(chǎn)生于一個(gè)引用對(duì)象隊(duì)列,而soft reference和weak reference對(duì)象則無(wú)此限制,如:
      
      

    ReferenceQueue?queue? = ? new ?ReferenceQueue();
      PhantomReference?pr?
    = ? new ?PhantomReference(object,?queue);

      Soft References 應(yīng)用實(shí)例
      
      下面以在基于web的應(yīng)用程序中使用soft references為例,來(lái)說(shuō)明Java對(duì)象引用與JVM的內(nèi)存管理器進(jìn)行交互的原理。
      
      當(dāng)用戶打開(kāi)某一web頁(yè)時(shí),applet代碼獲得圖片并且得到顯示。如果在代碼中同時(shí)創(chuàng)建了該圖片對(duì)象的soft references,那么當(dāng)用戶離開(kāi)該web頁(yè)時(shí),內(nèi)存管理器對(duì)圖片所分配的內(nèi)存是否回收做出選擇。當(dāng)用戶返回該web頁(yè)時(shí),在applet代碼中使用SoftReference.get方法就會(huì)得到圖片才內(nèi)存中是否仍存在的消息。如果在內(nèi)存管理器中未創(chuàng)建該圖片,在web頁(yè)上會(huì)很快得到顯示;否則,applet代碼就會(huì)重新獲取。
      
      下面是Example.java的完整源代碼。
      
      

    import ?java.awt.Graphics;
      
    import ?java.awt.Image;
      
    import ?java.applet.Applet;
      
    import ?java.lang.ref.SoftReference;
      
    public ? class ?Example? extends ?Applet? {
        SoftReference?sr?
    = ? null ;
        
    public ? void ?init()? {
          System.out.println(
    " Initializing " );
        }

        
    public ? void ?paint(Graphics?g)? {
          Image?im?
    = ?(sr? == ? null )? ? ? null ?:?(Image)(sr.get());
          
    if ?(im? == ? null )? {
            System.out.println(
    " Fetching?image " );
            im?
    = ?getImage(getCodeBase(), " yundong.gif " );
            sr?
    = ? new ?SoftReference(im);
         ?}

         ?System.out.println(
    " Painting " );
         ?g.drawImage(im,?
    25 ,? 25 ,? this );
         ?g.drawString(
    " 運(yùn)動(dòng)之美 " , 20 , 20 );?
         im?
    = ? null ; 
        
    /* ?Clear?the?strong?reference?to?the?image? */
        }

      
        
    public ? void ?start()? {
          System.out.println(
    " Starting " );
        }

      
        
    public ? void ?stop()? {
          System.out.println(
    " Stopping " );
        }

      }


      
      在上面的代碼中,對(duì)象image是一個(gè)圖片對(duì)象,傳遞給一個(gè)SoftReference對(duì)象sr。其中image對(duì)象是sr的指示對(duì)象,sr中的引用域是從次引用(soft reference)到 image。
      
      Weak References分析
      
      對(duì)于一個(gè)穩(wěn)定的對(duì)象,比如說(shuō)線程類對(duì)象,當(dāng)需要獲取外部數(shù)據(jù)時(shí),在程序中應(yīng)用weak references是非常理想的。如果利用引用隊(duì)列創(chuàng)建了某一線程的weak reference,那么當(dāng)線程不再具有強(qiáng)獲取能力時(shí),應(yīng)用程序得到通知,根據(jù)此通知,應(yīng)用程序才能執(zhí)行相關(guān)數(shù)據(jù)對(duì)象的清除工作。
      
      當(dāng)內(nèi)存管理器未發(fā)現(xiàn)strong references 和 soft references 時(shí),我們稱對(duì)象具有弱獲取能力,即在到達(dá)該對(duì)象的路徑中至少包含一個(gè)weak reference。程序中weak references被清除一段時(shí)間后,弱獲取對(duì)象被收尾器收集。由此也可以看出,soft reference和weak reference之間的區(qū)別在于,應(yīng)用soft reference時(shí),內(nèi)存管理器利用算法決定是否創(chuàng)建弱獲取對(duì)象,而應(yīng)用weak reference時(shí),內(nèi)存管理器必須創(chuàng)建次獲取對(duì)象。
      
      引用對(duì)象鏈
      
      當(dāng)?shù)竭_(dá)某一對(duì)象的路徑中含有多個(gè)引用對(duì)象時(shí),就構(gòu)成了引用對(duì)象鏈。內(nèi)存管理器按照由強(qiáng)到弱的順序處理引用對(duì)象,具體處理步驟包括:Soft references、 Weak references、Finalization、Phantom references和創(chuàng)建對(duì)象五個(gè)部分。
      
      當(dāng)內(nèi)存管理器未發(fā)現(xiàn)前三種對(duì)象引用時(shí),我們稱對(duì)象具有虛獲取能力,即在到達(dá)該對(duì)象的路徑中至少包含一個(gè)phantom reference。虛引用對(duì)象直接被收尾器收集,而不被重新創(chuàng)建。當(dāng)內(nèi)存管理器發(fā)現(xiàn)只有phantom references時(shí),對(duì)象就將處于等候phantom reference狀態(tài),應(yīng)用程序向引用隊(duì)列發(fā)出通知,然后對(duì)虛引用對(duì)象調(diào)用clear()方法,將其引用域設(shè)置為null,最后對(duì)不可獲取對(duì)象執(zhí)行收集清除處理任務(wù)。
      
      通常,對(duì)象所具有的獲取能力與引用對(duì)象集合直接路徑中的最弱連接者相同。據(jù)此可以看出:
      
      圖2(a)中,虛引用對(duì)象具有強(qiáng)獲取能力,其它對(duì)象均具虛獲取能力;
      
      (b)中虛引用對(duì)象和弱引用對(duì)象均具強(qiáng)獲取能力,故次引用對(duì)象和對(duì)象集合具有若獲取能力;
      
      (c)中虛引用對(duì)象、弱引用對(duì)象和次引用對(duì)象均具強(qiáng)獲取能力,那么對(duì)象集合則具次獲取能力。
       
      圖2 引用對(duì)象鏈
      小結(jié)
      ● 引用對(duì)象API是Java2平臺(tái)中的特色之一。
      
      ● 在程序中使用引用對(duì)象API不但可以在一定程度上控制內(nèi)存管理器,實(shí)現(xiàn)內(nèi)存自動(dòng)管理,還可以提高程序的穩(wěn)定性和安全性。
      
      ● 引用對(duì)象鏈中各個(gè)對(duì)象的獲取能力與整個(gè)鏈相關(guān)。

    posted @ 2006-11-29 14:08 Zou Ang 閱讀(452) | 評(píng)論 (0)編輯 收藏

    今天在宿舍,用Axis來(lái)弄了個(gè)最簡(jiǎn)單的Web Service.先來(lái)講下怎么安裝和部署.
    首先,去Apache的網(wǎng)站下載Axis,我沒(méi)有下載Axis2,因?yàn)閾?jù)說(shuō)Axis2和Axis有比較多的不同,所以還是覺(jué)得先用以前的吧.
    下載好了以后,把a(bǔ)xis下的webapp文件夾中的axis放到tomcat的webapp目錄下,然后啟動(dòng)tomcat,輸入:http://localhost:8080/axis/,如果成功會(huì)看到歡迎頁(yè)面.
    然后寫(xiě)一個(gè)Java類:
    import?java.util.HashMap;
    import?java.util.Map;

    /**
    ?*?2006-11-28
    ?*?
    @author?Zou?Ang
    ?*?Contact?<a?href?="mailto:richardeee@gmail.com">Zou?Ang</a>
    ?
    */

    public?class?BookTitleService?{

    ????Map
    <String,String>?books;
    ????
    public?BookTitleService(){
    ????????books?
    =?new?HashMap<String,String>();
    ????????
    ????????books.put(
    "0130895601","Advanced?Java?2?Platform?How?to?Program");
    ????????books.put(
    "0430895717","C++?How?to?Program,Third?edition");
    ????????books.put(
    "0430293636","Visual?Basic.?NET?How?to?Program");
    ????????books.put(
    "0130923613","Python?How?to?Program");
    ????}

    ????
    ????
    public?String?getBookTitle(String?ISBN){
    ????????
    return?books.get(ISBN);
    ????}

    }
    然后把BookTitleService.java更名為BookTitleService.jws,把更改后的文件放到%CATALINA_HOME%/webapps/axis/%包結(jié)構(gòu)(比如org/apache/..)/目錄下
    ,我的是D:\apache-tomcat-5.5.17\apache-tomcat-5.5.17\webapps\axis\org\zsu\zouang\BookTitleService.jws,注意,這樣放好了jws文件后,把java類中的包名要?jiǎng)h除,做完了以后重新啟動(dòng)tomcat,在地址欄輸入http://localhost:8080/axis/org/zsu/zouang/BookTitleService.jws,如果Web服務(wù)部署成功就會(huì)有頁(yè)面顯示的了,點(diǎn)Click to See WSDL后,可以看到:
    ?<?xml?version="1.0"?encoding="UTF-8"??>?
    -?
    <wsdl:definitions?targetNamespace="http://localhost:8080/axis/org/zsu/zouang/BookTitleService.jws"?xmlns:apachesoap="http://xml.apache.org/xml-soap"?xmlns:impl="http://localhost:8080/axis/org/zsu/zouang/BookTitleService.jws"?xmlns:intf="http://localhost:8080/axis/org/zsu/zouang/BookTitleService.jws"?xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"?xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"?xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"?xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    -?
    <!--?
    WSDL?created?by?Apache?Axis?version:?1.4
    Built?on?Apr?22,?2006?(06:55:48?PDT)

    ??
    -->?
    -?
    <wsdl:message?name="getBookTitleRequest">
    ??
    <wsdl:part?name="ISBN"?type="xsd:string"?/>?
    ??
    </wsdl:message>
    -?
    <wsdl:message?name="getBookTitleResponse">
    ??
    <wsdl:part?name="getBookTitleReturn"?type="xsd:string"?/>?
    ??
    </wsdl:message>
    -?
    <wsdl:portType?name="BookTitleService">
    -?
    <wsdl:operation?name="getBookTitle"?parameterOrder="ISBN">
    ??
    <wsdl:input?message="impl:getBookTitleRequest"?name="getBookTitleRequest"?/>?
    ??
    <wsdl:output?message="impl:getBookTitleResponse"?name="getBookTitleResponse"?/>?
    ??
    </wsdl:operation>
    ??
    </wsdl:portType>
    -?
    <wsdl:binding?name="BookTitleServiceSoapBinding"?type="impl:BookTitleService">
    ??
    <wsdlsoap:binding?style="rpc"?transport="http://schemas.xmlsoap.org/soap/http"?/>?
    -?
    <wsdl:operation?name="getBookTitle">
    ??
    <wsdlsoap:operation?soapAction=""?/>?
    -?
    <wsdl:input?name="getBookTitleRequest">
    ??
    <wsdlsoap:body?encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"?namespace="http://DefaultNamespace"?use="encoded"?/>?
    ??
    </wsdl:input>
    -?
    <wsdl:output?name="getBookTitleResponse">
    ??
    <wsdlsoap:body?encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"?namespace="http://localhost:8080/axis/org/zsu/zouang/BookTitleService.jws"?use="encoded"?/>?
    ??
    </wsdl:output>
    ??
    </wsdl:operation>
    ??
    </wsdl:binding>
    -?
    <wsdl:service?name="BookTitleServiceService">
    -?
    <wsdl:port?binding="impl:BookTitleServiceSoapBinding"?name="BookTitleService">
    ??
    <wsdlsoap:address?location="http://localhost:8080/axis/org/zsu/zouang/BookTitleService.jws"?/>?
    ??
    </wsdl:port>
    ??
    </wsdl:service>
    ??
    </wsdl:definitions>
    這樣,一個(gè)最最簡(jiǎn)單的Web Service就部署成功了.

    posted @ 2006-11-28 21:00 Zou Ang 閱讀(755) | 評(píng)論 (1)編輯 收藏

         摘要: Lazy Initialization and the DAO pattern with Hibernate and Spring的翻譯,照顧些不喜歡讀英文的朋友,請(qǐng)指導(dǎo)  閱讀全文

    posted @ 2006-11-27 20:03 Zou Ang 閱讀(2163) | 評(píng)論 (2)編輯 收藏

         摘要: 由于要求在項(xiàng)目中使用泛型的DAO,所以上網(wǎng)Google了一下,找到了IBM的一篇文章。文章講得不錯(cuò),但是有些地方不清楚,如果完全按照那篇文章可能還會(huì)遇到一些困難。所以寫(xiě)了這篇文章,解釋如何在項(xiàng)目中加入泛型的DAO實(shí)現(xiàn)。 首先是總的類關(guān)系的UML圖:然后是在配置文件中的關(guān)系圖:??其中,IStaffDao是我們自己定義的接口,這個(gè)接口類似: publ...  閱讀全文

    posted @ 2006-11-26 21:08 Zou Ang 閱讀(5441) | 評(píng)論 (8)編輯 收藏

    測(cè)試-通過(guò)Word 2007發(fā)布Blog

    ?

    聽(tīng)說(shuō)可以用Word 2007發(fā)布Blog,測(cè)試一下,不過(guò)不知道有沒(méi)有代碼顯示的功能了.

    Microsoft Office Word 2007?Beta 2新增了Blog發(fā)布功能,這個(gè)一直讓人期待的功能終于可以體驗(yàn)一下了。

    經(jīng)過(guò)今天的努力,博客園現(xiàn)在已經(jīng)支持通過(guò)Microsoft Office Word 2007發(fā)布Blog。

    該文章就是通過(guò)Word 2007發(fā)布。

    具體配置方法如下:

    1. 點(diǎn)擊選擇左上角的按鈕,選擇Publish>Blog。
    2. 點(diǎn)擊Manage Accounts,在Blog Accounts窗口中點(diǎn)擊New,
    3. 在BlogHost中選擇Other。
    4. 在API中選擇MetaWeblog。
    5. 在UserName與Password中輸入你的Blog帳戶與密碼。
    6. 在Blog Post Url地址中輸入MetaWeblog訪問(wèn)地址(在Options ? Configure 頁(yè)面中可以查到),格式為:你的Blog主頁(yè)地址/services/metaweblog.aspx。

    配置完成后,你可以體驗(yàn)從Word 2007發(fā)布Blog的感覺(jué)。

    以后就不用被Web編輯器排版和提交失敗的問(wèn)題所困擾了。

    不過(guò)不能上傳圖片

    posted @ 2006-11-25 21:59 Zou Ang 閱讀(357) | 評(píng)論 (2)編輯 收藏

    本來(lái)沒(méi)問(wèn)題的代碼,一整合就出錯(cuò)了,煩

    posted @ 2006-11-25 20:10 Zou Ang 閱讀(194) | 評(píng)論 (0)編輯 收藏

    以前很喜歡在Eclipse中使用CTRL+ALT+F來(lái)進(jìn)行自動(dòng)排版.不過(guò)今天發(fā)現(xiàn)以后要絕對(duì)慎用這項(xiàng)功能,尤其是在xml和html中,盡量不要使用..因?yàn)榻裉彀l(fā)現(xiàn),本來(lái)運(yùn)行得很好的配置文件,只要一自動(dòng)排版,就會(huì)報(bào)出一些莫名其妙的錯(cuò)誤,而且這種錯(cuò)誤是你檢查配置檢查不出來(lái)的,因?yàn)榕渲每雌饋?lái)根本就沒(méi)變!!
    猜測(cè)是由于在xml的entity中加了空格或者換行符的緣故.

    posted @ 2006-11-25 13:52 Zou Ang 閱讀(2355) | 評(píng)論 (1)編輯 收藏

         摘要: 趨向采用 SOA

      軟件開(kāi)發(fā)領(lǐng)域的主要發(fā)展趨勢(shì)是從傳統(tǒng)軟件體系結(jié)構(gòu)過(guò)渡到面向服務(wù)的體系結(jié)構(gòu) (SOA)。在傳統(tǒng)軟件體系結(jié)構(gòu)中,將項(xiàng)目視為單個(gè)新應(yīng)用程序的交付。在SOA中,將項(xiàng)目視為集成服務(wù)的交付——一些是新建的,一些是現(xiàn)有的。無(wú)論其規(guī)模和預(yù)算如何,幾乎所有信息技術(shù)(Information Technology,IT)部門(mén)當(dāng)前都在進(jìn)行過(guò)渡到SOA的工作。您可能已經(jīng)讀過(guò)多篇關(guān)于SOA采用、成熟度模型和實(shí)現(xiàn)的文章了。本文將描述在組織采用SOA或過(guò)渡到更高的SOA成熟度水平的過(guò)程中,您的IT團(tuán)隊(duì)成員中所需的一組新角色及其各自的職責(zé)。

      在形成SOA團(tuán)隊(duì)時(shí),最大的范式轉(zhuǎn)換是從組合應(yīng)用程序交付過(guò)渡到服務(wù)交付。傳統(tǒng)軟件開(kāi)發(fā)人員通常構(gòu)建應(yīng)用程序中的一個(gè)模塊,或典型的三層體系結(jié)構(gòu)中的單個(gè)層的一部分。開(kāi)發(fā)人員的一個(gè)例子就是在模型-視圖-控制器(Model-View-Controller,MVC)體系結(jié)構(gòu)中負(fù)責(zé)控制器或模型層的人員。在SOA環(huán)境中,這些開(kāi)發(fā)人員現(xiàn)在負(fù)責(zé)服務(wù)實(shí)現(xiàn)。他們并不需要知道何時(shí)、如何或?yàn)槭裁凑{(diào)用服務(wù)以及誰(shuí)調(diào)用服務(wù)。他們所關(guān)心的就是,服務(wù)進(jìn)行什么  閱讀全文

    posted @ 2006-11-25 09:09 Zou Ang 閱讀(237) | 評(píng)論 (0)編輯 收藏

    主站蜘蛛池模板: 亚洲视频一区网站| 久久国产亚洲电影天堂| 亚洲一区二区三区高清视频| 日韩内射激情视频在线播放免费| 亚洲综合网站色欲色欲| 美女无遮挡拍拍拍免费视频| 亚洲综合伊人久久大杳蕉| 久久免费视频网站| 亚洲无线电影官网| 亚洲成年人免费网站| 亚洲伊人色一综合网| 四虎成人精品一区二区免费网站| 亚洲综合一区无码精品| 国产成人精品123区免费视频| 亚洲AV无码国产精品永久一区| 四虎永久免费影院在线| 一级毛片免费一级直接观看| 亚洲色WWW成人永久网址| 久久国产精品免费观看| 亚洲av产在线精品亚洲第一站| 天堂在线免费观看中文版| 草久免费在线观看网站| 久久青草亚洲AV无码麻豆| 国产精品视频免费一区二区| 国产亚洲成在线播放va| 亚洲国产三级在线观看| 免费人成网站在线观看10分钟| 日韩欧美亚洲国产精品字幕久久久| 亚洲狠狠爱综合影院婷婷| 一级毛片免费观看不卡视频| 亚洲愉拍一区二区三区| 亚洲色一色噜一噜噜噜| 永久在线免费观看| 曰批全过程免费视频观看免费软件| 亚洲热线99精品视频| AA免费观看的1000部电影| 五月婷婷免费视频| 精品亚洲成在人线AV无码| 久久亚洲国产成人影院网站| 猫咪免费人成网站在线观看| 特级一级毛片免费看|