久久国产成人精品国产成人亚洲,亚洲综合亚洲综合网成人,久久精品亚洲福利http://www.tkk7.com/donghang73/category/45585.htmlzh-cnWed, 10 Aug 2011 15:40:10 GMTWed, 10 Aug 2011 15:40:10 GMT60為什么要對url進行encode http://www.tkk7.com/donghang73/archive/2011/08/10/356208.htmldonghang73donghang73Wed, 10 Aug 2011 05:16:00 GMThttp://www.tkk7.com/donghang73/archive/2011/08/10/356208.htmlhttp://www.tkk7.com/donghang73/comments/356208.htmlhttp://www.tkk7.com/donghang73/archive/2011/08/10/356208.html#Feedback0http://www.tkk7.com/donghang73/comments/commentRss/356208.htmlhttp://www.tkk7.com/donghang73/services/trackbacks/356208.html

發(fā)現(xiàn)現(xiàn)在幾乎所有的網(wǎng)站都對url中的漢字和特殊的字符,進行了urlencode操作,也就是:

http://hi.baidu.com/%BE%B2%D0%C4%C0%CF%C8%CB/creat/blog/

這個樣子,中間%形式的,肯定就是我的登錄用戶名稱了吧。

為什么對這些字符進行了u的編碼形式,是為了字符編碼(gbk、utf8)還是為了不出現(xiàn)特殊的字符在url中?都知道要轉(zhuǎn),但是轉(zhuǎn)了的真正好處呢。查看了網(wǎng)上的很多資料,也沒有找到更加準確的說法。

url轉(zhuǎn)義其實也只是為了符合url的規(guī)范而已。因為在標準的url規(guī)范中中文和很多的字符是不允許出現(xiàn)在url中的。

看一下php的urlencode的說明了。

urlencode — 編碼 URL 字符串

string urlencode ( string $str )

返回字符串,此字符串中除了 -_. 之外的所有非字母數(shù)字字符都將被替換成百分號(%)后跟兩位十六進制數(shù),空格則編碼為加號(+)。此編碼與 WWW 表單 POST 數(shù)據(jù)的編碼方式是一樣的,同時與 application/x-www-form-urlencoded 的媒體類型編碼方式一樣。由于歷史原因,此編碼在將空格編碼為加號(+)方面與 RFC1738 編碼(參見 rawurlencode())不同。此函數(shù)便于將字符串編碼并將其用于 URL 的請求部分,同時它還便于將變量傳遞給下一頁。

標準的英文說明是:

"...Only alphanumerics [0-9a-zA-Z], the special characters "$-_.+!*'()," [not including the quotes - ed], and reserved characters used for their reserved purposes may be used unencoded within a URL."

那哪些字符是需要轉(zhuǎn)化的呢?

1. ASCII 的控制字符

這些字符都是不可打印的,自然需要進行轉(zhuǎn)化。

2. 一些非ASCII字符

這些字符自然是非法的字符范圍。轉(zhuǎn)化也是理所當然的了。

3. 一些保留字符

很明顯最常見的就是“&”了,這個如果出現(xiàn)在url中了,那你認為是url中的一個字符呢,還是特殊的參數(shù)分割用的呢?

4. 就是一些不安全的字符了。

例如:空格。為了防止引起歧義,需要被轉(zhuǎn)化為“+”。

明白了這些,也就知道了為什么需要轉(zhuǎn)化了,而轉(zhuǎn)化的規(guī)則也是很簡單的。

按照每個字符對應(yīng)的字符編碼,不是符合我們范圍的,統(tǒng)統(tǒng)的轉(zhuǎn)化為%的形式也就是了。自然也是16進制的形式。

和字符編碼無關(guān)

通過urlencode的轉(zhuǎn)化規(guī)則和目的,我們也很容易的看出,urleocode是基于字符編碼的。同樣的一個漢字,不同的編碼類型,肯定對應(yīng)不同的urleocode的串。gbk編碼的有g(shù)bk的encode結(jié)果。

apache等服務(wù)器,接受到字符串后,可以進行decode,但是還是無法解決編碼的問題。編碼問題,還是需要靠約定或者字符編碼的判斷解決。

因此,urleocode只是為了url中一些非ascii字符,可以正確無誤的被傳輸,至于使用哪種編碼,就不是eocode所關(guān)心和解決的問題了。

編碼問題,不是urlencode所要解決的。
轉(zhuǎn)自:http://apps.hi.baidu.com/share/detail/32230450

參考資料:

http://www.blooberry.com/indexdot/html/topics/urlencoding.htm

http://cn.php.net/manual/zh/function.urlencode.php

 

 

 



donghang73 2011-08-10 13:16 發(fā)表評論
]]>
hibernate.hbm2ddl.auto參數(shù)http://www.tkk7.com/donghang73/archive/2011/04/17/348442.htmldonghang73donghang73Sun, 17 Apr 2011 08:53:00 GMThttp://www.tkk7.com/donghang73/archive/2011/04/17/348442.htmlhttp://www.tkk7.com/donghang73/comments/348442.htmlhttp://www.tkk7.com/donghang73/archive/2011/04/17/348442.html#Feedback0http://www.tkk7.com/donghang73/comments/commentRss/348442.htmlhttp://www.tkk7.com/donghang73/services/trackbacks/348442.html<property name="hibernate.hbm2ddl.auto" value="update" />

Hibernate Reference Documentation解釋如下:
hibernate.hbm2ddl.auto Automatically validate or export schema DDL to the database when the SessionFactory is created. With create-drop, the database schema will be dropped when the SessionFactory is closed explicitly.  eg. validate | update | create | create-drop

這個參數(shù)的作用主要用于:自動創(chuàng)建|更新|驗證數(shù)據(jù)庫表結(jié)構(gòu)。
如果沒有此方面的需求建議不設(shè)置此屬性,默認是不對數(shù)據(jù)庫結(jié)構(gòu)作任何改變

其它幾個參數(shù)的意思:
validate     
每次加載hibernate時,驗證創(chuàng)建數(shù)據(jù)庫表結(jié)構(gòu),只會和數(shù)據(jù)庫中的表進行比較,不會創(chuàng)建新表,但是會插入新值。

create
每次加載hibernate時都會刪除上一次的生成的表,然后根據(jù)你的model類再重新來生成新表,哪怕兩次沒有任何改變也要這樣執(zhí)行,這就是導致數(shù)據(jù)庫表數(shù)據(jù)丟失的一個重要原因。

create-drop
每次加載hibernate時根據(jù)model類生成表,但是sessionFactory一關(guān)閉,表就自動刪除。

update
最常用的屬性,第一次加載hibernate時根據(jù)model類會自動建立起表的結(jié)構(gòu)(前提是先建立好數(shù)據(jù)庫),以后加載hibernate時根據(jù) model類自動更新表結(jié)構(gòu),即使表結(jié)構(gòu)改變了但表中的行仍然存在不會刪除以前的行。要注意的是當部署到服務(wù)器后,表結(jié)構(gòu)是不會被馬上建立起來的,是要等 應(yīng)用第一次運行起來后才會。



donghang73 2011-04-17 16:53 發(fā)表評論
]]>
Java Web中路徑問題http://www.tkk7.com/donghang73/archive/2011/04/15/348370.htmldonghang73donghang73Fri, 15 Apr 2011 09:25:00 GMThttp://www.tkk7.com/donghang73/archive/2011/04/15/348370.htmlhttp://www.tkk7.com/donghang73/comments/348370.htmlhttp://www.tkk7.com/donghang73/archive/2011/04/15/348370.html#Feedback0http://www.tkk7.com/donghang73/comments/commentRss/348370.htmlhttp://www.tkk7.com/donghang73/services/trackbacks/348370.htmlJava中使用的路徑,分為兩種:絕對路徑和相對路徑。歸根結(jié)底,Java本質(zhì)上只能使用絕對路徑來尋找資源。所有的相對路徑尋找資源的方法,都不過是一些便利方法。不過是API在底層幫助我們構(gòu)建了絕對路徑,從而找到資源的!

在開發(fā)Web方面的應(yīng)用時, 經(jīng)常需要獲取 服務(wù)器中當前WebRoot的物理路徑。

如果是Servlet , Action , Controller, 或則Filter , Listener , 攔截器等相關(guān)類時, 我們只需要獲得ServletContext, 然后通過ServletContext.getRealPath("/")來獲取當前應(yīng)用在服務(wù)器上的物理地址。

如果在類中取不到ServletContext時, 有兩種方式可以做到:

1. 利用Java的類加載機制 調(diào)用 XXX.class.getClassLoader().getResource(""); 方法來獲取到ClassPath , 然后處理獲得WebRoot目錄,這種方式只能是該class在WebRoot/WEB-INF/classes下才能生效, 如果該class被打包到一個jar文件中, 則該方法失效。這時就應(yīng)該用下面一種方式。

2. spring框架的思路, 在WEB-INF/web.xml中 , 創(chuàng)建一個webAppRootKey的param, 指定一個值(默認為webapp.root)作為鍵值, 然后通過Listener , 或者Filter , 或者Servlet 執(zhí)行String webAppRootKey = getServletContext().getRealPath("/"); 并將webAppRootKey對應(yīng)的webapp.root 分別作為Key , Value寫到System Properties系統(tǒng)屬性中。之后在程序中通過System.getProperty("webapp.root")來獲得WebRoot的物理路 徑。

根據(jù)第二種的思路,我們還可以再擴展一下。不過對于在部署在一臺服務(wù)器中的應(yīng)用來說,若還不是你所需請再往下看。

下面是一些得到classpath和當前類的絕對路徑的一些方法。你可使用其中的一些方法來得到你需要的資源的絕對路徑:

1. DebitNoteAction.class.getResource("")

得到的是當前類FileTest.class文件的URI目錄。不包括自己!

如:file:/D:/eclipse/springTest/WebRoot/WEB-INF/classes/

atacarnet/src/com/evi/modules/atacarnet/action/

2. DebitNoteAction.class.getResource("/")

得到的是當前的classpath的絕對URI路徑。

如:file:/D:/eclipse/springTest/WebRoot/WEB-INF/classes/

3. Thread.currentThread().getContextClassLoader().getResource("")

得到的也是當前ClassPath的絕對URI路徑

如:file:/D:/eclipse/springTest/WebRoot/WEB-INF/classes/

4. DebitNoteAction.class.getClassLoader().getResource("") 或ClassLoader.getSystemResource("")

得到的也是當前ClassPath的絕對URI路徑。

如:file:/D:/eclipse/springTest/WebRoot/WEB-INF/classes/

5. 取得服務(wù)器相對路徑

System.getProperty("user.dir")

例如:E:\apache-tomcat-5.5.16\apache-tomcat-5.5.16\bin

我推薦使用Thread.currentThread().getContextClassLoader().getResource("")來得到當前的classpath的絕對路徑的URI表示法

6. 取得項目中的絕對路徑

一般用request.getRealPath("/")或request.getRealPath("/config/")

但現(xiàn)在不提倡使用request.getRealPath("/")了,大家可試用ServletContext.getRealPath("/")方法得到Web應(yīng)用程序的根目錄的絕對路徑

要取得src的文件非常容易,因為src是默認的相對目錄,比如你說要取得src下com目錄的test.java文件,你只需要這樣就夠了

File f = new File(com/test.java);

但如果我要取得不在src目錄或者WebRoot目錄下的文件呢,而是要從src或者WebRoot同級的目錄中取呢,比如說doc吧

我的硬方法是這樣實現(xiàn)的:

String path = this.getServletContext().getRealPath("/");

Properties p = new Properties();

p.load(new FileInputStream(new File(path.substring(0,(path.lastIndexOf("\\WebRoot ") + 1)) + "doc/db.properties")));

System.out.println(p.getProperty("driverName"));

轉(zhuǎn)自:http://blog.csdn.net/c5153000/archive/2011/03/23/6272195.aspx



donghang73 2011-04-15 17:25 發(fā)表評論
]]>
JFreeChart實例,帶詳細注釋http://www.tkk7.com/donghang73/archive/2010/07/25/jfreechart_bar.htmldonghang73donghang73Sun, 25 Jul 2010 14:44:00 GMThttp://www.tkk7.com/donghang73/archive/2010/07/25/jfreechart_bar.htmlhttp://www.tkk7.com/donghang73/comments/327102.htmlhttp://www.tkk7.com/donghang73/archive/2010/07/25/jfreechart_bar.html#Feedback1http://www.tkk7.com/donghang73/comments/commentRss/327102.htmlhttp://www.tkk7.com/donghang73/services/trackbacks/327102.html閱讀全文

donghang73 2010-07-25 22:44 發(fā)表評論
]]>
Apache 和Subversion集成安裝與配置[轉(zhuǎn)]http://www.tkk7.com/donghang73/archive/2010/07/25/327098.htmldonghang73donghang73Sun, 25 Jul 2010 14:17:00 GMThttp://www.tkk7.com/donghang73/archive/2010/07/25/327098.htmlhttp://www.tkk7.com/donghang73/comments/327098.htmlhttp://www.tkk7.com/donghang73/archive/2010/07/25/327098.html#Feedback0http://www.tkk7.com/donghang73/comments/commentRss/327098.htmlhttp://www.tkk7.com/donghang73/services/trackbacks/327098.html1,apache_2.0.63-win32-x86-no_ssl.msi
下載:http://apache.mirror.phpchina.com/httpd/binaries/win32/apache_2.0.63-win32-x86-no_ssl.msi
2,svn-1.4.5-setup.exe
下載地址:http://subversion.tigris.org/files/documents/15/39559/svn-1.4.5-setup.exe
當然,你也可以選擇安裝TortoiseSVN.但是我沒有裝,因為我的源碼管理都是用netbeans完成的.

好了,準備的兩個軟件都下載下來以后,就可以開始安裝了.
首先安裝apache,一般來說直接點下一步就可以了,在設(shè)置domain以及host的時候,設(shè)置為localhost就可以了,Email你可以填你自己的Email,也可以隨便填一個.安裝apache要注意的是,你的電腦上80端口不能被占用, 否則你的http服務(wù)是啟動不起來的,我就遇到過這事,因為我用了skype,它在本機上打開了80和443端口來監(jiān)聽,搞得我一開始裝不好,總是啟動不起來,后來才發(fā)現(xiàn)是skype占用了80端口,于是把skype的設(shè)置改了以后,重裝apache才成功.裝好apache以后,這個時候,它已經(jīng)在運行了,你可以在瀏覽器的地址欄輸入http://localhost看看,是否安裝成功,如果安裝成功的話,這個時候瀏覽器里面應(yīng)該是可以看到一個頁面的.
然后,再安裝svn-1.4.5-setup.exe,也很簡單,一步一步點下步就可以了, 在安裝的過程中,它會默認選中一些選項,其中就有一個是是否對apache的HTTP服務(wù)器提供支持的選項,這個默認是勾上的,不要去反選它,其它的你可以反選掉.然后svn就宣布安裝成功了.你可以到CMD下面去試一下svn這個命令,如果有輸出,則說明安裝成功了,如果提示svn 不是內(nèi)部或外部命令,也不是可運行的程序或批處理文件。那就說明沒有裝好.或者沒有把這個命令加入到path中,所以最好的辦法是到svn的安裝目錄下的 bin里面去看一下.
兩者都裝好了以后,就開始配置,當然,配置也是最重要的.
首先要建立一個數(shù)據(jù)倉庫,我們假設(shè)建在E盤,數(shù)據(jù)倉庫最好不要建在C盤,因為C盤重裝系統(tǒng)以后就格了.我們先在E盤下面建立一個目錄叫svnroot,然后在svnroot下面再建立一個我們專門放我們工程的目錄,比如叫MyProject.于是我們在E盤下面就有了這個一個文件夾:E:\svnroot\MyProject, 然后我們用svnadmin的命令,使這個文件夾變成我們的數(shù)據(jù)倉庫,命令如下:
svnadmin create E:\svnroot\MyProject
如果運行成功的話,什么也沒有輸出,這個時候,我們再來到MyProject文件夾下面,我們會發(fā)現(xiàn)多了幾個文件夾和文件,我們打開conf文件夾,然后再打開svnserve.conf文件,找到如下行# password-db = passwd,然后把它前面的#去掉,表示MyProject是需要密碼驗證的.但是我們密碼設(shè)在哪里呢,這個時候我們再打開conf文件夾下面的 passwd文件,用文本編輯器打開,在[users]下面加上我們需要啟動的人員的用戶和密碼,比如
[users]
hadeslee=hadeslee1234
tom=123456

這個的話,我們就啟動了兩個用戶,一個叫hadeslee,密碼是hadeslee1234,一個叫tom,密碼是123456.然后我們保存passwd文件.然后,我們再建一個文件,叫access.auth,這個文件是設(shè)置訪問權(quán)限的,里面內(nèi)容如下:
[MyProject:/]
hadeslee = rw
[MyProject:/module1]
tom=rw
hadeslee=rw

這表示,MyProject下面的所有子目錄hadeslee都是有權(quán)限讀寫的,但是tom只有權(quán)限讀寫此項目下面的module1目錄,這個各自的訪問權(quán)限就分的更細致了.有關(guān)于MyProject文件夾下面的設(shè)置,我們就告一段落了,我們現(xiàn)在開始設(shè)置apache,使它能和subvertion一起工作.

首先來到Subersion的安裝目錄,進入它的bin目錄,我們會發(fā)現(xiàn)如下兩個文件:
mod_authz_svn.so
mod_dav_svn.so

我們把這兩個文件復制一下,粘帖到 apache的安裝目錄下的modules文件中,然后我們再打開apache安裝目錄下的conf文件夾,打開httpd.conf文件.增加如下兩行:
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so

注意,由于dav_svn需要dav_module的支持,所以要確保下面這一行沒有被注釋,并且保證在dav_svn之前加載:
LoadModule dav_module modules/mod_dav.so
然后模塊的設(shè)置就完成了,下面我們要設(shè)置SVN的目錄,以使我們的apache能知道訪問不同的URL的時候,它去哪里尋找這個URL所對應(yīng)的SVN目錄.
httpd.conf文件中,增加如下內(nèi)容:
<Location /svn/MyProject>
DAV svn
SVNPath E:/svnroot/MyProject

AuthzSVNAccessFile E:/svnroot/MyProject/conf/access.auth
Satisfy Any
Require valid-user

AuthType Basic
AuthName "Subversion repositories"
AuthUserFile  E:/svnroot/MyProject/conf/users.auth
Require valid-user
</Location>


添加完上面這些,我們會發(fā)現(xiàn)access.auth是我們剛才新建的,可是users.auth我們并沒有新建啊.怎么就把它加進去了.不要急,現(xiàn)在我們就來生成users.auth文件.

進入 apache的安裝目錄的bin文件夾,輸入如下命令:

D:\Program Files\Apache Group\Apache2\bin>htpasswd -cb users.auth hadeslee hadeslee1234
Automatically using MD5 format.
Adding password for user hadeslee

D:\Program Files\Apache Group\Apache2\bin>

我們就會發(fā)現(xiàn)在bin目錄生成了users.auth,我們可以看到,hadeslee用戶名已經(jīng)被添加進去了,密碼是用MD5加密過的.然后我們還要增加用戶呢,可以用如下方法:
D:\Program Files\Apache Group\Apache2\bin>htpasswd -b users.auth tom 123456
Automatically using MD5 format.
Adding password for user tom

D:\Program Files\Apache Group\Apache2\bin>


只是在生成密碼的時候,小了一個c的參數(shù),因為c表示重新生成一個這樣的文件,我們第一次的時候是要加的,后面我們要添加用戶的時候,就不用這個c了.然后打開users.auth,會發(fā)現(xiàn)兩個用戶都已經(jīng)在里面了,這個時候,我們把users.auth移到E:/svnroot/MyProject/conf/里面去,使我們上面的設(shè)置生效.

這個時候,我們的設(shè)置就完成了.可以在瀏覽器里面輸入http://localhost/svn/MyProject試試看.

如果以后我們還要加入其它的項目呢,可以有兩點解決方式
1,把以后的項目也導入到我們的MyProject的倉庫中,這個的話,就不用改什么配置了
2,新建一個數(shù)據(jù)倉庫,然后只要按上面的步驟,把新的<Location...>設(shè)置放到 httpd.conf里面就可以了.
當然,驗證文件,訪問權(quán)限文件,還有訪問SVN的密碼都要自己按上面的方法再設(shè)一遍.

祝大家能夠設(shè)置成功:)

轉(zhuǎn)自:http://www.tkk7.com/hadeslee/archive/2008/03/12/185788.html

donghang73 2010-07-25 22:17 發(fā)表評論
]]>
Jad_反編譯Class文件http://www.tkk7.com/donghang73/archive/2010/07/22/326867.htmldonghang73donghang73Thu, 22 Jul 2010 14:05:00 GMThttp://www.tkk7.com/donghang73/archive/2010/07/22/326867.htmlhttp://www.tkk7.com/donghang73/comments/326867.htmlhttp://www.tkk7.com/donghang73/archive/2010/07/22/326867.html#Feedback0http://www.tkk7.com/donghang73/comments/commentRss/326867.htmlhttp://www.tkk7.com/donghang73/services/trackbacks/326867.html1、下載jadclipse插件
注意:jadclipse_3.1.0.jar版本,該版本支持eclipse3.1M6~3.2M2
      jadclipse_3.2.0.jar版本,該版本支持eclipse3.2M3和eclipse3.2M4.
      jadclipse_3.2.4.jar版本,該版本支持eclipse3.2M5~3.3M5
      jadclipse_3.3.0.jar版本,該版本支持eclipse3.3M6及以上

2、下載jad.exe,并將下載好的jad.exe拷貝到j(luò)re的bin的目錄下,或者把jad的執(zhí)行文件的絕對路徑加入到環(huán)境變量PATH中。

3、配置jadClipse,在在%ECLIPSE_HOME%\目錄下建立myplugins\jadclipse\eclipse\plugins的目錄結(jié)構(gòu),將jadclipse_3.3.0.jar(用于Eclipse3.5)放到plugins目錄下面,再在%ECLIPSE_HOME%\links目錄下面建立jadclipse.link的文件(名字可以隨便取),jadclipse.link的內(nèi)容為:path=..\\jadclipse(注意一定要雙反斜杠"\\")

4、重新啟動eclipse,查看 window->preferences->java->jadClipse,如果出現(xiàn)jadClipse則說明上述配置成功,否則檢查上述配置。

5、Path to decomplier:指定反編譯工具的jad文件所在的位置。(可以指定為jre的bin的目錄下的jad.exe)

6、把*.class文件的associated editors設(shè)置為jadClipse Class File Viewer做為默認項


另:批量反編譯
在cmd中,進入到class文件所在路徑下,輸入命令:jad -o -r -s java -d src *.class
       參數(shù)的含義:
       -o:覆蓋舊文件,而且不用提示確認。
       -r:重新加載生成包結(jié)構(gòu)。
       -s:定義輸出文件的擴展名。jad為默認擴展名,我們反編譯后當然是要.java源文件了。
       -d:輸出文件的目錄。src表示反編譯后的所有文件都放在src目錄下。
       *.class:指定解析該文件夾下的所有以.class結(jié)尾的文件,即解析class文件


donghang73 2010-07-22 22:05 發(fā)表評論
]]>
myeclipse中UTF-8設(shè)置http://www.tkk7.com/donghang73/archive/2010/07/20/326677.htmldonghang73donghang73Tue, 20 Jul 2010 14:03:00 GMThttp://www.tkk7.com/donghang73/archive/2010/07/20/326677.htmlhttp://www.tkk7.com/donghang73/comments/326677.htmlhttp://www.tkk7.com/donghang73/archive/2010/07/20/326677.html#Feedback0http://www.tkk7.com/donghang73/comments/commentRss/326677.htmlhttp://www.tkk7.com/donghang73/services/trackbacks/326677.html

myeclipseUTF-8設(shè)置

   如果要使插件開發(fā)應(yīng)用能有更好的國際化支持,能夠最大程度的支持中文輸出,則最好使 Java文件使用UTF-8編碼。然而,Eclipse工作空間(workspace)的缺省字符編碼是操作系統(tǒng)缺省的編碼,簡體中文操作系統(tǒng) (Windows XPWindows 2000簡體中文)的缺省編碼是GB18030,在此工作空間中建立的工程編碼是GB18030,工程中建立的java文件也是GB18030。如果要使 新建立工程、java文件直接使UTF-8則需要做以下工作:

 

1windows->Preferences...打開"首選項"對話框,左側(cè)導航樹,導航到general->Workspace,右 側(cè)Text file encoding,選擇Other,改變?yōu)?/span>UTF-8,以后新建立工程其屬性對話框中的Text file encoding即為UTF-8


2windows->Preferences...打開"首選項"對話框,左側(cè)導航樹,導航到general->Content Types,右側(cè)Context Types樹,點開Text,選擇Java Source File,在下面的Default encoding輸入框中輸入UTF-8,點Update,則設(shè)置Java文件編碼為UTF-8。其他java應(yīng)用開發(fā)相關(guān)的文件 如:propertiesXML等已經(jīng)由Eclipse缺省指定,分別為ISO8859-1UTF-8,如開發(fā)中確需改變編碼格式則可以在此指定。


3經(jīng)過上述兩步,新建java文件即為UTF-8編碼,Eclipse編譯、運行、調(diào)試都沒問題,但是做RCP應(yīng)用的Product輸出時、或者插件 輸出時,則總是出錯,要么不能編譯通過(輸出時要重新compile)、要么輸出的插件運行時中文顯示亂碼。此時需要再RCP應(yīng)用、或插件Plugin 程的build.properties中增加一行,javacDefaultEncoding.. = UTF-8。讓輸出時編譯知道java源文件時UTF-8編碼。這個設(shè)置需要保證所有的java源文件時UTF-8編碼格式,如果不全是,可以參考 Eclipse幫中(Plug-in Development Environment Guide > Reference > Feature and Plug-in Build configuration),建議全部java源文件是UTF-8編碼。

   如果插件開發(fā)、RCP應(yīng)用開發(fā)原來基于其他編碼,如GB18030,想轉(zhuǎn)換為UTF-8,則首先,做以上工作;然后通過查找編碼轉(zhuǎn)換工具,如基于 iconv的批量轉(zhuǎn)換工具,將原編碼轉(zhuǎn)換為UTF-8編碼,注意只轉(zhuǎn)換java源文件,其他類型文件可能已經(jīng)是比較合適的編碼了;將原工程屬性中的 Text file encoding,從原編碼改為UTF-8即可。



donghang73 2010-07-20 22:03 發(fā)表評論
]]>
[轉(zhuǎn)]JFreeChart樣式設(shè)置指南http://www.tkk7.com/donghang73/archive/2010/07/20/326669.htmldonghang73donghang73Tue, 20 Jul 2010 12:35:00 GMThttp://www.tkk7.com/donghang73/archive/2010/07/20/326669.htmlhttp://www.tkk7.com/donghang73/comments/326669.htmlhttp://www.tkk7.com/donghang73/archive/2010/07/20/326669.html#Feedback0http://www.tkk7.com/donghang73/comments/commentRss/326669.htmlhttp://www.tkk7.com/donghang73/services/trackbacks/326669.htmlJFreeChart類:
void setAntiAlias(boolean flag)    字體模糊邊界
void setBackgroundImage(Image image)   背景圖片
void setBackgroundImageAlignment(int alignment) 背景圖片對齊方式(參數(shù)常量在org.jfree.ui.Align類中定義)
void setBackgroundImageAlpha(float alpha) 背景圖片透明度(0.0~1.0)
void setBackgroundPaint(Paint paint)   背景色
void setBorderPaint(Paint paint)   邊界線條顏色
void setBorderStroke(Stroke stroke)   邊界線條筆觸
void setBorderVisible(boolean visible)   邊界線條是否可見

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

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

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

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

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

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

ValueAxis(Axis)類:
void setAutoRange(boolean auto)    自動設(shè)置數(shù)據(jù)軸數(shù)據(jù)范圍
void setAutoRangeMinimumSize(double size) 自動設(shè)置數(shù)據(jù)軸數(shù)據(jù)范圍時數(shù)據(jù)范圍的最小跨度
void setAutoTickUnitSelection(boolean flag) 數(shù)據(jù)軸的數(shù)據(jù)標簽是否自動確定(默認為true)
void setFixedAutoRange(double length)   數(shù)據(jù)軸固定數(shù)據(jù)范圍(設(shè)置100的話就是顯示MAXVALUE到MAXVALUE-100那段數(shù)據(jù)范圍)
void setInverted(boolean flag)    數(shù)據(jù)軸是否反向(默認為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軸無效)
void setNegativeArrowVisible(boolean visible) 是否顯示反向箭頭(3D軸無效)
void setVerticalTickLabels(boolean flag) 數(shù)據(jù)軸數(shù)據(jù)標簽是否旋轉(zhuǎn)到垂直
void setStandardTickUnits(TickUnitSource source) 數(shù)據(jù)軸的數(shù)據(jù)標簽(可以只顯示整數(shù)標簽,需要將AutoTickUnitSelection設(shè)false)

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

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

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

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

Plot類:
void setBackgroundImage(Image image)   數(shù)據(jù)區(qū)的背景圖片
void setBackgroundImageAlignment(int alignment) 數(shù)據(jù)區(qū)的背景圖片對齊方式(參數(shù)常量在org.jfree.ui.Align類中定義)
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ū)占整個圖表區(qū)的百分比
void setOutLinePaint(Paint paint)   數(shù)據(jù)區(qū)的邊界線條顏色
void setOutLineStroke(Stroke stroke)   數(shù)據(jù)區(qū)的邊界線條筆觸
void setNoDataMessage(String message)   沒有數(shù)據(jù)時顯示的消息
void setNoDataMessageFont(Font font)   沒有數(shù)據(jù)時顯示的消息字體
void setNoDataMessagePaint(Paint paint)   沒有數(shù)據(jù)時顯示的消息顏色

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

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

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

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

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

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

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

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

BarRenderer3D(BarRenderer)類:
void setWallPaint(Paint paint)    3D坐標軸的墻體顏色

StackedBarRenderer(BarRenderer)類:
沒有特殊的設(shè)置

StackedBarRenderer3D(BarRenderer3D)類:
沒有特殊的設(shè)置

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

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

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

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

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

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

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

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

CategoryStepRenderer(AbstractCategoryItemRenderer)類:
void setStagger(boolean shouldStagger)   不同分類的圖是否交錯

MinMaxCategoryRenderer(AbstractCategoryItemRenderer)類:
void setDrawLines(boolean drawLines)   是否在每個分類線間畫連接線
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)類:
沒有特殊的設(shè)置

StackedAreaRender(AreaRender)類:
沒有特殊的設(shè)置



donghang73 2010-07-20 20:35 發(fā)表評論
]]>
JFreeChart中對常見圖形的處理http://www.tkk7.com/donghang73/archive/2010/07/20/326668.htmldonghang73donghang73Tue, 20 Jul 2010 12:33:00 GMThttp://www.tkk7.com/donghang73/archive/2010/07/20/326668.htmlhttp://www.tkk7.com/donghang73/comments/326668.htmlhttp://www.tkk7.com/donghang73/archive/2010/07/20/326668.html#Feedback0http://www.tkk7.com/donghang73/comments/commentRss/326668.htmlhttp://www.tkk7.com/donghang73/services/trackbacks/326668.html       JFreeChart并不存在多個不同的類來生成不同的圖形。所有的圖形都是具體類JFreeChart的實例化對象,初始化JFreeChart對象的時候通過指定不同的Plot實現(xiàn)類就可以顯示出不同的圖形。不同的Plot實現(xiàn)類具有不同的Renderer對象、Axis對象、Dataset對象。

       JFreeChart提供工廠類ChartFactory方便使用者生成各種不同的圖形。ChartFactory類的各個工廠方法中實現(xiàn)對具體Plot的指定以及對類JFreeChart構(gòu)造函數(shù)的調(diào)用。

    下面以常用圖形說一下常用的使用流程(大部分的操作講的并不全面,比如JFreeChart可能提供了很多增加、修改數(shù)據(jù)的方式,下文中可能只列舉一種)。

1柱狀圖

1)平面柱狀圖

    生成柱狀圖操作:

JFreeChartchart=ChartFactory.createBarChart(String title,//圖標題

String categoryAxisLabel,//x軸標題

String valueAxisLabel,//y軸標題

CategoryDataset dataset,//數(shù)據(jù)源

PlotOrientation orientation,//顯示方向

Boolean legend,//是否顯示圖例

Boolean tooltips,//是否顯示tooltip

Boolean urls)//是否指定url

平面柱狀圖的Plot對象是CategoryPlot類型。CategoryPlot對象的x軸是CategoryAxis對象,y軸是NumberAxis對象,繪制單元是BarRenderer對象,數(shù)據(jù)源是CategoryDataset對象。

獲取CategoryPlot對象操作為:

CategoryPlot plot = (CategoryPlot)chart.getPlot();或者

CategoryPlot plot = chart.getCategoryPlot();

獲取繪制單元操作:

       BarRenderer renderer = (BarRenderer)plot.getRenderer();

獲取x軸的操作:

CategoryAxis xAxis = (CategoryAxis)plot.getDomainAxis();

獲取y軸操作:

NumberAxis yAxis = (NumberAxis)plot.getRangeAxis();

獲取數(shù)據(jù)源:

CategoryDataset dataset = plot.getDataset();

    柱狀圖可以接受一切CategoryDataset類型的數(shù)據(jù)源,下面講解一下常用的CategoryDataset類型DefaultCategoryDataset的使用方式

實例化:

DefaultCategoryDataset dataset = new DefaultCategoryDataset();

增加數(shù)據(jù)

dataset.addValue(doublevalue,ComparablerowKey,ComparablecolumnKey);

刪除數(shù)據(jù):

       dataset.removeValue(ComparablerowKey,ComparablecolumnKey);

    或者

       dataset.removeColumn(intcolumnIndex);

    或者

       dataset.removeColumn(ComparablecolumnKey);

    對行同樣有上述兩種刪除方式,不在列舉。

修改數(shù)據(jù):

       dataset.setValue(doublevalue,ComparablerowKey,ComparablecolumnKey);

查詢數(shù)據(jù):

plot對象、繪制單元、x軸、y軸的顯示特性修改不再一一介紹。

23D柱狀圖

    對應(yīng)的工廠方法為createBarChart3D,該方法的參數(shù)與平面柱狀圖相同。3D柱狀圖的Plot對象是CategoryPlot類型。CategoryPlot對象的x軸是CategoryAxis3D對象,y軸是NumberAxis3D對象,繪制單元是BarRenderer3D對象,數(shù)據(jù)源是CategoryDataset對象。

    具體使用以及操作與平面柱狀圖雷同,不在詳述。

2餅狀圖

(1)平面餅狀圖

生成平面餅狀圖:

JFreeChartchart=ChartFactory.createPieChart(String title,//圖標題

PieDataset dataset,//數(shù)據(jù)源

Boolean legend,//是否顯示圖例

Boolean tooltips,//是否顯示tooltip

Boolean urls)//是否指定url

平面餅狀圖的Plot對象是PiePlot類型。PiePlot對象沒有x軸對象、y軸對象、繪制單元對象,數(shù)據(jù)源是PieDataset對象。

獲取PiePlot對象操作為:

PiePlot plot = (PiePlot)chart.getPlot();

獲取數(shù)據(jù)源:

PieDataset dataset = plot.getDataset();

餅狀圖可以接受一切PieDataset類型的數(shù)據(jù)源,下面講解一下常用的PieDataset類型DefaultPieDataset的使用方式

實例化:

    DefaultPieDatasetdataset=newDefaultPieDataset();

增加修改操作:

    dataset.setValue(Comparablekey,doublevalue);

刪除操作:

    dataset.remove(Comparablekey);

查詢操作:

    dataset.getKey(intitem);

或者

dataset.getValue(intitem);

(1)3D餅狀圖

    對應(yīng)的工廠方法為createPieChart3D,參數(shù)與平面餅狀圖相同。與平面餅狀圖的差別在于Plot對象是PiePlot3D類型,不再詳述。

3多重餅狀圖

1)多重平面餅狀圖

生成多重平面餅狀圖:

JFreeChartchart=ChartFactory.createMultiplePieChart (String title,//圖標題

CategoryDataset dataset,//數(shù)據(jù)源

TableOrder order,//指定提取數(shù)據(jù)的方式(按行或者按列)

Boolean legend,//是否顯示圖例

boolean tooltips,//是否顯示tooltip

boolean urls)   //是否指定url

多重平面餅狀圖的Plot對象是MultiplePiePlot類型。MultiplePiePlot對象沒有x軸對象、y軸對象、繪制單元對象,數(shù)據(jù)源是CategoryDataset對象。MultiplePiePlot對象中可以含有多個子JFreeChart對象,子JFreeChart對象是上面講過的餅狀圖對象。

獲取MultiplePiePlot對象操作為:

MultiplePiePlot plotMain = (MultiplePiePlot)chart.getPlot();

獲取子JFreeChart的操作為:

       JfreeChart childChart = plotMain.getPieChart();

獲取數(shù)據(jù)源:

CategoryDataset dataset = plotMain.getDataset();

2)多重3D餅狀圖

    對應(yīng)的工廠方法為createMultiplePieChart3D,該方法的參數(shù)與多重平面餅狀圖相同。多重3D餅狀圖的Plot對象是MultiplePiePlot類型。MultiplePiePlot對象中可以含有多個子JFreeChart對象,子JFreeChart對象是上面講過的3D餅狀圖對象。

4線圖

1)平面線圖

    生成平面線圖:

JFreeChartchart=ChartFactory.createLineChart(String title,//圖標題

String categoryAxisLabel,//x軸標題

String valueAxisLabel,//y軸標題

CategoryDataset dataset,//數(shù)據(jù)源

PlotOrientation orientation,//顯示方向

Boolean legend,//是否顯示圖例

Boolean tooltips,//是否顯示tooltip

Boolean urls);//是否指定url

平面線圖除了的Plot對象中繪制單元對象是LineAndShapeRenderer對象,其他一切組成對象與平面柱狀圖相同。

獲取Renderer操作:

LineAndShapeRenderer renderer = (LineAndShapeRenderer)plot.getRenderer();

其他參考平面柱狀圖。

23D線圖

對應(yīng)工廠方法為createLineChart3D,參數(shù)與createLineChart相同。3D線圖的組成對象除了繪制單元對象是LineAndShapeRenderer3D對象,其他一切組成對象與3D柱狀圖相同。

5時序圖

生成時序圖:

JfreeChartchart = ChartFactory.createTimeSeriesChart(String title,//圖標題

String timeAxisLabel,//x軸標題

String valueAxisLabel,//y軸標題

XYDataset dataset,//數(shù)據(jù)源

Boolean legend,//是否顯示圖例

Boolean tooltips,//是否顯示tooltip

Boolean urls);//是否指定url

時序圖的Plot對象是XYPlot類型。XYPlot對象的x軸是DateAxis對象,y軸是NumberAxis對象,繪制單元是XYLineAndShapeRenderer對象,數(shù)據(jù)源是XYDataset對象。

Plot對象的獲取操作:

       XYPlot plot = (XYPlot)chart.getPlot();

X軸對象的獲取操作:

       DateAxis xAxis = (DateAxis)plot.getDomainAxis();

Y軸對象的獲取操作:

       NumberAxis yAxis = (NumberAxis)plot.getRangeAxis();

Renderer對象的獲取操作:

       XYItemRenderer renderer = plot.getRenderer();

時序圖可以接受一切XYDataset類型的數(shù)據(jù)源,下面講解一下常用的XYDataset類型TimeSeriesCollection的使用方式。

實例化:

       TimeSeriesCollection dataset = newTimeSeriesCollection();

添加數(shù)據(jù)操作:

       dataset.addSeries(TimeSeries);//后面講解TimeSeries對象

刪除數(shù)據(jù)操作:

       dataset.removeSeries(intindex);

查詢數(shù)據(jù)操作:

       dataset.getSeries(intseries);

TimeSeries對象操作

實例化:

       TimeSeries ts = TimeSeries(Stringname,ClasstimePeriodClass);

增加數(shù)據(jù)操作:

       ts.add(RegularTimePeriod period,double value);

刪除數(shù)據(jù)操作:

       ts.delete(RegularTimePeriod period);

修改數(shù)據(jù)操作:

       ts.update(RegularTimePeriod period,Number value);

查詢數(shù)據(jù)操作:

    ts.getValue(RegularTimePeriodperiod);

RegularTimePeriodJFreeChart提供的時間模板類,它有很多具體的時間類,比如:MinuteSecondHourDay……等,不再詳述。



donghang73 2010-07-20 20:33 發(fā)表評論
]]>
[轉(zhuǎn)]JFreeChart詳解http://www.tkk7.com/donghang73/archive/2010/07/20/326667.htmldonghang73donghang73Tue, 20 Jul 2010 12:29:00 GMThttp://www.tkk7.com/donghang73/archive/2010/07/20/326667.htmlhttp://www.tkk7.com/donghang73/comments/326667.htmlhttp://www.tkk7.com/donghang73/archive/2010/07/20/326667.html#Feedback0http://www.tkk7.com/donghang73/comments/commentRss/326667.htmlhttp://www.tkk7.com/donghang73/services/trackbacks/326667.html 

1簡介

JFreeChartSourceForge.net上的一個開源項目,它的源碼和API都可以免費獲得。JFreeChart的功能非常強大,可以實現(xiàn)餅圖(二維和三維),柱狀圖(水平,垂直),線圖,點圖,時序圖,甘特圖,股票行情圖,混和圖,溫度計圖,刻度圖等常用商用圖表,圖形可以導出成PNGJPEG格式,同時還可以與PDFEXCEL關(guān)聯(lián),支持對圖形的放大、縮小,支持常見圖形的3D顯示。

2圖形對象的處理

2.1 JFreeChart對象

JFreeChart可以生成很多圖形對象,它的工廠類提供了33個工廠方法用于生成不同的圖形對象(具體的工廠方法可以參見JFreeChartAPI手冊或者源碼中的ChartFactory)。JFreechart對圖形對象的抽象具體化。圖形對象(JFreeChart),由Title(主標題)SubTitle(子標題)Plot(圖形的繪制結(jié)構(gòu))等幾個主要對象組成。各個組成部分如下圖所示:
   
    
這是一個JFreeChart對象,上面的“chart標題”是Title對象,中間區(qū)域是Plot對象(包括繪圖區(qū)域和坐標軸區(qū)域),下面的區(qū)域是LegendTitle對象,LegendTitle是一種SubTitle對象。

每個JFreeChart對象只能有1Title對象,1Plot對象,可以有多個SubTitle對象。JFreeChart對象可以進行的操作有:背景的設(shè)置(背景顏色、背景圖片、透明度等)、邊框的設(shè)置(是否可見、筆畫、Paint等)、渲染方式的設(shè)置、標題對象的設(shè)置、子標題對象的增刪查操作。(本文中的所有操作都不提供代碼級的介紹,可參見API手冊或者源碼)

2.2 主標題對象

主標題對象是TextTitle類型,可以進行的操作有:背景設(shè)置、字體設(shè)置(字體類型、顏色、內(nèi)容、對齊方式等操作)、tooltip設(shè)置、URL設(shè)置。

2.3 Plot對象

Plot對象是圖形的繪制結(jié)構(gòu)對象。JFreeChart中含有很多不同的Plot對象,每一種圖形對象中的Plot對象都在實例化的時候創(chuàng)建。所有的Plot共有的操作有:背景設(shè)置(背景顏色、背景圖片、透明度等)、前景透明度設(shè)置、無數(shù)據(jù)存在情況的設(shè)置(顯示的字符內(nèi)容、顯示的字體、顯示的Paint)、放大縮小比例的設(shè)置,大部分Plot對象還有設(shè)置Datset、設(shè)置Renderer對象操作。

JFreeChart中有18Plot抽象類的具體實現(xiàn)類。Plot的具體實現(xiàn)類主要由以下重要對象組成:Renderer對象(圖形的繪制單元——繪圖域),Datset(圖形的數(shù)據(jù)源),DomainAxis(區(qū)域軸,相當于x軸),RangeAxis(范圍軸,相當于y軸)。

不同的Plot對象組成方式不盡相同,有的不含有Renderer對象,比如CompassPlotContourPlotMultiplePiePlotPiePlot等,有的不含有DomainAxisRangeAxis對象,另外除了FastScatterPlot類都含有Datset對象,FastScatterPlot使用float的二維數(shù)組充當數(shù)據(jù)源。尤其說明一點,餅狀圖相關(guān)的Plot對象(MultiplePiePlotPiePlotPiePlot3DRingPlot)中都不含有Renderer對象、DomainAxis對象、RangeAxis對象。

一般來說,Datset對象存儲數(shù)據(jù)模型,Renderer對象存儲顯示模型,Plot對象根據(jù)Datset對象、Renderer對象完成畫圖操作。


    仍以上面的圖形講解
Plot對象的組成。
上圖的中間區(qū)域是是一個XYPlot對象。其中的折線部分即是圖形的繪制單元Renderer對象。X軸是DomainAxisy軸是RangeAxis,其中Datset對象屬于數(shù)據(jù)模型范疇,是UI不可見對象。該圖中的plot背景色、網(wǎng)格線的各種設(shè)置可以通過XYPlot對象本身完成。

    下面講解Renderer對象、Axis對象(X軸、y軸都屬于Axis對象),Datset對象在后續(xù)章節(jié)中專門講解。

2.3.1 Renderer對象

Renderer對象是圖形的繪制單元。JFreeChart提供了兩個接口CategoryItemRendererXYItemRenderer、以及1個抽象類AbstractRenderer供具體的Renderer類實現(xiàn),給出了將近50種具體實現(xiàn)類。

一般來說Renderer對象可進行的操作有:對itemlabel(下圖中的柱狀圖上的紅色數(shù)字即為itemlabel的示例)的默認設(shè)置(itemlabel的產(chǎn)生方式、是否可見、字體、Paint、正反向itemlabel的位置設(shè)置等)、繪制圖形的邊框默認設(shè)置(Paint、筆畫、是否可見等)、繪制圖形的默認設(shè)置(形狀、筆畫、是否可見、對應(yīng)的圖例中是否可見等,折線圖還有線條是否可見、折點圖形是否可見、折點圖形是否填充、折點圖形的形狀、對應(yīng)的圖例中線條是否可見、圖形是否可見、整體是否可見等)、以及對指定itemlabel的設(shè)置、指定繪制圖形的設(shè)置。可以說和具體繪制的圖形相關(guān)的屬性都可以通過Renderer對象設(shè)置。

不同的Renderer的實現(xiàn)類實現(xiàn)了不同的顯示方式,在含有Renderer對象的JFreeChart對象中,Renderer對象決定了JFreeChart對象的顯示方式。例如:柱狀圖的Plot對象中默認的Renderer對象是CategoryItemRenderer對象,通過設(shè)置Plot對象的Renderer對象LineAndShapeRenderer,則柱狀圖變?yōu)榫€圖。使用中一般不需要顯式的實例化一個Renderer對象,一般通過JFreeChart對象的Plot對象調(diào)用現(xiàn)有的Renderer對象進行重新設(shè)置等操作。

2.3.2 Axis對象

JFreeChart提供了兩種類型的坐標軸:CategoryAxis(等級軸)和ValueAxis(值軸),ValueAxis又有3個子類:DateAxis(時間軸)、NumberAxis(數(shù)字軸)、PeriodAxis(時期軸)。這些坐標軸還有更詳細的子類,不再一一列舉

Axis對象可進行的操作有:標題的設(shè)置(內(nèi)容、字體、Paint、顯示角度等)、坐標線的設(shè)置(筆畫、Paint、是否可見等)、刻度線的設(shè)置(是否可見、筆畫、Paint、位于繪圖區(qū)域的長度、位于繪圖區(qū)域外的長度等)、刻度標示的設(shè)置(筆畫、Paint、字體、與軸的距離等)、坐標軸范圍設(shè)置等。

CategoryAxis對象還可以進行的操作有:刻度標示間距設(shè)置(最小間距、最大間距、指定間距)等。

ValueAxis對象可進行的操作有:軸端設(shè)置(顯示的圖形形狀)、范圍設(shè)置(是否自動產(chǎn)生范圍、自動產(chǎn)生的最小范圍、最大范圍、指定確定范圍、指定范圍大小等)、間隔設(shè)置(是否自動產(chǎn)生間隔、指定間隔)等。

DateAxis對象還有對時間刻度顯示格式的設(shè)置操作。

2.4 子標題對象

    子標題對象是Title類型的對象,一個JFreeChart可以有多個子標題對象。JFreeChart提供了5種Title的實現(xiàn),可以是圖片、文本、圖例等的形式。

2.5數(shù)據(jù)源處理

JFreeChart中的數(shù)據(jù)源是DataSet接口類型。該接口有三個主要的子類接口:CategoryDataset、PieDataset、SeriesDataset

CategoryDataset接口的實現(xiàn)類基本上都維護了一個三元組<value,row,col>的列表結(jié)構(gòu)。不同的實現(xiàn)類中value的類型不相同。<row,col>唯一確定一個三元組。CategoryDataset的實現(xiàn)類提供對這個三元組的增刪改查操作。

PieDataset接口有兩個主要的實現(xiàn)類:CategoryToPieDataset、DefaultPieDataset。

SeriesDataset接口的實現(xiàn)類基本上都維護了一種特定數(shù)據(jù)結(jié)構(gòu)的列表。以TimeSeriesCollection為例。它維護一個TimeSeries對象列表,提供對該列表的增刪查操作。每個TimeSeries對象維護一個<time,value>列表,提供對該列表的增刪改查操作。



donghang73 2010-07-20 20:29 發(fā)表評論
]]>
SimpleDateFormat的用法http://www.tkk7.com/donghang73/archive/2010/07/13/326017.htmldonghang73donghang73Tue, 13 Jul 2010 13:39:00 GMThttp://www.tkk7.com/donghang73/archive/2010/07/13/326017.htmlhttp://www.tkk7.com/donghang73/comments/326017.htmlhttp://www.tkk7.com/donghang73/archive/2010/07/13/326017.html#Feedback0http://www.tkk7.com/donghang73/comments/commentRss/326017.htmlhttp://www.tkk7.com/donghang73/services/trackbacks/326017.htmlpublic class SimpleDateFormat extends DateFormat
SimpleDateFormat 是一個以國別敏感的方式格式化和分析數(shù)據(jù)的具體類。 它允許格式化 (date -> text)、語法分析 (text -> date)和標準化。

SimpleDateFormat 允許以為日期-時間格式化選擇任何用戶指定的方式啟動。 但是,希望用 DateFormat 中的 getTimeInstance、 getDateInstance 或 getDateTimeInstance 創(chuàng)建一個日期-時間格式化程序。 每個類方法返回一個以缺省格式化方式初始化的日期/時間格式化程序。 可以根據(jù)需要用 applyPattern 方法修改格式化方式。

SimpleDateFormat函數(shù)的繼承關(guān)系:
java.lang.Object
   |
   +----java.text.Format
           |
           +----java.text.DateFormat
                   |
                   +----java.text.SimpleDateFormat
字母 日期或時間元素 表示 示例
G Era 標志符 Text AD
y Year 1996; 96
M 年中的月份 Month July; Jul; 07
w 年中的周數(shù) Number 27
W 月份中的周數(shù) Number 2
D 年中的天數(shù) Number 189
d 月份中的天數(shù) Number 10
F 月份中的星期 Number 2
E 星期中的天數(shù) Text Tuesday; Tue
a Am/pm 標記 Text PM
H 一天中的小時數(shù)(0-23) Number 0
k 一天中的小時數(shù)(1-24) Number 24
K am/pm 中的小時數(shù)(0-11) Number 0
h am/pm 中的小時數(shù)(1-12) Number 12
m 小時中的分鐘數(shù) Number 30
s 分鐘中的秒數(shù) Number 55
S 毫秒數(shù) Number 978
z 時區(qū) General time zone Pacific Standard Time; PST; GMT-08:00
Z 時區(qū) RFC 822 time zone -0800

一個小例子,幫助更好的理解SimpleDataFormat

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class TestSimpleDataFormat {
    
public static void main(String[] args) 
        SimpleDateFormat myFmt 
= new SimpleDateFormat("yyyy年MM月dd日 HH時mm分ss秒"); 
        SimpleDateFormat myFmt1 
= new SimpleDateFormat("yy/MM/dd HH:mm"); 
        SimpleDateFormat myFmt2 
= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//等價于now.toLocaleString() [depreciated]
        SimpleDateFormat myFmt3 = new SimpleDateFormat("yyyy年MM月dd日 HH時mm分ss秒 E "); 
        SimpleDateFormat myFmt4 
= new SimpleDateFormat("一年中的第 D 天|一年中第w個星期 |一月中第W個星期|在一天中k時 z時區(qū)");
        
        
//格式化示例
        Date now=new Date(); 
        System.out.println(myFmt.format(now)); 
        System.out.println(myFmt1.format(now)); 
        System.out.println(myFmt2.format(now)); 
        System.out.println(myFmt3.format(now)); 
        System.out.println(myFmt4.format(now)); 
        System.out.println(now.toString()); 
        
        
//解析示例
        SimpleDateFormat myFmt5 = new SimpleDateFormat("yyyy/MM/dd HH"); 
        String time 
= "2010/08/02 00";
        
try {
            Date datatime 
= myFmt5.parse(time);
            System.out.println(datatime);
        }
 catch (ParseException e) {
            e.printStackTrace();
        }

        
    }

}



donghang73 2010-07-13 21:39 發(fā)表評論
]]>
sendRedirect()與forward()實現(xiàn)轉(zhuǎn)向的異同(轉(zhuǎn)載)http://www.tkk7.com/donghang73/archive/2010/02/04/312000.htmldonghang73donghang73Thu, 04 Feb 2010 08:15:00 GMThttp://www.tkk7.com/donghang73/archive/2010/02/04/312000.htmlhttp://www.tkk7.com/donghang73/comments/312000.htmlhttp://www.tkk7.com/donghang73/archive/2010/02/04/312000.html#Feedback0http://www.tkk7.com/donghang73/comments/commentRss/312000.htmlhttp://www.tkk7.com/donghang73/services/trackbacks/312000.html        1.前面慢,后者快
       2.前面無法讀取request.setAttribute()所保存的數(shù)值,而后者可以讀取
       3.前者地址欄顯示真正轉(zhuǎn)向后的地址,而后者顯示的是轉(zhuǎn)向前的地址
       4.前者,轉(zhuǎn)向地址開始的"/",表示的是本機的根目錄;而后者,"/"表示的是應(yīng)用的根目錄

1.RequestDispatcher.forward()

        是在服務(wù)器端起作用,當使用forward()時,Servletengine傳遞HTTP請求從當前的Servlet or JSP到另外一個Servlet,JSP 或普通HTML文件,也即你的form提交至a.jsp,在a.jsp用到了forward()重定向至b.jsp,此時form提交的所有信息在 b.jsp都可以獲得,參數(shù)自動傳遞.

        但forward()無法重定向至有frame的jsp文件,可以重定向至有frame的html文件,同時forward()無法在后面帶參數(shù)傳遞,比如servlet?name=frank,這樣不行,可以程序內(nèi)通過 response.setAttribute("name",name)來傳至下一個頁面.

        重定向后瀏覽器地址欄URL不變. 因為完成一個業(yè)務(wù)操作往往需要跨越多個步驟,每一步驟完成相應(yīng)的處理后,轉(zhuǎn)向到下一個步驟。比如,通常業(yè)務(wù)處理在Servlet中處理,處理的結(jié)果轉(zhuǎn)向到一個 JSP頁面進行顯示。這樣看起來類似于Servlet鏈的功能,但是還有一些區(qū)別。一個RequestDispatcher對象可以把請求發(fā)送到任意一個服務(wù)器資源,而不僅僅是另外一個Servlet。

注意,只有在尚未向客戶端輸出響應(yīng)時才可以調(diào)用forward()方法,如果頁面緩存不為空,在重定向前將自動清除緩存。否則將拋出一個異常

例:servlet文件中重定向


public void doPost(HttpServletRequest request,HttpServletResponse response)

        throws ServletException,IOException

{

        response.setContentType("text/html; charset=gb2312");

        ServletContext sc = getServletContext();

        RequestDispatcher rd = null;

        rd = sc.getRequestDispatcher("/index.jsp");

        rd.forward(request, response);

}

     
 
2.response.sendRedirect()

        是在用戶的瀏覽器端工作,sendRedirect()可以帶參數(shù)傳遞,比如servlet?name=frank傳至下個頁面,同時它可以重定向至不同的主機上,且在瀏覽器地址欄上會出現(xiàn)重定向頁面的URL.

        HttpServletResponse接口定義了可用于轉(zhuǎn)向的sendRedirect()方法。代碼如下:

        public void sendRedirect(java.lang.String location)throws java.io.IOException

        這個方法將響應(yīng)定向到參數(shù)location指定的、新的URL。location可以是一個絕對的URL,如response.sendRedirect ("  

        RequestDispatcher.forward()方法和HttpServletResponse.sendRedirect()方法的區(qū)別是:前者僅是容器中控制權(quán)的轉(zhuǎn)向,在客戶端瀏覽器地址欄中不會顯示出轉(zhuǎn)向后的地址;后者則是完全的跳轉(zhuǎn),瀏覽器將會得到跳轉(zhuǎn)的地址,并重新發(fā)送請求鏈接。這樣,從瀏覽器的地址欄中可以看到跳轉(zhuǎn)后的鏈接地址。所以,前者更加高效,在前者可以滿足需要時,盡量使用Request Dispatcher.forward()方法,并且,這樣也有助于隱藏實際的鏈接。在有些情況下,比如,需要跳轉(zhuǎn)到一個其它服務(wù)器上的資源,則必須使用 HttpServletResponse.sendRequest()方法。



donghang73 2010-02-04 16:15 發(fā)表評論
]]>
主站蜘蛛池模板: 亚洲中文字幕乱码熟女在线| 亚洲视频在线观看视频| 亚洲国产精品无码中文字| 亚洲欧洲日韩不卡| 亚洲一区二区三区免费观看| 亚洲AV无码XXX麻豆艾秋| 2022免费国产精品福利在线| 日韩免费无码一区二区三区| 欧洲精品成人免费视频在线观看 | 亚洲成AV人片天堂网无码| 久久亚洲春色中文字幕久久久| 2017亚洲男人天堂一| 又硬又粗又长又爽免费看| 免费的全黄一级录像带| 亚洲天堂免费在线| 亚洲精品动漫人成3d在线| 一区二区三区亚洲| 国产精品亚洲色图| 国产麻豆成人传媒免费观看| 久久久久久久久免费看无码| 久久精品国产精品亚洲艾草网美妙 | 免费a级毛片无码av| 久久久久亚洲精品成人网小说 | 亚洲一卡2卡3卡4卡国产网站| 美女18毛片免费视频| 亚洲a一级免费视频| 在线免费观看韩国a视频| 亚洲精品狼友在线播放| 亚洲成A人片在线播放器| 抽搐一进一出gif免费视频| 岛国av无码免费无禁网站| 区久久AAA片69亚洲| 日本亚洲精品色婷婷在线影院| 有色视频在线观看免费高清在线直播| 老汉精品免费AV在线播放| 波多野结衣免费视频观看| 亚洲视频中文字幕在线| 免费一级做a爰片久久毛片潮| 亚欧免费视频一区二区三区| 亚洲国产成人久久综合碰| 亚洲乱码卡一卡二卡三|