todayx.org
          todayx.org
          posts - 39,comments - 60,trackbacks - 0
               摘要: JDBC模板類(lèi) 概述        Spring JDBC抽象框架core包提供了JDBC模板類(lèi),其中JdbcTemplate是core包的核心類(lèi),所以其他模板類(lèi)都是基于它封裝完成的,JDBC模板類(lèi)是第一種工作模式。          JdbcTemplate類(lèi)通過(guò)模板...  閱讀全文
          posted @ 2012-02-26 09:39 todayx.org 閱讀(2723) | 評(píng)論 (0)編輯 收藏

          在軟件這個(gè)行業(yè)里有些規(guī)則是很有殺傷力的,比如很有名的摩爾定律。

          總結(jié)出這些規(guī)則的意義在于可以大致的照明方向,免得努力來(lái)努力去卻走到了陰溝里。

          現(xiàn)實(shí)中種種利益紛爭(zhēng)、觀點(diǎn)之爭(zhēng)看似紛繁,但在大時(shí)間尺度下來(lái)看卻都是規(guī)則的實(shí)現(xiàn)手段。

          這就好比下圍棋,每一手都要為謀得利益而計(jì)算,但結(jié)局卻只有三種:贏、輸或和,這就是規(guī)則的力量。

           

          民以食為天,所以第一定律從收入開(kāi)始。

           

          程序員第一定律可以表述為:程序員的收入是技能復(fù)雜度和技能實(shí)現(xiàn)可能程度的函數(shù)。

          如果程序員的工資是S,社會(huì)平均水平的工資為A,程序員掌握的技能復(fù)雜度為C,實(shí)現(xiàn)程度為P

          那么S = A x C x P

           

          這里面的實(shí)現(xiàn)程度P不太好理解,額外做點(diǎn)說(shuō)明。

          好比說(shuō)有人在東北種了很多白菜,并獲得了大豐收。與此同時(shí)廣州也確實(shí)需要大白菜,按批發(fā)價(jià)他的這批白菜可以買(mǎi)10萬(wàn)。

          但關(guān)鍵是這個(gè)人找不到車(chē)皮,大白菜就只能在當(dāng)?shù)亓闶郏@個(gè)時(shí)候這批大白菜就只能買(mǎi)1萬(wàn)塊錢(qián)。

          這就是實(shí)現(xiàn)程度。

          大白菜內(nèi)蘊(yùn)了既定的價(jià)值,這種價(jià)值并不因?yàn)橘u(mài)多少錢(qián)而改變,但這種價(jià)值能實(shí)現(xiàn)到什么程度則依賴(lài)于現(xiàn)實(shí)的可能性。

           

          這視乎很簡(jiǎn)單,但其實(shí)不是,很多人的一生就籠罩在這條定律下面,我們來(lái)基于這第一定律繼續(xù)做些推導(dǎo)。

           

          • 推論1:越容易上手的技術(shù),其內(nèi)蘊(yùn)價(jià)值越低。

           

          技能的復(fù)雜度C可以大致等價(jià)于掌握一門(mén)技術(shù)所需要的時(shí)間。

           

          各種集成的開(kāi)發(fā)環(huán)境,各種容易學(xué)習(xí)的類(lèi)庫(kù)等使軟件開(kāi)發(fā)的門(mén)檻降得很低,這對(duì)整個(gè)產(chǎn)業(yè)是有利的,但對(duì)個(gè)體而言則是不利的。

          你花5個(gè)月可以學(xué)會(huì)的技術(shù),其他人花5個(gè)月也可以學(xué)會(huì),而5個(gè)月可以學(xué)會(huì)的東西所蘊(yùn)含的價(jià)值一定是低的。

          與之相對(duì)5年才可以學(xué)會(huì)的東西,其內(nèi)蘊(yùn)價(jià)值一定是高的。

          內(nèi)蘊(yùn)價(jià)值低,所對(duì)應(yīng)的收入必然偏低。

           

          為避免爭(zhēng)議,我這里就不寫(xiě)技術(shù)的名字了,但大家可以從學(xué)習(xí)所需要的時(shí)間上來(lái)對(duì)各種技術(shù)做個(gè)分類(lèi)。

           

          有時(shí)候很多人會(huì)有一種錯(cuò)覺(jué),認(rèn)為越熱門(mén)的技術(shù)收益越好。

          這在大多時(shí)候是錯(cuò)的。

          越熱的技術(shù),越成熟的技術(shù)越是大眾的,而越是大眾的技術(shù)內(nèi)蘊(yùn)價(jià)值越低,所以收益越不好。

          熱度能夠幫助找到工作,但對(duì)技能復(fù)雜度C沒(méi)有影響。

           

          • 推論2:?jiǎn)渭兊纳娅C廣泛,沒(méi)有專(zhuān)精,對(duì)收入的影響是負(fù)面的。

          各種技術(shù)的復(fù)雜度大概是呈指數(shù)增長(zhǎng)的,越到后面前進(jìn)一步越困難。

          好比說(shuō)學(xué)會(huì)5門(mén)語(yǔ)言所需要的時(shí)間大多時(shí)候遠(yuǎn)比學(xué)精一門(mén)語(yǔ)言要短。

          在特定年紀(jì)尚,每樣技術(shù)都會(huì)一點(diǎn),對(duì)提高實(shí)現(xiàn)程度P略有幫助,但自身可替代性很強(qiáng),對(duì)技能復(fù)雜度C的影響為負(fù)面。

          長(zhǎng)期來(lái)看得不償失。

           

          • 推論3:實(shí)現(xiàn)程度P越高,風(fēng)險(xiǎn)越大。

          有些技術(shù)領(lǐng)域很窄,上手也慢,實(shí)現(xiàn)程度卻高,比如顯卡驅(qū)動(dòng),打印驅(qū)動(dòng)等。

          但這類(lèi)工作好比在鋼絲上跳舞:只要能實(shí)現(xiàn)自己的價(jià)值,那么回報(bào)大體不錯(cuò),但最怕技術(shù)更迭。

          技術(shù)一換代,可能多年積累十去六七。

           

          總結(jié)來(lái)看,程序員要想獲得不錯(cuò)的收入,第一要掌握稀缺的技術(shù),即技術(shù)的內(nèi)蘊(yùn)價(jià)值要高;第二要找到實(shí)現(xiàn)稀缺技術(shù)的場(chǎng)景。

          《微軟的秘密》一書(shū)中提到,微軟里面優(yōu)秀的程序員是可以擁有許多輛保時(shí)捷的。

          用上面兩條做分解,就會(huì)發(fā)現(xiàn)原因很簡(jiǎn)單:

          一是這樣的人是NT的核心開(kāi)發(fā)人員,這類(lèi)人員內(nèi)蘊(yùn)價(jià)值極高,處于稀缺狀態(tài);二是微軟提供了實(shí)現(xiàn)這種技能內(nèi)蘊(yùn)價(jià)值的機(jī)會(huì)。

          這二者缺一不可。

          #根據(jù)大家的回復(fù)做了點(diǎn)修改把"實(shí)現(xiàn)可能性"替換成了"實(shí)現(xiàn)程度"。


          2012世界末日暨環(huán)境保護(hù)主題站,關(guān)注國(guó)內(nèi)外最新2012世界末日信息,旨在通過(guò)關(guān)注,收集,展示2012世界末日相關(guān)資料的方式,喚醒并提高人們保護(hù)環(huán)境與愛(ài)護(hù)地球的意識(shí),引導(dǎo)人類(lèi)保護(hù)環(huán)境.
          posted @ 2012-02-14 22:03 todayx.org 閱讀(557) | 評(píng)論 (4)編輯 收藏

          什么是HTTP協(xié)議

          協(xié)議是指計(jì)算機(jī)通信網(wǎng)絡(luò)中兩臺(tái)計(jì)算機(jī)之間進(jìn)行通信所必須共同遵守的規(guī)定或規(guī)則,超文本傳輸協(xié)議(HTTP)是一種通信協(xié)議,它允許將超文本標(biāo)記語(yǔ)言(HTML)文檔從Web服務(wù)器傳送到客戶端的瀏覽器

           

          目前我們使用的是HTTP/1.1 版本

          Web服務(wù)器,瀏覽器,代理服務(wù)器

          當(dāng)我們打開(kāi)瀏覽器,在地址欄中輸入U(xiǎn)RL,然后我們就看到了網(wǎng)頁(yè)。 原理是怎樣的呢?

          實(shí)際上我們輸入U(xiǎn)RL后,我們的瀏覽器給Web服務(wù)器發(fā)送了一個(gè)Request, Web服務(wù)器接到Request后進(jìn)行處理,生成相應(yīng)的Response,然后發(fā)送給瀏覽器, 瀏覽器解析Response中的HTML,這樣我們就看到了網(wǎng)頁(yè),過(guò)程如下圖所示

           

           

           

          我們的Request 有可能是經(jīng)過(guò)了代理服務(wù)器,最后才到達(dá)Web服務(wù)器的。

          過(guò)程如下圖所示

           

          代理服務(wù)器就是網(wǎng)絡(luò)信息的中轉(zhuǎn)站,有什么功能呢?

          1. 提高訪問(wèn)速度, 大多數(shù)的代理服務(wù)器都有緩存功能。

          2. 突破限制, 也就是翻-墻了

          3. 隱藏身份。

           

          URL詳解

           URL(Uniform Resource Locator) 地址用于描述一個(gè)網(wǎng)絡(luò)上的資源,  基本格式如下

          schema://host[:port#]/path/.../[?query-string][#anchor]

          scheme               指定低層使用的協(xié)議(例如:http, https, ftp)

          host                   HTTP服務(wù)器的IP地址或者域名

          port#                 HTTP服務(wù)器的默認(rèn)端口是80,這種情況下端口號(hào)可以省略。如果使用了別的端口,必須指明,例如 http://www.cnblogs.com:8080/

          path                   訪問(wèn)資源的路徑

          query-string       發(fā)送給http服務(wù)器的數(shù)據(jù)

          anchor-             錨

           

          URL 的一個(gè)例子

          http://www.mywebsite.com/sj/test/test.aspx?name=sviergn&x=true#stuff  Schema:                 http host:                   www.mywebsite.com path:                   /sj/test Query String:           name=sviergn&x=true Anchor:                 stuff

           

          HTTP協(xié)議是無(wú)狀態(tài)的

          http協(xié)議是無(wú)狀態(tài)的,同一個(gè)客戶端的這次請(qǐng)求和上次請(qǐng)求是沒(méi)有對(duì)應(yīng)關(guān)系,對(duì)http服務(wù)器來(lái)說(shuō),它并不知道這兩個(gè)請(qǐng)求來(lái)自同一個(gè)客戶端。 為了解決這個(gè)問(wèn)題, Web程序引入了Cookie機(jī)制來(lái)維護(hù)狀態(tài).

           

          HTTP消息的結(jié)構(gòu)

          先看Request 消息的結(jié)構(gòu),   Request 消息分為3部分,第一部分叫Request line, 第二部分叫Request header, 第三部分是body. header和body之間有個(gè)空行, 結(jié)構(gòu)如下圖

          第一行中的Method表示請(qǐng)求方法,比如"POST","GET",  Path-to-resoure表示請(qǐng)求的資源, Http/version-number 表示HTTP協(xié)議的版本號(hào)

          當(dāng)使用的是"GET" 方法的時(shí)候, body是為空的

          比如我們打開(kāi)博客園首頁(yè)的request 如下

          GET http://www.cnblogs.com/ HTTP/1.1 Host: www.cnblogs.com

          下面我們打開(kāi)Fiddler 捕捉一個(gè)博客園登錄的Request 然后分析下它的結(jié)構(gòu), 在Inspectors tab下以Raw的方式可以看到完整的Request的消息,   如下圖

           

          我們?cè)倏碦esponse消息的結(jié)構(gòu), 和Request消息的結(jié)構(gòu)基本一樣。 同樣也分為三部分,第一部分叫Response line, 第二部分叫Response header,第三部分是body. header和body之間也有個(gè)空行,  結(jié)構(gòu)如下圖

          HTTP/version-number表示HTTP協(xié)議的版本號(hào),  status-code 和message 請(qǐng)看下節(jié)[狀態(tài)代碼]的詳細(xì)解釋.

          我們用Fiddler 捕捉一個(gè)博客園首頁(yè)的Response然后分析下它的結(jié)構(gòu), 在Inspectors tab下以Raw的方式可以看到完整的Response的消息,   如下圖

           

           

          Get和Post方法的區(qū)別

          Http協(xié)議定義了很多與服務(wù)器交互的方法,最基本的有4種,分別是GET,POST,PUT,DELETE. 一個(gè)URL地址用于描述一個(gè)網(wǎng)絡(luò)上的資源,而HTTP中的GET, POST, PUT, DELETE就對(duì)應(yīng)著對(duì)這個(gè)資源的查,改,增,刪4個(gè)操作。 我們最常見(jiàn)的就是GET和POST了。GET一般用于獲取/查詢(xún)資源信息,而POST一般用于更新資源信息.

          我們看看GET和POST的區(qū)別

          1. GET提交的數(shù)據(jù)會(huì)放在URL之后,以?分割URL和傳輸數(shù)據(jù),參數(shù)之間以&相連,如EditPosts.aspx?name=test1&id=123456.  POST方法是把提交的數(shù)據(jù)放在HTTP包的Body中.

          2. GET提交的數(shù)據(jù)大小有限制(因?yàn)闉g覽器對(duì)URL的長(zhǎng)度有限制),而POST方法提交的數(shù)據(jù)沒(méi)有限制.

          3. GET方式需要使用Request.QueryString來(lái)取得變量的值,而POST方式通過(guò)Request.Form來(lái)獲取變量的值。

          4. GET方式提交數(shù)據(jù),會(huì)帶來(lái)安全問(wèn)題,比如一個(gè)登錄頁(yè)面,通過(guò)GET方式提交數(shù)據(jù)時(shí),用戶名和密碼將出現(xiàn)在URL上,如果頁(yè)面可以被緩存或者其他人可以訪問(wèn)這臺(tái)機(jī)器,就可以從歷史記錄獲得該用戶的賬號(hào)和密碼.

           

          狀態(tài)碼

          Response 消息中的第一行叫做狀態(tài)行,由HTTP協(xié)議版本號(hào), 狀態(tài)碼, 狀態(tài)消息 三部分組成。

          狀態(tài)碼用來(lái)告訴HTTP客戶端,HTTP服務(wù)器是否產(chǎn)生了預(yù)期的Response.

          HTTP/1.1中定義了5類(lèi)狀態(tài)碼, 狀態(tài)碼由三位數(shù)字組成,第一個(gè)數(shù)字定義了響應(yīng)的類(lèi)別

          1XX  提示信息 - 表示請(qǐng)求已被成功接收,繼續(xù)處理

          2XX  成功 - 表示請(qǐng)求已被成功接收,理解,接受

          3XX  重定向 - 要完成請(qǐng)求必須進(jìn)行更進(jìn)一步的處理

          4XX  客戶端錯(cuò)誤 -  請(qǐng)求有語(yǔ)法錯(cuò)誤或請(qǐng)求無(wú)法實(shí)現(xiàn)

          5XX  服務(wù)器端錯(cuò)誤 -   服務(wù)器未能實(shí)現(xiàn)合法的請(qǐng)求

           

          看看一些常見(jiàn)的狀態(tài)碼

          200 OK

          最常見(jiàn)的就是成功響應(yīng)狀態(tài)碼200了, 這表明該請(qǐng)求被成功地完成,所請(qǐng)求的資源發(fā)送回客戶端

          如下圖, 打開(kāi)博客園首頁(yè)

           

          302 Found

          重定向,新的URL會(huì)在response 中的Location中返回,瀏覽器將會(huì)自動(dòng)使用新的URL發(fā)出新的Request

          例如在IE中輸入, http://www.google.com. HTTP服務(wù)器會(huì)返回304, IE取到Response中Location header的新URL, 又重新發(fā)送了一個(gè)Request.

           

          304 Not Modified

          代表上次的文檔已經(jīng)被緩存了, 還可以繼續(xù)使用,

          例如打開(kāi)博客園首頁(yè), 發(fā)現(xiàn)很多Response 的status code 都是304

          提示: 如果你不想使用本地緩存可以用Ctrl+F5 強(qiáng)制刷新頁(yè)面

           

          400 Bad Request  客戶端請(qǐng)求與語(yǔ)法錯(cuò)誤,不能被服務(wù)器所理解

          403 Forbidden 服務(wù)器收到請(qǐng)求,但是拒絕提供服務(wù)

          404 Not Found

          請(qǐng)求資源不存在(輸錯(cuò)了URL)

          比如在IE中輸入一個(gè)錯(cuò)誤的URL, http://www.cnblogs.com/tesdf.aspx

           

          500 Internal Server Error 服務(wù)器發(fā)生了不可預(yù)期的錯(cuò)誤

          503 Server Unavailable 服務(wù)器當(dāng)前不能處理客戶端的請(qǐng)求,一段時(shí)間后可能恢復(fù)正常

           

          HTTP Request header

          使用Fiddler 能很方便的查看Reques header, 點(diǎn)擊Inspectors tab ->Request tab-> headers  如下圖所示.

          header 有很多,比較難以記憶,我們也按照Fiddler那樣把header 進(jìn)行分類(lèi),這樣比較清晰也容易記憶。

          Cache 頭域

          If-Modified-Since

          作用: 把瀏覽器端緩存頁(yè)面的最后修改時(shí)間發(fā)送到服務(wù)器去,服務(wù)器會(huì)把這個(gè)時(shí)間與服務(wù)器上實(shí)際文件的最后修改時(shí)間進(jìn)行對(duì)比。如果時(shí)間一致,那么返回304,客戶端 就直接使用本地緩存文件。如果時(shí)間不一致,就會(huì)返回200和新的文件內(nèi)容。客戶端接到之后,會(huì)丟棄舊文件,把新文件緩存起來(lái),并顯示在瀏覽器中.

          例如:If-Modified-Since: Thu, 09 Feb 2012 09:07:57 GMT

          實(shí)例如下圖

           

          If-None-Match

          作用: If-None-Match和ETag一起工作,工作原理是在HTTP Response中添加ETag信息。 當(dāng)用戶再次請(qǐng)求該資源時(shí),將在HTTP Request 中加入If-None-Match信息(ETag的值)。如果服務(wù)器驗(yàn)證資源的ETag沒(méi)有改變(該資源沒(méi)有更新),將返回一個(gè)304狀態(tài)告訴客戶端使用 本地緩存文件。否則將返回200狀態(tài)和新的資源和Etag.  使用這樣的機(jī)制將提高網(wǎng)站的性能

          例如: If-None-Match: "03f2b33c0bfcc1:0"

          實(shí)例如下圖

           

          Pragma

          作用: 防止頁(yè)面被緩存, 在HTTP/1.1版本中,它和Cache-Control:no-cache作用一模一樣

          Pargma只有一個(gè)用法, 例如: Pragma: no-cache

          注意: 在HTTP/1.0版本中,只實(shí)現(xiàn)了Pragema:no-cache, 沒(méi)有實(shí)現(xiàn)Cache-Control

           

          Cache-Control

          作用: 這個(gè)是非常重要的規(guī)則。 這個(gè)用來(lái)指定Response-Request遵循的緩存機(jī)制。各個(gè)指令含義如下

          Cache-Control:Public   可以被任何緩存所緩存()

          Cache-Control:Private     內(nèi)容只緩存到私有緩存中

          Cache-Control:no-cache  所有內(nèi)容都不會(huì)被緩存

          還有其他的一些用法, 我沒(méi)搞懂其中的意思, 請(qǐng)大家參考其他的資料

           

          Client 頭域

          Accept

          作用: 瀏覽器端可以接受的媒體類(lèi)型,

          例如:  Accept: text/html  代表瀏覽器可以接受服務(wù)器回發(fā)的類(lèi)型為 text/html  也就是我們常說(shuō)的html文檔,

          如果服務(wù)器無(wú)法返回text/html類(lèi)型的數(shù)據(jù),服務(wù)器應(yīng)該返回一個(gè)406錯(cuò)誤(non acceptable)

          通配符 * 代表任意類(lèi)型

          例如  Accept: */*  代表瀏覽器可以處理所有類(lèi)型,(一般瀏覽器發(fā)給服務(wù)器都是發(fā)這個(gè))

           

          Accept-Encoding:

          作用: 瀏覽器申明自己接收的編碼方法,通常指定壓縮方法,是否支持壓縮,支持什么壓縮方法(gzip,deflate),(注意:這不是只字符編碼);

          例如: Accept-Encoding: gzip, deflate

           

          Accept-Language

          作用: 瀏覽器申明自己接收的語(yǔ)言。 

          語(yǔ)言跟字符集的區(qū)別:中文是語(yǔ)言,中文有多種字符集,比如big5,gb2312,gbk等等;

          例如: Accept-Language: en-us

           

          User-Agent

          作用:告訴HTTP服務(wù)器, 客戶端使用的操作系統(tǒng)和瀏覽器的名稱(chēng)和版本.

          我們上網(wǎng)登陸論壇的時(shí)候,往往會(huì)看到一些歡迎信息,其中列出了你的操作系統(tǒng)的名稱(chēng)和版本,你所使用的瀏覽器的名稱(chēng)和版本,這往往讓很多人感到很神 奇,實(shí)際上,服務(wù)器應(yīng)用程序就是從User-Agent這個(gè)請(qǐng)求報(bào)頭域中獲取到這些信息User-Agent請(qǐng)求報(bào)頭域允許客戶端將它的操作系統(tǒng)、瀏覽器 和其它屬性告訴服務(wù)器。

          例如: User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; CIBA; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; InfoPath.2; .NET4.0E)

           

          Accept-Charset

          作用:瀏覽器申明自己接收的字符集,這就是本文前面介紹的各種字符集和字符編碼,如gb2312,utf-8(通常我們說(shuō)Charset包括了相應(yīng)的字符編碼方案);

          例如:

           

          Cookie/Login 頭域

          Cookie:

          作用: 最重要的header, 將cookie的值發(fā)送給HTTP 服務(wù)器

          Entity頭域

          Content-Length

          作用:發(fā)送給HTTP服務(wù)器數(shù)據(jù)的長(zhǎng)度。

          例如: Content-Length: 38

           

          Content-Type

          作用:

          例如:Content-Type: application/x-www-form-urlencoded

           

          Miscellaneous 頭域

          Referer:

          作用: 提供了Request的上下文信息的服務(wù)器,告訴服務(wù)器我是從哪個(gè)鏈接過(guò)來(lái)的,比如從我主頁(yè)上鏈接到一個(gè)朋友那里,他的服務(wù)器就能夠從HTTP Referer中統(tǒng)計(jì)出每天有多少用戶點(diǎn)擊我主頁(yè)上的鏈接訪問(wèn)他的網(wǎng)站。

          例如: Referer:http://translate.google.cn/?hl=zh-cn&tab=wT

          Transport 頭域

          Connection

          例如: Connection: keep-alive   當(dāng)一個(gè)網(wǎng)頁(yè)打開(kāi)完成后,客戶端和服務(wù)器之間用于傳輸HTTP數(shù)據(jù)的TCP連接不會(huì)關(guān)閉,如果客戶端再次訪問(wèn)這個(gè)服務(wù)器上的網(wǎng)頁(yè),會(huì)繼續(xù)使用這一條已經(jīng)建立的連接

          例如:  Connection: close  代表一個(gè)Request完成后,客戶端和服務(wù)器之間用于傳輸HTTP數(shù)據(jù)的TCP連接會(huì)關(guān)閉, 當(dāng)客戶端再次發(fā)送Request,需要重新建立TCP連接。

           

          Host(發(fā)送請(qǐng)求時(shí),該報(bào)頭域是必需的)

          作用: 請(qǐng)求報(bào)頭域主要用于指定被請(qǐng)求資源的Internet主機(jī)和端口號(hào),它通常從HTTP URL中提取出來(lái)的

          例如: 我們?cè)跒g覽器中輸入:http://www.guet.edu.cn/index.html

          瀏覽器發(fā)送的請(qǐng)求消息中,就會(huì)包含Host請(qǐng)求報(bào)頭域,如下:

          Host:http://www.guet.edu.cn

          此處使用缺省端口號(hào)80,若指定了端口號(hào),則變成:Host:指定端口號(hào)

           

          HTTP Response header

          同樣使用Fiddler 查看Response header, 點(diǎn)擊Inspectors tab ->Response tab-> headers  如下圖所示

           我們也按照Fiddler那樣把header 進(jìn)行分類(lèi),這樣比較清晰也容易記憶。

          Cache頭域

          Date

          作用:  生成消息的具體時(shí)間和日期

          例如: Date: Sat, 11 Feb 2012 11:35:14 GMT 

           

          Expires

          作用: 瀏覽器會(huì)在指定過(guò)期時(shí)間內(nèi)使用本地緩存

          例如: Expires: Tue, 08 Feb 2022 11:35:14 GMT

           

          Vary

          作用:

          例如: Vary: Accept-Encoding

           

          Cookie/Login 頭域

          P3P

          作用: 用于跨域設(shè)置Cookie, 這樣可以解決iframe跨域訪問(wèn)cookie的問(wèn)題

          例如: P3P: CP=CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR

           

          Set-Cookie

          作用: 非常重要的header, 用于把cookie 發(fā)送到客戶端瀏覽器, 每一個(gè)寫(xiě)入cookie都會(huì)生成一個(gè)Set-Cookie.

          例如: Set-Cookie: sc=4c31523a; path=/; domain=.acookie.taobao.com

           

          Entity頭域

          ETag

          作用:  和If-None-Match 配合使用。 (實(shí)例請(qǐng)看上節(jié)中If-None-Match的實(shí)例)

          例如: ETag: "03f2b33c0bfcc1:0"

           

          Last-Modified:

          作用: 用于指示資源的最后修改日期和時(shí)間。(實(shí)例請(qǐng)看上節(jié)的If-Modified-Since的實(shí)例)

          例如: Last-Modified: Wed, 21 Dec 2011 09:09:10 GMT

           

          Content-Type

          作用:WEB服務(wù)器告訴瀏覽器自己響應(yīng)的對(duì)象的類(lèi)型和字符集,

          例如:

          Content-Type: text/html; charset=utf-8

          Content-Type:text/html;charset=GB2312

          Content-Type: image/jpeg

           

          Content-Length

          指明實(shí)體正文的長(zhǎng)度,以字節(jié)方式存儲(chǔ)的十進(jìn)制數(shù)字來(lái)表示。在數(shù)據(jù)下行的過(guò)程中,Content-Length的方式要預(yù)先在服務(wù)器中緩存所有數(shù)據(jù),然后所有數(shù)據(jù)再一股腦兒地發(fā)給客戶端。

          例如: Content-Length: 19847

           

          Content-Encoding

          WEB服務(wù)器表明自己使用了什么壓縮方法(gzip,deflate)壓縮響應(yīng)中的對(duì)象。

          例如:Content-Encoding:gzip

           

          Content-Language

          作用: WEB服務(wù)器告訴瀏覽器自己響應(yīng)的對(duì)象的語(yǔ)言者

          例如: Content-Language:da

           

          Miscellaneous 頭域

          Server:

          作用:指明HTTP服務(wù)器的軟件信息

          例如:Server: Microsoft-IIS/7.5

           

          X-AspNet-Version:

          作用:如果網(wǎng)站是用ASP.NET開(kāi)發(fā)的,這個(gè)header用來(lái)表示ASP.NET的版本

          例如: X-AspNet-Version: 4.0.30319

          X-Powered-By:

          作用:表示網(wǎng)站是用什么技術(shù)開(kāi)發(fā)的

          例如: X-Powered-By: ASP.NET

          Transport頭域

          Connection

          例如: Connection: keep-alive   當(dāng)一個(gè)網(wǎng)頁(yè)打開(kāi)完成后,客戶端和服務(wù)器之間用于傳輸HTTP數(shù)據(jù)的TCP連接不會(huì)關(guān)閉,如果客戶端再次訪問(wèn)這個(gè)服務(wù)器上的網(wǎng)頁(yè),會(huì)繼續(xù)使用這一條已經(jīng)建立的連接

          例如:  Connection: close  代表一個(gè)Request完成后,客戶端和服務(wù)器之間用于傳輸HTTP數(shù)據(jù)的TCP連接會(huì)關(guān)閉, 當(dāng)客戶端再次發(fā)送Request,需要重新建立TCP連接。

          Location頭域

          Location

          作用: 用于重定向一個(gè)新的位置, 包含新的URL地址

           實(shí)例請(qǐng)看304狀態(tài)實(shí)例

           

          HTTP協(xié)議是無(wú)狀態(tài)的和Connection: keep-alive的區(qū)別

          無(wú)狀態(tài)是指協(xié)議對(duì)于事務(wù)處理沒(méi)有記憶能力,服務(wù)器不知道客戶端是什么狀態(tài)。從另一方面講,打開(kāi)一個(gè)服務(wù)器上的網(wǎng)頁(yè)和你之前打開(kāi)這個(gè)服務(wù)器上的網(wǎng)頁(yè)之間沒(méi)有任何聯(lián)系

          HTTP是一個(gè)無(wú)狀態(tài)面向連接的協(xié)議,無(wú)狀態(tài)不代表HTTP不能保持TCP連接,更不能代表HTTP使用的是UDP協(xié)議(無(wú)連接)

          從HTTP/1.1起,默認(rèn)都開(kāi)啟了Keep-Alive,保持連接特性,簡(jiǎn)單地說(shuō),當(dāng)一個(gè)網(wǎng)頁(yè)打開(kāi)完成后,客戶端和服務(wù)器之間用于傳輸HTTP數(shù)據(jù)的TCP連接不會(huì)關(guān)閉,如果客戶端再次訪問(wèn)這個(gè)服務(wù)器上的網(wǎng)頁(yè),會(huì)繼續(xù)使用這一條已經(jīng)建立的連接

           Keep-Alive不會(huì)永久保持連接,它有一個(gè)保持時(shí)間,可以在不同的服務(wù)器軟件(如Apache)中設(shè)定這個(gè)時(shí)間


          歷史上的今天
          回顧歷史的今天,歷史就像生活的一面鏡子;可以了解歷史的這一天發(fā)生的事件;借古可以鑒今;歷史是不能忘記的.要記住歷史的每一天
          http://www.todayx.org/
          posted @ 2012-02-14 21:58 todayx.org 閱讀(331) | 評(píng)論 (3)編輯 收藏

          作為一個(gè)開(kāi)發(fā)者,尤其是web開(kāi)發(fā)人員,我想你有必要去了解這一系列的處理流程,在這期間,瀏覽器和服務(wù)器到底是如何打交道的?服務(wù)器又是如何處理的?瀏覽器又是如何將網(wǎng)頁(yè)顯示給用戶的呢?......

          疑惑和細(xì)節(jié)真是太多了。坦白講,要想徹徹底底的弄清楚以上每個(gè)疑惑和處理細(xì)節(jié),至少需要十本書(shū)的厚度,所謂“底層無(wú)極限”嘛,而且不同的web服務(wù) 器和服務(wù)器端編程語(yǔ)言的實(shí)現(xiàn)和處理流程不盡相同(但本質(zhì)都是相通的)。本文中,我將根據(jù)http協(xié)議的有關(guān)知識(shí),跟大家講解一些web開(kāi)發(fā)的本質(zhì)。不管你 是從事.NET,還是J2EE或者php開(kāi)發(fā)等等,都離不開(kāi)這些本質(zhì)。希望你讀完本文,能有新的收獲和見(jiàn)解。由于本人水平和經(jīng)驗(yàn)有限,難免有誤,望讀者見(jiàn) 諒。

           

          何為http協(xié)議(Hypertext Transfer Protocol,超文本傳輸協(xié)議)?

          所謂協(xié)議,就是指雙方遵循的規(guī)范。http協(xié)議,就是瀏覽器和服務(wù)器之間進(jìn)行“溝通”的一種規(guī)范。我們?cè)诳纯臻g,刷微博...都是在使用http協(xié)議,當(dāng)然,遠(yuǎn)遠(yuǎn)不止這些應(yīng)用。

          筆者一直聽(tīng)說(shuō)http是屬于“應(yīng)用層的協(xié)議”,而且是基于TCP/IP協(xié)議的。這個(gè)不難理解,如果你上大學(xué)時(shí)候?qū)W過(guò)“計(jì)算機(jī)網(wǎng)絡(luò)”的課程,就一定知 道OSI七層參考協(xié)議(我當(dāng)時(shí)是死記硬背的)。如果你接觸過(guò)socket網(wǎng)絡(luò)編程,就應(yīng)該明白TCP和UDP這兩種使用廣泛的通信協(xié)議(建立連接、三次握 手等等,當(dāng)然,這不是本文討論的重點(diǎn))。如圖:

          既然TCP/UDP是廣泛使用的網(wǎng)絡(luò)通信協(xié)議,那為啥有多出個(gè)http協(xié)議來(lái)呢?

          筆者曾自己動(dòng)手寫(xiě)過(guò)一個(gè)簡(jiǎn)單的web服務(wù)器處理軟件,根據(jù)我的推斷(不一定準(zhǔn)確)。UDP協(xié)議具有不可靠性和不安全性,顯然這很難滿足web應(yīng)用的需要。

          而TCP協(xié)議是基于連接和三次握手的,雖然具有可靠性,但人具有一定的缺陷。但試想一下,普通的C/S架構(gòu)軟件,頂多上千個(gè)Client同時(shí)連接,而B(niǎo)/S架構(gòu)的網(wǎng)站,十萬(wàn)人同時(shí)在線也是很平常的事兒。如果十萬(wàn)個(gè)客戶端和服務(wù)器一直保持連接狀態(tài),那服務(wù)器如何滿足承載呢?

          這就衍生出了http協(xié)議。基于TCP的可靠性連接。通俗點(diǎn)說(shuō),就是在請(qǐng)求之后,服務(wù)器端立即關(guān)閉連接、釋放資源。這樣既保證了資源可用,也吸取了TCP的可靠性的優(yōu)點(diǎn)。

          正因?yàn)檫@點(diǎn),所以大家通常說(shuō)http協(xié)議是“無(wú)狀態(tài)”的,也就是“服務(wù)器不知道你客戶端干了啥”,其實(shí)很大程度上是基于性能考慮的。以至于后來(lái)有了session之類(lèi)的玩意。

           

          實(shí)戰(zhàn)準(zhǔn)備工作:

          在監(jiān)視網(wǎng)絡(luò)方面,windows平臺(tái)上有一款叫做Sniffer的優(yōu)秀軟件,這也是很多“黑客”經(jīng)常使用的嗅探工具。 在研究http協(xié)議時(shí),推薦大家使用一款

          叫作httpwatch的工具。(遺憾的是,該工具是收費(fèi)的。該咋辦就咋辦,你懂的)。安裝完成后,可以在IE瀏覽器的tools中直接打開(kāi)(目前也支持firefox)。如圖所示:


           

           

           

           

           

           

          點(diǎn)擊Record,就可以開(kāi)始監(jiān)視并記錄http消息了。stop、Clear等等按鈕的功能,這里就不一一介紹了。拿實(shí)例來(lái)說(shuō)話,下面就是我記錄訪問(wèn)main.aspx頁(yè)面的時(shí)候記錄的,能夠清晰的看到http報(bào)文消息的詳細(xì)信息,如圖:

          學(xué)習(xí)http協(xié)議,主要需要了解http的請(qǐng)求和響應(yīng)(當(dāng)然,還有g(shù)et、post等請(qǐng)求方式,狀態(tài)碼、URI、MIME等)


          首先看看http請(qǐng)求消息(就是瀏覽器丟給服務(wù)器的):


          一個(gè)http請(qǐng)求代表客戶端瀏覽器向服務(wù)器發(fā)送的數(shù)據(jù)。一個(gè)完整的http請(qǐng)求消息,包含一個(gè)請(qǐng)求行,若干個(gè)消息頭(請(qǐng)求頭),換行,實(shí)體內(nèi)容

          請(qǐng)求行:描述客戶端的請(qǐng)求方式、請(qǐng)求資源的名稱(chēng)、http協(xié)議的版本號(hào)。 例如: GET/BOOK/JAVA.HTML HTTP/1.1

          請(qǐng)求頭(消息頭)包含(客戶機(jī)請(qǐng)求的服務(wù)器主機(jī)名,客戶機(jī)的環(huán)境信息等):
          Accept:用于告訴服務(wù)器,客戶機(jī)支持的數(shù)據(jù)類(lèi)型  (例如:Accept:text/html,image/*)
          Accept-Charset:用于告訴服務(wù)器,客戶機(jī)采用的編碼格式
          Accept-Encoding:用于告訴服務(wù)器,客戶機(jī)支持的數(shù)據(jù)壓縮格式
          Accept-Language:客戶機(jī)語(yǔ)言環(huán)境
          Host:客戶機(jī)通過(guò)這個(gè)服務(wù)器,想訪問(wèn)的主機(jī)名
          If-Modified-Since:客戶機(jī)通過(guò)這個(gè)頭告訴服務(wù)器,資源的緩存時(shí)間
          Referer:客戶機(jī)通過(guò)這個(gè)頭告訴服務(wù)器,它(客戶端)是從哪個(gè)資源來(lái)訪問(wèn)服務(wù)器的(防盜鏈)
          User-Agent:客戶機(jī)通過(guò)這個(gè)頭告訴服務(wù)器,客戶機(jī)的軟件環(huán)境(操作系統(tǒng),瀏覽器版本等)
          Cookie:客戶機(jī)通過(guò)這個(gè)頭,將Coockie信息帶給服務(wù)器
          Connection:告訴服務(wù)器,請(qǐng)求完成后,是否保持連接
          Date:告訴服務(wù)器,當(dāng)前請(qǐng)求的時(shí)間

          (換行)
          實(shí)體內(nèi)容:
          就是指瀏覽器端通過(guò)http協(xié)議發(fā)送給服務(wù)器的實(shí)體數(shù)據(jù)。例如:name=dylan&id=110
          (get請(qǐng)求時(shí),通過(guò)url傳給服務(wù)器的值。post請(qǐng)求時(shí),通過(guò)表單發(fā)送給服務(wù)器的值)
           
          再看看HTTP響應(yīng)消息(服務(wù)器返回給瀏覽器的):

          一個(gè)http響應(yīng)代表服務(wù)器端向客戶端回送的數(shù)據(jù),它包括:
          一個(gè)狀態(tài)行,若干個(gè)消息頭,以及實(shí)體內(nèi)容

          響應(yīng)頭(消息頭)包含:
          Location:這個(gè)頭配合302狀態(tài)嗎,用于告訴客戶端找誰(shuí)
          Server:服務(wù)器通過(guò)這個(gè)頭,告訴瀏覽器服務(wù)器的類(lèi)型
          Content-Encoding:告訴瀏覽器,服務(wù)器的數(shù)據(jù)壓縮格式
          Content-Length:告訴瀏覽器,回送數(shù)據(jù)的長(zhǎng)度
          Content-Type:告訴瀏覽器,回送數(shù)據(jù)的類(lèi)型
          Last-Modified:告訴瀏覽器當(dāng)前資源緩存時(shí)間
          Refresh:告訴瀏覽器,隔多長(zhǎng)時(shí)間刷新
          Content- Disposition:告訴瀏覽器以下載的方式打開(kāi)數(shù)據(jù)。例如: context.Response.AddHeader("Content-Disposition","attachment:filename=aa.jpg");                                        context.Response.WriteFile("aa.jpg");
          Transfer-Encoding:告訴瀏覽器,傳送數(shù)據(jù)的編碼格式
          ETag:緩存相關(guān)的頭(可以做到實(shí)時(shí)更新)
          Expries:告訴瀏覽器回送的資源緩存多長(zhǎng)時(shí)間。如果是-1或者0,表示不緩存
          Cache-Control:控制瀏覽器不要緩存數(shù)據(jù)   no-cache
          Pragma:控制瀏覽器不要緩存數(shù)據(jù)          no-cache

          Connection:響應(yīng)完成后,是否斷開(kāi)連接。  close/Keep-Alive
          Date:告訴瀏覽器,服務(wù)器響應(yīng)時(shí)間

          理解了以上的http請(qǐng)求消息和響應(yīng)消息,相信你對(duì)于http協(xié)議已經(jīng)理解得足夠深刻了。關(guān)于http協(xié)議的更多具體細(xì)節(jié),可以參照http RFC文檔

          大致步驟就是:瀏覽器先向服務(wù)器發(fā)送請(qǐng)求,服務(wù)器接收到請(qǐng)求后,做相應(yīng)的處理,然后封裝好響應(yīng)報(bào)文,再回送給瀏覽器。瀏覽器拿到響應(yīng)報(bào)文后,再通過(guò) 瀏覽器引擎去渲染網(wǎng)頁(yè),解析DOM樹(shù),javascript引擎解析并執(zhí)行腳本操作,插件去干插件該干的事兒...關(guān)于瀏覽器渲染、解析的原理,可以參考 http://kb.cnblogs.com/page/129756/

          說(shuō)白了,所謂web的本質(zhì),無(wú)非是:請(qǐng)求/處理/響應(yīng) ,任何的web服務(wù)器,任何的服務(wù)端編程語(yǔ)言,都沒(méi)法脫離這個(gè)本質(zhì)。 而瀏覽器端解析html、圖片等靜態(tài)內(nèi)容,呈現(xiàn)給用戶,腳本引擎執(zhí)行腳本代碼,完成腳本代碼要做的事兒(例如dom操作,css屬性更改,發(fā)送ajax請(qǐng) 求等等)。

          筆者淺淺的認(rèn)為,其實(shí)瀏覽器就是一種特殊的Client,而B(niǎo)/S架構(gòu)也是一種特殊的C/S架構(gòu)。這里值得一提的是,不同的web服務(wù)器和編程語(yǔ) 言,又是如何接收用戶http請(qǐng)求。如何處理,如何響應(yīng)的呢?筆者拿熟悉的ASP.NET為例,通過(guò)反編譯工具查看源代碼(微軟這家伙實(shí)在封裝的太好了) 從底層進(jìn)行了剖析,如圖:

          由于篇幅有限,無(wú)法再繼續(xù)將asp.net、iis web服務(wù)器的細(xì)節(jié)及底層實(shí)現(xiàn)再做進(jìn)一步地進(jìn)行剖析了。因?yàn)槲④浀腶sp.net技術(shù)體系實(shí)在龐大,而且很復(fù)雜。有時(shí)間筆者會(huì)繼續(xù)更新系列文章,歡迎讀者繼續(xù)關(guān)注。


          歷史上的今天
          回顧歷史的今天,歷史就像生活的一面鏡子;可以了解歷史的這一天發(fā)生的事件;借古可以鑒今;歷史是不能忘記的.要記住歷史的每一天
          http://www.todayx.org/
          posted @ 2012-02-14 21:56 todayx.org 閱讀(279) | 評(píng)論 (0)編輯 收藏
               
          2012世界末日暨環(huán)境保護(hù)主題站,關(guān)注國(guó)內(nèi)外最新2012世界末日信息,旨在通過(guò)關(guān)注,收集,展示2012世界末日相關(guān)資料的方式,喚醒并提高人們保護(hù)環(huán)境與愛(ài)護(hù)地球的意識(shí),引導(dǎo)人類(lèi)保護(hù)環(huán)境.



                最近一直比較忙,所以一連幾天都沒(méi)有更新。本來(lái)覺(jué)得沒(méi)什么,后來(lái)有幾個(gè)網(wǎng)友都問(wèn)起為什么沒(méi)有更新,才覺(jué)得大家對(duì)我的博客還是比較關(guān)心的。于是覺(jué)得挺對(duì)不起大家的。終于到了周末,昨天晚上忙乎了一晚上,寫(xiě)了個(gè)Swing演示,今天把它共享出來(lái),算是彌補(bǔ)。 

            

              收到一個(gè)朋友的郵件說(shuō)如何在Swing中實(shí)現(xiàn)組件的動(dòng)畫(huà)效果,就像JIDE的那些組件一樣。的確Swing框架的靈活性和可擴(kuò)展性,使得它非常適合做這樣Makeover工作。我簡(jiǎn)單總結(jié)一了以下,這種組件不外乎要有以下三種元素:

              1.外觀華麗。這包括使用漸變色,線條和字體反走樣,圖標(biāo)設(shè)計(jì)漂亮搶眼,界面變化要柔和等等。但要避免設(shè)計(jì)太花哨,給人華而不實(shí)的感覺(jué)。原則上避免顏色太 碎,圖標(biāo)應(yīng)以簡(jiǎn)潔為主,不可濫用圖片等。技術(shù)上沒(méi)有多大要求,主要是美工,你需要掌握各種做圖工具,自己最好有好的審美和設(shè)計(jì)能力。

              2.動(dòng)畫(huà)效果。組件行為變化要柔和化,盡量使用動(dòng)畫(huà)效果,如淡入淡出、滾動(dòng)彈出等等。技術(shù)上最常用的方法是使用javax.swing.Timer。為什 么要使用javax.swing.Timer,這是因?yàn)閖avax.swing.Timer觸發(fā)的事件都在EDT上執(zhí)行,是線程安全的。除此外還需掌握 Java 2D的常用接口及圖像處理的常見(jiàn)技巧。

              3.空間布局。這種組件空間布局的特點(diǎn)是立體、動(dòng)態(tài)、拖拽式的。這和人的認(rèn)知能力有關(guān)。人類(lèi)認(rèn)知的特點(diǎn)是具體到抽象。二維、靜態(tài)和鍵盤(pán)式操作對(duì)普通用戶來(lái) 說(shuō)太過(guò)抽象和專(zhuān)業(yè)化,需要一定的輔助學(xué)習(xí)才能理解的。而三維、動(dòng)態(tài)、拖拽式操作更貼近于感性的認(rèn)知范疇。因此這類(lèi)組件經(jīng)常有浮動(dòng)式窗口、組件布局動(dòng)態(tài)變化 及拖拽式操作等特征。實(shí)現(xiàn)技術(shù)包括布局管理器(LayoutManager)、Swing組件分層結(jié)構(gòu)、Swing事件體系結(jié)構(gòu)以及DnD接口等。   

              美工對(duì)于java程序員來(lái)說(shuō)可能比較缺乏,但是華麗外觀不僅僅是美工技術(shù),這包括一些宏觀設(shè)計(jì)原則。java程序員完全可以通過(guò)掌握這些方針原則來(lái)提高自 己的設(shè)計(jì)水平。前面文章介紹那個(gè)《Swing外觀設(shè)計(jì)方針》就是一本這樣的書(shū)。至于美工,我覺(jué)得如果你有美術(shù)天分,那就要充分利用;如果沒(méi)有,那么你可以 模仿,熟悉幾種的圖形工具就完全可以不用自己的畫(huà)圖做出比較漂亮的圖標(biāo)、圖片(當(dāng)然沒(méi)有考慮版權(quán)問(wèn)題)。我就是后者,但是我發(fā)現(xiàn)我平時(shí)只需要PrScrn 鍵(抓圖)、Paint(Windows 畫(huà)圖工具,切圖、剪裁、轉(zhuǎn)換格式)、PowerPoint/OpenOffice Imprise(畫(huà)圖)、Google Image(搜索圖片)就已經(jīng)足夠了。其他所需的技術(shù)就需要你掌握Swing和Java 2D方方面面的技術(shù)了。當(dāng)然復(fù)雜的組件不僅僅是靠掌握這些技術(shù)能解決的,可能你還需要能比較好地熟悉各種編程模式。   

              這個(gè)朋友特別提到Windows上的折疊式操作面板,他說(shuō):   

              另外,我對(duì)JIDE中兩個(gè)東西很感興趣,一個(gè)是CollapsiblePanel(Windows Explorer左邊的常見(jiàn)任務(wù)),點(diǎn)擊后折疊、展開(kāi)子面板,而且是動(dòng)畫(huà)效果

              因此昨晚就特地試了一下。雖然以前就大概明白使用Timer和布局管理器以及圖像處理就可以實(shí)現(xiàn)這些東西,但一直沒(méi)有做。昨晚的實(shí)驗(yàn)還是很成功的,大概花 了兩個(gè)小時(shí)就實(shí)現(xiàn)了這個(gè)面板。工作過(guò)程大概就是分解這些面板組件、解析那部分需要?jiǎng)赢?huà)、應(yīng)該在哪兒觸發(fā)何種事件。另外就是編寫(xiě)這些組件,不斷調(diào)試。這個(gè)過(guò) 程的大部分時(shí)間都被效果調(diào)整占去了。你需要不斷的運(yùn)行程序,抓取屏幕,然后將它帖到Paint中,然后放大,然后和Windows上的抓圖比較,包括大 小、尺寸、顏色、字體、微觀變化等等。最后算是基本實(shí)現(xiàn)了Windows這個(gè)折疊式的面板組件。下面的是我的演示程序的一個(gè)抓圖:

          高級(jí)Swing組件makeover的三要素   

          這個(gè)是淡出淡入動(dòng)畫(huà)效果:

          高級(jí)Swing組件makeover的三要素   

              下面的Enable Animation的JCheckBox可以設(shè)置是否使用動(dòng)畫(huà)效果。選擇上折疊和展開(kāi)就具有動(dòng)畫(huà)效果。   

              這個(gè)組件的類(lèi)名是dyno.swing.beans.FolderPane。使用比較簡(jiǎn)單: 

              FolderPane fp=new FolderPane();//設(shè)置是否有動(dòng)畫(huà)效果,缺省沒(méi)有
              fp.setAnimated(true);//添加子面板      
              fp.addFolder("文件和文件夾任務(wù)", getFileFolderPane());      
              fp.addFolder("其他位置", getOtherPlacePane());      
              fp.addFolder("詳細(xì)信息", getDetailsPane());      
              add(fp, BorderLayout.CENTER);  

                  主要接口有兩個(gè):  

              設(shè)置是否要?jiǎng)赢?huà)效果      
              public void setAnimated(boolean b)
              添加面板,title是面板標(biāo)題文字,content是應(yīng)用程序組件
              public void addFolder(String title, JComponent content)
           
             這個(gè)演示的源碼可以從這兒下載,是一個(gè)NetBeans工程。編譯之后,直接雙擊foldered_pane.jar既可觀看效果。源代碼中有詳細(xì)的注解。

              更新:剛剛修改了一下,現(xiàn)在可以支持JScrollPane,即能放到JScrollPane,并能在動(dòng)畫(huà)時(shí)動(dòng)態(tài)的更新JScrollPane狀態(tài)。

          高級(jí)Swing組件makeover的三要素


          歷史上的今天
          回顧歷史的今天,歷史就像生活的一面鏡子;可以了解歷史的這一天發(fā)生的事件;借古可以鑒今;歷史是不能忘記的.要記住歷史的每一天
          http://www.todayx.org/
          posted @ 2012-02-08 21:26 todayx.org 閱讀(365) | 評(píng)論 (2)編輯 收藏
          歷史上的今天
          回顧歷史的今天,歷史就像生活的一面鏡子;可以了解歷史的這一天發(fā)生的事件;借古可以鑒今;歷史是不能忘記的.要記住歷史的每一天
          http://www.todayx.org/
          程序員到底可以做多久,這個(gè)職業(yè)是否真的到35歲就終止?帶著這個(gè)問(wèn)題,和所有有此疑問(wèn)和憂慮的朋友們探討。先說(shuō)說(shuō)我自己的觀點(diǎn)吧。要回答這個(gè)問(wèn)題,我們首先要回答另外幾個(gè)問(wèn)題。

           

               1. 人得學(xué)習(xí)能力是否會(huì)隨著年齡的增長(zhǎng)而變差?

           

               可能是如此,我兩歲的兒子一首唐詩(shī)說(shuō)兩遍就記住了,很長(zhǎng)繞口的兒歌《小熊過(guò)橋》幾乎能一字不差的唱完;而我是顯然辦不到的。不過(guò)發(fā)現(xiàn)一個(gè)事實(shí),就是人的學(xué) 習(xí)能力不僅僅是靠記憶能力,跟邏輯思維能力,還有人的經(jīng)驗(yàn)也有很大的關(guān)系;我們每個(gè)人也許都發(fā)現(xiàn),你如果只是個(gè)優(yōu)秀的Java程序員,如果要你去維護(hù)一 個(gè).net的系統(tǒng),不出兩個(gè)月, 你馬上就是一個(gè).net專(zhuān)家。因?yàn)槟阒老嚓P(guān)的知識(shí)怎么學(xué)習(xí),知道如何才能最快定位問(wèn)題的一般方法。我個(gè)人是個(gè)完全不懂php得人,結(jié)果被強(qiáng)拉過(guò)去搞了個(gè) php的項(xiàng)目,結(jié)果被認(rèn)為是php expert!  所以我的最終答案是,人得記憶力更年齡成反比,但是學(xué)習(xí)能力跟年齡成正比。

           

                2. 人的年齡越大,精力會(huì)跟不上程序員這樣高強(qiáng)度的工作嗎?

           

                我的答案也是否定的。首先這是個(gè)偽命題,沒(méi)有哪件事情是輕松的;你覺(jué)得別人比你輕松,那也只是你覺(jué)得而已。大體上個(gè)人的回報(bào)跟付出是成正比的。其實(shí)隨著你 的年齡增長(zhǎng),知識(shí)積累越多,經(jīng)驗(yàn)越豐富,你的工作效率會(huì)更高。5年前你修一個(gè)Bug要一個(gè)星期,現(xiàn)在也許10分鐘就夠了,并且是又快又好。難道不是這樣 嗎?所以你的工作強(qiáng)度事實(shí)上會(huì)變得更低,因?yàn)槟愕男矢撸銜?huì)有更多時(shí)間喝咖啡,也會(huì)遭你鄰桌的同事低語(yǔ)“這家伙每天無(wú)所事事,咋工資比我高那么多?” 因?yàn)槟愕?0分鐘就抵別人的一個(gè)星期。

           

               3. 人的年齡越大,就沒(méi)有激情學(xué)習(xí)新知識(shí)了嗎?

           

                對(duì)有些人是,對(duì)有些人不是。計(jì)算機(jī)科學(xué)日新月異,確實(shí)更新相當(dāng)快。你真的會(huì)跟不上腳步嗎?可能會(huì),如果你自己不學(xué)習(xí)。但我一定要亦步亦趨嗎?也不見(jiàn)得,無(wú) 論如何,即便是軟件開(kāi)發(fā),也還是有方向,有領(lǐng)域,你只要更上你需要更上的節(jié)奏就夠了。今天請(qǐng)我的一個(gè)兄弟給我講了下Struts應(yīng)用,就是給我搞個(gè)最小化 的Struts項(xiàng)目,包含所有Struct的重要知識(shí)點(diǎn),然后搬個(gè)椅子坐我旁邊,花上半個(gè)小時(shí)跟我講解;我現(xiàn)在儼然Struts專(zhuān)家了,不信,我跟你講講 看? 呵呵,開(kāi)玩笑了。

              

              如果我們覺(jué)得每天吃飯不是件枯燥無(wú)趣的事,我們應(yīng)該也不太會(huì)拒絕不斷學(xué)習(xí);如果我們一定會(huì)因?yàn)樽匀灰?guī)律而失去某些優(yōu)勢(shì),記得你其實(shí)有更多的優(yōu)勢(shì)可以彌補(bǔ);最重要的是,做你喜歡的事,做你能做的事情。


              正月十五,明月高懸;祝福各位龍圖大展!


          歷史上的今天
          回顧歷史的今天,歷史就像生活的一面鏡子;可以了解歷史的這一天發(fā)生的事件;借古可以鑒今;歷史是不能忘記的.要記住歷史的每一天
          http://www.todayx.org/
          posted @ 2012-02-07 13:46 todayx.org 閱讀(595) | 評(píng)論 (0)編輯 收藏
          歷史上的今天
          回顧歷史的今天,歷史就像生活的一面鏡子;可以了解歷史的這一天發(fā)生的事件;借古可以鑒今;歷史是不能忘記的.要記住歷史的每一天
          http://www.todayx.org/
          --核心類(lèi)主要有:
          org.jfree.chart.JFreeChart :圖表對(duì)象,任何類(lèi)型的圖表的最終表現(xiàn)形式都是在該對(duì)象進(jìn)行一些屬性的定制。JFreeChart引擎本身提供了一個(gè)工廠類(lèi)用于創(chuàng)建不同類(lèi)型的圖表對(duì)象
          org.jfree.data.category.XXXDataSet: 數(shù)據(jù)集對(duì)象,用于提供顯示圖表所用的數(shù)據(jù)。根據(jù)不同類(lèi)型的圖表對(duì)應(yīng)著很多類(lèi)型的數(shù)據(jù)集對(duì)象類(lèi)
          org.jfree.chart.plot.XXXPlot :圖表區(qū)域?qū)ο螅旧线@個(gè)對(duì)象決定著什么樣式的圖表,創(chuàng)建該對(duì)象的時(shí)候需要Axis、Renderer以及數(shù)據(jù)集對(duì)象的支持
          org.jfree.chart.axis.XXXAxis :用于處理圖表的兩個(gè)軸:縱軸和橫軸
          org.jfree.chart.render.XXXRender :負(fù)責(zé)如何顯示一個(gè)圖表對(duì)象
          org.jfree.chart.urls.XXXURLGenerator: 用于生成Web圖表中每個(gè)項(xiàng)目的鼠標(biāo)點(diǎn)擊鏈接
          XXXXXToolTipGenerator: 用于生成圖象的幫助提示,不同類(lèi)型圖表對(duì)應(yīng)不同類(lèi)型的工具提示類(lèi)


          JFreeChart類(lèi):
          void setAntiAlias(boolean flag) 字體模糊邊界
          void setBackgroundImage(Image image) 背景圖片
          void setBackgroundImageAlignment(int alignment) 背景圖片對(duì)齊方式(參數(shù)常量在org.jfree.ui.Align類(lèi)中定義)
          void setBackgroundImageAlpha(float alpha) 背景圖片透明度(0.0~1.0)
          void setBackgroundPaint(Paint paint) 背景色
          void setBorderPaint(Paint paint) 邊界線條顏色
          void setBorderStroke(Stroke stroke) 邊界線條筆觸
          void setBorderVisible(boolean visible) 邊界線條是否可見(jiàn)

          -----------------------------------------------------------------------------------------------------------

          TextTitle類(lèi):
          void setFont(Font font) 標(biāo)題字體
          void setPaint(Paint paint) 標(biāo)題字體顏色
          void setText(String text) 標(biāo)題內(nèi)容

          -----------------------------------------------------------------------------------------------------------

          StandardLegend(Legend)類(lèi):
          void setBackgroundPaint(Paint paint) 圖示背景色
          void setTitle(String title) 圖示標(biāo)題內(nèi)容
          void setTitleFont(Font font) 圖示標(biāo)題字體
          void setBoundingBoxArcWidth(int arcWidth) 圖示邊界圓角寬
          void setBoundingBoxArcHeight(int arcHeight) 圖示邊界圓角高
          void setOutlinePaint(Paint paint) 圖示邊界線條顏色
          void setOutlineStroke(Stroke stroke) 圖示邊界線條筆觸
          void setDisplaySeriesLines(boolean flag) 圖示項(xiàng)是否顯示橫線(折線圖有效)
          void setDisplaySeriesShapes(boolean flag) 圖示項(xiàng)是否顯示形狀(折線圖有效)
          void setItemFont(Font font) 圖示項(xiàng)字體
          void setItemPaint(Paint paint) 圖示項(xiàng)字體顏色
          void setAnchor(int anchor) 圖示在圖表中的顯示位置(參數(shù)常量在Legend類(lèi)中定義)

          -----------------------------------------------------------------------------------------------------------

          Axis類(lèi):
          void setVisible(boolean flag) 坐標(biāo)軸是否可見(jiàn)
          void setAxisLinePaint(Paint paint) 坐標(biāo)軸線條顏色(3D軸無(wú)效)
          void setAxisLineStroke(Stroke stroke) 坐標(biāo)軸線條筆觸(3D軸無(wú)效)
          void setAxisLineVisible(boolean visible) 坐標(biāo)軸線條是否可見(jiàn)(3D軸無(wú)效)
          void setFixedDimension(double dimension) (用于復(fù)合表中對(duì)多坐標(biāo)軸的設(shè)置)
          void setLabel(String label) 坐標(biāo)軸標(biāo)題
          void setLabelFont(Font font) 坐標(biāo)軸標(biāo)題字體
          void setLabelPaint(Paint paint) 坐標(biāo)軸標(biāo)題顏色
          void setLabelAngle(double angle) 坐標(biāo)軸標(biāo)題旋轉(zhuǎn)角度(縱坐標(biāo)可以旋轉(zhuǎn))
          void setTickLabelFont(Font font) 坐標(biāo)軸標(biāo)尺值字體
          void setTickLabelPaint(Paint paint) 坐標(biāo)軸標(biāo)尺值顏色
          void setTickLabelsVisible(boolean flag) 坐標(biāo)軸標(biāo)尺值是否顯示
          void setTickMarkPaint(Paint paint) 坐標(biāo)軸標(biāo)尺顏色
          void setTickMarkStroke(Stroke stroke) 坐標(biāo)軸標(biāo)尺筆觸
          void setTickMarksVisible(boolean flag) 坐標(biāo)軸標(biāo)尺是否顯示

          ValueAxis(Axis)類(lèi):
          void setAutoRange(boolean auto) 自動(dòng)設(shè)置數(shù)據(jù)軸數(shù)據(jù)范圍
          void setAutoRangeMinimumSize(double size) 自動(dòng)設(shè)置數(shù)據(jù)軸數(shù)據(jù)范圍時(shí)數(shù)據(jù)范圍的最小跨度
          void setAutoTickUnitSelection(boolean flag) 數(shù)據(jù)軸的數(shù)據(jù)標(biāo)簽是否自動(dòng)確定(默認(rèn)為true)
          void setFixedAutoRange(double length) 數(shù)據(jù)軸固定數(shù)據(jù)范圍(設(shè)置100的話就是顯示MAXVALUE到MAXVALUE-100那段數(shù)據(jù)范圍)
          void setInverted(boolean flag) 數(shù)據(jù)軸是否反向(默認(rèn)為false)
          void setLowerMargin(double margin) 數(shù)據(jù)軸下(左)邊距
          void setUpperMargin(double margin) 數(shù)據(jù)軸上(右)邊距
          void setLowerBound(double min) 數(shù)據(jù)軸上的顯示最小值
          void setUpperBound(double max) 數(shù)據(jù)軸上的顯示最大值
          void setPositiveArrowVisible(boolean visible) 是否顯示正向箭頭(3D軸無(wú)效)
          void setNegativeArrowVisible(boolean visible) 是否顯示反向箭頭(3D軸無(wú)效)
          void setVerticalTickLabels(boolean flag) 數(shù)據(jù)軸數(shù)據(jù)標(biāo)簽是否旋轉(zhuǎn)到垂直
          void setStandardTickUnits(TickUnitSource source) 數(shù)據(jù)軸的數(shù)據(jù)標(biāo)簽(可以只顯示整數(shù)標(biāo)簽,需要將AutoTickUnitSelection設(shè)false)

          NumberAxis(ValueAxis)類(lèi):
          void setAutoRangeIncludesZero(boolean flag) 是否強(qiáng)制在自動(dòng)選擇的數(shù)據(jù)范圍中包含0
          void setAutoRangeStickyZero(boolean flag) 是否強(qiáng)制在整個(gè)數(shù)據(jù)軸中包含0,即使0不在數(shù)據(jù)范圍中
          void setNumberFormatOverride(NumberFormat formatter) 數(shù)據(jù)軸數(shù)據(jù)標(biāo)簽的顯示格式
          void setTickUnit(NumberTickUnit unit) 數(shù)據(jù)軸的數(shù)據(jù)標(biāo)簽(需要將AutoTickUnitSelection設(shè)false)

          DateAxis(ValueAxis)類(lèi):
          void setMaximumDate(Date maximumDate) 日期軸上的最小日期
          void setMinimumDate(Date minimumDate) 日期軸上的最大日期
          void setRange(Date lower,Date upper) 日期軸范圍
          void setDateFormatOverride(DateFormat formatter) 日期軸日期標(biāo)簽的顯示格式
          void setTickUnit(DateTickUnit unit) 日期軸的日期標(biāo)簽(需要將AutoTickUnitSelection設(shè)false)
          void setTickMarkPosition(DateTickMarkPosition position) 日期標(biāo)簽位置(參數(shù)常量在org.jfree.chart.axis.DateTickMarkPosition類(lèi)中定義)

          CategoryAxis(Axis)類(lèi):
          void setCategoryMargin(double margin) 分類(lèi)軸邊距
          void setLowerMargin(double margin) 分類(lèi)軸下(左)邊距
          void setUpperMargin(double margin) 分類(lèi)軸上(右)邊距
          void setVerticalCategoryLabels(boolean flag) 分類(lèi)軸標(biāo)題是否旋轉(zhuǎn)到垂直
          void setMaxCategoryLabelWidthRatio(float ratio) 分類(lèi)軸分類(lèi)標(biāo)簽的最大寬度

          -----------------------------------------------------------------------------------------------------------

          Plot類(lèi):
          void setBackgroundImage(Image image) 數(shù)據(jù)區(qū)的背景圖片
          void setBackgroundImageAlignment(int alignment) 數(shù)據(jù)區(qū)的背景圖片對(duì)齊方式(參數(shù)常量在org.jfree.ui.Align類(lèi)中定義)
          void setBackgroundPaint(Paint paint) 數(shù)據(jù)區(qū)的背景圖片背景色
          void setBackgroundAlpha(float alpha) 數(shù)據(jù)區(qū)的背景透明度(0.0~1.0)
          void setForegroundAlpha(float alpha) 數(shù)據(jù)區(qū)的前景透明度(0.0~1.0)
          void setDataAreaRatio(double ratio) 數(shù)據(jù)區(qū)占整個(gè)圖表區(qū)的百分比
          void setOutLinePaint(Paint paint) 數(shù)據(jù)區(qū)的邊界線條顏色
          void setOutLineStroke(Stroke stroke) 數(shù)據(jù)區(qū)的邊界線條筆觸
          void setNoDataMessage(String message) 沒(méi)有數(shù)據(jù)時(shí)顯示的消息
          void setNoDataMessageFont(Font font) 沒(méi)有數(shù)據(jù)時(shí)顯示的消息字體
          void setNoDataMessagePaint(Paint paint) 沒(méi)有數(shù)據(jù)時(shí)顯示的消息顏色

          CategoryPlot(Plot)類(lèi):
          void setDataset(CategoryDataset dataset) 數(shù)據(jù)區(qū)的2維數(shù)據(jù)表
          void setColumnRenderingOrder(SortOrder order) 數(shù)據(jù)分類(lèi)的排序方式
          void setAxisOffset(Spacer offset) 坐標(biāo)軸到數(shù)據(jù)區(qū)的間距
          void setOrientation(PlotOrientation orientation) 數(shù)據(jù)區(qū)的方向(PlotOrientation.HORIZONTAL或PlotOrientation.VERTICAL)
          void setDomainAxis(CategoryAxis axis) 數(shù)據(jù)區(qū)的分類(lèi)軸
          void setDomainAxisLocation(AxisLocation location) 分類(lèi)軸的位置(參數(shù)常量在org.jfree.chart.axis.AxisLocation類(lèi)中定義)
          void setDomainGridlinesVisible(boolean visible) 分類(lèi)軸網(wǎng)格是否可見(jiàn)
          void setDomainGridlinePaint(Paint paint) 分類(lèi)軸網(wǎng)格線條顏色
          void setDomainGridlineStroke(Stroke stroke) 分類(lèi)軸網(wǎng)格線條筆觸
          void setRangeAxis(ValueAxis axis) 數(shù)據(jù)區(qū)的數(shù)據(jù)軸
          void setRangeAxisLocation(AxisLocation location) 數(shù)據(jù)軸的位置(參數(shù)常量在org.jfree.chart.axis.AxisLocation類(lèi)中定義)
          void setRangeGridlinesVisible(boolean visible) 數(shù)據(jù)軸網(wǎng)格是否可見(jiàn)
          void setRangeGridlinePaint(Paint paint) 數(shù)據(jù)軸網(wǎng)格線條顏色
          void setRangeGridlineStroke(Stroke stroke) 數(shù)據(jù)軸網(wǎng)格線條筆觸
          void setRenderer(CategoryItemRenderer renderer) 數(shù)據(jù)區(qū)的表示者(詳見(jiàn)Renderer組)
          void addAnnotation(CategoryAnnotation annotation) 給數(shù)據(jù)區(qū)加一個(gè)注釋
          void addRangeMarker(Marker marker,Layer layer) 給數(shù)據(jù)區(qū)加一個(gè)數(shù)值范圍區(qū)域

          PiePlot(Plot)類(lèi):
          void setDataset(PieDataset dataset) 數(shù)據(jù)區(qū)的1維數(shù)據(jù)表
          void setIgnoreNullValues(boolean flag) 忽略無(wú)值的分類(lèi)
          void setCircular(boolean flag) 餅圖是否一定是正圓
          void setStartAngle(double angle) 餅圖的初始角度
          void setDirection(Rotation direction) 餅圖的旋轉(zhuǎn)方向
          void setExplodePercent(int section,double percent) 抽取的那塊(1維數(shù)據(jù)表的分類(lèi)下標(biāo))以及抽取出來(lái)的距離(0.0~1.0),3D餅圖無(wú)效
          void setLabelBackgroundPaint(Paint paint) 分類(lèi)標(biāo)簽的底色
          void setLabelFont(Font font) 分類(lèi)標(biāo)簽的字體
          void setLabelPaint(Paint paint) 分類(lèi)標(biāo)簽的字體顏色
          void setLabelLinkMargin(double margin) 分類(lèi)標(biāo)簽與圖的連接線邊距
          void setLabelLinkPaint(Paint paint) 分類(lèi)標(biāo)簽與圖的連接線顏色
          void setLabelLinkStroke(Stroke stroke) 分類(lèi)標(biāo)簽與圖的連接線筆觸
          void setLabelOutlinePaint(Paint paint) 分類(lèi)標(biāo)簽邊框顏色
          void setLabelOutlineStroke(Paint paint) 分類(lèi)標(biāo)簽邊框筆觸
          void setLabelShadowPaint(Paint paint) 分類(lèi)標(biāo)簽陰影顏色
          void setMaximumLabelWidth(double width) 分類(lèi)標(biāo)簽的最大長(zhǎng)度(0.0~1.0)
          void setPieIndex(int index) 餅圖的索引(復(fù)合餅圖中用到)
          void setPieIndex(int index)    餅圖的索引(復(fù)合餅圖中用到)
          void setSectionOutlinePaint(int section,Paint paint) 指定分類(lèi)餅的邊框顏色
          void setSectionOutlineStroke(int section,Stroke stroke) 指定分類(lèi)餅的邊框筆觸
          void setSectionPaint(int section,Paint paint) 指定分類(lèi)餅的顏色
          void setShadowPaint(Paint paint)   餅圖的陰影顏色
          void setShadowXOffset(double offset)   餅圖的陰影相對(duì)圖的水平偏移
          void setShadowYOffset(double offset)   餅圖的陰影相對(duì)圖的垂直偏移
          void setLabelGenerator(PieSectionLabelGenerator generator) 分類(lèi)標(biāo)簽的格式,設(shè)置成null則整個(gè)標(biāo)簽包括連接線都不顯示
          void setToolTipGenerator(PieToolTipGenerator generator) MAP中鼠標(biāo)移上的顯示格式
          void setURLGenerator(PieURLGenerator generator)   MAP中鉆取鏈接格式

          PiePlot3D(PiePlot)類(lèi):
          void setDepthFactor(double factor)   3D餅圖的Z軸高度(0.0~1.0)

          MultiplePiePlot(Plot)類(lèi):
          void setLimit(double limit)    每個(gè)餅圖之間的數(shù)據(jù)關(guān)聯(lián)(詳細(xì)比較復(fù)雜)  
          void setPieChart(JFreeChart pieChart)   每個(gè)餅圖的顯示方式(見(jiàn)JFreeChart類(lèi)個(gè)PiePlot類(lèi))

          -----------------------------------------------------------------------------------------------------------


          AbstractRenderer類(lèi):
          void setItemLabelAnchorOffset(double offset)     數(shù)據(jù)標(biāo)簽的與數(shù)據(jù)點(diǎn)的偏移
          void setItemLabelsVisible(boolean visible)     數(shù)據(jù)標(biāo)簽是否可見(jiàn)
          void setItemLabelFont(Font font)      數(shù)據(jù)標(biāo)簽的字體
          void setItemLabelPaint(Paint paint)      數(shù)據(jù)標(biāo)簽的字體顏色
          void setItemLabelPosition(ItemLabelPosition position)    數(shù)據(jù)標(biāo)簽位置
          void setPositiveItemLabelPosition(ItemLabelPosition position)   正數(shù)標(biāo)簽位置
          void setNegativeItemLabelPosition(ItemLabelPosition position)   負(fù)數(shù)標(biāo)簽位置
          void setOutLinePaint(Paint paint)      圖形邊框的線條顏色
          void setOutLineStroke(Stroke stroke)      圖形邊框的線條筆觸
          void setPaint(Paint paint)       所有分類(lèi)圖形的顏色
          void setShape(Shape shape)       所有分類(lèi)圖形的形狀(如折線圖的點(diǎn))
          void setStroke(Stroke stroke)       所有分類(lèi)圖形的筆觸(如折線圖的線)
          void setSeriesItemLabelsVisible(int series,boolean visible)   指定分類(lèi)的數(shù)據(jù)標(biāo)簽是否可見(jiàn)
          void setSeriesItemLabelFont(int series,Font font)    指定分類(lèi)的數(shù)據(jù)標(biāo)簽的字體
          void setSeriesItemLabelPaint(int series,Paint paint)    指定分類(lèi)的數(shù)據(jù)標(biāo)簽的字體顏色
          void setSeriesItemLabelPosition(int series,ItemLabelPosition position) 數(shù)據(jù)標(biāo)簽位置
          void setSeriesPositiveItemLabelPosition(int series,ItemLabelPosition position) 正數(shù)標(biāo)簽位置
          void setSeriesNegativeItemLabelPosition(int series,ItemLabelPosition position) 負(fù)數(shù)標(biāo)簽位置
          void setSeriesOutLinePaint(int series,Paint paint)    指定分類(lèi)的圖形邊框的線條顏色
          void setSeriesOutLineStroke(int series,Stroke stroke)    指定分類(lèi)的圖形邊框的線條筆觸
          void setSeriesPaint(int series,Paint paint)     指定分類(lèi)圖形的顏色
          void setSeriesShape(int series,Shape shape)     指定分類(lèi)圖形的形狀(如折線圖的點(diǎn))
          void setSeriesStroke(int series,Stroke stroke)     指定分類(lèi)圖形的筆觸(如折線圖的線)

          AbstractCategoryItemRenderer(AbstractRenderer)類(lèi):
          void setLabelGenerator(CategoryLabelGenerator generator)   數(shù)據(jù)標(biāo)簽的格式
          void setToolTipGenerator(CategoryToolTipGenerator generator)   MAP中鼠標(biāo)移上的顯示格式
          void setItemURLGenerator(CategoryURLGenerator generator)   MAP中鉆取鏈接格式
          void setSeriesLabelGenerator(int series,CategoryLabelGenerator generator) 指定分類(lèi)的數(shù)據(jù)標(biāo)簽的格式
          void setSeriesToolTipGenerator(int series,CategoryToolTipGenerator generator) 指定分類(lèi)的MAP中鼠標(biāo)移上的顯示格式
          void setSeriesItemURLGenerator(int series,CategoryURLGenerator generator) 指定分類(lèi)的MAP中鉆取鏈接格式

          BarRenderer(AbstractCategoryItemRenderer)類(lèi):
          void setDrawBarOutline(boolean draw)      是否畫(huà)圖形邊框
          void setItemMargin(double percent)      每個(gè)BAR之間的間隔
          void setMaxBarWidth(double percent)      每個(gè)BAR的最大寬度
          void setMinimumBarLength(double min)      最短的BAR長(zhǎng)度,避免數(shù)值太小而顯示不出
          void setPositiveItemLabelPositionFallback(ItemLabelPosition position) 無(wú)法在BAR中顯示的正數(shù)標(biāo)簽位置
          void setNegativeItemLabelPositionFallback(ItemLabelPosition position) 無(wú)法在BAR中顯示的負(fù)數(shù)標(biāo)簽位置

          BarRenderer3D(BarRenderer)類(lèi):
          void setWallPaint(Paint paint)    3D坐標(biāo)軸的墻體顏色

          StackedBarRenderer(BarRenderer)類(lèi):
          沒(méi)有特殊的設(shè)置

          StackedBarRenderer3D(BarRenderer3D)類(lèi):
          沒(méi)有特殊的設(shè)置

          GroupedStackedBarRenderer(StackedBarRenderer)類(lèi):
          void setSeriesToGroupMap(KeyToGroupMap map) 將分類(lèi)自由的映射成若干個(gè)組(KeyToGroupMap.mapKeyToGroup(series,group))

          LayeredBarRenderer(BarRenderer)類(lèi):
          void setSeriesBarWidth(int series,double width) 設(shè)定每個(gè)分類(lèi)的寬度(注意設(shè)置不要使某分類(lèi)被覆蓋)

          WaterfallBarRenderer(BarRenderer)類(lèi):
          void setFirstBarPaint(Paint paint)   第一個(gè)柱圖的顏色
          void setLastBarPaint(Paint paint)   最后一個(gè)柱圖的顏色
          void setPositiveBarPaint(Paint paint)   正值柱圖的顏色
          void setNegativeBarPaint(Paint paint)   負(fù)值柱圖的顏色

          IntervalBarRenderer(BarRenderer)類(lèi):
          需要傳IntervalCategoryDataset作為數(shù)據(jù)源

          GanttBarRenderer(IntervalBarRenderer)類(lèi):
          void setCompletePaint(Paint paint)   完成進(jìn)度顏色
          void setIncompletePaint(Paint paint)   未完成進(jìn)度顏色
          void setStartPercent(double percent)   設(shè)置進(jìn)度條在整條中的起始位置(0.0~1.0)
          void setEndPercent(double percent)   設(shè)置進(jìn)度條在整條中的結(jié)束位置(0.0~1.0)

          StatisticBarRenderer(BarRenderer)類(lèi):
          需要傳StatisticCategoryDataset作為數(shù)據(jù)源

          LineAndShapeRenderer(AbstractCategoryItemRenderer)類(lèi):
          void setDrawLines(boolean draw)    是否折線的數(shù)據(jù)點(diǎn)之間用線連
          void setDrawShapes(boolean draw)   是否折線的數(shù)據(jù)點(diǎn)根據(jù)分類(lèi)使用不同的形狀
          void setShapesFilled(boolean filled)   所有分類(lèi)是否填充數(shù)據(jù)點(diǎn)圖形
          void setSeriesShapesFilled(int series,boolean filled) 指定分類(lèi)是否填充數(shù)據(jù)點(diǎn)圖形
          void setUseFillPaintForShapeOutline(boolean use) 指定是否填充數(shù)據(jù)點(diǎn)的Paint也被用于畫(huà)數(shù)據(jù)點(diǎn)形狀的邊框

          LevelRenderer(AbstractCategoryItemRenderer)類(lèi):
          void setItemMargin(double percent)   每個(gè)分類(lèi)之間的間隔
          void setMaxItemWidth(double percent)   每個(gè)分類(lèi)的最大寬度

          CategoryStepRenderer(AbstractCategoryItemRenderer)類(lèi):
          void setStagger(boolean shouldStagger)   不同分類(lèi)的圖是否交錯(cuò)

          MinMaxCategoryRenderer(AbstractCategoryItemRenderer)類(lèi):
          void setDrawLines(boolean drawLines)   是否在每個(gè)分類(lèi)線間畫(huà)連接線
          void setGroupPaint(Paint groupPaint)   一組圖形連接線的顏色
          void setGroupStroke(Stroke groupStroke)   一組圖形連接線的筆觸
          void setMaxIcon(Icon maxIcon)    最大值的ICON
          void setMinIcon(Icon minIcon)    最小值的ICON
          void setObjectIcon(Icon objectIcon)   所有值的ICON

          AreaRender(AbstractCategoryItemRenderer)類(lèi):
          沒(méi)有特殊的設(shè)置

          StackedAreaRender(AreaRender)類(lèi):
          沒(méi)有特殊的設(shè)置

          歷史上的今天
          回顧歷史的今天,歷史就像生活的一面鏡子;可以了解歷史的這一天發(fā)生的事件;借古可以鑒今;歷史是不能忘記的.要記住歷史的每一天
          http://www.todayx.org/
          posted @ 2012-02-07 13:46 todayx.org 閱讀(262) | 評(píng)論 (0)編輯 收藏
          主站蜘蛛池模板: 淮阳县| 汪清县| 石台县| 松潘县| 衢州市| 佛教| 广河县| 白城市| 石嘴山市| 南昌市| 嘉兴市| 新乡县| 永泰县| 寿宁县| 庐江县| 汝南县| 双流县| 金堂县| 来宾市| 宝山区| 扎鲁特旗| 女性| 惠水县| 建瓯市| 寿阳县| 内丘县| 镇安县| 招远市| 牟定县| 周宁县| 明星| 海安县| 兰坪| 福安市| 汝城县| 南溪县| 敦煌市| 阿合奇县| 临漳县| 永平县| 奈曼旗|