iNeo

            BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
            30 Posts :: 8 Stories :: 2 Comments :: 0 Trackbacks

          #

          J2EE學(xué)習(xí)者越來(lái)越多,其本身技術(shù)也在不斷的發(fā)展,涌現(xiàn)出各種概念。作為Web服務(wù)的重要平臺(tái),本文將從一種容易理解的角度對(duì)這些概念向初學(xué)者進(jìn)行解釋,以便掌握學(xué)習(xí)J2EE學(xué)習(xí)方向。

            首先我們需要知道Java和J2EE是兩個(gè)不同概念,Java不只是指一種語(yǔ)言,已經(jīng)代表與微軟不同的另外一個(gè)巨大陣營(yíng),所以Java有時(shí)是指一種軟件系統(tǒng)的流派,當(dāng)然目前主要是.NET和Java兩大主流體系。

            J2EE可以說(shuō)指Java在數(shù)據(jù)庫(kù)信息系統(tǒng)上實(shí)現(xiàn),數(shù)據(jù)庫(kù)信息系統(tǒng)從早期的dBase、到Delphi/VB等C/S結(jié)構(gòu),發(fā)展到B/S(Browser瀏覽器/Server服務(wù)器)結(jié)構(gòu),而J2EE主要是指B/S結(jié)構(gòu)的實(shí)現(xiàn)。

            J2EE又是一種框架和標(biāo)準(zhǔn),框架類似API、庫(kù)的概念,但是要超出它們。如果需要詳細(xì)了解框架,可先從設(shè)計(jì)模式開(kāi)始學(xué)習(xí)。

            J2EE是一個(gè)虛的大的概念,J2EE標(biāo)準(zhǔn)主要有三種子技術(shù)標(biāo)準(zhǔn):WEB技術(shù)、EJB技術(shù)和JMS,談到J2EE應(yīng)該說(shuō)最終要落實(shí)到這三個(gè)子概念上。

            這三種技術(shù)的每個(gè)技術(shù)在應(yīng)用時(shí)都涉及兩個(gè)部分:容器部分和應(yīng)用部分,Web容器也是指Jsp/Servlet容器,你如果要開(kāi)發(fā)一個(gè)Web應(yīng)用,無(wú)論是編譯或運(yùn)行,都必須要有Jsp/Servlet庫(kù)或API支持(除了JDK/J2SE以外)。

            Web技術(shù)中除了Jsp/Servlet技術(shù)外,還需要JavaBeans或Java Class實(shí)現(xiàn)一些功能或者包裝攜帶數(shù)據(jù),所以Web技術(shù)最初裸體簡(jiǎn)稱為Jsp/Servlet+JavaBeans系統(tǒng)。

            談到JavaBeans技術(shù),就涉及到組件構(gòu)件技術(shù)(component),這是Java的核心基礎(chǔ)部分,很多軟件設(shè)計(jì)概念(設(shè)計(jì)模式)都是通過(guò)JavaBeans實(shí)現(xiàn)的。

            JavaBeans不屬于J2EE概念范疇中,如果一個(gè)JavaBeans對(duì)象被Web技術(shù)(也就是Jsp/Servlet)調(diào)用,那么JavaBeans就運(yùn)行在J2EE的Web容器中;如果它被EJB調(diào)用,它就運(yùn)行在EJB容器中。

            EJB(企業(yè)JavaBeans)是普通JavaBeans的一種提升和規(guī)范,因?yàn)槠髽I(yè)信息系統(tǒng)開(kāi)發(fā)中需要一個(gè)可伸縮的性能和事務(wù)、安全機(jī)制,這樣能保證企業(yè)系統(tǒng)平滑發(fā)展,而不是發(fā)展到一種規(guī)模重新更換一套軟件系統(tǒng)。

            至此,JavaBeans組件發(fā)展到EJB后,并不是說(shuō)以前的那種JavaBeans形式就消失了,這就自然形成了兩種JavaBeans技術(shù):EJB和POJO,POJO完全不同于EJB概念,指的是普通JavaBeans,而且這個(gè)JavaBeans不依附某種框架,或者干脆可以說(shuō):這個(gè)JavaBeans是你為這個(gè)應(yīng)用程序單獨(dú)開(kāi)發(fā)創(chuàng)建的。

            J2EE應(yīng)用系統(tǒng)開(kāi)發(fā)工具有很多:如JBuilder、Eclipse等,這些IDE首先是Java開(kāi)發(fā)工具,也就是說(shuō),它們首要基本功能是可以開(kāi)發(fā)出JavaBeans或Java class,但是如果要開(kāi)發(fā)出J2EE系統(tǒng),就要落實(shí)到要么是Web技術(shù)或EJB技術(shù),那么就有可能要一些專門模塊功能(如eclipse需要lomboz插件),最重要的是,因?yàn)镴2EE系統(tǒng)區(qū)分為容器和應(yīng)用兩個(gè)部分,所以,在任何開(kāi)發(fā)工具中開(kāi)發(fā)J2EE都需要指定J2EE容器。

            J2EE容器分為WEB容器和EJB容器,Tomcat/Resin是Web容器;JBoss是EJB容器+Web容器等,其中Web容器直接使用Tomcat實(shí)現(xiàn)的。所以你開(kāi)發(fā)的Web應(yīng)用程序可以在上面兩種容器運(yùn)行,而你開(kāi)發(fā)的Web+EJB應(yīng)用則只可以在JBoss服務(wù)器上運(yùn)行,商業(yè)產(chǎn)品Websphere/Weblogic等和JBoss屬于同一種性質(zhì)。

            J2EE容器也稱為J2EE服務(wù)器,大部分時(shí)它們概念是一致的。

            如果你的J2EE應(yīng)用系統(tǒng)的數(shù)據(jù)庫(kù)連接是通過(guò)JNDI獲得,也就是說(shuō)是從容器中獲得,那么你的J2EE應(yīng)用系統(tǒng)基本與數(shù)據(jù)庫(kù)無(wú)關(guān),如果你在你的J2EE應(yīng)用系統(tǒng)耦合了數(shù)據(jù)庫(kù)JDBC驅(qū)動(dòng)的配置,那么你的J2EE應(yīng)用系統(tǒng)就有數(shù)據(jù)庫(kù)概念色彩,作為一個(gè)成熟需要推廣的J2EE應(yīng)用系統(tǒng),不推薦和具體數(shù)據(jù)庫(kù)耦合,當(dāng)然這其中如何保證J2EE應(yīng)用系統(tǒng)運(yùn)行性能又是體現(xiàn)你的設(shè)計(jì)水平了。

            衡量J2EE應(yīng)用系統(tǒng)設(shè)計(jì)開(kāi)發(fā)水平高低的標(biāo)準(zhǔn)就是:解耦性;你的應(yīng)用系統(tǒng)各個(gè)功能是否能夠徹底脫離?是否不相互依賴,也只有這樣,才能體現(xiàn)可維護(hù)性、可拓展性的軟件設(shè)計(jì)目標(biāo)。

          共2頁(yè)。
          posted @ 2005-12-05 08:56 只牽這只狗 閱讀(277) | 評(píng)論 (0)編輯 收藏

                   如果要問(wèn)做什么事是最有吸引力,那就是創(chuàng)建Web應(yīng)用。畢竟,上次你聽(tīng)到有人稱贊某產(chǎn)品的交互設(shè)計(jì)是什么時(shí)候的事了?(除了iPod之外) 它們都很cool, 而且都是很創(chuàng)新的項(xiàng)目。

          拋開(kāi)這些不管,Web設(shè)計(jì)者們對(duì)設(shè)計(jì)交互式的Web沒(méi)有什么更好的辦法,卻對(duì)我們做桌面軟件的同事投去少許羨慕的目光.桌面應(yīng)用程序有豐富的界面以及對(duì)于Web程序來(lái)說(shuō)無(wú)法比擬的響應(yīng)能力。同樣,Web的快速發(fā)展,在我們所提供的體驗(yàn)和用戶從桌面應(yīng)用程序所得到的體驗(yàn)間產(chǎn)生巨大的差距

          而如今差距正在消失。請(qǐng)看看“Google建議(Google Suggest)”. 觀察它按你的輸入顯示建議條目的更新速度,幾乎是立即更新的。再看看"Google Maps". 放大,用你的鼠標(biāo)搬動(dòng)和滾動(dòng)。這些動(dòng)作幾乎是立即響應(yīng)的,不用等待頁(yè)面刷新。

          "Google Suggest"和"Google Maps" 是采用Ajax技術(shù)的兩個(gè)典型例子。Ajax是Asynchronous JavaScript and XML的簡(jiǎn)稱,它表現(xiàn)出一個(gè)Web開(kāi)發(fā)上的根本轉(zhuǎn)變,那就是,Web上可能做些什么. Ajax的定義

          Ajax不是一個(gè)技術(shù),它實(shí)際上是幾種技術(shù),每種技術(shù)都有其獨(dú)特這處,合在一起就成了一個(gè)功能強(qiáng)大的新技術(shù)。Ajax包括:

          • XHTML和CSS
          • 使用文檔對(duì)象模型(Document Object Model)作動(dòng)態(tài)顯示和交互
          • 使用XML和XSLT做數(shù)據(jù)交互和操作
          • 使用XMLHttpRequest進(jìn)行異步數(shù)據(jù)接收
          • 使用JavaScript將它們綁定在一起

          傳統(tǒng)的web應(yīng)用模型工作起來(lái)就象這樣:大部分界面上的用戶動(dòng)作觸發(fā)一個(gè)連接到Web服務(wù)器的HTTP請(qǐng)求。服務(wù)器完成一些處理---接收數(shù)據(jù),處理計(jì)算,再訪問(wèn)其它的數(shù)據(jù)庫(kù)系統(tǒng),最后返回一個(gè)HTML頁(yè)面到客戶端。這是一個(gè)老套的模式,自采用超文本作為web使用以來(lái),一直都這樣用, 但看過(guò)《The Elements of User Experience》的讀者一定知道,是什么限制了Web界面沒(méi)有桌面軟件那么好用。

          圖1: 傳統(tǒng)Web應(yīng)用模型(左)與Ajax模型的比較(右).

          這種舊的途徑讓我們認(rèn)識(shí)到了許多技術(shù),但它不會(huì)產(chǎn)生很好的用戶體驗(yàn)。當(dāng)服務(wù)器正在處理自己的事情的時(shí)候,用戶在做什么?沒(méi)錯(cuò),等待。每一個(gè)動(dòng)作,用戶都要等待。

          很明顯,如果我們按桌面程序的思維設(shè)計(jì)Web應(yīng)用,我們不愿意讓用戶總是等待。當(dāng)界面加載后,為什么還要讓用戶每次再花一半的時(shí)間從服務(wù)取數(shù)據(jù)?實(shí)際上,為什么老是讓用戶看到程序去服務(wù)器取數(shù)據(jù)呢? Ajax如何不同凡響

          通過(guò)在用戶和服務(wù)器之間引入一個(gè)Ajax引擎,可以消除Web的開(kāi)始-停止-開(kāi)始-停止這樣的交互過(guò)程. 它就像增加了一層機(jī)制到程序中,使它響應(yīng)更靈敏,而它的確做到了這一點(diǎn)。

          不像加載一個(gè)頁(yè)面一樣,在會(huì)話的開(kāi)始,瀏覽器加載了一個(gè)Ajax引擎---采用JavaScript編寫并且通常在一個(gè)隱藏frame中。這個(gè)引擎負(fù)責(zé)繪制用戶界面以及與服務(wù)器端通訊。Ajax引擎允許用異步的方式實(shí)現(xiàn)用戶與程序的交互--不用等待服務(wù)器的通訊。所以用戶再不不用打開(kāi)一個(gè)空白窗口,看到等待光標(biāo)不斷的轉(zhuǎn),等待服務(wù)器完成后再響應(yīng)。

          圖 2: 傳統(tǒng)Web應(yīng)用的同步交互過(guò)程(上)和Ajax應(yīng)用的異步交互過(guò)程的比較(下).

          通常要產(chǎn)生一個(gè)HTTP請(qǐng)求的用戶動(dòng)作現(xiàn)在通過(guò)JavaScript調(diào)用Ajax引擎來(lái)代替. 任何用戶動(dòng)作的響應(yīng)不再要求直接傳到服務(wù)器---例如簡(jiǎn)單的數(shù)據(jù)校驗(yàn),內(nèi)存中的數(shù)據(jù)編輯,甚至一些頁(yè)面導(dǎo)航---引擎自己就可以處理它. 如果引擎需要從服務(wù)器取數(shù)據(jù)來(lái)響應(yīng)用戶動(dòng)作---假設(shè)它提交需要處理的數(shù)據(jù),載入另外的界面代碼,或者接收新的數(shù)據(jù)---引擎讓這些工作異步進(jìn)行,通常使用XML, 不用再擔(dān)誤用戶界面的交互。 誰(shuí)在使用Ajax

          在采用Ajax的開(kāi)發(fā)上面,Google做了巨大的投資。去年Google所有主要的產(chǎn)品都用了這項(xiàng)技術(shù)---Orkut, Gmail, 以及最近的beta版的Google Groups, Google Suggest和Google Maps---它們?nèi)茿jax的應(yīng)用。(要想了解更多這些Ajax實(shí)際的技術(shù)細(xì)節(jié),請(qǐng)看它們的分析文章:Gmail, Google Suggest, Google Maps). 其它的像:Flickr, 采用許多人們喜歡的Ajax特性,還有Amazon的A9.com搜索引擎也采用類似的技術(shù)。

          這些項(xiàng)目證明了Ajax不只是學(xué)術(shù)上的,也有許多真實(shí)世界成功應(yīng)用。這不是什么實(shí)驗(yàn)室里的技術(shù)。Ajax的應(yīng)用可大可小,從非常簡(jiǎn)單的,像單一功能的Google Suggest到非常復(fù)雜的Google Maps.

          Ajax:Web應(yīng)用開(kāi)發(fā)新理念

          如果要用“充滿魅力”一詞來(lái)形容當(dāng)前流行的交互設(shè)計(jì),那么首推創(chuàng)建Web應(yīng)用程序。畢竟,當(dāng)你最終聽(tīng)到某人傾倒于產(chǎn)品的交互設(shè)計(jì),難道不是在網(wǎng)上?(Okay,我承認(rèn)iPod除外)。所有追求酷,追求創(chuàng)新的新項(xiàng)目都是聯(lián)機(jī)應(yīng)用的。

          盡管如此,Web交互設(shè)計(jì)人員還是不可避免地對(duì)創(chuàng)建桌面應(yīng)用軟件的同事懷有一絲妒忌。桌面應(yīng)用程序所擁有的功能豐富性和響應(yīng)能力似乎是Web目前無(wú)法達(dá)到的。簡(jiǎn)單地讓W(xué)eb應(yīng)用程序迅速蔓延,會(huì)在我們所提供的體驗(yàn)和用戶從桌面應(yīng)用程序獲取的體驗(yàn)之間形成一道鴻溝。

          但現(xiàn)在,這道鴻溝正被逐漸填平。讓我們看看Google Suggest。根據(jù)您輸入的內(nèi)容,相關(guān)的條目便幾乎立即更新。我們?cè)倏碐oogle Maps。利用光標(biāo),在刻度線上移動(dòng)來(lái)放大地圖或者縮小,所有的一切幾乎都是即時(shí)的,完全不用等待頁(yè)面的刷新。

          Google Suggest和Google Maps就是這種新型Web應(yīng)用程序的兩個(gè)例子,我在Adaptive Path上把這種理念稱為 Ajax。也就是Asynchronous JavaScript + XML的簡(jiǎn)寫,它預(yù)示著Web可能發(fā)生一次重大的變革。

          Ajax的定義

          Ajax并不是一種新技術(shù),它實(shí)際上是幾種已經(jīng)在各自領(lǐng)域大行其道的技術(shù)的強(qiáng)強(qiáng)結(jié)合。Ajax由以下內(nèi)容組成:

          · 基于標(biāo)準(zhǔn)化的XHTML和CSS;

          通過(guò)DOM(Document Object Model)實(shí)現(xiàn)動(dòng)態(tài)顯示和交互;
          · 通過(guò)XML和XSLT來(lái)進(jìn)行數(shù)據(jù)交換和處理;

          使用XMLHttpRequest通過(guò)異步方式獲取數(shù)據(jù);
          使用JavaScript來(lái)整合以上所有的技術(shù)
          經(jīng)典的Web應(yīng)用程序模型工作方式如下:大多數(shù)用戶動(dòng)作在界面上激發(fā)一個(gè)HTTP請(qǐng)求到web服務(wù)器。服務(wù)器做一些處理——獲取數(shù)據(jù),處理數(shù)字,與現(xiàn)有的應(yīng)用系統(tǒng)進(jìn)行溝通——最后返回HTML到客戶端。這樣的模型適合于以超文本為基礎(chǔ)的Web應(yīng)用程序,但作為一個(gè)強(qiáng)調(diào)用戶體驗(yàn)的狂熱分子(The Elements of User Experience一書(shū)的擁護(hù)者),我們認(rèn)為超文本造就Web成功的東西,卻并不一定滿足軟件應(yīng)用程序的要求。

          傳統(tǒng)的Web應(yīng)用程序模型技術(shù)上來(lái)說(shuō)意義非凡,但它并不適用于創(chuàng)建完美的用戶體驗(yàn)。當(dāng)服務(wù)器在做數(shù)據(jù)處理的時(shí)候,用戶在干什么呢?沒(méi)錯(cuò),他們?cè)诘却R粋€(gè)任務(wù)所需的步驟越多,用戶需要等待的次數(shù)也越多。

          顯然,當(dāng)我們?cè)O(shè)計(jì)Web應(yīng)用程序的時(shí)候,我們不應(yīng)該讓用戶傻等。界面一旦加載完成,為什么還要因?yàn)槌绦蛐枰獜姆?wù)器傳輸一些東西而中斷用戶交互呢?實(shí)際上,用戶為什么要看到程序與服務(wù)器的聯(lián)系?

          為什么Ajax與眾不同

          Ajax應(yīng)用程序摒棄了“開(kāi)—關(guān)—開(kāi)—關(guān)”的交互形式,在用戶與服務(wù)器之間引入了一個(gè)中間件——Ajax引擎。看上去在應(yīng)用程序上添加一個(gè)層面會(huì)減少響應(yīng),但事實(shí)上恰好相反。

          不同于加載一個(gè)網(wǎng)頁(yè)是,用戶會(huì)話一旦建立,瀏覽器就加載一個(gè)Ajax引擎——由JavaScript編寫并通常放置在一個(gè)隱藏幀內(nèi)。引擎的責(zé)任包括構(gòu)造用戶操作界面以及與服務(wù)器的溝通。Ajax引擎允許用戶與應(yīng)用程序的交互異步進(jìn)行——無(wú)須直接訪問(wèn)服務(wù)器。所以用戶永遠(yuǎn)不會(huì)在服務(wù)器處理數(shù)據(jù)期間瞪眼面對(duì)一個(gè)白屏和沙漏圖標(biāo)。



          用戶動(dòng)作的處理由傳統(tǒng)的表單提交來(lái)激發(fā)一個(gè)HTTP請(qǐng)求,變?yōu)镴avascript調(diào)用Ajax引擎。給用戶的回應(yīng)不用等到服務(wù)器處理后返回——比如簡(jiǎn)單的數(shù)據(jù)校驗(yàn),在內(nèi)存中編輯數(shù)據(jù),甚至一些導(dǎo)航功能——都直接由引擎來(lái)處理。如果引擎需要從服務(wù)器獲取些數(shù)據(jù)——提交數(shù)據(jù)給服務(wù)器處理,加載額外的界面代碼,或者獲取新數(shù)據(jù)——引擎通常以XML格式激發(fā)一個(gè)異步的請(qǐng)求,用戶端完全沒(méi)有被中斷的感覺(jué)。

          誰(shuí)在使用Ajax

          Google在Ajax開(kāi)發(fā)上投入了巨大的精力。去年Google推出的幾大產(chǎn)品——Orkut、Gmail、Google Groups最終測(cè)試版、Google Suggest和Google Maps——都是基于Ajax的應(yīng)用。其他還包括:有著很多備受人們贊譽(yù)特性的Flickr(http://www.flickr.com/)基于Ajax,Amazon的A9.com搜索引擎也使用了類似的技術(shù)。

          這些項(xiàng)目證實(shí)Ajax并不是一個(gè)技術(shù)性的實(shí)驗(yàn)品,它可以實(shí)踐在現(xiàn)實(shí)世界的應(yīng)用中。它也不是一種只能在實(shí)驗(yàn)室中運(yùn)用的技術(shù)。Ajax適用于從簡(jiǎn)單的單函數(shù)Google Suggest到非常復(fù)雜的Google Maps等各種規(guī)模的應(yīng)用程序。

          在Adaptive Path,我們已經(jīng)基于Ajax的理念工作了好幾個(gè)月,我們意識(shí)到我們也僅僅是接觸到Ajax所能帶來(lái)的非凡體驗(yàn)的一點(diǎn)皮毛。Ajax是Web應(yīng)用程序的一個(gè)重要發(fā)展,并且其重要性還在逐步增長(zhǎng)。因?yàn)樵S多開(kāi)發(fā)人員已經(jīng)熟悉Ajax所包含的技術(shù),我們期望看到更多的組織能夠像Google那樣通過(guò)Ajax獲得更大的競(jìng)爭(zhēng)優(yōu)勢(shì)。

          更進(jìn)一步

          創(chuàng)建Ajax應(yīng)用程序所面臨的最大挑戰(zhàn)并不在技術(shù)上。Ajax的核心技術(shù)是成熟的,穩(wěn)定并被廣泛應(yīng)用著。這些挑戰(zhàn)在于:應(yīng)用設(shè)計(jì)人員忘掉所有我們所熟知的網(wǎng)絡(luò)限制,去想像更寬廣、更深遠(yuǎn)的可能情況。

          接下來(lái)會(huì)很有趣。

          Ajax Q&A

          2005年3月13日:自從Jesse發(fā)表了該文,他收到了不計(jì)其數(shù)的咨詢Ajax問(wèn)題的信件,Jesse回復(fù)了其中有代表性的問(wèn)題并整理成Q&A。

          Q:是Adaptive Path還是Google發(fā)明了Ajax?Adaptive Path是否協(xié)助開(kāi)發(fā)了Google的Ajax應(yīng)用程序?
          A:Ajax并不是由Adaptive Path或者Google發(fā)明的。Google最新的產(chǎn)品是Ajax應(yīng)用程序最具代表性的例子。Adaptive Path沒(méi)有參與Google的開(kāi)發(fā),但我們?cè)跒槠渌囊恍┛蛻糇鲆恍┡cAjax相關(guān)的工作。

          Q:Adaptive Path會(huì)出售Ajax組件或者注冊(cè)Ajax這個(gè)商標(biāo)嗎?我從哪里可以下載到它?
          A:Ajax并不是一個(gè)具體的軟件或程序,它是一種理念——關(guān)于用合理的技術(shù)構(gòu)建Web應(yīng)用程序架構(gòu)的思考。Ajax這個(gè)名稱和它的理念都不是Adaptive Path私有的。

          Q:Ajax只不過(guò)是XMLHttpRequest的別名嗎?
          A:不是。XMLHttpRequest只是Ajax的一個(gè)組成部分。XMLHttpRequest讓客戶端與服務(wù)器的異步通訊成為可能;Ajax是本文描述的一個(gè)整體理念,它不僅依賴于XMLHttpRequest,還包括CSS、DOM和其他技術(shù)等等。

          Q:為什么你會(huì)起這么個(gè)名字?
          A:我們需要一個(gè)簡(jiǎn)短的表示“Asynchronous JavaScript+CSS+DOM+XMLHttpRequest”的新詞來(lái)與客戶談我們的理念。

          Q:與服務(wù)器異步通訊的技術(shù)產(chǎn)生很多年了,Ajax何以稱為新理念?
          A:Ajax包含的技術(shù)被大量應(yīng)用在現(xiàn)實(shí)世界中以至于改變了Web的基礎(chǔ)交互模式是一個(gè)新現(xiàn)象。Ajax是針對(duì)現(xiàn)在而言,因?yàn)檫@些技術(shù)離工業(yè)化應(yīng)用還需要很多時(shí)間去開(kāi)發(fā)。

          Q:Ajax是一個(gè)技術(shù)平臺(tái)或者架構(gòu)嗎?
          A:都是。Ajax是一系列技術(shù)的無(wú)縫集合。

          Q:Ajax最適合于什么樣的應(yīng)用?
          A:我也不知道。因?yàn)檫@是一個(gè)相當(dāng)新的理念,就我們的理解而言,Ajax應(yīng)用還處于初期階段。有時(shí)候傳統(tǒng)的Web應(yīng)用程序模型可能更為適合。

          Q:是否可以理解為Adaptive Path就是取代anti-Flash?
          A:完全不是。Macromedia是Adaptive Path的客戶之一,并且我們長(zhǎng)期為Flash技術(shù)做技術(shù)支持。待Ajax成熟后,我認(rèn)為對(duì)于具體的問(wèn)題,Ajax有時(shí)候會(huì)是一個(gè)更好的解決方案,同樣有時(shí)候Flash也許做得更好。我們也有興趣探討兩者的結(jié)合。(比如Flickr,它結(jié)合了兩者)。

          Q:Ajax在易用性和瀏覽器兼容性上是否有限制?Ajax是否會(huì)與后退按鈕沖突?Ajax與REST(雷達(dá)電子掃描技術(shù))兼容嗎?Ajax的開(kāi)發(fā)有哪些安全考慮?Ajax能為那些禁止Javascript運(yùn)行的用戶工作嗎?
          A:所有這些問(wèn)題的答案,我只能說(shuō)“可能”。已經(jīng)有很多的開(kāi)發(fā)者著手這些方面的工作。要評(píng)估Ajax的所有限制,我想還需要做很多工作,我們希望Ajax開(kāi)發(fā)社區(qū)能揭示更多的信息。

          Q:你所提到的Google的一些應(yīng)用中實(shí)際上并沒(méi)有使用XML。我一定要在Ajax應(yīng)用中使用XML或XSLT嗎?
          A:不是,對(duì)于Ajax客戶端,XML作為數(shù)據(jù)交換的載體是支持最為完善的(XMLHttpRequest,DOM支持)。當(dāng)然,你沒(méi)有理由不接受可以達(dá)到同樣效果的技術(shù),例如JavaScript Object Notation(http://www.crockford.com/JSON/)或者其他類似的數(shù)據(jù)交換的格式。

          Q:Ajax應(yīng)用比傳統(tǒng)的Web應(yīng)用程序方便開(kāi)發(fā)嗎?
          A:也不盡然。Ajax的應(yīng)用不可避免要在客戶端運(yùn)行復(fù)雜的JavaScript腳本。編寫復(fù)雜并且高效穩(wěn)定的腳本并不是一件容易的事情,優(yōu)秀的開(kāi)發(fā)工具和框架能幫助我們接受這一挑戰(zhàn)。

          Q:Ajax應(yīng)用程序總比傳統(tǒng)的Web應(yīng)用程序程序更友好嗎?
          A:不一定,Ajax給交互設(shè)計(jì)人員更多的靈活性。能力越大,責(zé)任也越大。我們必須小心使用Ajax去改善用戶體驗(yàn),而不是把它弄得更糟。



          Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=542160

          posted @ 2005-12-05 08:29 只牽這只狗 閱讀(287) | 評(píng)論 (0)編輯 收藏

          <%
          out.println("Protocol: " + request.getProtocol() + " ");
          out.println("Scheme: " + request.getScheme() + " ");
          out.println("Server Name: " + request.getServerName() + " " );
          out.println("Server Port: " + request.getServerPort() + " ");
          out.println("Protocol: " + request.getProtocol() + " ");
          out.println("Server Info: " + getServletConfig().getServletContext().getServerInfo() + " ");
          out.println("Remote Addr: " + request.getRemoteAddr() + " ");
          out.println("Remote Host: " + request.getRemoteHost() + " ");
          out.println("Character Encoding: " + request.getCharacterEncoding() + " ");
          out.println("Content Length: " + request.getContentLength() + " ");
          out.println("Content Type: "+ request.getContentType() + " ");
          out.println("Auth Type: " + request.getAuthType() + " ");
          out.println("HTTP Method: " + request.getMethod() + " ");
          out.println("Path Info: " + request.getPathInfo() + " ");
          out.println("Path Trans: " + request.getPathTranslated() + " ");
          out.println("Query String: " + request.getQueryString() + " ");
          out.println("Remote User: " + request.getRemoteUser() + " ");
          out.println("Session Id: " + request.getRequestedSessionId() + " ");
          out.println("Request URI: " + request.getRequestURI() + " ");
          out.println("Servlet Path: " + request.getServletPath() + " ");
          out.println("Accept: " + request.getHeader("Accept") + " ");
          out.println("Host: " + request.getHeader("Host") + " ");
          out.println("Referer : " + request.getHeader("Referer") + " ");
          out.println("Accept-Language : " + request.getHeader("Accept-Language") + " ");
          out.println("Accept-Encoding : " + request.getHeader("Accept-Encoding") + " ");
          out.println("User-Agent : " + request.getHeader("User-Agent") + " ");
          out.println("Connection : " + request.getHeader("Connection") + " ");
          out.println("Cookie : " + request.getHeader("Cookie") + " ");
          out.println("Created : " + session.getCreationTime() + " ");
          out.println("LastAccessed : " + session.getLastAccessedTime() + " ");

          %>

          運(yùn)行結(jié)果:

          Protocol: HTTP/1.1
          Scheme: http
          Server Name: 192.168.0.1
          Server Port: 8080
          Protocol: HTTP/1.1
          Server Info: JavaServer Web Dev Kit/1.0 EA (JSP 1.0; Servlet 2.1; Java 1.2; Windows NT 5.0 x86; java.vendor=Sun Microsystems Inc.)
          Remote Addr: 192.168.0.106
          Remote Host: abc
          Character Encoding: null
          Content Length: -1
          Content Type: null
          Auth Type: null
          HTTP Method: GET
          Path Info: null
          Path Trans: null
          Query String: null
          Remote User: null
          Session Id: To1010mC466113890241879At
          Request URI: /c.jsp
          Servlet Path: /c.jsp
          Accept: */*
          Host: 192.168.0.1:8080
          Referer : null
          Accept-Language : zh-cn
          Accept-Encoding : gzip, deflate
          User-Agent : Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)
          Connection : Keep-Alive
          Cookie : SESSIONID=To1010mC466113890241879At
          Created : 965764522168
          LastAccessed : 965775587088。

          posted @ 2005-12-01 13:55 只牽這只狗 閱讀(980) | 評(píng)論 (1)編輯 收藏

          Tomcat5的web應(yīng)用啟動(dòng)順序詳解

          cleverpig 發(fā)表于2005-11-29 作者:cleverpig 來(lái)自:Matrix 評(píng)價(jià):3/1 評(píng)論數(shù):0 點(diǎn)擊數(shù):211 [收藏]
          摘要:
          應(yīng)用Tomcat對(duì)于我們來(lái)講實(shí)在是司空見(jiàn)慣了,但是對(duì)于每個(gè)使用者來(lái)講,應(yīng)該了解其運(yùn)轉(zhuǎn)的機(jī)制也是必不可少的,本人在維護(hù)"apache開(kāi)源項(xiàng)目"論壇時(shí)遇到此問(wèn)題,并略作研究,望與大家共討、分享。


          本文Matrix永久鏡像:http://www.matrix.org.cn/resource/article/44/44001_Tomcat5_web_start.html
          說(shuō)明:本文可能由Matrix原創(chuàng),也可能由Matrix的會(huì)員整理,或者由
          Matrix的Crawler在全球知名Java或者其他技術(shù)相關(guān)站點(diǎn)抓取并永久
          保留鏡像,Matrix會(huì)保留所有原來(lái)的出處URL,并在顯著地方作出說(shuō)明,
          如果你發(fā)覺(jué)出處URL有誤,請(qǐng)聯(lián)系Matrix改正.
          Tomcat5的web應(yīng)用啟動(dòng)順序詳解

          作者:cleverpig


          版權(quán)聲明:本文可以自由轉(zhuǎn)載,轉(zhuǎn)載時(shí)請(qǐng)務(wù)必以超鏈接形式標(biāo)明文章原始出處和作者信息及本聲明
          作者:cleverpig(http://blog.matrix.org.cn/page/cleverpig)
          原文:[http://www.matrix.org.cn/resource/article/43/43987_JGroups.html]http://www.matrix.org.cn/resource/article/43/43987_JGroups.html[/url]
          關(guān)鍵字:tomcat,web,啟動(dòng)順序

          摘要:

             應(yīng)用Tomcat對(duì)于我們來(lái)講實(shí)在是司空見(jiàn)慣了,但是對(duì)于每個(gè)使用者來(lái)講,應(yīng)該了解其運(yùn)轉(zhuǎn)的機(jī)制也是必不可少的,本人在維護(hù)"apache開(kāi)源項(xiàng)目"論壇時(shí)遇到此問(wèn)題,并略作研究,望與大家共討、分享。

          一、配置自動(dòng)部署時(shí)的web應(yīng)用加載順序:

             當(dāng)tomcat的server.xml中對(duì)虛擬主機(jī)(Host)配置中autoDeploy=true和unpackWARs=true時(shí),如:
          server.xml

          ...
          <Host name="localhost" debug="0" appBase="webapps"
                 unpackWARs="true" autoDeploy="true"
                 xmlValidation="false" xmlNamespaceAware="false">
          ...


             下面的部署順序在Tomcat啟動(dòng)時(shí)發(fā)生:

             1。任何具有上下文描述符(Context Descriptors)的web應(yīng)用首先被部署,tomcat在$CATALINA_HOME/conf/[enginename]/[hostname]/目錄中羅列出所有的以xml為結(jié)尾的文件,將其作為web應(yīng)用的上下文描述符,并按照文件名排序逐一部署。

             注意作為上下文描述符的文件名可以不為web應(yīng)用名,因?yàn)閠omcat會(huì)讀取其中的內(nèi)容來(lái)判斷,但是改變上下文描述符的文件名會(huì)使部署的順序發(fā)生變化。

          如:
          $CATALINA_HOME\conf\Catalina\localhost\devoffer.xml


          <?xml version='1.0' encoding='utf-8'?>
          <Context docBase="E:/eclipse3.1RC3/workspace/devOfferProject/web" path="/devoffer" useNaming="false" workDir="work\Catalina\localhost\devoffer">
          </Context>


          上面的上下文描述符說(shuō)明了devoff這個(gè)web應(yīng)用的docBase和部署的path以及其工作目錄。

             2。另外,位于$CATALINA_HOME/webapps/[webappname]/META-INF/目錄中的context.xml也作為上下文描述符使用,在處理了上文所說(shuō)的位于$CATALINA_HOME/conf/[enginename]/[hostname]/目錄中的上下文描述符后,tomcat將部署這些在web應(yīng)用的META-INF目錄中的context.xml。加載順序按照應(yīng)用名的字母順序。

             3。沒(méi)有上下文描述符的已經(jīng)被展開(kāi)的web應(yīng)用將按照其應(yīng)用名順序逐個(gè)被部署,如果其中的一個(gè)web應(yīng)用關(guān)聯(lián)著一個(gè)在appBase(一般為"$CATALINA_HOME/webapps"目錄)中的WAR文件,則當(dāng)WAR文件比相對(duì)應(yīng)的被展開(kāi)的web應(yīng)用新時(shí),那個(gè)被展開(kāi)的web應(yīng)用將被刪除,tomcat將WAR文件展開(kāi)并部署作為替換舊的web應(yīng)用。

             4。在執(zhí)行了1-3步后,tomcat將部署在appBase中的WAR文件。

             請(qǐng)注意:在每個(gè)應(yīng)用被部署后,tomcat為沒(méi)有上下文描述符的web應(yīng)用建立上下文描述符。


          二、非自動(dòng)部署配置下的應(yīng)用加載順序:

             此時(shí)完全按照在tomcat manager中人工部署順序。

          三、參考資源:
                 http://tomcat.apache.org/tomcat-5.5-doc/deployer-howto.html

          四、參加討論:
          http://www.matrix.org.cn/thread.shtml?topicId=32324&forumId=17
          posted @ 2005-11-30 16:28 只牽這只狗 閱讀(297) | 評(píng)論 (0)編輯 收藏

          你能過(guò)關(guān)嗎?J2EE面試題集錦(附答案)
          出處:CSDN[ 2005-11-24 10:00:55 ] 作者:metaphy 責(zé)任編輯:xietaoming

          /**
           * By metaphy 2005-11-12
           * Version: 0.01
           * 注:題目答案來(lái)源于metaphy過(guò)去的知識(shí)或網(wǎng)絡(luò),metaphy不能保證其正確或完整性,僅供參考
          **/

          一、基礎(chǔ)問(wèn)答

            1.下面哪些類可以被繼承?

             java.lang.Thread (T)
             java.lang.Number (T)
             java.lang.Double (F)
             java.lang.Math  (F)
             java.lang.Void  (F)
             java.lang.Class  (F)
             java.lang.ClassLoader (T)

            2.抽象類和接口的區(qū)別

            (1)接口可以被多重implements,抽象類只能被單一extends
            (2)接口只有定義,抽象類可以有定義和實(shí)現(xiàn)
            (3)接口的字段定義默認(rèn)為:public static final, 抽象類字段默認(rèn)是"friendly"(本包可見(jiàn))

            3.Hashtable的原理,并說(shuō)出HashMap與Hashtable的區(qū)別

            HashTable的原理:通過(guò)節(jié)點(diǎn)的關(guān)鍵碼確定節(jié)點(diǎn)的存儲(chǔ)位置,即給定節(jié)點(diǎn)的關(guān)鍵碼k,通過(guò)一定的函數(shù)關(guān)系H(散列函數(shù)),得到函數(shù)值H(k),將此值解釋為該節(jié)點(diǎn)的存儲(chǔ)地址.
          HashMap 與Hashtable很相似,但HashMap 是非同步(unsynchronizded)和可以以null為關(guān)鍵碼的.

            4.forward和redirect的區(qū)別

            forward: an internal transfer in servlet
            redirect: 重定向,有2次request,第2次request將丟失第一次的attributs/parameters等

            5.什么是Web容器?

            實(shí)現(xiàn)J2EE規(guī)范中web協(xié)議的應(yīng)用.該協(xié)議定義了web程序的運(yùn)行時(shí)環(huán)境,包括:并發(fā)性,安全性,生命周期管理等等.

            6.解釋下面關(guān)于J2EE的名詞

            (1)JNDI:Java Naming & Directory Interface,JAVA命名目錄服務(wù).主要提供的功能是:提供一個(gè)目錄系統(tǒng),讓其它各地的應(yīng)用程序在其上面留下自己的索引,從而滿足快速查找和定位分布式應(yīng)用程序的功能.
            (2)JMS:Java Message Service,JAVA消息服務(wù).主要實(shí)現(xiàn)各個(gè)應(yīng)用程序之間的通訊.包括點(diǎn)對(duì)點(diǎn)和廣播.
            (3)JTA:Java Transaction API,JAVA事務(wù)服務(wù).提供各種分布式事務(wù)服務(wù).應(yīng)用程序只需調(diào)用其提供的接口即可.
            (4)JAF: Java Action FrameWork,JAVA安全認(rèn)證框架.提供一些安全控制方面的框架.讓開(kāi)發(fā)者通過(guò)各種部署和自定義實(shí)現(xiàn)自己的個(gè)性安全控制策略.
            (5)RMI:Remote Method Interface,遠(yuǎn)程方法調(diào)用

            7.EJB是基于哪些技術(shù)實(shí)現(xiàn)的?并說(shuō) 出SessionBean和EntityBean的區(qū)別,StatefulBean和StatelessBean的區(qū)別.

            EJB包括Session Bean、Entity Bean、Message Driven Bean,基于JNDI、RMI、JAT等技術(shù)實(shí)現(xiàn).

            SessionBean在J2EE應(yīng)用程序中被用來(lái)完成一些服務(wù)器端的業(yè)務(wù)操作,例如訪問(wèn)數(shù)據(jù)庫(kù)、調(diào)用其他EJB組件.EntityBean被用來(lái)代表應(yīng)用系統(tǒng)中用到的數(shù)據(jù).對(duì)于客戶機(jī),SessionBean是一種非持久性對(duì)象,它實(shí)現(xiàn)某些在服務(wù)器上運(yùn)行的業(yè)務(wù)邏輯;EntityBean是一種持久性對(duì)象,它代表一個(gè)存儲(chǔ)在持久性存儲(chǔ)器中的實(shí)體的對(duì)象視圖,或是一個(gè)由現(xiàn)有企業(yè)應(yīng)用程序?qū)崿F(xiàn)的實(shí)體.

            Session Bean 還可以再細(xì)分為 Stateful Session Bean 與 Stateless Session Bean .這兩種的 Session Bean都可以將系統(tǒng)邏輯放在 method之中執(zhí)行,不同的是 Stateful Session Bean 可以記錄呼叫者的狀態(tài),因此通常來(lái)說(shuō),一個(gè)使用者會(huì)有一個(gè)相對(duì)應(yīng)的 Stateful Session Bean 的實(shí)體.Stateless Session Bean 雖然也是邏輯組件,但是他卻不負(fù)責(zé)記錄使用者狀態(tài),也就是說(shuō)當(dāng)使用者呼叫 Stateless Session Bean 的時(shí)候,EJB Container 并不會(huì)找尋特定的 Stateless Session Bean 的實(shí)體來(lái)執(zhí)行這個(gè) method.換言之,很可能數(shù)個(gè)使用者在執(zhí)行某個(gè) Stateless Session Bean 的 methods 時(shí),會(huì)是同一個(gè) Bean 的 Instance 在執(zhí)行.從內(nèi)存方面來(lái)看, Stateful Session Bean 與 Stateless Session Bean 比較, Stateful Session Bean 會(huì)消耗 J2EE Server 較多的內(nèi)存,然而 Stateful Session Bean 的優(yōu)勢(shì)卻在于他可以維持使用者的狀態(tài).

            8.XML的解析方法

            Sax,DOM,JDOM

            9.什么是Web Service?

            Web Service就是為了使原來(lái)各孤立的站點(diǎn)之間的信息能夠相互通信、共享而提出的一種接口。
          Web Service所使用的是Internet上統(tǒng)一、開(kāi)放的標(biāo)準(zhǔn),如HTTP、XML、SOAP(簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議)、WSDL等,所以Web Service可以在任何支持這些標(biāo)準(zhǔn)的環(huán)境(Windows,Linux)中使用。

            注:SOAP協(xié)議(Simple Object Access Protocal,簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議),它是一個(gè)用于分散和分布式環(huán)境下網(wǎng)絡(luò)信息交換的基于XML的通訊協(xié)議。在此協(xié)議下,軟件組件或應(yīng)用程序能夠通過(guò)標(biāo)準(zhǔn)的HTTP協(xié)議進(jìn)行通訊。它的設(shè)計(jì)目標(biāo)就是簡(jiǎn)單性和擴(kuò)展性,這有助于大量異構(gòu)程序和平臺(tái)之間的互操作性,從而使存在的應(yīng)用程序能夠被廣泛的用戶訪問(wèn)。

            優(yōu)勢(shì):

            (1).跨平臺(tái)。
            (2).SOAP協(xié)議是基于XML和HTTP這些業(yè)界的標(biāo)準(zhǔn)的,得到了所有的重要公司的支持。
            (3).由于使用了SOAP,數(shù)據(jù)是以ASCII文本的方式而非二進(jìn)制傳輸,調(diào)試很方便;并且由于這樣,它的數(shù)據(jù)容易通過(guò)防火墻,不需要防火墻為了程序而單獨(dú)開(kāi)一個(gè)“漏洞”。
            (4).此外,WebService實(shí)現(xiàn)的技術(shù)難度要比CORBA和DCOM小得多。
            (5).要實(shí)現(xiàn)B2B集成,EDI比較完善與比較復(fù)雜;而用WebService則可以低成本的實(shí)現(xiàn),小公司也可以用上。
            (6).在C/S的程序中,WebService可以實(shí)現(xiàn)網(wǎng)頁(yè)無(wú)整體刷新的與服務(wù)器打交道并取數(shù)。

            缺點(diǎn):

            (1).WebService使用了XML對(duì)數(shù)據(jù)封裝,會(huì)造成大量的數(shù)據(jù)要在網(wǎng)絡(luò)中傳輸。
            (2).WebService規(guī)范沒(méi)有規(guī)定任何與實(shí)現(xiàn)相關(guān)的細(xì)節(jié),包括對(duì)象模型、編程語(yǔ)言,這一點(diǎn),它不如CORBA。

            10.多線程有幾種實(shí)現(xiàn)方法,都是什么?同步有幾種實(shí)現(xiàn)方法,都是什么?

            答:多線程有兩種實(shí)現(xiàn)方法,分別是繼承Thread類與實(shí)現(xiàn)Runnable接口
            同步的實(shí)現(xiàn)方面有兩種,分別是synchronized,wait與notify

            11.JSP中動(dòng)態(tài)INCLUDE與靜態(tài)INCLUDE的區(qū)別?

            動(dòng)態(tài)INCLUDE用jsp:include動(dòng)作實(shí)現(xiàn)

          <jsp:include page="included.jsp" flush="true"/>

            它總是會(huì)檢查所含文件中的變化,適合用于包含動(dòng)態(tài)頁(yè)面,并且可以帶參數(shù)

            靜態(tài)INCLUDE用include偽碼實(shí)現(xiàn),定不會(huì)檢查所含文件的變化,適用于包含靜態(tài)頁(yè)面

            <%@ include file="included.htm" %>

          二、Java編程與程序運(yùn)行結(jié)果

            1.Java編程,打印昨天的當(dāng)前時(shí)刻

          public class YesterdayCurrent{
            public void main(String[] args){
              Calendar cal = Calendar.getInstance();
              cal.add(Calendar.DATE, -1);
              System.out.println(cal.getTime());
            }
          }

            2.文件讀寫,實(shí)現(xiàn)一個(gè)計(jì)數(shù)器

            public int getNum(){
                  int i = -1;
                  try{
                      String stri="";
                      BufferedReader in = new BufferedReader(new FileReader(f));
                      while((stri=in.readLine())!=null){
                          i = Integer.parseInt(stri.trim());
                      }
                      in.close();
                  }catch(Exception e){
                      e.printStackTrace();
                  }
                  return i;
              }
              public void setNum(){
                  int i = getNum();
                  i++;       
                  try{
                      PrintWriter out=new PrintWriter(new BufferedWriter(new FileWriter(f,false))); 
                      out.write(String.valueOf(i));            //可能是編碼的原因,如果直接寫入int的話,將出現(xiàn)java編碼和windows編碼的混亂,因此此處寫入的是String
                      out.close() ;
                  }catch(Exception e){
                      e.printStackTrace();
                  }
              }

            3. 指出下面程序的運(yùn)行結(jié)果:

          class A{
              static{
                  System.out.print("1");
              }
              public A(){
                  System.out.print("2");
              }
          }
          class B extends A{
              static{
                  System.out.print("a");
              }
              public B(){
                  System.out.print("b");
              }  
          }
          public class Hello{
              public static void main(String[] ars){
                  A ab = new B(); //執(zhí)行到此處,結(jié)果: 1a2b
           ab = new B(); //執(zhí)行到此處,結(jié)果: 1a2bab
              }
          }

            注:類的static 代碼段,可以看作是類首次加載(被虛擬機(jī)加載)執(zhí)行的代碼,而對(duì)于類的加載,首先要執(zhí)行其基類的構(gòu)造,再執(zhí)行其本身的構(gòu)造

            4.寫一個(gè)Singleton模式的例子

          public class Singleton{
           private static Singleton single = new Singleton();
           private Singleton(){}
           public Singleton getInstance(){
            return single;
           }
          }

          三、數(shù)據(jù)庫(kù)

            1.刪除表的重復(fù)記錄

            如果記錄完全相同才算重復(fù)記錄,那么:  (sql server2000下測(cè)試通過(guò))

          select distinct * into #tmpp from tid
          delete from tid    
          insert into tid select * from #tmpp
          drop table #tmpp

            如果有id主鍵(數(shù)字,自增1的那種),那么:(sql server2000下測(cè)試通過(guò))

          delete from tableA where id not in
          (select id = min(id) from tableA group by name)

            2.delete from tablea & truncate table tablea的區(qū)別

            truncate 語(yǔ)句執(zhí)行速度快,占資源少,并且只記錄頁(yè)刪除的日志;
            delete 對(duì)每條記錄的刪除均需要記錄日志

          posted @ 2005-11-29 12:33 只牽這只狗 閱讀(248) | 評(píng)論 (0)編輯 收藏

          Eclipse 運(yùn)行命令行參數(shù)大全  
            包括英文版本和中文版本兩種的說(shuō)明, 特別需要值得一提的是那個(gè) -nl 參數(shù), 可以指定程序啟動(dòng)時(shí)所使用的語(yǔ)言. 例如:
          eclipse -nl en_US
          將啟動(dòng)英文語(yǔ)言, 這個(gè)特性在安裝了國(guó)際化語(yǔ)言包以后特別有用, 可以方便的切換各個(gè)語(yǔ)言的版本. 注意 IBM WSAD v5.1 也支持這個(gè)功能.

          運(yùn)行 Eclipse
          將 Eclipse 驅(qū)動(dòng)程序安裝(解壓縮)到某個(gè)目錄(例如,c:\eclipse)中之后,通過(guò)運(yùn)行頂級(jí)安裝目錄中的 Eclipse 可執(zhí)行文件來(lái)啟動(dòng)"工作臺(tái)"。在 Windows 系統(tǒng)上,該可執(zhí)行文件稱為 eclipse.exe,而在 Linux 系統(tǒng)上稱為 eclipse。注意:下列討論描述 Windows 系統(tǒng)上的設(shè)置。Linux 上的設(shè)置是相似的。

          如果您沒(méi)有另行指定,則平臺(tái)將缺省工作區(qū)目錄創(chuàng)建為可執(zhí)行文件的兄弟目錄(例如 c:\eclipse\workspace)。此工作區(qū)目錄用作項(xiàng)目的缺省內(nèi)容區(qū),還用于保存任何必需的元數(shù)據(jù)。要進(jìn)行共享安裝或多工作區(qū)安裝,應(yīng)明確指出工作區(qū)的位置而不是使用缺省值。有兩種控制工作區(qū)位置的方法:使用當(dāng)前工作目錄或使用 -data 命令行自變量。

          將工作區(qū)位置設(shè)置為在當(dāng)前工作目錄內(nèi)
          在此方案中,工作區(qū)位置將是當(dāng)前工作目錄中稱為 workspace 的目錄。

          實(shí)現(xiàn)此目的最容易的方法可能是使用下列步驟來(lái)創(chuàng)建快捷方式:

          導(dǎo)航到 Windows 資源管理器中的 eclipse.exe 并使用右鍵拖動(dòng)來(lái)創(chuàng)建 eclipse.exe 的快捷方式。
          編輯快捷方式的屬性,以使啟動(dòng)位置:字段標(biāo)識(shí)工作區(qū)位置的父目錄(例如,c:\users\robert)。
          關(guān)閉屬性對(duì)話框并雙擊快捷方式(如果提供的目錄為 c:\users\robert,則工作區(qū)位置將為 c:\users\robert\workspace)。
          當(dāng)然,您也可以使用命令提示符(通過(guò)將目錄切換為工作區(qū)父目錄然后運(yùn)行 eclipse.exe)來(lái)獲得同樣的效果。

          使用 -data 設(shè)置工作區(qū)的特定位置
          要使用 -data 命令行自變量,只要將 -data your_workspace_location(例如,-data c:\users\robert\myworkspace)添加至快捷方式屬性中的目標(biāo)字段或顯式地將它包括在命令行上。

          使用 -vm 設(shè)置 java VM
          建議顯式指定在運(yùn)行 Eclipse 時(shí)要使用哪個(gè) Java VM。使用 -vm 命令行自變量(例如,-vm c:\jre\bin\javaw.exe)可以實(shí)現(xiàn)此目的。如果不使用 -vm,則 Eclipse 將使用在 O/S 路徑上找到的一個(gè) Java VM。當(dāng)安裝其它產(chǎn)品時(shí),它們可更改您的路徑,導(dǎo)致在下一次啟動(dòng) Eclipse 時(shí)使用另一 Java VM。

          運(yùn)行 Eclipse 中的高級(jí)主題
          Eclipse 可執(zhí)行文件及平臺(tái)本身提供了人們感興趣的開(kāi)發(fā)或調(diào)試 Eclipse 各部件的許多執(zhí)行選項(xiàng)。運(yùn)行 Eclipse 可執(zhí)行文件的一般格式是:

          eclipse [platform options] [-vmargs [Java VM arguments]]
          Eclipse 啟動(dòng)參數(shù)  命令 描述  原因
          -arch architecture
          定義 Eclipse 平臺(tái)在其上運(yùn)行的處理器體系結(jié)構(gòu)。Eclipse 平臺(tái)通常使用 Java os.arch 屬性的常用值來(lái)計(jì)算最佳設(shè)置。如果在此處指定該項(xiàng),則這是 Eclipse 平臺(tái)使用的值。此處指定的值可作為 BootLoader.getOSArch() 用于插件。示例值有:"x86"、"sparc"、"PA-RISC"和"ppc"。 2.0
          -application applicationId
          要運(yùn)行的應(yīng)用程序。應(yīng)用程序由向 org.eclipse.core.runtime.applications 擴(kuò)展點(diǎn)提供擴(kuò)展的插件來(lái)聲明。通常不需要此自變量。如果指定了此項(xiàng),則該值會(huì)覆蓋配置提供的值。如果不指定此項(xiàng),則會(huì)運(yùn)行"Eclipse 工作臺(tái)"。 1.0
          -boot bootJarURL
          (建議不使用;用 -configuration 代替;支持 1.0 兼容)。Eclipse 平臺(tái)的引導(dǎo)插件代碼(boot.jar)的位置,表示為 URL。如果指定此項(xiàng),則會(huì)用它來(lái)為裝入 Eclipse 平臺(tái)引導(dǎo)程序類裝入器的類裝入器設(shè)置類路徑。僅當(dāng)更改 startup.jar 和 boot.jar 的相對(duì)位置時(shí)才需要它。注意,不允許使用相對(duì) URL。  *1.0
          -classloaderproperties [file]
          如果指定的話,則使用給定位置處的類裝入器屬性文件來(lái)激活平臺(tái)類類裝入器增強(qiáng)。文件自變量可以是文件路徑或 URL。注意,不允許使用相對(duì) URL。單擊此處以獲得更多詳細(xì)信息。 2.0.2
          -configuration configurationFileURL
          Eclipse 平臺(tái)配置文件的位置,表示為 URL。配置文件確定 Eclipse 平臺(tái)、可用插件集和主要功能部件的位置。注意,不允許使用相對(duì) URL。當(dāng)安裝或更新 Eclipse 平臺(tái)時(shí)配置文件被寫至此位置。  2.0
          -consolelog
          將 Eclipse 平臺(tái)的錯(cuò)誤日志鏡像到用來(lái)運(yùn)行 Eclipse 的控制臺(tái)。與 -debug 組合時(shí)很方便使用。 1.0
          -data workspacePath
          要運(yùn)行 Eclipse 平臺(tái)的工作區(qū)的路徑。工作區(qū)位置也是項(xiàng)目的缺省位置。相對(duì)于從中啟動(dòng) eclipse 的目錄來(lái)解釋相對(duì)路徑。 1.0
          -debug [optionsFile]
          將平臺(tái)置于調(diào)試方式,并從給定位置處的文件裝入調(diào)試選項(xiàng)(如果指定的話)。此文件指示哪些調(diào)試點(diǎn)可用于插件以及是否已啟用它們。如果未給出文件位置,則平臺(tái)在啟動(dòng) eclipse 的目錄中查找稱為".options"的文件。URL 和文件系統(tǒng)路徑都可作為文件位置。 1.0
          -dev [classpathEntries]
          將平臺(tái)置于開(kāi)發(fā)方式。將可選類路徑條目(用逗號(hào)分隔的列表)添加至每個(gè)插件的運(yùn)行時(shí)類路徑。例如,當(dāng)工作區(qū)包含要開(kāi)發(fā)的插件時(shí),指定 -dev bin 會(huì)為每個(gè)插件項(xiàng)目的名為 bin 的目錄添加類路徑條目,允許在其中存儲(chǔ)最新生成的類文件。除去了冗余或不存在的類路徑條目。 1.0
          -endsplash params
          用于在 Eclipse 平臺(tái)啟動(dòng)并運(yùn)行時(shí)關(guān)閉閃屏的內(nèi)部選項(xiàng)。此選項(xiàng)在閃屏處理鏈中不同的位置有不同的語(yǔ)法和語(yǔ)義。 2.0
          -feature featureId
          主要功能部件的標(biāo)識(shí)。主要功能部件為 Eclipse 的已啟動(dòng)實(shí)例提供了產(chǎn)品個(gè)性,并確定使用的產(chǎn)品定制信息。 2.0
          -keyring keyringFilePath
          磁盤上授權(quán)數(shù)據(jù)庫(kù)(或"密鑰環(huán)"文件)的位置。此自變量必須與 -password 選項(xiàng)配合使用。相對(duì)于從中啟動(dòng) eclipse 的目錄來(lái)解釋相對(duì)路徑。 1.0
          -nl locale
          定義 Eclipse 平臺(tái)在其上運(yùn)行的語(yǔ)言環(huán)境的名稱。Eclipse 平臺(tái)通常自動(dòng)計(jì)算最佳設(shè)置。如果在此處指定該項(xiàng),則這是 Eclipse 平臺(tái)使用的值。此處指定的值可作為 BootLoader.getNL() 用于插件。示例值有:"en_US"和"fr_FR_EURO"。 2.0
          -nolazyregistrycacheloading
          取消激活裝入優(yōu)化的平臺(tái)插件注冊(cè)表高速緩存。缺省情況下,僅當(dāng)需要時(shí)才從注冊(cè)表高速緩存(可用時(shí))中裝入擴(kuò)展的配置元素,以減少內(nèi)存占用。此選項(xiàng)將在啟動(dòng)時(shí)強(qiáng)制完全裝入注冊(cè)表高速緩存。 2.1
          -noregistrycache
          繞過(guò)讀寫內(nèi)部插件注冊(cè)表高速緩存文件。 2.0
          -nosplash
          運(yùn)行平臺(tái)而不顯示閃屏。 1.0
          -os operatingSystem
          定義 Eclipse 平臺(tái)在其上運(yùn)行的操作系統(tǒng)。Eclipse 平臺(tái)通常使用 Java os.name 屬性的常用值來(lái)計(jì)算最佳設(shè)置。如果在此處指定該項(xiàng),則這是 Eclipse 平臺(tái)使用的值。此處指定的值可作為 BootLoader.getOS() 用于插件,并用于解析插件清單文件中提及的路徑中 $os$ 變量的出現(xiàn)。示例值有:"win32"、"linux"、"hpux"、"solaris"和"aix"。 1.0
          -password password
          授權(quán)數(shù)據(jù)庫(kù)的密碼。與 -keyring 選項(xiàng)配合使用。 1.0
          -perspective perspectiveId
          啟動(dòng)時(shí)要在活動(dòng)工作臺(tái)窗口中打開(kāi)的透視圖。如果沒(méi)有指定該參數(shù),則將打開(kāi)關(guān)閉時(shí)活動(dòng)的透視圖。 1.0
          -plugincustomization          propertiesFile
          包含插件首選項(xiàng)缺省設(shè)置的屬性文件的位置。這些缺省設(shè)置覆蓋在主要功能部件中指定的缺省設(shè)置。相對(duì)于從中啟動(dòng) eclipse 的目錄來(lái)解釋相對(duì)路徑。 2.0
          -plugins pluginsFileURL
          (建議不使用;用 -configuration 代替;支持 1.0 兼容)。 指定 Eclipse 平臺(tái)查找插件的文件的位置,表示為 URL。該文件為屬性文件格式,其中鍵是任意用戶定義名稱,值是指向 plugin.xml 文件的顯式路徑或指向包含插件的目錄的路徑的用逗號(hào)分隔的列表。注意,不允許使用相對(duì) URL。如果指定此項(xiàng),則此選項(xiàng)會(huì)導(dǎo)致創(chuàng)建適當(dāng)?shù)呐R時(shí)配置。 *1.0
          -refresh
          啟動(dòng)時(shí)執(zhí)行工作區(qū)的全局刷新的選項(xiàng)。這將使從上次平臺(tái)運(yùn)行以來(lái)在文件系統(tǒng)中所做的任何更改一致。 1.0
          -showlocation
          用于在窗口標(biāo)題欄中顯示工作區(qū)的位置的選項(xiàng)。在發(fā)行版 2.0 中,此選項(xiàng)僅與 -data 命令行自變量一起使用。 2.0
          -showsplash params
          用于顯示閃屏(由可執(zhí)行的 Eclipse 平臺(tái)啟動(dòng)器執(zhí)行)的內(nèi)部選項(xiàng)。此選項(xiàng)在閃屏處理鏈中不同的位置有不同的語(yǔ)法和語(yǔ)義。 2.0
          -vm vmPath
          要用來(lái)運(yùn)行 Eclipse 平臺(tái)的"Java 運(yùn)行時(shí)環(huán)境"(JRE)的位置。如果不指定此項(xiàng),則 JRE 位于 jre(它是 Eclipse 可執(zhí)行文件的兄弟目錄)。相對(duì)于從中啟動(dòng) eclipse 的目錄來(lái)解釋相對(duì)路徑。 1.0
          -ws windowSystem
          定義 Eclipse 平臺(tái)在其上運(yùn)行的 Windows 系統(tǒng)。Eclipse 平臺(tái)通常使用 Java os.name 屬性的常用值來(lái)計(jì)算最佳設(shè)置。如果在此處指定該項(xiàng),則這是 Eclipse 平臺(tái)使用的值。此處指定的值可作為 BootLoader.getWS() 用于插件、用于配置 SWT 以及用于解析插件清單文件中提及的路徑中 $ws$ 變量的出現(xiàn)。示例值有:"win32"、"motif"和"gtk"。 1.0

          將 -vmargs 條目后面的所有自變量(但不包括 -vmargs)作為虛擬機(jī)自變量(即,在要運(yùn)行的類的前面)直接傳遞到所指示的 Java VM。注意:如果 Eclipse 啟動(dòng)在 Java vm 自變量(-vmargs)之后提供的自變量(例如,-data),則 Eclipse 將不會(huì)啟動(dòng)并且您將接收到"JVM 已終止。出口代碼為 1"的錯(cuò)誤。

          在不同的 VM 上運(yùn)行
          在 J9 上運(yùn)行 Eclipse
          當(dāng)在 J9 版本 1.5 上運(yùn)行 Eclipse 時(shí),建議使用以下 VM 選項(xiàng):

          eclipse.exe [eclipse arguments] -vm path_to_j9w.exe             -vmargs -ms:32 -mm:2048 -mo:32768 -moi:32768 -mca:32 -mco:128 -mx:2000000
          當(dāng)在 J9 版本 2.0 上運(yùn)行 Eclipse 時(shí),J9W 選擇的缺省自變量應(yīng)為合適的選項(xiàng)。但是,要覆蓋 Eclipse 可執(zhí)行文件以內(nèi)部方式自動(dòng)設(shè)置的參數(shù),必須指定 -vmargs 不帶任何參數(shù),如下所示:

          eclipse.exe [eclipse arguments] -vm path_to_j9w.exe -vmargs
          有關(guān)進(jìn)一步信息,參考 J9 VM 文檔和幫助。

          在 IBM Developer Kit, Java(TM) Technology Edition VM 上運(yùn)行 Eclipse
          IBM Developer Kit, Java(TM) Technology Edition 1.3 Linux 的缺省 VM 設(shè)置適合進(jìn)行初期研究工作,但在進(jìn)行大型開(kāi)發(fā)時(shí)是不夠的。對(duì)于大型開(kāi)發(fā),應(yīng)修改 VM 自變量以使有更多的堆可用。例如,下列設(shè)置將允許 Java 堆增大為 256MB:

          -vmargs -Xmx256M
          posted @ 2005-11-28 15:20 只牽這只狗 閱讀(477) | 評(píng)論 (0)編輯 收藏

          程序被BS了...咳...

          posted @ 2005-11-27 18:59 只牽這只狗 閱讀(220) | 評(píng)論 (0)編輯 收藏

          頭好暈,發(fā)現(xiàn)又到周末了。
          好好休息一下吧!!!
          posted @ 2005-11-25 16:18 只牽這只狗 閱讀(219) | 評(píng)論 (0)編輯 收藏

          下午做業(yè)務(wù)聯(lián)合系統(tǒng)測(cè)試,結(jié)果問(wèn)題一大堆,流程跑了一半跑不下去了,真有些丟人。
          問(wèn)題總結(jié):
          1. 程序?qū)懙奶R虎。其中一位師兄(比我進(jìn)公司早)寫的那幾支問(wèn)題最多,當(dāng)然,這也和他負(fù)責(zé)的那支程序復(fù)雜程度有關(guān)(比我寫的那幾支要復(fù)雜),不過(guò)只怕主要還是他自己的問(wèn)題——平時(shí)這位師兄就經(jīng)常對(duì)工作滿腹牢騷,但人還是蠻不錯(cuò)的。
          2. 內(nèi)部測(cè)試沒(méi)有做到位。組內(nèi)的測(cè)試馬馬乎乎就過(guò)了,不知道做的目的究竟是為了自己還是為了別人。
          3. 領(lǐng)導(dǎo)也催的太急。快到月底了,為了績(jī)效催的緊,迫的我們這些日子天天加班。雖然我并不介意加班,但也不能把我們當(dāng)機(jī)器人吧。——我現(xiàn)在就是在加班的時(shí)間,抽空更新一下BLOG,氣死他。
          這次測(cè)試,都還沒(méi)跑到我的那幾支,不過(guò)自我感覺(jué)良好,哈!
          posted @ 2005-11-24 19:24 只牽這只狗 閱讀(252) | 評(píng)論 (0)編輯 收藏

          昨天申請(qǐng)的BLOG開(kāi)通了,在準(zhǔn)備寫點(diǎn)東西的時(shí)候,我負(fù)責(zé)的系統(tǒng)卻發(fā)生了一個(gè)異常。所以,不得不去處理。剛吃完飯,想了想就把這個(gè)問(wèn)題寫上來(lái)好了。
          今天系統(tǒng)出現(xiàn)了一個(gè)奇怪的錯(cuò)誤,令我奇怪的不是這個(gè)錯(cuò)誤本身,而是這個(gè)異常在發(fā)生的時(shí)候竟然沒(méi)有被拋出。后來(lái)才發(fā)現(xiàn),這個(gè)被調(diào)用的方法在上一個(gè)系統(tǒng)中自己處理了異常而沒(méi)有throws出來(lái),結(jié)果讓程序帶錯(cuò)繼續(xù)跑了下去,結(jié)果,錯(cuò)誤發(fā)生到我的系統(tǒng)上了。真糟糕!
          今天還有一個(gè)收獲,那就是終于知道錯(cuò)誤日志的記錄規(guī)則。汗...因?yàn)榻舆@個(gè)系統(tǒng)不久,所以很多都還沒(méi)認(rèn)真看過(guò)...以后一定要多把各個(gè)方面都多看一下...
          [code]
          COM.ibm.db2.jdbc.DB2Exception: [IBM][CLI Driver][DB2/NT] SQL0413N  Overflow occurred during numeric data type conversion.  SQLSTATE=22003

           at COM.ibm.db2.jdbc.app.SQLExceptionGenerator.throw_SQLException(SQLExceptionGenerator.java(Compiled Code))
           at COM.ibm.db2.jdbc.app.SQLExceptionGenerator.throw_SQLException(SQLExceptionGenerator.java(Inlined Compiled Code))
           at COM.ibm.db2.jdbc.app.SQLExceptionGenerator.check_return_code(SQLExceptionGenerator.java(Compiled Code))
           at COM.ibm.db2.jdbc.app.DB2Statement.execute2(DB2Statement.java(Compiled Code))
           at COM.ibm.db2.jdbc.app.DB2Statement.executeUpdate(DB2Statement.java(Compiled Code))
           at com.ibm.ws.rsadapter.jdbc.WSJdbcStatement.pmiExecuteUpdate(WSJdbcStatement.java(Compiled Code))
           at com.ibm.ws.rsadapter.jdbc.WSJdbcStatement.executeUpdate(WSJdbcStatement.java(Compiled Code))
           ........................[/code]

          posted @ 2005-11-24 12:51 只牽這只狗 閱讀(1828) | 評(píng)論 (0)編輯 收藏

          僅列出標(biāo)題
          共3頁(yè): 上一頁(yè) 1 2 3 
          主站蜘蛛池模板: 淅川县| 依兰县| 汝阳县| 阜宁县| 砀山县| 南宫市| 洛南县| 泰安市| 秀山| 舞阳县| 合川市| 彰化县| 调兵山市| 民勤县| 池州市| 厦门市| 安远县| 苍南县| 曲阜市| 济源市| 德州市| 舞阳县| 徐州市| 塔河县| 宣化县| 龙泉市| 砚山县| 江源县| 天柱县| 蚌埠市| 景洪市| 安图县| 扶沟县| 武定县| 馆陶县| 肇源县| 北海市| 新乐市| 合水县| 永登县| 裕民县|