<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CUIAQHY8fSp7ImA9WhVTGUU.&quot;"><id>tag:blogger.com,1999:blog-2750481981776347376</id><updated>2012-03-05T15:39:01.875-06:00</updated><category term="英语发音" /><category term="firefox" /><category term="下载" /><category term="emule" /><category term="css" /><category term="高性能并行开发" /><category term="mp3提取" /><category term="跟我学Java26日通" /><category term="车维修保养" /><category term="web" /><category term="Linux" /><category term="SketchUp" /><category term="生活点滴" /><category term="blog技巧" /><category term="tomcat" /><category term="笑一笑" /><category term="WebDevelopment" /><category term="旅游" /><category term="美国车行面面观" /><category term="生活技巧" /><title>Ping's Memory</title><subtitle type="html">生活的点点滴滴都在这里</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://ping80life.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://ping80life.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>珍惜生活每一天</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>194</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/PingsMemory" /><feedburner:info uri="pingsmemory" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;DkcMRH86fCp7ImA9WhVTGU8.&quot;"><id>tag:blogger.com,1999:blog-2750481981776347376.post-4310732801532821865</id><published>2012-03-04T23:08:00.000-06:00</published><updated>2012-03-04T23:08:05.114-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-04T23:08:05.114-06:00</app:edited><title>ABC.com - Search</title><content type="html">&lt;a href="http://abc.go.com/search?search=shark+tank"&gt;ABC.com - Search&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;shark and tank. start up vc story&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2750481981776347376-4310732801532821865?l=ping80life.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/YvNwcrfjbpdhBoytKTjCm55vm3o/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YvNwcrfjbpdhBoytKTjCm55vm3o/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/YvNwcrfjbpdhBoytKTjCm55vm3o/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YvNwcrfjbpdhBoytKTjCm55vm3o/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PingsMemory/~4/GikMLPrfeQc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ping80life.blogspot.com/feeds/4310732801532821865/comments/default" title="帖子评论" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2750481981776347376&amp;postID=4310732801532821865" title="0 条评论" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/4310732801532821865?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/4310732801532821865?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PingsMemory/~3/GikMLPrfeQc/abccom-search.html" title="ABC.com - Search" /><author><name>珍惜生活每一天</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://ping80life.blogspot.com/2012/03/abccom-search.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUAR3wzeCp7ImA9WhVTGU8.&quot;"><id>tag:blogger.com,1999:blog-2750481981776347376.post-9121495546056415420</id><published>2012-03-04T22:04:00.000-06:00</published><updated>2012-03-04T22:04:06.280-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-04T22:04:06.280-06:00</app:edited><title>求推荐内容积极的流行歌曲 - 未名空间(mitbbs.com)</title><content type="html">&lt;a href="http://www.mitbbs.com/article_t/LeisureTime/355181.html"&gt;求推荐内容积极的流行歌曲 - 未名空间(mitbbs.com)&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2750481981776347376-9121495546056415420?l=ping80life.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/BsAIoW-xmsUcqhm2RR8SVpG2opI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BsAIoW-xmsUcqhm2RR8SVpG2opI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/BsAIoW-xmsUcqhm2RR8SVpG2opI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BsAIoW-xmsUcqhm2RR8SVpG2opI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PingsMemory/~4/V87GC353akM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ping80life.blogspot.com/feeds/9121495546056415420/comments/default" title="帖子评论" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2750481981776347376&amp;postID=9121495546056415420" title="0 条评论" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/9121495546056415420?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/9121495546056415420?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PingsMemory/~3/V87GC353akM/mitbbscom.html" title="求推荐内容积极的流行歌曲 - 未名空间(mitbbs.com)" /><author><name>珍惜生活每一天</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://ping80life.blogspot.com/2012/03/mitbbscom.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0AHQXczfip7ImA9WhVTGEU.&quot;"><id>tag:blogger.com,1999:blog-2750481981776347376.post-3606459899756388838</id><published>2012-03-04T12:28:00.002-06:00</published><updated>2012-03-04T12:28:50.986-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-04T12:28:50.986-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="车维修保养" /><title>贴tint总结</title><content type="html">这几天把前后车窗的tint都贴了，有很多经验教训。总结如下&lt;br /&gt;
&lt;br /&gt;
1. 环境： 一定要在无风和无强阳光的地方贴。无风是保证没有灰尘，还有操作也比较方便。无强阳光是防止阳光加热后起泡&lt;br /&gt;
2. 裁前一定要搞清楚正反面。 &lt;br /&gt;
3. 裁大小的时候裁左，上，右三边。下边最好不要裁，因为不容易裁好。裁的时候按着边框裁，有时候裁出来的会比边框多个1mm，没有关系，可以塞进边边里。&lt;br /&gt;
4. 刀要快，要不然裁出来的边不平滑，不容易粘好&lt;br /&gt;
5. 长条的气泡（叫finger）很难刮平。可以用电吹风吹吹，我在前面加了一个漏斗，这样热风就比较集中了。加热后tint会收缩。一边加热一边刮就好了&lt;br /&gt;
6. 贴好后不要直接晒太阳。要等到里面的微水泡都干了，才可以。要不然，水泡汽化后膨胀，tint就像起了疹子一样很难看。这个过程一般要过二三天。&lt;br /&gt;
7.实在不行，撕了tint，去autozone买一种药水(~$6),喷在胶上面，刮了胶，重来。 &lt;br /&gt;
8.贴一扇车窗我用了大概20分钟。所有车窗的材料费$20&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2750481981776347376-3606459899756388838?l=ping80life.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/9_OMJC_1ojPH-SQkOx6NE5zd_bk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9_OMJC_1ojPH-SQkOx6NE5zd_bk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/9_OMJC_1ojPH-SQkOx6NE5zd_bk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9_OMJC_1ojPH-SQkOx6NE5zd_bk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PingsMemory/~4/tjO6yNE44D8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ping80life.blogspot.com/feeds/3606459899756388838/comments/default" title="帖子评论" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2750481981776347376&amp;postID=3606459899756388838" title="0 条评论" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/3606459899756388838?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/3606459899756388838?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PingsMemory/~3/tjO6yNE44D8/tint.html" title="贴tint总结" /><author><name>珍惜生活每一天</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://ping80life.blogspot.com/2012/03/tint.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkMHQXc5fSp7ImA9WhVTF08.&quot;"><id>tag:blogger.com,1999:blog-2750481981776347376.post-1569189062574534537</id><published>2012-03-02T16:47:00.000-06:00</published><updated>2012-03-02T16:47:10.925-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-02T16:47:10.925-06:00</app:edited><title>merge attachDirty attachClean用法 - xiashan17的专栏 - 博客频道 - CSDN.NET</title><content type="html">&lt;a href="http://blog.csdn.net/xiashan17/article/details/6237657"&gt;merge attachDirty attachClean用法 - xiashan17的专栏 - 博客频道 - CSDN.NET&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2750481981776347376-1569189062574534537?l=ping80life.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/hY6Cyn7CBOMfsfdr9-rvurIbqN8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hY6Cyn7CBOMfsfdr9-rvurIbqN8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/hY6Cyn7CBOMfsfdr9-rvurIbqN8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hY6Cyn7CBOMfsfdr9-rvurIbqN8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PingsMemory/~4/6JBoDcFFWmQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ping80life.blogspot.com/feeds/1569189062574534537/comments/default" title="帖子评论" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2750481981776347376&amp;postID=1569189062574534537" title="0 条评论" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/1569189062574534537?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/1569189062574534537?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PingsMemory/~3/6JBoDcFFWmQ/merge-attachdirty-attachclean-xiashan17.html" title="merge attachDirty attachClean用法 - xiashan17的专栏 - 博客频道 - CSDN.NET" /><author><name>珍惜生活每一天</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://ping80life.blogspot.com/2012/03/merge-attachdirty-attachclean-xiashan17.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkEAQH08eCp7ImA9WhVTF08.&quot;"><id>tag:blogger.com,1999:blog-2750481981776347376.post-8853893627702927152</id><published>2012-03-02T15:44:00.000-06:00</published><updated>2012-03-02T15:44:01.370-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-02T15:44:01.370-06:00</app:edited><title>在Eclipse中使用JUnit4进行单元测试（初级篇） - 华丽的痘痘 - 博客频道 - CSDN.NET</title><content type="html">&lt;a href="http://blog.csdn.net/andycpp/article/details/1327147"&gt;在Eclipse中使用JUnit4进行单元测试（初级篇） - 华丽的痘痘 - 博客频道 - CSDN.NET&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2750481981776347376-8853893627702927152?l=ping80life.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8H5t8PvMMavOslNaK7PjKBGLul0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8H5t8PvMMavOslNaK7PjKBGLul0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8H5t8PvMMavOslNaK7PjKBGLul0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8H5t8PvMMavOslNaK7PjKBGLul0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PingsMemory/~4/puk7JCKkKrA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ping80life.blogspot.com/feeds/8853893627702927152/comments/default" title="帖子评论" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2750481981776347376&amp;postID=8853893627702927152" title="0 条评论" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/8853893627702927152?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/8853893627702927152?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PingsMemory/~3/puk7JCKkKrA/eclipsejunit4-csdnnet.html" title="在Eclipse中使用JUnit4进行单元测试（初级篇） - 华丽的痘痘 - 博客频道 - CSDN.NET" /><author><name>珍惜生活每一天</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://ping80life.blogspot.com/2012/03/eclipsejunit4-csdnnet.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C08MQXY8cSp7ImA9WhVTFks.&quot;"><id>tag:blogger.com,1999:blog-2750481981776347376.post-7266594940002221499</id><published>2012-03-01T22:18:00.000-06:00</published><updated>2012-03-01T22:18:00.879-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-01T22:18:00.879-06:00</app:edited><title>Android学习笔记（四五）：互联网通信-HttpClient、XML解析（W3C） - 愷风（Wei）的专栏 - 博客频道 - CSDN.NET</title><content type="html">&lt;a href="http://blog.csdn.net/flowingflying/article/details/6914978"&gt;Android学习笔记（四五）：互联网通信-HttpClient、XML解析（W3C） - 愷风（Wei）的专栏 - 博客频道 - CSDN.NET&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2750481981776347376-7266594940002221499?l=ping80life.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/0yKu9PbgH9dj6V2c4igRrXU2trM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0yKu9PbgH9dj6V2c4igRrXU2trM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/0yKu9PbgH9dj6V2c4igRrXU2trM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0yKu9PbgH9dj6V2c4igRrXU2trM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PingsMemory/~4/Zd--u1QOU8s" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ping80life.blogspot.com/feeds/7266594940002221499/comments/default" title="帖子评论" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2750481981776347376&amp;postID=7266594940002221499" title="0 条评论" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/7266594940002221499?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/7266594940002221499?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PingsMemory/~3/Zd--u1QOU8s/android-httpclientxmlw3c-wei-csdnnet.html" title="Android学习笔记（四五）：互联网通信-HttpClient、XML解析（W3C） - 愷风（Wei）的专栏 - 博客频道 - CSDN.NET" /><author><name>珍惜生活每一天</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://ping80life.blogspot.com/2012/03/android-httpclientxmlw3c-wei-csdnnet.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QHQH85cSp7ImA9WhVTFks.&quot;"><id>tag:blogger.com,1999:blog-2750481981776347376.post-5509477618643714190</id><published>2012-03-01T22:08:00.000-06:00</published><updated>2012-03-01T22:08:51.129-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-01T22:08:51.129-06:00</app:edited><title>使用dom4j迭代读取XML,该怎么处理 - Java Web开发</title><content type="html">&lt;a href="http://www.myexception.cn/java-web/173272.html"&gt;使用dom4j迭代读取XML,该怎么处理 - Java Web开发&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2750481981776347376-5509477618643714190?l=ping80life.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/kVYLpDnk6fkFv_Mgvnu1D70PMws/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kVYLpDnk6fkFv_Mgvnu1D70PMws/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/kVYLpDnk6fkFv_Mgvnu1D70PMws/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kVYLpDnk6fkFv_Mgvnu1D70PMws/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PingsMemory/~4/es0tJu-AmvQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ping80life.blogspot.com/feeds/5509477618643714190/comments/default" title="帖子评论" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2750481981776347376&amp;postID=5509477618643714190" title="0 条评论" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/5509477618643714190?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/5509477618643714190?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PingsMemory/~3/es0tJu-AmvQ/dom4jxml-java-web.html" title="使用dom4j迭代读取XML,该怎么处理 - Java Web开发" /><author><name>珍惜生活每一天</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://ping80life.blogspot.com/2012/03/dom4jxml-java-web.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkEMRX84cSp7ImA9WhVTFks.&quot;"><id>tag:blogger.com,1999:blog-2750481981776347376.post-4987828319417536012</id><published>2012-03-01T21:58:00.000-06:00</published><updated>2012-03-01T21:58:04.139-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-01T21:58:04.139-06:00</app:edited><title>用HttpClient抓取人人网高校数据库（省，高校，院系三级级联）--更新1 - New - ITeye论坛</title><content type="html">&lt;a href="http://www.iteye.com/topic/826988"&gt;用HttpClient抓取人人网高校数据库（省，高校，院系三级级联）--更新1 - New - ITeye论坛&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;       需求来源，最近学校的课程项目需要一个省，高校，院系的三级级联的东西，这下麻烦了。全国那么多的高校，而且每一个高校的院系设置又不一样，我们小组只有六个人，而且技术都不咋地，要统计那么多的数据，我们估计这学期就别想完成这个项目了。但是我们知道人人网，开心网，腾讯微博上都要高校的数据库，于是想法就产生了：&lt;br /&gt;&lt;br /&gt;     1.要么咱拼人品让他们的技术人员给我们他们的数据库，想法是好的，但是人家不肯呀&lt;br /&gt;&lt;br /&gt;     2.要么咱通过某种手段获取他们的数据&lt;br /&gt;&lt;br /&gt;今天，咱选择第二种。用到工具有：&lt;br /&gt;&lt;br /&gt;EditPlus：小巧好用的文本编辑器，是超越的文本编辑器，不解释，用了就知道&lt;br /&gt;&lt;br /&gt;Apanta：这个强烈推荐，用它来写Html,Javascript,Css感觉非常好，而且支持各种各样的Javascript的库，如：&lt;br /&gt;&lt;br /&gt;               Jquery，但是我想把他集成到MyEclipse上去，出了一点问题，遗憾，弄的我只能同时开启两个。&lt;br /&gt;&lt;br /&gt;HttpAnalyzer：这个是用来抓包用的，无论什么包统统抓，不过只能抓Http协议的包，当年傻，分析飞信协议的时候，&lt;br /&gt;&lt;br /&gt;                用这个抓，结果只抓了一点东西。如果你想抓取更底层的推荐一个：WireShark，免费的好用的。&lt;br /&gt;&lt;br /&gt;MyEclipse:这个不多说了，弄过J2EE的应该都知道的。&lt;br /&gt;&lt;br /&gt;另外就是第三Jar包了，HttpClient 4.01 请到：http://hc.apache.org/downloads.cgi 下载，只要是4版本上的都应该可以，如果是3.1版本的估计你要重新写一些代码，因为4较3还是有很大的改进的。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;      一般来说，一个网站对访问它内部的东西需要权限的验证的，比如你下载某个网站的东西，他会提示说 只有会员才可以下载，于是乎，这里存在一个session，保存了你的登陆信息也就是你的访问网站内部资源的权限了。人人网估计也不是省油的灯（这里有问题，后面解释），于是我们应该登陆它才能获得访问它内部资源的权限。那么我们首先来抓包分析应该怎么用登陆，于是HttpAnalyzer闪亮登场.&lt;br /&gt;&lt;br /&gt;打开HttpAnalyzer，让他开始工作，我们打开浏览器，输入renren.com。第一次咱先不急着登陆。我们随便输入一个账号密码看看：&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;      我们看到当你输入用户名密码后就将你输入的东西post到：http://www.renren.com/PLogin.do,&lt;br /&gt;&lt;br /&gt;其中PostData有四个：email,password,origURL,domain。至于后面的数据是我们刚刚在登陆页面上填写的数据。&lt;br /&gt;&lt;br /&gt;我们再来看看它登陆页面的源代码：&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;      注意我红色标注的地方：我们注意到，除了我们刚刚在上面发送的数据还有其他的隐藏发送的的东西：例如：origURL等等，这里他们是&lt;input type="hidden"&gt;，应该说在form里面的input都应该发送过去，但是这里他只发送了四个。&lt;br /&gt;&lt;br /&gt;既然postdata只有那么四个参数，那我们就姑且只用那个四个东西好了。&lt;br /&gt;&lt;br /&gt;所以我们用HttpClient构造请求的时候，就应该将这四个参数的给附带进去，部分代码如下：&lt;br /&gt;Java代码  收藏代码&lt;br /&gt;&lt;br /&gt;    // 将要发送的数据封包 &lt;br /&gt;      List&lt;namevaluepair&gt; params = new ArrayList&lt;namevaluepair&gt;(); &lt;br /&gt;      params.add(new BasicNameValuePair("email", this.email)); &lt;br /&gt;      params.add(new BasicNameValuePair("password", this.password)); &lt;br /&gt;      params.add(new BasicNameValuePair("origURL", origURL)); &lt;br /&gt;      params.add(new BasicNameValuePair("domain", domain)); &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;接下来我们来完整登陆一次:&lt;br /&gt;&lt;br /&gt;当输入正确的用户名密码，点击登陆，我们又获得什么样的东西呢？参见如下：&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;返回的内容意思大概是 地址转变了要进行跳转，而且返回的相应头是 302，文件修改了。再看一下 返回的消息头：&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;       有一个Location，应该是要我们跳转的地址。这样我们应该可以访问人人网的任意连接资源了。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;登录过程的完整代码（包含读嗅探指定资源的链接）：&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Java代码  收藏代码&lt;br /&gt;&lt;br /&gt;    import java.io.IOException; &lt;br /&gt;    import java.io.UnsupportedEncodingException; &lt;br /&gt;    import java.util.ArrayList; &lt;br /&gt;    import java.util.List; &lt;br /&gt;     &lt;br /&gt;    import org.apache.http.HttpResponse; &lt;br /&gt;    import org.apache.http.NameValuePair; &lt;br /&gt;    import org.apache.http.client.ClientProtocolException; &lt;br /&gt;    import org.apache.http.client.ResponseHandler; &lt;br /&gt;    import org.apache.http.client.entity.UrlEncodedFormEntity; &lt;br /&gt;    import org.apache.http.client.methods.HttpGet; &lt;br /&gt;    import org.apache.http.client.methods.HttpPost; &lt;br /&gt;    import org.apache.http.impl.client.BasicResponseHandler; &lt;br /&gt;    import org.apache.http.impl.client.DefaultHttpClient; &lt;br /&gt;    import org.apache.http.message.BasicNameValuePair; &lt;br /&gt;    import org.apache.http.protocol.HTTP; &lt;br /&gt;     &lt;br /&gt;    /**&lt;br /&gt;     * &lt;br /&gt;     * &lt;br /&gt;     * Author : Saitkey &amp;lt; lei_d@foxmail.com &amp;gt;&lt;br /&gt;     */ &lt;br /&gt;    public class RenRenNotify { &lt;br /&gt;        private static HttpResponse response; &lt;br /&gt;        private static DefaultHttpClient httpClient; &lt;br /&gt;     &lt;br /&gt;        public RenRenNotify(String userName, String password) { &lt;br /&gt;            this.httpClient = new DefaultHttpClient(); &lt;br /&gt;            String loginForm = "http://www.renren.com/PLogin.do"; &lt;br /&gt;            String origURL = "http://www.renren.com/Home.do"; &lt;br /&gt;            String domain = "renren.com"; &lt;br /&gt;            // 在首页表单上是隐藏的 抓包后分析，并没有发送到服务器 &lt;br /&gt;            // String autoLogin = "true"; &lt;br /&gt;            // 构造一个POST请求，利用Httclient提供的包 &lt;br /&gt;            HttpPost httpPost = new HttpPost(loginForm); &lt;br /&gt;            // 将要发送的数据封包 &lt;br /&gt;            List&lt;namevaluepair&gt; params = new ArrayList&lt;namevaluepair&gt;(); &lt;br /&gt;            params.add(new BasicNameValuePair("email", userName)); &lt;br /&gt;            params.add(new BasicNameValuePair("password", password)); &lt;br /&gt;            params.add(new BasicNameValuePair("origURL", origURL)); &lt;br /&gt;            params.add(new BasicNameValuePair("domain", domain)); &lt;br /&gt;     &lt;br /&gt;            // 封包添加到Post请求 &lt;br /&gt;            try { &lt;br /&gt;                httpPost.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)); &lt;br /&gt;            } catch (UnsupportedEncodingException e1) { &lt;br /&gt;                // TODO Auto-generated catch block &lt;br /&gt;                e1.printStackTrace(); &lt;br /&gt;            } &lt;br /&gt;            // 将 get 和post 方法包含到一个函数里面去,这里就是登陆过程了。 &lt;br /&gt;            response = postMethod(httpPost); &lt;br /&gt;            /*&lt;br /&gt;             * 有跳转 System.out.println(response.getStatusLine());//返回302&lt;br /&gt;             * Header[]headers=response.getAllHeaders(); for (int i = 0; i &amp;lt;&lt;br /&gt;             * headers.length; i++) { Header header = headers[i];&lt;br /&gt;             * System.out.println(header.getName()+": "+header.getValue()); }&lt;br /&gt;             */ &lt;br /&gt;            // 读取跳转的地址 &lt;br /&gt;            // String redirectUrl = response.getFirstHeader("Location").getValue(); &lt;br /&gt;            // 查看一下跳转过后，都出现哪些内容. &lt;br /&gt;            // response=getMethod(redirectUrl);//函数见后面 &lt;br /&gt;            // System.out.println(response.getStatusLine()); // HTTP/1.1 200 OK &lt;br /&gt;     &lt;br /&gt;            // 读取一下主页都有什么内容 已经登陆进去 &lt;br /&gt;            // System.out.println(readHtml("http://www.renren.com/home")); &lt;br /&gt;        } &lt;br /&gt;     &lt;br /&gt;        // 嗅探指定页面的代码 &lt;br /&gt;        public String notify(String url) { &lt;br /&gt;            HttpGet get = new HttpGet(url); &lt;br /&gt;            ResponseHandler&lt;string&gt; responseHandler = new BasicResponseHandler(); &lt;br /&gt;            String txt = null; &lt;br /&gt;            try { &lt;br /&gt;                txt = httpClient.execute(get, responseHandler); &lt;br /&gt;            } catch (ClientProtocolException e) { &lt;br /&gt;                e.printStackTrace(); &lt;br /&gt;            } catch (IOException e) { &lt;br /&gt;                e.printStackTrace(); &lt;br /&gt;            } finally { &lt;br /&gt;                get.abort(); &lt;br /&gt;            } &lt;br /&gt;            return txt; &lt;br /&gt;        } &lt;br /&gt;     &lt;br /&gt;        // 用post方法向服务器请求 并获得响应，因为post方法要封装参数，因此在函数外部封装好传参 &lt;br /&gt;        public HttpResponse postMethod(HttpPost post) { &lt;br /&gt;            HttpResponse resp = null; &lt;br /&gt;            try { &lt;br /&gt;                resp = httpClient.execute(post); &lt;br /&gt;            } catch (ClientProtocolException e) { &lt;br /&gt;                e.printStackTrace(); &lt;br /&gt;            } catch (IOException e) { &lt;br /&gt;                e.printStackTrace(); &lt;br /&gt;            } finally { &lt;br /&gt;                post.abort(); &lt;br /&gt;            } &lt;br /&gt;            return resp; &lt;br /&gt;        } &lt;br /&gt;     &lt;br /&gt;        // 用get方法向服务器请求 并获得响应 &lt;br /&gt;        public HttpResponse getMethod(String url) { &lt;br /&gt;            HttpGet get = new HttpGet(url); &lt;br /&gt;            HttpResponse resp = null; &lt;br /&gt;            try { &lt;br /&gt;                resp = httpClient.execute(get); &lt;br /&gt;            } catch (ClientProtocolException e) { &lt;br /&gt;                e.printStackTrace(); &lt;br /&gt;            } catch (IOException e) { &lt;br /&gt;                e.printStackTrace(); &lt;br /&gt;            } finally { &lt;br /&gt;                get.abort(); &lt;br /&gt;            } &lt;br /&gt;            return resp; &lt;br /&gt;        } &lt;br /&gt;     &lt;br /&gt;        public static void main(String[] args) { &lt;br /&gt;            RenRenNotify notify = new RenRenNotify("[你的用户名]", &lt;br /&gt;                    "[你的密码]"); &lt;br /&gt;            System.out.println(notify &lt;br /&gt;                    .notify("http://www.renren.com/home")); &lt;br /&gt;        } &lt;br /&gt;     &lt;br /&gt;    } &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        好了，现在登录了。我们去修改自己的教育信息吧，首先自然是进入相应的页面：&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;       当我们进入了修改教育信息的时候，我们发现HttpAnalyzer里面多了如下内容：&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   注意红色的内容。这里应该是所有高校的信息。体积也达到了402kb，看一下里面的内容：&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        这个里面有个奇怪的东西：\u4e2d\u56fd 这个是 “中国”的意思，经过转码了。用JavaScript 直接 alert('u4e2d\u56fd ')，就明了了。&lt;br /&gt;&lt;br /&gt;        对于一长串的字符，可以用下面的代码进行回来（code是源）：&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Java代码  收藏代码&lt;br /&gt;&lt;br /&gt;    StringBuffer sb = new StringBuffer(code); &lt;br /&gt;    int pos; &lt;br /&gt;    while ((pos = sb.indexOf("\\u")) &amp;gt; -1) { &lt;br /&gt;        String tmp = sb.substring(pos, pos + 6); &lt;br /&gt;        sb.replace(pos, pos + 6, Character.toString((char) Integer &lt;br /&gt;                .parseInt(tmp.substring(2), 16))); &lt;br /&gt;    } &lt;br /&gt;    code = sb.toString(); &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; 接下来，我们选择一个高校看看，HttpAnalyzer里面出现如下的信息：&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;再来一下：&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;       所以通过上面两次抓取，我们应该得出一个例子，那就是：我们选择好了一个大学，就会相应的得出他的ID，然后这时候会想服务器发送一个请求查询：http://www.renren.com/GetDep.do?id=13003 ，其中id后面的便是高校的代号了。然后返回的是一串html代码，如下：&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;         这里同样是奇怪的一串数字，这种也是Unicode，不过是十进制的，而且在编码的前后分别加上“&amp;amp;#”和“；”就可以形成Html实体字符，可以在网页上直接显示。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;对于以上的代码，我们也参照上面写一个转换的代码：如下：&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Java代码  收藏代码&lt;br /&gt;&lt;br /&gt;    StringBuffer sb=new StringBuffer(code); &lt;br /&gt;    int pos; &lt;br /&gt;    while ((pos=sb.indexOf("&amp;amp;#"))&amp;gt;-1) { &lt;br /&gt;        String tmp=sb.substring(pos+2, pos+7); &lt;br /&gt;        sb.replace(pos, pos+8, Character.toString((char)Integer.parseInt(tmp,10))); &lt;br /&gt;    } &lt;br /&gt;    code=sb.toString(); &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        写到这里，我们的工作也做了一大半了。于是乎，我这里不得不跟大家陈清一个事实，获得&lt;br /&gt;&lt;br /&gt;http://s.xnimg.cn/a13819/allunivlist.js&lt;br /&gt;&lt;br /&gt;http://www.renren.com/GetDep.do?id=13003&lt;br /&gt;&lt;br /&gt;的页面代码，人人网是没有设置 session的权限认证的。直接可以读不信你可以点击上面的两个地址，你就发现，原来可以直接读取的。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;       也就是说。我们可以另辟路径，不用通过HttpClient去登陆一下在取得数据，这一点很不好意思。我刚开始没有意识到。不过，这里你也还是学会了一种登陆一个服务器的办法，说不定以后你会用到呢。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;好了，下面我们开始另一种方法。&lt;br /&gt;&lt;br /&gt;       首先，我们对获取http://s.xnimg.cn/a13819/allunivlist.js的数据进行分析一下：&lt;br /&gt;&lt;br /&gt;var allUnivList = [{"id":"00","univs":"","name":"\u4e2d\u56fd","provs":[{............."country_id":0,"name":"\u53f0\u6e7e"}]},{"id":"01","univs"...................&lt;br /&gt;&lt;br /&gt;这样的数据类型。我想做过ajax的都知道是json类型的。 但是这里我要用Java的正则表达式进行解析。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;首先分析数据结构：&lt;br /&gt;&lt;br /&gt;[{国家:[{省市区[{高校S}],......}],....},....] 大概就是这样的结构 其中....表示可能有多个 同级机构。如 安徽省呵北京市， 而在北京市下有 清华大学和北京大学 是同级的。以此类推啦。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;我只需要中国的的大学，所以我首先选出中国这块的数据：用到的正则表达式是："\"provs\":(.*?)]}"&lt;br /&gt;&lt;br /&gt;这里主要对比 在台湾省结束的时候，有]}标志，而且在前面并没有出现，而且用非贪婪模式去批判就能保证是中国的高校了。如图&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;取得了中国部分，接下来对中国的省市区进行解析了，同样，我们看到：&lt;br /&gt;&lt;br /&gt;[{"id":"00",............"country_id":0,"name":"..........."},这样的结构&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;所以对每一个省我们可以分析到如下的正则表达式：id\":(.*?),\"univs\":(.*?),\"country_id\":0,\"name\":\"(.*?)\"}&lt;br /&gt;&lt;br /&gt;       然后对 中国这部分进行一个循环，就可以得到中国所有的省市区了，同样我们对每一个省市，要对他们包含的高校进行选择：&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;       我们很容易就可以看到高校的 结构应该是：{"id":1001,"name":"\u6e05\u534e\u5927\u5b66"} 类似，那么正则表达式应该是："id\":(.*?),\"name\":\"(.*?)\""；&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;       对于每一个高校，我们可以类似于省市那样处理，用循环匹配，就可以得到这个省市的所以高校。但是对于每一个高校。我们要还需要获得他的院系信息。前文跟大家分分析了，院系信息是通过http://www.renren.com/GetDep.do?id=xxxx来动态获取（xxx代表高校的编号），那么我们在抓取高校的时候，顺带也将他们的院系信息获取了。&lt;br /&gt;&lt;br /&gt;写了这么多，咱直接上代码：&lt;br /&gt;&lt;br /&gt;      你也可以选择下载下面的代码。里面有一些必要的文件已经jar包，需要自己配置一下。如果不会，请留言吧，我争取重新打包再上传上来。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Java代码  收藏代码&lt;br /&gt;&lt;br /&gt;    import java.io.File; &lt;br /&gt;    import java.io.IOException; &lt;br /&gt;    import java.io.PrintStream; &lt;br /&gt;    import java.util.regex.Matcher; &lt;br /&gt;    import java.util.regex.Pattern; &lt;br /&gt;     &lt;br /&gt;    import org.apache.http.client.ClientProtocolException; &lt;br /&gt;    import org.apache.http.client.HttpClient; &lt;br /&gt;    import org.apache.http.client.ResponseHandler; &lt;br /&gt;    import org.apache.http.client.methods.HttpGet; &lt;br /&gt;    import org.apache.http.impl.client.BasicResponseHandler; &lt;br /&gt;    import org.apache.http.impl.client.DefaultHttpClient; &lt;br /&gt;     &lt;br /&gt;    /**&lt;br /&gt;     * &lt;br /&gt;     * &lt;br /&gt;     * Author : Saitkey &amp;lt; lei_d@foxmail.com &amp;gt;&lt;br /&gt;     */ &lt;br /&gt;    public class GenerateSQL { &lt;br /&gt;        // 构建省的sql文件 &lt;br /&gt;        private File province = new File("provice.sql"); &lt;br /&gt;        // 构建高校的sql文件 &lt;br /&gt;        private File college = new File("college.sql"); &lt;br /&gt;        // 构建院系的sql文件 &lt;br /&gt;        private File department = new File("department.sql"); &lt;br /&gt;     &lt;br /&gt;        GenerateSQL() throws ClientProtocolException, IOException { &lt;br /&gt;            HttpClient client = new DefaultHttpClient(); &lt;br /&gt;            ResponseHandler&lt;string&gt; responseHandler = new BasicResponseHandler(); &lt;br /&gt;            String depUrl = "http://www.renren.com/GetDep.do?id="; &lt;br /&gt;            String allunivs = "http://s.xnimg.cn/a13819/allunivlist.js"; &lt;br /&gt;            HttpGet get = new HttpGet(allunivs); &lt;br /&gt;            System.out.println("读取高校信息..."); &lt;br /&gt;            StringBuffer sb = new StringBuffer(client.execute(get, responseHandler)); &lt;br /&gt;            System.out.println("读取完成..."); &lt;br /&gt;     &lt;br /&gt;            // 对获取的字符串进行处理截取从"provs":到}]},{"id":"01"部分 &lt;br /&gt;            String alluinvRegex = "\"provs\":(.*?)]}"; &lt;br /&gt;            Pattern pattern = Pattern.compile(alluinvRegex); &lt;br /&gt;            String chn = ""; &lt;br /&gt;            Matcher matcher = pattern.matcher(sb.toString()); &lt;br /&gt;            matcher.find(); &lt;br /&gt;            chn = matcher.group(1); &lt;br /&gt;            // System.out.println(convertFromHex(tmp)); &lt;br /&gt;     &lt;br /&gt;            // 对截取的中国部分按照省市区进行匹配"id":1,"univs" ...... "country_id":0,"name":"台湾" &lt;br /&gt;            String regex2 = "id\":(.*?),\"univs\":(.*?),\"country_id\":0,\"name\":\"(.*?)\"}"; &lt;br /&gt;            Pattern pattern2 = Pattern.compile(regex2); &lt;br /&gt;            Matcher matcher2 = pattern2.matcher(chn); &lt;br /&gt;            StringBuilder provsBuilder = new StringBuilder(); &lt;br /&gt;            StringBuilder colBuilder = new StringBuilder(); &lt;br /&gt;            StringBuilder deparBuilder = new StringBuilder(); &lt;br /&gt;            while (matcher2.find()) { &lt;br /&gt;                // 我们项目的sql语句，如果你们数据库不一样，稍微修改一下拉 &lt;br /&gt;                provsBuilder.append("insert into province(PROID,PRONAME)values('" &lt;br /&gt;                        + matcher2.group(1) + "','" &lt;br /&gt;                        + convertFromHex(matcher2.group(3)) + "');\n"); &lt;br /&gt;                System.out.println("生成-" + convertFromHex(matcher2.group(3)) &lt;br /&gt;                        + "-数据库"); &lt;br /&gt;                // 取得学校的ID，还有名字 "id":1001,"name":"\u6e05\u534e\u5927\u5b66" &lt;br /&gt;                String colRegex = "id\":(.*?),\"name\":\"(.*?)\""; &lt;br /&gt;                Pattern colPattern = Pattern.compile(colRegex); &lt;br /&gt;                Matcher colMatcher = colPattern.matcher(matcher2.group(2)); &lt;br /&gt;                while (colMatcher.find()) { &lt;br /&gt;                    colBuilder &lt;br /&gt;                            .append("insert into COLLEGE(PROID,COLID,COLNAME)values('" &lt;br /&gt;                                    + matcher2.group(1) &lt;br /&gt;                                    + "','" &lt;br /&gt;                                    + colMatcher.group(1) &lt;br /&gt;                                    + "','" &lt;br /&gt;                                    + convertFromHex(colMatcher.group(2)) + "');\n"); &lt;br /&gt;     &lt;br /&gt;                    System.out.println("生成-" + convertFromHex(colMatcher.group(2)) &lt;br /&gt;                            + "-数据库"); &lt;br /&gt;     &lt;br /&gt;                    get = new HttpGet(depUrl + colMatcher.group(1)); &lt;br /&gt;                    ResponseHandler&lt;string&gt; depHandler = new BasicResponseHandler(); &lt;br /&gt;                    generateDepartment(client.execute(get, depHandler), colMatcher &lt;br /&gt;                            .group(1), deparBuilder); &lt;br /&gt;                } &lt;br /&gt;     &lt;br /&gt;            } &lt;br /&gt;            PrintStream ps = new PrintStream(province); &lt;br /&gt;            ps.print(provsBuilder.toString()); &lt;br /&gt;            ps.close(); &lt;br /&gt;     &lt;br /&gt;            PrintStream ps2 = new PrintStream(college); &lt;br /&gt;            ps2.print(colBuilder.toString()); &lt;br /&gt;            ps2.close(); &lt;br /&gt;     &lt;br /&gt;            PrintStream ps3 = new PrintStream(department); &lt;br /&gt;            ps3.print(deparBuilder.toString()); &lt;br /&gt;            ps3.close(); &lt;br /&gt;            System.err.println("\n\n\n完成数据库生成，请打开项目目录查看！"); &lt;br /&gt;        } &lt;br /&gt;     &lt;br /&gt;        // 这个函数用来处理行查询到的高校院系 &lt;option value="中国语言文学学院"&gt;中国语言文学学院&lt;/option&gt; &lt;br /&gt;        public void generateDepartment(String src, String colid, StringBuilder sb) { &lt;br /&gt;            String departRegex = "value='(.+?)'&amp;gt;";// 开始用这个正则表达式"value='(.*?)'&amp;gt;"; &lt;br /&gt;            // 后来发现有问题，问题你自己探索吧。 &lt;br /&gt;            Pattern pattern = Pattern.compile(departRegex); &lt;br /&gt;            Matcher matcher = pattern.matcher(src); &lt;br /&gt;            while (matcher.find()) { &lt;br /&gt;                sb.append("insert into DEPARTMENT(COLID,DEPNAME)values('" + colid &lt;br /&gt;                        + "','" + convertFromDec(matcher.group(1)) + "');\n"); &lt;br /&gt;            } &lt;br /&gt;        } &lt;br /&gt;     &lt;br /&gt;        public static String convertDec(String src) { &lt;br /&gt;            return Character.toString((char) Integer.parseInt(src, 10)); &lt;br /&gt;        } &lt;br /&gt;     &lt;br /&gt;        public static String convertHex(String src) { &lt;br /&gt;            return Character &lt;br /&gt;                    .toString((char) Integer.parseInt(src.substring(2), 16)); &lt;br /&gt;        } &lt;br /&gt;     &lt;br /&gt;        // 转换&amp;amp;#xxxxx;形式Unicode &lt;br /&gt;        private String convertFromDec(String code) { &lt;br /&gt;            StringBuffer sb = new StringBuffer(code); &lt;br /&gt;            int startPos; &lt;br /&gt;            int endPos; &lt;br /&gt;            while ((startPos = sb.indexOf("&amp;amp;#")) &amp;gt; -1) { &lt;br /&gt;                endPos = sb.indexOf(";"); &lt;br /&gt;                String tmp = sb.substring(startPos + 2, endPos); &lt;br /&gt;                sb.replace(startPos, endPos + 1, Character.toString((char) Integer &lt;br /&gt;                        .parseInt(tmp, 10))); &lt;br /&gt;            } &lt;br /&gt;            return code = sb.toString(); &lt;br /&gt;        } &lt;br /&gt;     &lt;br /&gt;        // 转换16进制的Unicode， &lt;br /&gt;        private String convertFromHex(String code) { &lt;br /&gt;            StringBuffer sb = new StringBuffer(code); &lt;br /&gt;            int pos; &lt;br /&gt;            while ((pos = sb.indexOf("\\u")) &amp;gt; -1) { &lt;br /&gt;                String tmp = sb.substring(pos, pos + 6); &lt;br /&gt;                sb.replace(pos, pos + 6, Character.toString((char) Integer &lt;br /&gt;                        .parseInt(tmp.substring(2), 16))); &lt;br /&gt;            } &lt;br /&gt;            return code = sb.toString(); &lt;br /&gt;        } &lt;br /&gt;     &lt;br /&gt;        public static void main(String[] args) throws ClientProtocolException, &lt;br /&gt;                IOException { &lt;br /&gt;            new GenerateSQL(); &lt;br /&gt;        } &lt;br /&gt;    } &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;      写到这里，基本上完成了高校数据库的抓取工作，现在只需要导入刚刚生成的sql文件就可以了。如果你想抓取其他的信息。原理也应该差不多的吧。只不过要看看他们有没有设置session 的权限认证了。如果有，那你得写一个登陆的东西获得那认证，前面也写了差不多。应该可以看懂的。感谢你花这么长的时间。&lt;br /&gt;&lt;br /&gt;       至于标题的 省 高校 院系级联，好吧， 我骗你了。只不过今天就到此了，还有Asp.net的任务。有了数据库了，咱还怕写不出来那个级联么？各位看官，如果你要什么好的级联，可以分享一下吧。&lt;br /&gt;&lt;br /&gt;用HttpClient获取页面page后，利用正则表达式获取数据的确很麻烦（当然对于正则表达式好的人来说是小case啦）&lt;br /&gt;所以我们选用的是htmlunit，解析准确，简单，效率嘛，感觉差了一点！&lt;br /&gt;LZ也可以试试htmlunit！&lt;br /&gt;&lt;br /&gt;JS注入+DOM是比较省事的做法&lt;br /&gt;LZ建议你了解一下json.目前的趋势是json越来越来常用了.&lt;br /&gt;你可以使用一个json的解析器进行解析,例如Jackson , JSON-lib,Gson .这些项目可以方便的将json转为一个可以读写的中间格式,也可以快速的完成json与bean的转换.&lt;br /&gt;&lt;/string&gt;&lt;/string&gt;&lt;/string&gt;&lt;/namevaluepair&gt;&lt;/namevaluepair&gt;&lt;/namevaluepair&gt;&lt;/namevaluepair&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2750481981776347376-4987828319417536012?l=ping80life.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/yK6NxzTEmhClhynsLJgLgKpQWz0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yK6NxzTEmhClhynsLJgLgKpQWz0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/yK6NxzTEmhClhynsLJgLgKpQWz0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yK6NxzTEmhClhynsLJgLgKpQWz0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PingsMemory/~4/BLqoc9nXm5c" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ping80life.blogspot.com/feeds/4987828319417536012/comments/default" title="帖子评论" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2750481981776347376&amp;postID=4987828319417536012" title="0 条评论" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/4987828319417536012?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/4987828319417536012?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PingsMemory/~3/BLqoc9nXm5c/httpclient-1-new-iteye.html" title="用HttpClient抓取人人网高校数据库（省，高校，院系三级级联）--更新1 - New - ITeye论坛" /><author><name>珍惜生活每一天</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://ping80life.blogspot.com/2012/03/httpclient-1-new-iteye.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMMRH8zeip7ImA9WhVTFkw.&quot;"><id>tag:blogger.com,1999:blog-2750481981776347376.post-8728624863016962493</id><published>2012-03-01T09:58:00.000-06:00</published><updated>2012-03-01T09:58:05.182-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-01T09:58:05.182-06:00</app:edited><title>http - posting XML request in java - Stack Overflow</title><content type="html">&lt;a href="http://stackoverflow.com/questions/2735839/posting-xml-request-in-java"&gt;http - posting XML request in java - Stack Overflow&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="lang-java prettyprint"&gt;&lt;code&gt;&lt;span class="kwd"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; java&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;io&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="typ"&gt;File&lt;/span&gt;&lt;span class="pun"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; java&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;io&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="typ"&gt;FileInputStream&lt;/span&gt;&lt;span class="pun"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; org&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;apache&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;commons&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;httpclient&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="typ"&gt;HttpClient&lt;/span&gt;&lt;span class="pun"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; org&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;apache&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;commons&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;httpclient&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;methods&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="typ"&gt;InputStreamRequestEntity&lt;/span&gt;&lt;span class="pun"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; org&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;apache&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;commons&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;httpclient&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;methods&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="typ"&gt;PostMethod&lt;/span&gt;&lt;span class="pun"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="com"&gt;/**&lt;br /&gt; * This is a sample application that demonstrates&lt;br /&gt; * how to use the Jakarta HttpClient API.&lt;br /&gt; *&lt;br /&gt; * This application sends an XML document&lt;br /&gt; * to a remote web server using HTTP POST&lt;br /&gt; *&lt;br /&gt; * @author Sean C. Sullivan&lt;br /&gt; * @author Ortwin Glück&lt;br /&gt; * @author Oleg Kalnichevski&lt;br /&gt; */&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd"&gt;class&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ"&gt;PostXML&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span class="com"&gt;/**&lt;br /&gt;     *&lt;br /&gt;     * Usage:&lt;br /&gt;     * java PostXML http://mywebserver:80/ c:\foo.xml&lt;br /&gt;     *&lt;br /&gt;     * @param args command line arguments&lt;br /&gt;     * Argument 0 is a URL to a web server&lt;br /&gt;     * Argument 1 is a local filename&lt;br /&gt;     *&lt;br /&gt;     */&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span class="kwd"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd"&gt;void&lt;/span&gt;&lt;span class="pln"&gt; main&lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="typ"&gt;String&lt;/span&gt;&lt;span class="pun"&gt;[]&lt;/span&gt;&lt;span class="pln"&gt; args&lt;/span&gt;&lt;span class="pun"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd"&gt;throws&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ"&gt;Exception&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span class="kwd"&gt;if&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;args&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;length &lt;/span&gt;&lt;span class="pun"&gt;!=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="lit"&gt;2&lt;/span&gt;&lt;span class="pun"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span class="typ"&gt;System&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;out&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;println&lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;                &lt;/span&gt;&lt;span class="str"&gt;"Usage: java -classpath &lt;classpath&gt; [-Dorg.apache.commons."&lt;/classpath&gt;&lt;/span&gt;&lt;span class="pun"&gt;+&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;                &lt;/span&gt;&lt;span class="str"&gt;"logging.simplelog.defaultlog=&lt;loglevel&gt;]"&lt;/loglevel&gt;&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;+&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;                &lt;/span&gt;&lt;span class="str"&gt;" PostXML &lt;url&gt; &lt;filename&gt;]"&lt;/filename&gt;&lt;/url&gt;&lt;/span&gt;&lt;span class="pun"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span class="typ"&gt;System&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;out&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;println&lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="str"&gt;"&lt;classpath&gt; - must contain the "&lt;/classpath&gt;&lt;/span&gt;&lt;span class="pun"&gt;+&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;                &lt;/span&gt;&lt;span class="str"&gt;"commons-httpclient.jar and commons-logging.jar"&lt;/span&gt;&lt;span class="pun"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span class="typ"&gt;System&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;out&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;println&lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="str"&gt;"&lt;loglevel&gt; - one of error, "&lt;/loglevel&gt;&lt;/span&gt;&lt;span class="pun"&gt;+&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;                    &lt;/span&gt;&lt;span class="str"&gt;"warn, info, debug, trace"&lt;/span&gt;&lt;span class="pun"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span class="typ"&gt;System&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;out&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;println&lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="str"&gt;"&lt;url&gt; - the URL to post the file to"&lt;/url&gt;&lt;/span&gt;&lt;span class="pun"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span class="typ"&gt;System&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;out&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;println&lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="str"&gt;"&lt;filename&gt; - file to post to the URL"&lt;/filename&gt;&lt;/span&gt;&lt;span class="pun"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span class="typ"&gt;System&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;out&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;println&lt;/span&gt;&lt;span class="pun"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span class="typ"&gt;System&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;exit&lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="lit"&gt;1&lt;/span&gt;&lt;span class="pun"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span class="pun"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span class="com"&gt;// Get target URL&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span class="typ"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; strURL &lt;/span&gt;&lt;span class="pun"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; args&lt;/span&gt;&lt;span class="pun"&gt;[&lt;/span&gt;&lt;span class="lit"&gt;0&lt;/span&gt;&lt;span class="pun"&gt;];&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span class="com"&gt;// Get file to be posted&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span class="typ"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; strXMLFilename &lt;/span&gt;&lt;span class="pun"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; args&lt;/span&gt;&lt;span class="pun"&gt;[&lt;/span&gt;&lt;span class="lit"&gt;1&lt;/span&gt;&lt;span class="pun"&gt;];&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span class="typ"&gt;File&lt;/span&gt;&lt;span class="pln"&gt; input &lt;/span&gt;&lt;span class="pun"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd"&gt;new&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ"&gt;File&lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;strXMLFilename&lt;/span&gt;&lt;span class="pun"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span class="com"&gt;// Prepare HTTP post&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span class="typ"&gt;PostMethod&lt;/span&gt;&lt;span class="pln"&gt; post &lt;/span&gt;&lt;span class="pun"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd"&gt;new&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ"&gt;PostMethod&lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;strURL&lt;/span&gt;&lt;span class="pun"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span class="com"&gt;// Request content will be retrieved directly&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span class="com"&gt;// from the input stream&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span class="com"&gt;// Per default, the request content needs to be buffered&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span class="com"&gt;// in order to determine its length.&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span class="com"&gt;// Request body buffering can be avoided when&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span class="com"&gt;// content length is explicitly specified&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;        post&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;setRequestEntity&lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="kwd"&gt;new&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ"&gt;InputStreamRequestEntity&lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;                &lt;/span&gt;&lt;span class="kwd"&gt;new&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ"&gt;FileInputStream&lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;input&lt;/span&gt;&lt;span class="pun"&gt;),&lt;/span&gt;&lt;span class="pln"&gt; input&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;length&lt;/span&gt;&lt;span class="pun"&gt;()));&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span class="com"&gt;// Specify content type and encoding&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span class="com"&gt;// If content encoding is not explicitly specified&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span class="com"&gt;// ISO-8859-1 is assumed&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;        post&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;setRequestHeader&lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;                &lt;/span&gt;&lt;span class="str"&gt;"Content-type"&lt;/span&gt;&lt;span class="pun"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str"&gt;"text/xml; charset=ISO-8859-1"&lt;/span&gt;&lt;span class="pun"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span class="com"&gt;// Get HTTP client&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span class="typ"&gt;HttpClient&lt;/span&gt;&lt;span class="pln"&gt; httpclient &lt;/span&gt;&lt;span class="pun"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd"&gt;new&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ"&gt;HttpClient&lt;/span&gt;&lt;span class="pun"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span class="com"&gt;// Execute request&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span class="kwd"&gt;try&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span class="kwd"&gt;int&lt;/span&gt;&lt;span class="pln"&gt; result &lt;/span&gt;&lt;span class="pun"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; httpclient&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;executeMethod&lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;post&lt;/span&gt;&lt;span class="pun"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span class="com"&gt;// Display status code&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span class="typ"&gt;System&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;out&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;println&lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="str"&gt;"Response status code: "&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;+&lt;/span&gt;&lt;span class="pln"&gt; result&lt;/span&gt;&lt;span class="pun"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span class="com"&gt;// Display response&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span class="typ"&gt;System&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;out&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;println&lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="str"&gt;"Response body: "&lt;/span&gt;&lt;span class="pun"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span class="typ"&gt;System&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;out&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;println&lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;post&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;getResponseBodyAsString&lt;/span&gt;&lt;span class="pun"&gt;());&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span class="pun"&gt;}&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd"&gt;finally&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span class="com"&gt;// Release current connection to the connection pool &lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span class="com"&gt;// once you are done&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;            post&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;releaseConnection&lt;/span&gt;&lt;span class="pun"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span class="pun"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span class="pun"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2750481981776347376-8728624863016962493?l=ping80life.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/X02RNYylyqN2Pwb95JrUeqaLHe4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/X02RNYylyqN2Pwb95JrUeqaLHe4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/X02RNYylyqN2Pwb95JrUeqaLHe4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/X02RNYylyqN2Pwb95JrUeqaLHe4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PingsMemory/~4/LcrokIaVFfk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ping80life.blogspot.com/feeds/8728624863016962493/comments/default" title="帖子评论" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2750481981776347376&amp;postID=8728624863016962493" title="0 条评论" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/8728624863016962493?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/8728624863016962493?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PingsMemory/~3/LcrokIaVFfk/http-posting-xml-request-in-java-stack.html" title="http - posting XML request in java - Stack Overflow" /><author><name>珍惜生活每一天</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://ping80life.blogspot.com/2012/03/http-posting-xml-request-in-java-stack.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEAGQ3k8fip7ImA9WhVTFUo.&quot;"><id>tag:blogger.com,1999:blog-2750481981776347376.post-5229165555262418248</id><published>2012-02-29T21:32:00.000-06:00</published><updated>2012-02-29T21:32:02.776-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-29T21:32:02.776-06:00</app:edited><title>httpClient应用 - tomrose - ITeye技术网站</title><content type="html">&lt;a href="http://tomrose.iteye.com/blog/136165"&gt;httpClient应用 - tomrose - ITeye技术网站&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2750481981776347376-5229165555262418248?l=ping80life.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/CSo1DD4dtFJw4eDtMCUN5jw77Pg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CSo1DD4dtFJw4eDtMCUN5jw77Pg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/CSo1DD4dtFJw4eDtMCUN5jw77Pg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CSo1DD4dtFJw4eDtMCUN5jw77Pg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PingsMemory/~4/u-fmK_zPcBA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ping80life.blogspot.com/feeds/5229165555262418248/comments/default" title="帖子评论" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2750481981776347376&amp;postID=5229165555262418248" title="0 条评论" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/5229165555262418248?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/5229165555262418248?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PingsMemory/~3/u-fmK_zPcBA/httpclient-tomrose-iteye.html" title="httpClient应用 - tomrose - ITeye技术网站" /><author><name>珍惜生活每一天</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://ping80life.blogspot.com/2012/02/httpclient-tomrose-iteye.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck4GSXg9eCp7ImA9WhVTFUo.&quot;"><id>tag:blogger.com,1999:blog-2750481981776347376.post-3470263596930863216</id><published>2012-02-29T21:02:00.000-06:00</published><updated>2012-02-29T21:02:08.660-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-29T21:02:08.660-06:00</app:edited><title>aop在接口测试中的应用 » Taobao QA Team</title><content type="html">&lt;a href="http://qa.taobao.com/?p=14710"&gt;aop在接口测试中的应用 » Taobao QA Team&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2750481981776347376-3470263596930863216?l=ping80life.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Gte2GSdA9MWUhHZjuasWu__NZuo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Gte2GSdA9MWUhHZjuasWu__NZuo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Gte2GSdA9MWUhHZjuasWu__NZuo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Gte2GSdA9MWUhHZjuasWu__NZuo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PingsMemory/~4/x072yBcMLp0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ping80life.blogspot.com/feeds/3470263596930863216/comments/default" title="帖子评论" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2750481981776347376&amp;postID=3470263596930863216" title="0 条评论" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/3470263596930863216?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/3470263596930863216?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PingsMemory/~3/x072yBcMLp0/aop-taobao-qa-team.html" title="aop在接口测试中的应用 » Taobao QA Team" /><author><name>珍惜生活每一天</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://ping80life.blogspot.com/2012/02/aop-taobao-qa-team.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkECQHc9fip7ImA9WhVTFUo.&quot;"><id>tag:blogger.com,1999:blog-2750481981776347376.post-635824328195985754</id><published>2012-02-29T20:57:00.000-06:00</published><updated>2012-02-29T20:57:41.966-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-29T20:57:41.966-06:00</app:edited><title>Hudson扩展之插件开发 » Taobao QA Team</title><content type="html">&lt;a href="http://qa.taobao.com/?p=4925"&gt;Hudson扩展之插件开发 » Taobao QA Team&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2750481981776347376-635824328195985754?l=ping80life.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-jL_FFwuTIAO0KYuzUL8G_9Kh20/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-jL_FFwuTIAO0KYuzUL8G_9Kh20/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/-jL_FFwuTIAO0KYuzUL8G_9Kh20/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-jL_FFwuTIAO0KYuzUL8G_9Kh20/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PingsMemory/~4/oH1JEVdw_Yc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ping80life.blogspot.com/feeds/635824328195985754/comments/default" title="帖子评论" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2750481981776347376&amp;postID=635824328195985754" title="0 条评论" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/635824328195985754?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/635824328195985754?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PingsMemory/~3/oH1JEVdw_Yc/hudson-taobao-qa-team.html" title="Hudson扩展之插件开发 » Taobao QA Team" /><author><name>珍惜生活每一天</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://ping80life.blogspot.com/2012/02/hudson-taobao-qa-team.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkYCQXg4eCp7ImA9WhVTFUo.&quot;"><id>tag:blogger.com,1999:blog-2750481981776347376.post-4721877732518546362</id><published>2012-02-29T20:49:00.000-06:00</published><updated>2012-02-29T20:49:20.630-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-29T20:49:20.630-06:00</app:edited><title>hudson插件开发入门（一） - 雨中漫步 - 51CTO技术博客</title><content type="html">&lt;a href="http://drizzlewalk.blog.51cto.com/2203401/499586"&gt;hudson插件开发入门（一） - 雨中漫步 - 51CTO技术博客&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2750481981776347376-4721877732518546362?l=ping80life.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/yOFtfKDcSUxnHQxfxg4WTV6FlgA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yOFtfKDcSUxnHQxfxg4WTV6FlgA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/yOFtfKDcSUxnHQxfxg4WTV6FlgA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yOFtfKDcSUxnHQxfxg4WTV6FlgA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PingsMemory/~4/3cZ8gfMF3dI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ping80life.blogspot.com/feeds/4721877732518546362/comments/default" title="帖子评论" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2750481981776347376&amp;postID=4721877732518546362" title="0 条评论" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/4721877732518546362?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/4721877732518546362?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PingsMemory/~3/3cZ8gfMF3dI/hudson-51cto.html" title="hudson插件开发入门（一） - 雨中漫步 - 51CTO技术博客" /><author><name>珍惜生活每一天</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://ping80life.blogspot.com/2012/02/hudson-51cto.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QDQng6fip7ImA9WhVTFUs.&quot;"><id>tag:blogger.com,1999:blog-2750481981776347376.post-4406897946682903135</id><published>2012-02-29T20:36:00.000-06:00</published><updated>2012-02-29T20:36:13.616-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-29T20:36:13.616-06:00</app:edited><title>hudson插件开发糊涂虫o(︶︿︶)o清醒时分_百度空间</title><content type="html">&lt;a href="http://hi.baidu.com/newstud/blog/category/hudson%B2%E5%BC%FE%BF%AA%B7%A2"&gt;hudson插件开发糊涂虫o(︶︿︶)o清醒时分_百度空间&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2750481981776347376-4406897946682903135?l=ping80life.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/gLrvSEipdyxS8oBvyiZAIvwrVlI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gLrvSEipdyxS8oBvyiZAIvwrVlI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/gLrvSEipdyxS8oBvyiZAIvwrVlI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gLrvSEipdyxS8oBvyiZAIvwrVlI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PingsMemory/~4/Yb8N4lksITo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ping80life.blogspot.com/feeds/4406897946682903135/comments/default" title="帖子评论" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2750481981776347376&amp;postID=4406897946682903135" title="0 条评论" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/4406897946682903135?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/4406897946682903135?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PingsMemory/~3/Yb8N4lksITo/hudsonoo.html" title="hudson插件开发糊涂虫o(︶︿︶)o清醒时分_百度空间" /><author><name>珍惜生活每一天</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://ping80life.blogspot.com/2012/02/hudsonoo.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQNRXY-eyp7ImA9WhVTFUs.&quot;"><id>tag:blogger.com,1999:blog-2750481981776347376.post-3131621425101131742</id><published>2012-02-29T20:19:00.000-06:00</published><updated>2012-02-29T20:19:54.853-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-29T20:19:54.853-06:00</app:edited><title>Java中用XML Schema检验XML实战 - Michael Ma的博客 - ITeye技术网站</title><content type="html">&lt;a href="http://wenjuema.iteye.com/blog/644150"&gt;Java中用XML Schema检验XML实战 - Michael Ma的博客 - ITeye技术网站&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;上一篇文章"&lt;a title="XML Schema简介" href="http://wenjuema.iteye.com/blog/644128" target="_blank"&gt;XML Schema检验XML文档结构&lt;/a&gt;"中，简单介绍了XML Schema及其写法，这篇主要针对java开发者，在程序中检验XML的有效性。 &lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;由于程序中经常会对xml的validation进行检验，通过DOM解析再一项一项check的方式，陈旧而且写起来繁杂。本文介绍一种快速检验 xml的方法，借助javax.xml.validation包下的Validator, Schema,  SchemaFactory等类，通过传入XML Schema Definition(XSD)文件进行验证。&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;代码如下：&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;pre name="code" class="java"&gt;public static void main(String[] args) throws IOException, SAXException {   String xmlFile = "test.xml"  String xsdFile = "test.xsd"   // 1. Lookup a factory for the W3C XML Schema language  SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");   // 2. Compile the schema.   File schemaLocation = new File(xsdFile);  Schema schema = factory.newSchema(schemaLocation);   // 3. Get a validator from the schema.  Validator validator = schema.newValidator();   // 4. Parse the document you want to check.  Source source = new StreamSource(xmlFile);   // 5. Check the document  try {   validator.validate(source);   System.out.println(xmlFile  + " is valid.");   } catch (SAXException ex) {   System.out.println(xmlFile  + " is not valid because ");   System.out.println(ex.getMessage());  } }&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2750481981776347376-3131621425101131742?l=ping80life.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/3II3ZySlREJMClBMPpvEMYdI5UA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3II3ZySlREJMClBMPpvEMYdI5UA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/3II3ZySlREJMClBMPpvEMYdI5UA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3II3ZySlREJMClBMPpvEMYdI5UA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PingsMemory/~4/UbHb7OzZbLQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ping80life.blogspot.com/feeds/3131621425101131742/comments/default" title="帖子评论" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2750481981776347376&amp;postID=3131621425101131742" title="0 条评论" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/3131621425101131742?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/3131621425101131742?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PingsMemory/~3/UbHb7OzZbLQ/javaxml-schemaxml-michael-ma-iteye.html" title="Java中用XML Schema检验XML实战 - Michael Ma的博客 - ITeye技术网站" /><author><name>珍惜生活每一天</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://ping80life.blogspot.com/2012/02/javaxml-schemaxml-michael-ma-iteye.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEcAR3w7fyp7ImA9WhVTEk4.&quot;"><id>tag:blogger.com,1999:blog-2750481981776347376.post-8744945773846522274</id><published>2012-02-25T22:53:00.002-06:00</published><updated>2012-02-25T22:54:06.207-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-25T22:54:06.207-06:00</app:edited><title>Re: 研究一下怎么利用业余时间网上赚点儿钱？(转寄)</title><content type="html">发信人: coppoia (merlot), 信区: StartUp&lt;br&gt;标  题: Re: 研究一下怎么利用业余时间网上赚点儿钱？&lt;br&gt;发信站: BBS 未名空间站 (Sat Feb 25 11:59:15 2012, 美东)&lt;p&gt;&lt;p&gt;国内好多小站长。 都是建30-50个这样的小网站赚钱。你找找他们在国内的论坛。应该&lt;br&gt;可以学到好多经验。  不过靠google赚这钱有点靠天吃饭的味道。 怎么都不是很长久&lt;br&gt;的事。  &lt;p&gt;另外市场调查还是很重要的。 至少要知道你的竞争对手是哪些。 还有没有生存空间。&lt;br&gt; 机票/旅馆这类大网站已经有多少了。 这些是越大越有价格上的竞争力的。 人家根本&lt;br&gt;就是卖批发价。 搜索引擎也是专业的专业。&lt;p&gt;可以做的小网站有很多。 例如现在国内有钱人那么多。 共产党的局势又从来没稳定过&lt;br&gt;。 尤其对那些贪了赚了的。  你建个介绍美国绿卡投资的网站。 一步一步简单详细的&lt;br&gt;程序。  他们想看明白他们能不能做绿卡投资，至少要在你的网站上耗几个小时。 他&lt;br&gt;们在你网站的时间就是金钱啦。&lt;p&gt;&lt;p&gt;【 在 Uwin (Uwin) 的大作中提到: 】&lt;br&gt;: 这个话题实际上存在好多年了，但前几天看到本版有个哥们买了个网站，问大家的意见&lt;br&gt;: ，然后我好信儿也去了那个买卖网站的地方买了2个，想利用google adsense呀，&lt;br&gt;: affiliate program呀什么的赚点儿小钱，自己也挺喜欢搞网页设计的，就算玩吧。等&lt;br&gt;: 进入了这个领域才发现有太多的学问了，什么SEO优化呀，自动在各大网站发文章，自&lt;br&gt;: 动加入无数个facebook， google+1好友什么的，已经学习了一个多礼拜了，还是没什&lt;br&gt;: 么成效。&lt;br&gt;: 这是我弄的几个网站，大家可以从这里开始探讨怎么利用类似的网站赚钱，或敲门儿，&lt;br&gt;: 1。 &lt;a href="http://www.airlineticketsdeals.org"&gt;www.airlineticketsdeals.org&lt;/a&gt; 一个搜索旅馆和机票的地方，原来想即使不赚钱，&lt;br&gt;: 至少自己可以利用这个搜索便宜的deal，不知道各位童鞋觉得这个通吗？&lt;br&gt;: 2。 &lt;a href="http://www.iUnlockPlus.com"&gt;www.iUnlockPlus.com&lt;/a&gt; 顾名思义，是unlock/jailbreak iphone的服务，有中国哥&lt;br&gt;: ...................&lt;p&gt;&lt;p&gt;--&lt;p&gt;※ 来源:・WWW 未名空间站 海外: &lt;a href="http://mitbbs.com"&gt;mitbbs.com&lt;/a&gt; 中国: &lt;a href="http://mitbbs.cn"&gt;mitbbs.cn&lt;/a&gt;・[FROM: 71.174.]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2750481981776347376-8744945773846522274?l=ping80life.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/VK1jaR57MkSlPOEby1Jf1KD6K_c/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VK1jaR57MkSlPOEby1Jf1KD6K_c/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/VK1jaR57MkSlPOEby1Jf1KD6K_c/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VK1jaR57MkSlPOEby1Jf1KD6K_c/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PingsMemory/~4/Eb1_AjlIUfo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ping80life.blogspot.com/feeds/8744945773846522274/comments/default" title="帖子评论" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2750481981776347376&amp;postID=8744945773846522274" title="0 条评论" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/8744945773846522274?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/8744945773846522274?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PingsMemory/~3/Eb1_AjlIUfo/re_25.html" title="Re: 研究一下怎么利用业余时间网上赚点儿钱？(转寄)" /><author><name>珍惜生活每一天</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://ping80life.blogspot.com/2012/02/re_25.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEcFRXs-fyp7ImA9WhVTEk4.&quot;"><id>tag:blogger.com,1999:blog-2750481981776347376.post-8522736514857221734</id><published>2012-02-25T22:53:00.001-06:00</published><updated>2012-02-25T22:53:34.557-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-25T22:53:34.557-06:00</app:edited><title>Re: 研究一下怎么利用业余时间网上赚点儿钱？(转寄)</title><content type="html">发信人: Uwin (Uwin), 信区: StartUp&lt;br&gt;标  题: Re: 研究一下怎么利用业余时间网上赚点儿钱？&lt;br&gt;发信站: BBS 未名空间站 (Sat Feb 25 11:52:57 2012, 美东)&lt;p&gt;我用的是苹果电脑，有个软件叫rapidweaver，比苹果本身的iweb好用多了，我又下载&lt;br&gt;了个好看的模板，所以做出来就那样了，我自己也喜欢设计，所以正好。哪些朋友想做&lt;br&gt;点儿啥，我可以帮忙，比较快。可以给我留言。&lt;p&gt;回 drmj and dengfu, 对呀，这些都是靠人家吃饭，所以钱不好整，但大多是也都是自&lt;br&gt;动的，自己不用update太多，还好了。你们说道正点儿上了，流量是个大问题，不过有&lt;br&gt;一些捷径可以走，所以正在研究，像Senuke软件好像就能承担一部分这样的事情。&lt;p&gt;那个买卖网站叫 &lt;a href="http://flippa.com"&gt;flippa.com&lt;/a&gt; 但一定小心，上面基本上都是吹牛的，而且有些卖家，换&lt;br&gt;个domain名，内容一样，又继续卖，不好。&lt;p&gt;paypal 上注册比较简单，不用business名称，你自己的名字就行。&lt;p&gt;&lt;br&gt;--&lt;p&gt;※ 来源:・WWW 未名空间站 海外: &lt;a href="http://mitbbs.com"&gt;mitbbs.com&lt;/a&gt; 中国: &lt;a href="http://mitbbs.cn"&gt;mitbbs.cn&lt;/a&gt;・[FROM: 75.73.]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2750481981776347376-8522736514857221734?l=ping80life.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/PRhbWgBA7ROmbfwp4VuonGxnrHM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PRhbWgBA7ROmbfwp4VuonGxnrHM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/PRhbWgBA7ROmbfwp4VuonGxnrHM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PRhbWgBA7ROmbfwp4VuonGxnrHM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PingsMemory/~4/0sR5oxcRyhY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ping80life.blogspot.com/feeds/8522736514857221734/comments/default" title="帖子评论" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2750481981776347376&amp;postID=8522736514857221734" title="0 条评论" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/8522736514857221734?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/8522736514857221734?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PingsMemory/~3/0sR5oxcRyhY/re.html" title="Re: 研究一下怎么利用业余时间网上赚点儿钱？(转寄)" /><author><name>珍惜生活每一天</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://ping80life.blogspot.com/2012/02/re.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C04DSHczfCp7ImA9WhVTEk4.&quot;"><id>tag:blogger.com,1999:blog-2750481981776347376.post-3444666183935506180</id><published>2012-02-25T22:52:00.001-06:00</published><updated>2012-02-25T22:52:59.984-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-25T22:52:59.984-06:00</app:edited><title>研究一下怎么利用业余时间网上赚点儿钱？(转寄)</title><content type="html">发信人: Uwin (Uwin), 信区: StartUp&lt;br&gt;标  题: 研究一下怎么利用业余时间网上赚点儿钱？&lt;br&gt;关键字: 网站设计，affiliate， amazon,旅馆机票，网站流量&lt;br&gt;发信站: BBS 未名空间站 (Sat Feb 25 01:08:06 2012, 美东)&lt;p&gt;这个话题实际上存在好多年了，但前几天看到本版有个哥们买了个网站，问大家的意见&lt;br&gt;，然后我好信儿也去了那个买卖网站的地方买了2个，想利用google adsense呀，&lt;br&gt;affiliate program呀什么的赚点儿小钱，自己也挺喜欢搞网页设计的，就算玩吧。等&lt;br&gt;进入了这个领域才发现有太多的学问了，什么SEO优化呀，自动在各大网站发文章，自&lt;br&gt;动加入无数个facebook， google+1好友什么的，已经学习了一个多礼拜了，还是没什&lt;br&gt;么成效。&lt;br&gt;这是我弄的几个网站，大家可以从这里开始探讨怎么利用类似的网站赚钱，或敲门儿，&lt;p&gt;1。 &lt;a href="http://www.airlineticketsdeals.org"&gt;www.airlineticketsdeals.org&lt;/a&gt; 一个搜索旅馆和机票的地方，原来想即使不赚钱，&lt;br&gt;至少自己可以利用这个搜索便宜的deal，不知道各位童鞋觉得这个通吗？&lt;p&gt;2。 &lt;a href="http://www.iUnlockPlus.com"&gt;www.iUnlockPlus.com&lt;/a&gt; 顾名思义，是unlock/jailbreak iphone的服务，有中国哥&lt;br&gt;们想unlock iphone，站内告诉我，我免费把方法和文件发给你们。如果老外访问的话&lt;br&gt;，就自己交钱吧。实际上要是多费点儿功夫，网上可以找到免费的方法，我只是想买一&lt;br&gt;个这个网站看看。&lt;p&gt;3。 通过上面这两个学习过程中，发现amazon有affiliate，就是你自己随便做一个网&lt;br&gt;站，把amazon的e-store放在上面，如果有人从你这里转到amazon买东西，你就可以赚&lt;br&gt;些回扣了，以后自己通过自己的这个网站买，也能有点儿回扣。这是我做的网址 www.&lt;br&gt;GoodForYouInc.com&lt;p&gt;4. 就是怎么提高网站流量呢，这是大问题，我正在研究中，希望大家交流。这个也是&lt;br&gt;一个网站 &lt;a href="http://www.iPromoteDeal.com"&gt;www.iPromoteDeal.com&lt;/a&gt;，就是一些方法，所以这些服务你都可以outsourcing&lt;br&gt;，还比较便宜。&lt;p&gt;大家讨论讨论吧，我是一周前看了那个哥们的帖子才开始这些的，不值时间是不是白浪&lt;br&gt;费了，这一周着迷搞这个了，被老婆骂好几顿了，嘻嘻。&lt;br&gt;--&lt;p&gt;※ 来源:・WWW 未名空间站 海外: &lt;a href="http://mitbbs.com"&gt;mitbbs.com&lt;/a&gt; 中国: &lt;a href="http://mitbbs.cn"&gt;mitbbs.cn&lt;/a&gt;・[FROM: 75.73.]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2750481981776347376-3444666183935506180?l=ping80life.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/0cZeBZgSpB0AQkaRyC8NiJcXTYo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0cZeBZgSpB0AQkaRyC8NiJcXTYo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/0cZeBZgSpB0AQkaRyC8NiJcXTYo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0cZeBZgSpB0AQkaRyC8NiJcXTYo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PingsMemory/~4/COiJN_2Nh9s" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ping80life.blogspot.com/feeds/3444666183935506180/comments/default" title="帖子评论" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2750481981776347376&amp;postID=3444666183935506180" title="0 条评论" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/3444666183935506180?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/3444666183935506180?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PingsMemory/~3/COiJN_2Nh9s/blog-post_1195.html" title="研究一下怎么利用业余时间网上赚点儿钱？(转寄)" /><author><name>珍惜生活每一天</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://ping80life.blogspot.com/2012/02/blog-post_1195.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0EDRHo_cCp7ImA9WhVTEkw.&quot;"><id>tag:blogger.com,1999:blog-2750481981776347376.post-5925007702429306449</id><published>2012-02-25T19:27:00.000-06:00</published><updated>2012-02-25T19:27:55.448-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-25T19:27:55.448-06:00</app:edited><title>八阕 · 广角新闻 · 生　活：【日本人写的中国饮食安全攻略 让国人看了汗颜（组图）】</title><content type="html">&lt;a href="http://www.popyard.com/cgi-mod/newspage.cgi?num=1003819&amp;amp;r=0&amp;amp;v=0&amp;amp;j=0"&gt;八阕 · 广角新闻 · 生　活：【日本人写的中国饮食安全攻略 让国人看了汗颜（组图）】&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2750481981776347376-5925007702429306449?l=ping80life.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/D-CwQcSghj4uI5RO4kdFPnpIdc8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/D-CwQcSghj4uI5RO4kdFPnpIdc8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/D-CwQcSghj4uI5RO4kdFPnpIdc8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/D-CwQcSghj4uI5RO4kdFPnpIdc8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PingsMemory/~4/Oo_SH6GiLHc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ping80life.blogspot.com/feeds/5925007702429306449/comments/default" title="帖子评论" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2750481981776347376&amp;postID=5925007702429306449" title="0 条评论" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/5925007702429306449?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/5925007702429306449?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PingsMemory/~3/Oo_SH6GiLHc/blog-post_25.html" title="八阕 · 广角新闻 · 生　活：【日本人写的中国饮食安全攻略 让国人看了汗颜（组图）】" /><author><name>珍惜生活每一天</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://ping80life.blogspot.com/2012/02/blog-post_25.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkMMQHkzcCp7ImA9WhVTEEQ.&quot;"><id>tag:blogger.com,1999:blog-2750481981776347376.post-5390879399086814381</id><published>2012-02-24T09:48:00.000-06:00</published><updated>2012-02-24T09:48:01.788-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-24T09:48:01.788-06:00</app:edited><title>WTP Tutorials - JavaServer Faces Tools Tutorial</title><content type="html">&lt;a href="http://www.eclipse.org/webtools/jsf/docs/tutorial/JSFTools_1_0_tutorial.html"&gt;WTP Tutorials - JavaServer Faces Tools Tutorial&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Make the Web Page Editor the default editor for JSP pages&lt;/h3&gt;  The JSF Tools Project-contributed Web Page Editor (WPE) is NOT registered as the default editor for JSP files. You can make the WPE the default editor for JSP files by following these steps: &lt;ul&gt;&lt;li&gt;Navigate to "Window" -&amp;gt; "Preferences..." -&amp;gt; "General"  -&amp;gt; "Editors" -&amp;gt; "File Associations"&lt;/li&gt;&lt;li&gt;In the "File types" section, select "*.jsp"&lt;/li&gt;&lt;li&gt;In the "Associated editors" section, select "Web Page Editor"&lt;/li&gt;&lt;li&gt;Select the "Default" button&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2750481981776347376-5390879399086814381?l=ping80life.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/CR_PE0QU25RBHtudgnwe8gsRprA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CR_PE0QU25RBHtudgnwe8gsRprA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/CR_PE0QU25RBHtudgnwe8gsRprA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CR_PE0QU25RBHtudgnwe8gsRprA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PingsMemory/~4/L5aP4fozA_A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ping80life.blogspot.com/feeds/5390879399086814381/comments/default" title="帖子评论" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2750481981776347376&amp;postID=5390879399086814381" title="0 条评论" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/5390879399086814381?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/5390879399086814381?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PingsMemory/~3/L5aP4fozA_A/wtp-tutorials-javaserver-faces-tools_24.html" title="WTP Tutorials - JavaServer Faces Tools Tutorial" /><author><name>珍惜生活每一天</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://ping80life.blogspot.com/2012/02/wtp-tutorials-javaserver-faces-tools_24.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkMDRnwyfyp7ImA9WhVTEEQ.&quot;"><id>tag:blogger.com,1999:blog-2750481981776347376.post-9200283695957386325</id><published>2012-02-24T09:47:00.000-06:00</published><updated>2012-02-24T09:47:57.297-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-24T09:47:57.297-06:00</app:edited><title>WTP Tutorials - JavaServer Faces Tools Tutorial</title><content type="html">&lt;a href="http://www.eclipse.org/webtools/jsf/docs/tutorial/JSFTools_1_0_tutorial.html"&gt;WTP Tutorials - JavaServer Faces Tools Tutorial&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Make the Web Page Editor the default editor for JSP pages&lt;/h3&gt;  The JSF Tools Project-contributed Web Page Editor (WPE) is NOT registered as the default editor for JSP files. You can make the WPE the default editor for JSP files by following these steps: &lt;ul&gt;&lt;li&gt;Navigate to "Window" -&amp;gt; "Preferences..." -&amp;gt; "General"  -&amp;gt; "Editors" -&amp;gt; "File Associations"&lt;/li&gt;&lt;li&gt;In the "File types" section, select "*.jsp"&lt;/li&gt;&lt;li&gt;In the "Associated editors" section, select "Web Page Editor"&lt;/li&gt;&lt;li&gt;Select the "Default" button&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2750481981776347376-9200283695957386325?l=ping80life.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/jkiqP54EcL4aE0mHeyfCAWVNuX8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jkiqP54EcL4aE0mHeyfCAWVNuX8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/jkiqP54EcL4aE0mHeyfCAWVNuX8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jkiqP54EcL4aE0mHeyfCAWVNuX8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PingsMemory/~4/TLMHT-q7YIo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ping80life.blogspot.com/feeds/9200283695957386325/comments/default" title="帖子评论" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2750481981776347376&amp;postID=9200283695957386325" title="0 条评论" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/9200283695957386325?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/9200283695957386325?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PingsMemory/~3/TLMHT-q7YIo/wtp-tutorials-javaserver-faces-tools.html" title="WTP Tutorials - JavaServer Faces Tools Tutorial" /><author><name>珍惜生活每一天</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://ping80life.blogspot.com/2012/02/wtp-tutorials-javaserver-faces-tools.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkYAQ3Y_eSp7ImA9WhVTEEQ.&quot;"><id>tag:blogger.com,1999:blog-2750481981776347376.post-6146186294379398340</id><published>2012-02-24T09:42:00.000-06:00</published><updated>2012-02-24T09:42:22.841-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-24T09:42:22.841-06:00</app:edited><title>Eclipse plugin for HTML WYSIWYG editor - Stack Overflow</title><content type="html">&lt;a href="http://stackoverflow.com/questions/5437583/eclipse-plugin-for-html-wysiwyg-editor"&gt;Eclipse plugin for HTML WYSIWYG editor - Stack Overflow&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="post-text"&gt;&lt;p&gt;Since this is currently (2011-10-25) at 2nd  place in Google for a "Eclipse HTML WYSIWYG" query and the question  linked by Rafa de Castro dont give a complete answer, I feel that this  question needs an update.&lt;/p&gt;  &lt;hr /&gt;  &lt;p&gt;For now, the only available WYSIWYG tools for HTML I found are:&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.eclipse.org/webtools/jsf/main.php" rel="nofollow"&gt;WTP JavaServer Faces&lt;/a&gt;&lt;/strong&gt; contains a tool named &lt;strong&gt;Web Page Editor&lt;/strong&gt;. Nice, free and also serves as a visual editor.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.jboss.org/tools/download.html" rel="nofollow"&gt;JBoss Tools HTML Editor&lt;/a&gt;&lt;/strong&gt; is also free, neat, has two preview modes, but provides only simplest visual editing functionality.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.myeclipseide.com/module-htmlpages-display-pid-12.html" rel="nofollow"&gt;Eclipse Visual Designer&lt;/a&gt;&lt;/strong&gt; shipped with &lt;a href="http://www.myeclipseide.com/" rel="nofollow"&gt;MyEclipse&lt;/a&gt;.  It can even preview pages in IE/Firefox, but it has a huge disadvantage  - it's a payed software. Looks awesome, but I didnt try it, so I can't  say anything about quality.&lt;/li&gt;&lt;/ul&gt;  &lt;h2&gt;A note about intsallation.&lt;/h2&gt;  &lt;p&gt;Installing something into Eclipse is sometimes a pain, especially for a new user.&lt;/p&gt;  &lt;p&gt;So, if you want to install just an HTML editor from WTP or JBoss  without installing the whole thing with it, you can do the following  (steps are vadid at least for Eclipse 3.6 and 3.7.):&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;Open Eclipse, select &lt;code&gt;Help / Install New Software&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;In the &lt;code&gt;Work with:&lt;/code&gt; field input the update site address.&lt;/li&gt;&lt;/ul&gt;  &lt;h3&gt;For JBoss Tools:&lt;/h3&gt;  &lt;ul&gt;&lt;li&gt;Get the update site URL for the appropirate Eclipse version from &lt;a href="http://www.jboss.org/tools/download.html" rel="nofollow"&gt;here&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Select &lt;code&gt;JBoss Tool RichFaces&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;  &lt;h3&gt;For Web Pages Editor&lt;/h3&gt;  &lt;ul&gt;&lt;li&gt;Use an already existing update site, that look like &lt;code&gt;http://download.eclipse.org/releases/&lt;eclipse_version_name&gt;&lt;/eclipse_version_name&gt;&lt;/code&gt;&lt;/li&gt;&lt;li&gt;Select &lt;code&gt;Web Pages Editor&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;  &lt;p&gt;Now press &lt;code&gt;Next&lt;/code&gt; and prepare to wait for eternity. (You can speed up this process by disabling &lt;code&gt;Contact all update sites during install&lt;/code&gt; checkbox)&lt;/p&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2750481981776347376-6146186294379398340?l=ping80life.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/aJQe5sHzHCICGOkKEFfFO4_oTC0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aJQe5sHzHCICGOkKEFfFO4_oTC0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/aJQe5sHzHCICGOkKEFfFO4_oTC0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aJQe5sHzHCICGOkKEFfFO4_oTC0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PingsMemory/~4/VHadpMhstqg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ping80life.blogspot.com/feeds/6146186294379398340/comments/default" title="帖子评论" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2750481981776347376&amp;postID=6146186294379398340" title="0 条评论" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/6146186294379398340?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/6146186294379398340?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PingsMemory/~3/VHadpMhstqg/eclipse-plugin-for-html-wysiwyg-editor.html" title="Eclipse plugin for HTML WYSIWYG editor - Stack Overflow" /><author><name>珍惜生活每一天</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://ping80life.blogspot.com/2012/02/eclipse-plugin-for-html-wysiwyg-editor.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEcFSHo_eyp7ImA9WhVTEE8.&quot;"><id>tag:blogger.com,1999:blog-2750481981776347376.post-8372795948831644036</id><published>2012-02-23T13:40:00.000-06:00</published><updated>2012-02-23T13:40:19.443-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-23T13:40:19.443-06:00</app:edited><title>javaMail详细解析（转）_亮仔小空间_百度空间</title><content type="html">&lt;a href="http://hi.baidu.com/xhz12345/blog/item/41bd42dd6ae90be077c638f5.html"&gt;javaMail详细解析（转）_亮仔小空间_百度空间&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Example:&lt;br /&gt;&lt;br /&gt;    public void sendMail(String type) throws Exception {&lt;br /&gt;        Properties props = new Properties();&lt;br /&gt;        props.put("mail.smtp.host", host);&lt;br /&gt;        props.put("mail.smtp.auth", "false");&lt;br /&gt;&lt;br /&gt;        Session session = Session.getInstance(props);&lt;br /&gt;        MimeMessage message = new MimeMessage(session);&lt;br /&gt;&lt;br /&gt;        //setup addresses&lt;br /&gt;        message.setRecipients(MimeMessage.RecipientType.TO, to);                   // multiple addresses in "to" must seperated by ","&lt;br /&gt;        if(cc!=null){message.setRecipients(MimeMessage.RecipientType.CC, cc);}&lt;br /&gt;        if(bcc!=null){message.setRecipients(MimeMessage.RecipientType.BCC, bcc);}&lt;br /&gt;&lt;br /&gt;        //setup subject, body and attachment&lt;br /&gt;        message.setSubject(subject);&lt;br /&gt;&lt;br /&gt;        Multipart mp = new MimeMultipart(); &lt;br /&gt;        MimeBodyPart mbp = new MimeBodyPart(); &lt;br /&gt;        if("html".equals(type)){&lt;br /&gt;            mbp.setContent(body, "text/html");&lt;br /&gt;        }else{&lt;br /&gt;            mbp.setText(body);&lt;br /&gt;        }&lt;br /&gt;        mp.addBodyPart(mbp);&lt;br /&gt;       &lt;br /&gt;        for (String attachment : attachmentfilenames) {   &lt;br /&gt;            mbp=new MimeBodyPart(); &lt;br /&gt;            FileDataSource fds=new FileDataSource(attachment);  &lt;br /&gt;            mbp.setDataHandler(new DataHandler(fds));  &lt;br /&gt;            mbp.setFileName(fds.getName());  &lt;br /&gt;            mp.addBodyPart(mbp); &lt;br /&gt;        }  &lt;br /&gt;        message.setContent(mp);  &lt;br /&gt;       &lt;br /&gt;        //send message&lt;br /&gt;        message.saveChanges(); // implicit with send()&lt;br /&gt;&lt;br /&gt;        Transport.send(message);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div id="blog_text" class="cnt"&gt;&lt;span style="color: red"&gt;版权声明：本文可以自由转载，转载时请务必以超链接形式标明文章原始出处和作者信息及本声明&lt;/span&gt;&lt;br /&gt;作者:cleverpig(作者的Blog:&lt;a href="http://blog.matrix.org.cn/page/cleverpig" target="_new"&gt;http://blog.matrix.org.cn/page/cleverpig&lt;/a&gt;)&lt;br /&gt;原文:&lt;a href="http://www.matrix.org.cn/resource/article/44/44101_JavaMail.html" target="_new"&gt;http://www.matrix.org.cn/resource/article/44/44101_JavaMail.html&lt;/a&gt;&lt;br /&gt;关键字:java,mail,pop,smtp&lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;一、JavaMail API简介&lt;/span&gt;&lt;br /&gt;JavaMail API是读取、撰写、发送电子信息的可选包。我们可用它来建立如Eudora、Foxmail、MS Outlook  Express一般的邮件用户代理程序（Mail User Agent,简称MUA）。而不是像sendmail或者其它的邮件传输代理（Mail  Transfer  Agent，简称MTA）程序那样可以传送、递送、转发邮件。从另外一个角度来看，我们这些电子邮件用户日常用MUA程序来读写邮件，而MUA依赖着 MTA处理邮件的递送。&lt;br /&gt;在清楚了到MUA与MTA之间的关系后，让我们看看JavaMail API是如何提供信息访问功能的吧！JavaMail API被设计用于以不依赖协议的方式去发送和接收电子信息，这个API被分为两大部分：&lt;br /&gt;&lt;br /&gt;基本功能：如何以不依赖于协议的方式发送接收电子信息，这也是本文所要描述的，不过在下文中，大家将看到这只是一厢情愿而已。&lt;br /&gt;第二个部分则是依赖特定协议的，比如SMTP、POP、IMAP、NNTP协议。在这部分的JavaMail API是为了和服务器通讯，并不在本文的内容中。&lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;二、相关协议一览&lt;/span&gt;&lt;br /&gt;在我们步入JavaMail API之前，先看一下API所涉及的协议。以下便是大家日常所知、所乐于使用的4大信息传输协议：&lt;br /&gt;SMTP&lt;br /&gt;POP&lt;br /&gt;IMAP&lt;br /&gt;MIME&lt;br /&gt;当然，上面的4个协议，并不是全部，还有NNTP和其它一些协议可用于传输信息，但是由于不常用到，所以本文便不提及了。理解这4个基本的协议有助于我们 更好的使用JavaMail API。然而JavaMail  API是被设计为与协议无关的，目前我们并不能克服这些协议的束缚。确切的说，如果我们使用的功能并不被我们选择的协议支持，那么JavaMail  API并不可能如魔术师一样神奇的赋予我们这种能力。&lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;1．SMTP&lt;/span&gt;&lt;br /&gt;简单邮件传输协议定义了递送邮件的机制。在下文中，我们将使用基于Java-Mail的程序与公司或者ISP的SMTP服务器进行通讯。这个SMTP服务 器将邮件转发到接收者的SMTP服务器，直至最后被接收者通过POP或者IMAP协议获取。这并不需要SMTP服务器使用支持授权的邮件转发，但是却的确 要注意SMTP服务器的正确设置（SMTP服务器的设置与JavaMail API无关）。&lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;2．POP&lt;/span&gt;&lt;br /&gt;POP是一种邮局协议，目前为第3个版本，即众所周知的POP3。POP定义了一种用户如何获得邮件的机制。它规定了每个用户使用一个单独的邮箱。大多数 人在使用POP时所熟悉的功能并非都被支持，例如查看邮箱中的新邮件数量。而这个功能是微软的Outlook内建的，那么就说明微软Outlook之类的 邮件客户端软件是通过查询最近收到的邮件来计算新邮件的数量来实现前面所说的功能。因此在我们使用JavaMail  API时需要注意，当需要获得如前面所讲的新邮件数量之类的信息时，我们不得不自己进行计算。&lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;3．IMAP&lt;/span&gt;&lt;br /&gt;IMAP使用在接收信息的高级协议，目前版本为第4版，所以也被称为IMAP4。需要注意的是在使用IMAP时，邮件服务器必须支持该协议。从这个方面 讲，我们并不能完全使用IMAP来替代POP，不能期待IMAP在任何地方都被支持。假如邮件服务器支持IMAP，那么我们的邮件程序将能够具有以下被 IMAP所支持的特性：每个用户在服务器上可具有多个目录，这些目录能在多个用户之间共享。&lt;br /&gt;其与POP相比高级之处显而易见，但是在尝试采取IMAP时，我们认识到它并不是十分完美的：由于IMAP需要从其它服务器上接收新信息，将这些信息递送 给用户，维护每个用户的多个目录，这都为邮件服务器带来了高负载。并且IMAP与POP的一个不同之处是POP用户在接收邮件时将从邮件服务器上下载邮 件，而IMAP允许用户直接访问邮件目录，所以在邮件服务器进行备份作业时，由于每个长期使用此邮件系统的用户所用的邮件目录会占有很大的空间，这将直接 导致邮件服务器上磁盘空间暴涨。&lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;4．MIME&lt;/span&gt;&lt;br /&gt;MIME并不是用于传送邮件的协议，它作为多用途邮件的扩展定义了邮件内容的格式：信息格式、附件格式等等。一些RFC标准都涉及了MIME：RFC  822, RFC 2045, RFC 2046, RFC 2047，有兴趣的Matrixer可以阅读一下。而作为JavaMail  API的开发者，我们并不需关心这些格式定义，但是这些格式被用在了程序中。&lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;5．NNTP和其它的第三方协议&lt;/span&gt;&lt;br /&gt;正因为JavaMail API在设计时考虑到与第三方协议实现提供商之间的分离，故我们可以很容易的添加一些第三方协议。SUN维护着一个第三方协议实现提供商的列表：&lt;a href="http://java.sun.com/products/javamail/Third_Party.html" target="_new"&gt;http://java.sun.com/products/javamail/Third_Party.html&lt;/a&gt;，通过此列表我们可以找到所需要的而又不被SUN提供支持的第三方协议：比如NNTP这个新闻组协议和S/MIME这个安全的MIME协议。&lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;三、安装&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;1．安装JavaMail&lt;/span&gt;&lt;br /&gt;为了使用JavaMail API，需要从&lt;a href="ttp://java.sun.com/products/javamail/downloads/index.html" target="_new"&gt;http://java.sun.com/products/javamail/downloads/index.html&lt;/a&gt;下载文件名格式为javamail-[version].zip的文件（这个文件中包括了JavaMail实现），并将其中的mail.jar文件添加到CLASSPATH中。这个实现提供了对SMTP、IMAP4、POP3的支持。&lt;br /&gt;注意：在安装JavaMail实现之后，我们将在demo目录中发现许多有趣的简单实例程序。&lt;br /&gt;在安装了JavaMail之后,我们还需要安装JavaBeans Activation Framework，因为这个框架是JavaMail  API所需要的。如果我们使用J2EE的话，那么我们并无需单独下载JavaMail，因为它存在于J2EE.jar中，只需将J2EE.jar加入到 CLASSPATH即可。&lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;2．安装JavaBeans Activation Framework&lt;/span&gt;&lt;br /&gt;从&lt;a href="http://java.sun.com/products/javabeans/glasgow/jaf.html" target="_new"&gt;http://java.sun.com/products/javabeans/glasgow/jaf.html&lt;/a&gt;下 载JavaBeans Activation  Framework，并将其添加到CLASSPATH中。此框架增加了对任何数据块的分类、以及对它们的处理的特性。这些特性是JavaMail  API需要的。虽然听起来这些特性非常模糊，但是它对于我们的JavaMail API来说只是提供了基本的MIME类型支持。&lt;br /&gt;到此为止，我们应当把mail.jar和activation.jar都添加到了CLASSPATH中。&lt;br /&gt;当然如果从方便的角度讲，直接把这两个Jar文件复制到JRE目录的lib/ext目录中也可以。&lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;四、初次认识JavaMail API&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;1．了解我们的JavaMail环境&lt;/span&gt;&lt;br /&gt;&lt;span style="color: green"&gt;A．纵览JavaMail核心类结构&lt;/span&gt;&lt;br /&gt;打开JavaMail.jar文件，我们将发现在javax.mail的包下面存在着一些核心类：Session、Message、Address、 Authenticator、Transport、Store、Folder。而且在javax.mail.internet包中还有一些常用的子类。&lt;br /&gt;&lt;span style="color: green"&gt;B．Session&lt;/span&gt;&lt;br /&gt;Session类定义了基本的邮件会话。就像Http会话那样，我们进行收发邮件的工作都是基于这个会话的。Session对象利用了java.util.Properties对象获得了邮件服务器、用户名、密码信息和整个应用程序都要使用到的共享信息。&lt;br /&gt;Session类的构造方法是私有的，所以我们可以使用Session类提供的getDefaultInstance()这个静态工厂方法获得一个默认的Session对象：&lt;br /&gt;&lt;pre class="overflow"&gt;Properties props = new Properties();&lt;br /&gt;// fill props with any information&lt;br /&gt;Session session = Session.getDefaultInstance(props, null);&lt;/pre&gt;&lt;br /&gt;或者使用getInstance()这个静态工厂方法获得自定义的Session:&lt;br /&gt;&lt;pre class="overflow"&gt;Properties props = new Properties();&lt;br /&gt;// fill props with any information&lt;br /&gt;Session session = Session.getInstance(props, null);&lt;/pre&gt;&lt;br /&gt;从上面的两个例子中不难发现，getDefaultInstance()和getInstance()方法的第二个参数都是null，这是因为在上面的例子中并没有使用到邮件授权，下文中将对授权进行详细介绍。&lt;br /&gt;从很多的实例看，在对mail server进行访问的过程中使用共享的Session是足够的，即使是工作在多个用户邮箱的模式下也不例外。&lt;br /&gt;&lt;br /&gt;&lt;span style="color: green"&gt;C．Message&lt;/span&gt;&lt;br /&gt;当我们建立了Session对象后，便可以被发送的构造信息体了。在这里SUN提供了Message类型来帮助开发者完成这项工作。由于Message是 一个抽象类，大多数情况下，我们使用javax.mail.internet.MimeMessage这个子类，该类是使用MIME类型、MIME信息头 的邮箱信息。信息头只能使用US-ASCII字符，而非ASCII字符将通过编码转换为ASCII的方式使用。&lt;br /&gt;为了建立一个MimeMessage对象，我们必须将Session对象作为MimeMessage构造方法的参数传入：&lt;br /&gt;&lt;pre class="overflow"&gt;MimeMessage message = new MimeMessage(session);&lt;/pre&gt;&lt;br /&gt;注意：对于MimeMessage类来讲存在着多种构造方法，比如使用输入流作为参数的构造方法。&lt;br /&gt;&lt;br /&gt;在建立了MimeMessage对象后，我们需要设置它的各个part，对于MimeMessage类来说，这些part就是MimePart接口。最基本的设置信息内容的方法就是通过表示信息内容和米么类型的参数调用setContent()方法：&lt;br /&gt;&lt;pre class="overflow"&gt;message.setContent("Hello", "text/plain");&lt;/pre&gt;&lt;br /&gt;然而，如果我们所使用的MimeMessage中信息内容是文本的话，我们便可以直接使用setText()方法来方便的设置文本内容。&lt;br /&gt;&lt;pre class="overflow"&gt;message.setText("Hello");&lt;/pre&gt;&lt;br /&gt;前面所讲的两种方法，对于文本信息，后者更为合适。而对于其它的一些信息类型，比如HTML信息，则要使用前者。&lt;br /&gt;别忘记了，使用setSubject()方法对邮件设置邮件主题：&lt;br /&gt;&lt;pre class="overflow"&gt;message.setSubject("First");&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: green"&gt;D．Address&lt;/span&gt;&lt;br /&gt;到这里，我们已经建立了Session和Message，下面将介绍如何使用邮件地址类：Address。像Message一样，Address类也是一个抽象类，所以我们将使用javax.mail.internet.InternetAddress这个子类。&lt;br /&gt;通过传入代表邮件地址的字符串，我们可以建立一个邮件地址类：&lt;br /&gt;&lt;pre class="overflow"&gt;Address address = new InternetAddress("president@whitehouse.gov");&lt;/pre&gt;&lt;br /&gt;如果要在邮件地址后面增加名字的话，可以通过传递两个参数：代表邮件地址和名字的字符串来建立一个具有邮件地址和名字的邮件地址类：&lt;br /&gt;&lt;pre class="overflow"&gt;Address address = new InternetAddress("president@whitehouse.gov", "George Bush");&lt;/pre&gt;&lt;br /&gt;本文在这里所讲的邮件地址类是为了设置邮件信息的发信人和收信人而准备的，在建立了邮件地址类后，我们通过message的setFrom()和setReplyTo()两种方法设置邮件的发信人：&lt;br /&gt;&lt;pre class="overflow"&gt;message.setFrom(address);&lt;br /&gt;message.setReplyTo(address);&lt;/pre&gt;&lt;br /&gt;若在邮件中存在多个发信人地址，我们可用addForm()方法增加发信人：&lt;br /&gt;&lt;pre class="overflow"&gt;Address address[] = ...;&lt;br /&gt;message.addFrom(address);&lt;/pre&gt;&lt;br /&gt;为了设置收信人，我们使用addRecipient()方法增加收信人，此方法需要使用Message.RecipientType的常量来区分收信人的类型：&lt;br /&gt;&lt;pre class="overflow"&gt;message.addRecipient(type, address)&lt;/pre&gt;&lt;br /&gt;下面是Message.RecipientType的三个常量:&lt;br /&gt;Message.RecipientType.TO&lt;br /&gt;Message.RecipientType.CC&lt;br /&gt;Message.RecipientType.BCC&lt;br /&gt;因此，如果我们要发送邮件给总统，并发用一个副本给第一夫人的话，下面的方法将被用到：&lt;br /&gt;&lt;pre class="overflow"&gt;Address toAddress = new InternetAddress("vice.president@whitehouse.gov");&lt;br /&gt;Address ccAddress = new InternetAddress("first.lady@whitehouse.gov");&lt;br /&gt;message.addRecipient(Message.RecipientType.TO, toAddress);&lt;br /&gt;message.addRecipient(Message.RecipientType.CC, ccAddress);&lt;/pre&gt;&lt;br /&gt;JavaMail API并没有提供检查邮件地址有效性的机制。当然我们可以自己完成这个功能：验证邮件地址的字符是否按照RFC822规定的格式书写或者通过DNS服务器上的MX记录验证等。&lt;br /&gt;&lt;br /&gt;&lt;span style="color: green"&gt;E．Authenticator&lt;/span&gt;&lt;br /&gt;像java.net类那样，JavaMail  API通过使用授权者类（Authenticator）以用户名、密码的方式访问那些受到保护的资源，在这里“资源”就是指邮件服务器。在 javax.mail包中可以找到这个JavaMail的授权者类（Authenticator）。&lt;br /&gt;在使用Authenticator这个抽象类时，我们必须采用继承该抽象类的方式，并且该继承类必须具有返回 PasswordAuthentication对象（用于存储认证时要用到的用户名、密码）getPasswordAuthentication()方 法。并且要在Session中进行注册，使Session能够了解在认证时该使用哪个类。&lt;br /&gt;下面代码片断中的MyAuthenticator就是一个Authenticator的子类。&lt;br /&gt;&lt;pre class="overflow"&gt;Properties props = new Properties();&lt;br /&gt;// fill props with any information&lt;br /&gt;Authenticator auth = new MyAuthenticator();&lt;br /&gt;Session session = Session.getDefaultInstance(props, auth);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: green"&gt;F．Transport&lt;/span&gt;&lt;br /&gt;在发送信息时，Transport类将被用到。这个类实现了发送信息的协议（通称为SMTP），此类是一个抽象类，我们可以使用这个类的静态方法send()来发送消息：&lt;br /&gt;&lt;pre class="overflow"&gt;Transport.send(message);&lt;/pre&gt;&lt;br /&gt;当然，方法是多样的。我们也可由Session获得相应协议对应的Transport实例。并通过传递用户名、密码、邮件服务器主机名等参数建立与邮件服务器的连接，并使用sendMessage()方法将信息发送，最后关闭连接：&lt;br /&gt;&lt;pre class="overflow"&gt;message.saveChanges(); // implicit with send()&lt;br /&gt;Transport transport = session.getTransport("smtp");&lt;br /&gt;transport.connect(host, username, password);&lt;br /&gt;transport.sendMessage(message, message.getAllRecipients());&lt;br /&gt;transport.close();&lt;/pre&gt;&lt;br /&gt;评论：上面的方法是一个很好的方法，尤其是在我们在同一个邮件服务器上发送多个邮件时。因为这时我们将在连接邮件服务器后连续发送邮件，然后再关闭掉连 接。send()这个基本的方法是在每次调用时进行与邮件服务器的连接的，对于在同一个邮件服务器上发送多个邮件来讲可谓低效的方式。&lt;br /&gt;注意：如果需要在发送邮件过程中监控mail命令的话，可以在发送前设置debug标志：&lt;br /&gt;&lt;pre class="overflow"&gt;session.setDebug(true)。&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: green"&gt;G．Store和Folder&lt;/span&gt;&lt;br /&gt;接收邮件和发送邮件很类似都要用到Session。但是在获得Session后，我们需要从Session中获取特定类型的Store，然后连接到 Store，这里的Store代表了存储邮件的邮件服务器。在连接Store的过程中，极有可能需要用到用户名、密码或者Authenticator。&lt;br /&gt;&lt;pre class="overflow"&gt;// Store store = session.getStore("imap");&lt;br /&gt;Store store = session.getStore("pop3");&lt;br /&gt;store.connect(host, username, password);&lt;/pre&gt;&lt;br /&gt;在连接到Store后，一个Folder对象即目录对象将通过Store的getFolder()方法被返回，我们可从这个Folder中读取邮件信息：&lt;br /&gt;&lt;pre class="overflow"&gt;Folder folder = store.getFolder("INBOX");&lt;br /&gt;folder.open(Folder.READ_ONLY);&lt;br /&gt;Message message[] = folder.getMessages();&lt;/pre&gt;&lt;br /&gt;上面的例子首先从Store中获得INBOX这个Folder（对于POP3协议只有一个名为INBOX的Folder有效），然后以只读 （Folder.READ_ONLY）的方式打开Folder，最后调用Folder的getMessages()方法得到目录中所有Message的数 组。&lt;br /&gt;&lt;br /&gt;注意：对于POP3协议只有一个名为INBOX的Folder有效，而对于IMAP协议，我们可以访问多个Folder（想想前面讲的IMAP协议）。而 且SUN在设计Folder的getMessages()方法时采取了很智能的方式：首先接收新邮件列表，然后再需要的时候（比如读取邮件内容）才从邮件 服务器读取邮件内容。&lt;br /&gt;在读取邮件时，我们可以用Message类的getContent()方法接收邮件或是writeTo()方法将邮件保存，getContent()方法只接收邮件内容（不包含邮件头），而writeTo()方法将包括邮件头。&lt;br /&gt;&lt;pre class="overflow"&gt;System.out.println(((MimeMessage)message).getContent());&lt;/pre&gt;&lt;br /&gt;在读取邮件内容后，别忘记了关闭Folder和Store。&lt;br /&gt;&lt;pre class="overflow"&gt;folder.close(aBoolean);&lt;br /&gt;store.close();&lt;/pre&gt;&lt;br /&gt;传递给Folder.close()方法的boolean 类型参数表示是否在删除操作邮件后更新Folder。&lt;br /&gt;&lt;br /&gt;&lt;span style="color: green"&gt;H．继续向前进！&lt;/span&gt;&lt;br /&gt;在讲解了以上的七个Java Mail核心类定义和理解了简单的代码片断后，下文将详细讲解怎样使用这些类实现JavaMail API所要完成的高级功能。&lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;五、使用JavaMail API&lt;/span&gt;&lt;br /&gt;在明确了JavaMail API的核心部分如何工作后，本人将带领大家学习一些使用Java Mail API任务案例。&lt;br /&gt;&lt;span style="color: blue"&gt;1．发送邮件&lt;/span&gt;&lt;br /&gt;在获得了Session后，建立并填入邮件信息，然后发送它到邮件服务器。这便是使用Java Mail API发送邮件的过程，在发送邮件之前，我们需要设置SMTP服务器：通过设置Properties的mail.smtp.host属性。&lt;br /&gt;&lt;pre class="overflow"&gt;String host = ...;&lt;br /&gt;String from = ...;&lt;br /&gt;String to = ...;&lt;br /&gt;&lt;br /&gt;// Get system properties&lt;br /&gt;Properties props = System.getProperties();&lt;br /&gt;&lt;br /&gt;// Setup mail server&lt;br /&gt;props.put("mail.smtp.host", host);&lt;br /&gt;&lt;br /&gt;// Get session&lt;br /&gt;Session session = Session.getDefaultInstance(props, null);&lt;br /&gt;&lt;br /&gt;// Define message&lt;br /&gt;MimeMessage message = new MimeMessage(session);&lt;br /&gt;message.setFrom(new InternetAddress(from));&lt;br /&gt;message.addRecipient(Message.RecipientType.TO,&lt;br /&gt;     new InternetAddress(to));&lt;br /&gt;message.setSubject("Hello JavaMail");&lt;br /&gt;message.setText("Welcome to JavaMail");&lt;br /&gt;// Send message&lt;br /&gt;Transport.send(message);&lt;/pre&gt;&lt;br /&gt;由于建立邮件信息和发送邮件的过程中可能会抛出异常，所以我们需要将上面的代码放入到try-catch结构块中。&lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;2．接收邮件&lt;/span&gt;&lt;br /&gt;为了在读取邮件，我们获得了session，并且连接到了邮箱的相应store，打开相应的Folder，然后得到我们想要的邮件，当然别忘记了在结束时关闭连接。&lt;br /&gt;&lt;pre class="overflow"&gt;String host = ...;&lt;br /&gt;String username = ...;&lt;br /&gt;String password = ...;&lt;br /&gt;&lt;br /&gt;// Create empty properties&lt;br /&gt;Properties props = new Properties();&lt;br /&gt;&lt;br /&gt;// Get session&lt;br /&gt;Session session = Session.getDefaultInstance(props, null);&lt;br /&gt;&lt;br /&gt;// Get the store&lt;br /&gt;Store store = session.getStore("pop3");&lt;br /&gt;store.connect(host, username, password);&lt;br /&gt;&lt;br /&gt;// Get folder&lt;br /&gt;Folder folder = store.getFolder("INBOX");&lt;br /&gt;folder.open(Folder.READ_ONLY);&lt;br /&gt;&lt;br /&gt;// Get directory&lt;br /&gt;Message message[] = folder.getMessages();&lt;br /&gt;&lt;br /&gt;for (int i=0, n=message.length; i&lt;n; i="" close="" connection="" pre=""&gt;&lt;br /&gt;上面的代码所作的是从邮箱中读取每个邮件，并且显示邮件的发信人地址和主题。从技术角度讲，这里存在着一个异常的可能：当发信人地址为空时，getFrom()[0]将抛出异常。&lt;br /&gt;&lt;br /&gt;下面的代码片断有效的说明了如何读取邮件内容，在显示每个邮件发信人和主题后，将出现用户提示从而得到用户是否读取该邮件的确认，如果输入YES的话，我 们可用Message.writeTo(java.io.OutputStream  os)方法将邮件内容输出到控制台上，关于Message.writeTo()的具体用法请看JavaMail API。&lt;br /&gt;&lt;pre class="overflow"&gt;BufferedReader reader = new BufferedReader (&lt;br /&gt;     new InputStreamReader(System.in));&lt;br /&gt;&lt;br /&gt;// Get directory&lt;br /&gt;Message message[] = folder.getMessages();&lt;br /&gt;for (int i=0, n=message.length; i&lt;n; i="" do="" you="" want="" to="" read="" yes="" quit="" string="" line="reader.readLine();" if="" else="" pre=""&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;3．删除邮件和标志&lt;/span&gt;&lt;br /&gt;设置与message相关的Flags是删除邮件的常用方法。这些Flags表示了一些系统定义和用户定义的不同状态。在Flags类的内部类Flag中预定义了一些标志：&lt;br /&gt;Flags.Flag.ANSWERED&lt;br /&gt;Flags.Flag.DELETED&lt;br /&gt;Flags.Flag.DRAFT&lt;br /&gt;Flags.Flag.FLAGGED&lt;br /&gt;Flags.Flag.RECENT&lt;br /&gt;Flags.Flag.SEEN&lt;br /&gt;Flags.Flag.USER&lt;br /&gt;但需要在使用时注意的：标志存在并非意味着这个标志被所有的邮件服务器所支持。例如，对于删除邮件的操作，POP协议不支持上面的任何一个。所以要确定哪 些标志是被支持的——通过访问一个已经打开的Folder对象的getPermanetFlags()方法，它将返回当前被支持的Flags类对象。&lt;br /&gt;删除邮件时，我们可以设置邮件的DELETED标志：&lt;br /&gt;&lt;pre class="overflow"&gt;message.setFlag(Flags.Flag.DELETED, true);&lt;/pre&gt;&lt;br /&gt;但是首先要采用READ_WRITE的方式打开Folder：&lt;br /&gt;&lt;pre class="overflow"&gt;folder.open(Folder.READ_WRITE);&lt;/pre&gt;&lt;br /&gt;在对邮件进行删除操作后关闭Folder时，需要传递一个true作为对删除邮件的擦除确认。&lt;br /&gt;&lt;pre class="overflow"&gt;folder.close(true);&lt;/pre&gt;&lt;br /&gt;Folder类中另一种用于删除邮件的方法expunge()也同样可删除邮件，但是它并不为sun提供的POP3实现支持，而其它第三方提供的POP3实现支持或者并不支持这种方法。&lt;br /&gt;另外，介绍一种检查某个标志是否被设置的方法：Message.isSet(Flags.Flag flag)方法，其中参数为被检查的标志。&lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;4．邮件认证&lt;/span&gt;&lt;br /&gt;我们在前面已经学会了如何使用Authenticator类来代替直接使用用户名和密码这两字符串作为 Session.getDefaultInstance()或者Session.getInstance()方法的参数。在前面的小试牛刀后，现在我们将 了解到全面认识一下邮件认证。&lt;br /&gt;我们在此取代了直接使用邮件服务器主机名、用户名、密码这三个字符串作为连接到POP3 Store的方式，使用存储了邮件服务器主机名信息的属性文件，并在获得Session时传入自定义的Authenticator实例：&lt;br /&gt;&lt;pre class="overflow"&gt;// Setup properties&lt;br /&gt;Properties props = System.getProperties();&lt;br /&gt;props.put("mail.pop3.host", host);&lt;br /&gt;&lt;br /&gt;// Setup authentication, get session&lt;br /&gt;Authenticator auth = new PopupAuthenticator();&lt;br /&gt;Session session = Session.getDefaultInstance(props, auth);&lt;br /&gt;&lt;br /&gt;// Get the store&lt;br /&gt;Store store = session.getStore("pop3");&lt;br /&gt;store.connect();&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;PopupAuthenticator类继承了抽象类Authenticator，并且通过重载Authenticator类的 getPasswordAuthentication()方法返回PasswordAuthentication类对象。而 getPasswordAuthentication()方法的参数param是以逗号分割的用户名、密码组成的字符串。&lt;br /&gt;&lt;pre class="overflow"&gt;import javax.mail.*;&lt;br /&gt;import java.util.*;&lt;br /&gt;&lt;br /&gt;public class PopupAuthenticator extends Authenticator {&lt;br /&gt;&lt;br /&gt;     public PasswordAuthentication getPasswordAuthentication(String param) {&lt;br /&gt;       String username, password;&lt;br /&gt;&lt;br /&gt;       StringTokenizer st = new StringTokenizer(param, ",");&lt;br /&gt;       username = st.nextToken();&lt;br /&gt;       password = st.nextToken();&lt;br /&gt;&lt;br /&gt;       return new PasswordAuthentication(username, password);&lt;br /&gt;     }&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;5．回复邮件&lt;/span&gt;&lt;br /&gt;回复邮件的方法很简单：使用Message类的reply()方法，通过配置回复邮件的收件人地址和主题（如果没有提供主题的话，系统将默认将“Re：” 作为邮件的主体），这里不需要设置任何的邮件内容，只要复制发信人或者reply-to到新的收件人。而reply()方法中的boolean参数表示是 否将邮件回复给发送者（参数值为false），或是恢复给所有人（参数值为true）。&lt;br /&gt;补充一下，reply-to地址需要在发信时使用setReplyTo()方法设置。&lt;br /&gt;&lt;pre class="overflow"&gt;MimeMessage reply = (MimeMessage)message.reply(false);&lt;br /&gt;reply.setFrom(new InternetAddress("president@whitehouse.gov"));&lt;br /&gt;reply.setText("Thanks");&lt;br /&gt;Transport.send(reply);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;6．转发邮件&lt;/span&gt;&lt;br /&gt;转发邮件的过程不如前面的回复邮件那样简单，它将建立一个转发邮件，这并非一个方法就能做到。&lt;br /&gt;每个邮件是由多个部分组成，每个部分称为一个邮件体部分，是一个BodyPart类对象，对于MIME类型邮件来讲就是MimeBodyPart类对象。 这些邮件体包含在成为Multipart的容器中对于MIME类型邮件来讲就是MimeMultiPart类对象。在转发邮件时，我们建立一个文字邮件体 部分和一个被转发的文字邮件体部分，然后将这两个邮件体放到一个Multipart中。说明一下，复制一个邮件内容到另一个邮件的方法是仅复制它的 DataHandler（数据处理者）即可。这是由JavaBeans Activation  Framework定义的一个类，它提供了对邮件内容的操作命令的访问、管理了邮件内容操作，是不同的数据源和数据格式之间的一致性接口。&lt;br /&gt;&lt;pre class="overflow"&gt;// Create the message to forward&lt;br /&gt;Message forward = new MimeMessage(session);&lt;br /&gt;&lt;br /&gt;// Fill in header&lt;br /&gt;forward.setSubject("Fwd: " + message.getSubject());&lt;br /&gt;forward.setFrom(new InternetAddress(from));&lt;br /&gt;forward.addRecipient(Message.RecipientType.TO,&lt;br /&gt;     new InternetAddress(to));&lt;br /&gt;&lt;br /&gt;// Create your new message part&lt;br /&gt;BodyPart messageBodyPart = new MimeBodyPart();&lt;br /&gt;messageBodyPart.setText(&lt;br /&gt;     "Here you go with the original message:  ");&lt;br /&gt;&lt;br /&gt;// Create a multi-part to combine the parts&lt;br /&gt;Multipart multipart = new MimeMultipart();&lt;br /&gt;multipart.addBodyPart(messageBodyPart);&lt;br /&gt;&lt;br /&gt;// Create and fill part for the forwarded content&lt;br /&gt;messageBodyPart = new MimeBodyPart();&lt;br /&gt;messageBodyPart.setDataHandler(message.getDataHandler());&lt;br /&gt;&lt;br /&gt;// Add part to multi part&lt;br /&gt;multipart.addBodyPart(messageBodyPart);&lt;br /&gt;&lt;br /&gt;// Associate multi-part with message&lt;br /&gt;forward.setContent(multipart);&lt;br /&gt;&lt;br /&gt;// Send message&lt;br /&gt;Transport.send(forward);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;7．使用附件&lt;/span&gt;&lt;br /&gt;附件作为与邮件相关的资源经常以文本、表格、图片等格式出现，如流行的邮件客户端一样，我们可以用JavaMail API从邮件中获取附件或是发送带有附件的邮件。&lt;br /&gt;&lt;br /&gt;&lt;span style="color: green"&gt;A．发送带有附件的邮件&lt;/span&gt;&lt;br /&gt;发送带有附件的邮件的过程有些类似转发邮件，我们需要建立一个完整邮件的各个邮件体部分，在第一个部分（即我们的邮件内容文字）后，增加一个具有DataHandler的附件而不是在转发邮件时那样复制第一个部分的DataHandler。&lt;br /&gt;&lt;br /&gt;如果我们将文件作为附件发送，那么要建立FileDataSource类型的对象作为附件数据源；如果从URL读取数据作为附件发送，那么将要建立URLDataSource类型的对象作为附件数据源。&lt;br /&gt;&lt;br /&gt;然后将这个数据源（FileDataSource或是URLDataSource）对象作为DataHandler类构造方法的参数传入，从而建立一个DataHandler对象作为数据源的DataHandler。&lt;br /&gt;&lt;br /&gt;接着将这个DataHandler设置为邮件体部分的DataHandler。这样就完成了邮件体与附件之间的关联工作，下面的工作就是BodyPart的setFileName()方法设置附件名为原文件名。&lt;br /&gt;&lt;br /&gt;最后将两个邮件体放入到Multipart中，设置邮件内容为这个容器Multipart，发送邮件。&lt;br /&gt;&lt;pre class="overflow"&gt;// Define message&lt;br /&gt;Message message = new MimeMessage(session);&lt;br /&gt;message.setFrom(new InternetAddress(from));&lt;br /&gt;message.addRecipient(Message.RecipientType.TO,&lt;br /&gt;     new InternetAddress(to));&lt;br /&gt;message.setSubject("Hello JavaMail Attachment");&lt;br /&gt;&lt;br /&gt;// Create the message part&lt;br /&gt;BodyPart messageBodyPart = new MimeBodyPart();&lt;br /&gt;&lt;br /&gt;// Fill the message&lt;br /&gt;messageBodyPart.setText("Pardon Ideas");&lt;br /&gt;&lt;br /&gt;Multipart multipart = new MimeMultipart();&lt;br /&gt;multipart.addBodyPart(messageBodyPart);&lt;br /&gt;&lt;br /&gt;// Part two is attachment&lt;br /&gt;messageBodyPart = new MimeBodyPart();&lt;br /&gt;DataSource source = new FileDataSource(filename);&lt;br /&gt;messageBodyPart.setDataHandler(new DataHandler(source));&lt;br /&gt;messageBodyPart.setFileName(filename);&lt;br /&gt;multipart.addBodyPart(messageBodyPart);&lt;br /&gt;&lt;br /&gt;// Put parts in message&lt;br /&gt;message.setContent(multipart);&lt;br /&gt;&lt;br /&gt;// Send the message&lt;br /&gt;Transport.send(message);&lt;/pre&gt;&lt;br /&gt;如果我们使用servlet实现发送带有附件的邮件，则必须上传附件给servlet，这时需要注意提交页面form中对编码类型的设置应为multipart/form-data。&lt;br /&gt;&lt;pre class="overflow"&gt;&lt;form enctype="multipart/form-data" method="post" action="/myservlet"&gt;&lt;br /&gt;     &lt;input name="thefile" type="file"&gt;&lt;br /&gt;     &lt;input value="Upload" type="submit"&gt;&lt;br /&gt;&lt;/form&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: green"&gt;B．读取邮件中的附件&lt;/span&gt;&lt;br /&gt;读取邮件中的附件的过程要比发送它的过程复杂一点。因为带有附件的邮件是多部分组成的，我们必须处理每一个部分获得邮件的内容和附件。&lt;br /&gt;但是如何辨别邮件信息内容和附件呢？Sun在Part类（BodyPart类实现的接口类）中提供了getDisposition()方法让开发者获得邮 件体部分的部署类型，当该部分是附件时，其返回之将是Part.ATTACHMENT。但附件也可以没有部署类型的方式存在或者部署类型为 Part.INLINE，无论部署类型为Part.ATTACHMENT还是Part.INLINE，我们都能把该邮件体部分导出保存。&lt;br /&gt;&lt;pre class="overflow"&gt;Multipart mp = (Multipart)message.getContent();&lt;br /&gt;&lt;br /&gt;for (int i=0, n=multipart.getCount(); i&lt;n; part="" string="" disposition="part.getDisposition();" if="" disposition="" pre=""&gt;&lt;br /&gt;下列代码中使用了saveFile方法是自定义的方法，它根据附件的文件名建立一个文件，如果本地磁盘上存在名为附件的文件，那么将在文件名后增加数字表示区别。然后从邮件体中读取数据写入到本地文件中（代码省略）。&lt;br /&gt;&lt;pre class="overflow"&gt;// from saveFile()&lt;br /&gt;File file = new File(filename);&lt;br /&gt;for (int i=0; file.exists(); i++) {&lt;br /&gt;     file = new File(filename+i);&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;以上是邮件体部分被正确设置的简单例子，如果邮件体部分的部署类型为null，那么我们通过获得邮件体部分的MIME类型来判断其类型作相应的处理，代码结构框架如下：&lt;br /&gt;&lt;pre class="overflow"&gt;if (disposition == null) {&lt;br /&gt;     // Check if plain&lt;br /&gt;     MimeBodyPart mbp = (MimeBodyPart)part;&lt;br /&gt;     if (mbp.isMimeType("text/plain")) {&lt;br /&gt;       // Handle plain&lt;br /&gt;     } else {&lt;br /&gt;       // Special non-attachment cases here of&lt;br /&gt;       // image/gif, text/html, ...&lt;br /&gt;     }&lt;br /&gt;...&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;8．处理HTML邮件&lt;/span&gt;&lt;br /&gt;前面的例子中发送的邮件都是以文本为内容的（除了附件），下面将介绍如何接收和发送基于HTML的邮件。&lt;br /&gt;&lt;span style="color: green"&gt;A．发送HTML邮件&lt;/span&gt;&lt;br /&gt;假如我们需要发送一个HTML文件作为邮件内容，并使邮件客户端在读取邮件时获取相关的图片或者文字的话，只要设置邮件内容为html代码，并设置内容类型为text/html即可：&lt;br /&gt;&lt;pre class="overflow"&gt;String htmlText = "&lt;h1&gt;Hello&lt;/h1&gt;" +&lt;br /&gt;     "&lt;img src="http://www.jguru.com/images/logo.gif" /&gt;";&lt;br /&gt;message.setContent(htmlText, "text/html"));&lt;/pre&gt;&lt;br /&gt;请注意：这里的图片并不是在邮件中内嵌的，而是在URL中定义的。邮件接收者只有在线时才能看到。&lt;br /&gt;在接收邮件时，如果我们使用JavaMail API接收邮件的话是无法实现以HTML方式显示邮件内容的。因为JavaMail API邮件内容视为二进制流。所以要显示HTML内容的邮件，我们必须使用JEditorPane或者第三方HTML展现组件。&lt;br /&gt;&lt;br /&gt;以下代码显示了如何使用JEditorPane显示邮件内容：&lt;br /&gt;&lt;pre class="overflow"&gt;if (message.getContentType().equals("text/html")) {&lt;br /&gt;     String content = (String)message.getContent();&lt;br /&gt;     JFrame frame = new JFrame();&lt;br /&gt;     JEditorPane text = new JEditorPane("text/html", content);&lt;br /&gt;     text.setEditable(false);&lt;br /&gt;     JScrollPane pane = new JScrollPane(text);&lt;br /&gt;     frame.getContentPane().add(pane);&lt;br /&gt;     frame.setSize(300, 300);&lt;br /&gt;     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);&lt;br /&gt;     frame.show();&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: green"&gt;B．在邮件中包含图片&lt;/span&gt;&lt;br /&gt;如果我们在邮件中使用HTML作为内容，那么最好将HTML中使用的图片作为邮件的一部分，这样无论是否在线都会正确的显示HTML中的图片。处理方法就 是将HTML中用到的图片作为邮件附件并使用特殊的cid URL作为图片的引用，这个cid就是对图片附件的Content-ID头的引用。&lt;br /&gt;处理内嵌图片就像向邮件中添加附件一样，不同之处在于我们必须通过设置图片附件所在的邮件体部分的header中Content-ID为一个随机字符串，并在HTML中img的src标记中设置为该字符串。这样就完成了图片附件与HTML的关联。&lt;br /&gt;&lt;pre class="overflow"&gt;String file = ...;&lt;br /&gt;&lt;br /&gt;// Create the message&lt;br /&gt;Message message = new MimeMessage(session);&lt;br /&gt;&lt;br /&gt;// Fill its headers&lt;br /&gt;message.setSubject("Embedded Image");&lt;br /&gt;message.setFrom(new InternetAddress(from));&lt;br /&gt;message.addRecipient(Message.RecipientType.TO,&lt;br /&gt;     new InternetAddress(to));&lt;br /&gt;&lt;br /&gt;// Create your new message part&lt;br /&gt;BodyPart messageBodyPart = new MimeBodyPart();&lt;br /&gt;String htmlText = "&lt;h1&gt;Hello&lt;/h1&gt;" +&lt;br /&gt;     "&lt;img src="cid:memememe" /&gt;";&lt;br /&gt;messageBodyPart.setContent(htmlText, "text/html");&lt;br /&gt;&lt;br /&gt;// Create a related multi-part to combine the parts&lt;br /&gt;MimeMultipart multipart = new MimeMultipart("related");&lt;br /&gt;multipart.addBodyPart(messageBodyPart);&lt;br /&gt;&lt;br /&gt;// Create part for the image&lt;br /&gt;messageBodyPart = new MimeBodyPart();&lt;br /&gt;&lt;br /&gt;// Fetch the image and associate to part&lt;br /&gt;DataSource fds = new FileDataSource(file);&lt;br /&gt;messageBodyPart.setDataHandler(new DataHandler(fds));&lt;br /&gt;messageBodyPart.setHeader("Content-ID","&lt;memememe&gt;");&lt;br /&gt;&lt;br /&gt;// Add part to multi-part&lt;br /&gt;multipart.addBodyPart(messageBodyPart);&lt;br /&gt;&lt;br /&gt;// Associate multi-part with message&lt;br /&gt;message.setContent(multipart);&lt;/memememe&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;9．在邮件中搜索短语&lt;/span&gt;&lt;br /&gt;JavaMail API提供了过滤器机制，它被用来建立搜索短语。这个短语由javax.mail.search包中的SearchTerm抽象类来定义，在定义后我们便可以使用Folder的Search()方法在Folder中查找邮件：&lt;br /&gt;&lt;pre class="overflow"&gt;SearchTerm st = ...;&lt;br /&gt;Message[] msgs = folder.search(st);&lt;/pre&gt;&lt;br /&gt;下面有22个不同的类（继承了SearchTerm类）供我们使用：&lt;br /&gt;AND terms (class AndTerm)&lt;br /&gt;OR terms (class OrTerm)&lt;br /&gt;NOT terms (class NotTerm)&lt;br /&gt;SENT DATE terms (class SentDateTerm)&lt;br /&gt;CONTENT terms (class BodyTerm)&lt;br /&gt;HEADER terms (FromTerm / FromStringTerm, RecipientTerm / RecipientStringTerm, SubjectTerm, etc.)&lt;br /&gt;使用这些类定义的断语集合，我们可以构造一个逻辑表达式，并在Folder中进行搜索。下面是一个实例：在Folder中搜索邮件主题含有“ADV”字符串或者发信人地址为friend@public.com的邮件。&lt;br /&gt;&lt;pre class="overflow"&gt;SearchTerm st =&lt;br /&gt;     new OrTerm(&lt;br /&gt;       new SubjectTerm("ADV:"),&lt;br /&gt;       new FromStringTerm("friend@public.com"));&lt;br /&gt;Message[] msgs = folder.search(st);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;六、参考资源&lt;/span&gt;&lt;br /&gt;&lt;a href="http://java.sun.com/products/javamail/index.jsp" target="_new"&gt;JavaMail API Home&lt;/a&gt;&lt;br /&gt;&lt;a href="http://java.sun.com/developer/onlineTraining/JavaMail/contents.html" target="_new"&gt;Sun’s JavaMail API基础&lt;/a&gt;&lt;br /&gt;&lt;a href="http://java.sun.com/products/javabeans/glasgow/jaf.html" target="_new"&gt;JavaBeans Activation Framework Home&lt;/a&gt;&lt;br /&gt;&lt;a href="http://mail.java.sun.com/archives/javamail-interest.html" target="_new"&gt;javamail-interest mailing list&lt;/a&gt;&lt;br /&gt;&lt;a href="http://java.sun.com/products/javamail/FAQ.html" target="_new"&gt;Sun's JavaMail FAQ&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.jguru.com/faq/JavaMail" target="_new"&gt;jGuru's JavaMail FAQ&lt;/a&gt;&lt;br /&gt;&lt;a href="http://java.sun.com/products/javamail/Third_Party.html" target="_new"&gt;Third Party Products List&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;七、代码下载&lt;/span&gt;&lt;br /&gt;&lt;a href="http://java.sun.com/developer/onlineTraining/JavaMail/exercises.html" target="_new"&gt;http://java.sun.com/developer/onlineTraining/JavaMail/exercises.html&lt;/a&gt;&lt;/n;&gt;&lt;/pre&gt;&lt;/n;&gt;&lt;/pre&gt;&lt;/n;&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2750481981776347376-8372795948831644036?l=ping80life.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/SEzj2Q7T6Rta76WQfmTqwFITr90/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SEzj2Q7T6Rta76WQfmTqwFITr90/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/SEzj2Q7T6Rta76WQfmTqwFITr90/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SEzj2Q7T6Rta76WQfmTqwFITr90/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PingsMemory/~4/KMvIrZazwQw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ping80life.blogspot.com/feeds/8372795948831644036/comments/default" title="帖子评论" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2750481981776347376&amp;postID=8372795948831644036" title="0 条评论" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/8372795948831644036?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/8372795948831644036?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PingsMemory/~3/KMvIrZazwQw/javamail.html" title="javaMail详细解析（转）_亮仔小空间_百度空间" /><author><name>珍惜生活每一天</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://ping80life.blogspot.com/2012/02/javamail.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEICQH44eip7ImA9WhRaGEU.&quot;"><id>tag:blogger.com,1999:blog-2750481981776347376.post-7135666021807466145</id><published>2012-02-21T21:49:00.000-06:00</published><updated>2012-02-21T21:49:21.032-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-21T21:49:21.032-06:00</app:edited><title>Windows 7 - Notices but does not 'see' external usb hard drive</title><content type="html">&lt;a href="http://social.technet.microsoft.com/Forums/en/w7itprohardware/thread/dd9cd509-f9ac-4295-a75b-863f92f5595f"&gt;Windows 7 - Notices but does not 'see' external usb hard drive&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The resolution was to:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Plug in and turn on the external USB hard drive&lt;/li&gt;&lt;li&gt;Right mouse click on My Computer&lt;/li&gt;&lt;li&gt;Left click on Manage&lt;/li&gt;&lt;li&gt;Left click on Device Manager&lt;/li&gt;&lt;li&gt;Expand the USB list&lt;/li&gt;&lt;li&gt;Find the USB device for your USB Hard Drive (in my case it was the one that had no description)&lt;/li&gt;&lt;li&gt;Right mouse click - Uninstall&lt;/li&gt;&lt;li&gt;Turn off the external USB hard drive&lt;/li&gt;&lt;li&gt;Turn on the external USB hard drive and let it find and install the driver&lt;/li&gt;&lt;li&gt;It should work&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2750481981776347376-7135666021807466145?l=ping80life.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/HKVqkQCAdU4zygxGiRxvJbNQzf8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HKVqkQCAdU4zygxGiRxvJbNQzf8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/HKVqkQCAdU4zygxGiRxvJbNQzf8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HKVqkQCAdU4zygxGiRxvJbNQzf8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PingsMemory/~4/CTxiBLkZ54o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ping80life.blogspot.com/feeds/7135666021807466145/comments/default" title="帖子评论" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2750481981776347376&amp;postID=7135666021807466145" title="0 条评论" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/7135666021807466145?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/7135666021807466145?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PingsMemory/~3/CTxiBLkZ54o/windows-7-notices-but-does-not-see.html" title="Windows 7 - Notices but does not 'see' external usb hard drive" /><author><name>珍惜生活每一天</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://ping80life.blogspot.com/2012/02/windows-7-notices-but-does-not-see.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEMDSHkzeSp7ImA9WhRaGEU.&quot;"><id>tag:blogger.com,1999:blog-2750481981776347376.post-7255884752479806033</id><published>2012-02-21T21:47:00.000-06:00</published><updated>2012-02-21T21:47:59.781-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-21T21:47:59.781-06:00</app:edited><title>How to run Unix shell script from java code? - Stack Overflow</title><content type="html">&lt;a href="http://stackoverflow.com/questions/525212/how-to-run-unix-shell-script-from-java-code"&gt;How to run Unix shell script from java code? - Stack Overflow&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="post-text"&gt;&lt;p&gt;You should really look at &lt;a href="http://www.oamk.fi/%7Ekaril/jdkdoc/docs/api/java/lang/ProcessBuilder.html" rel="nofollow"&gt;Process Builder&lt;/a&gt;.  It is really built for this kind of thing.&lt;/p&gt;  &lt;pre&gt;&lt;code&gt;ProcessBuilder pb = new ProcessBuilder("myshellScript.sh", "myArg1", "myArg2");  Map&lt;string, string=""&gt; env = pb.environment();  env.put("VAR1", "myValue");  env.remove("OTHERVAR");  env.put("VAR2", env.get("VAR1") + "suffix");  pb.directory(new File("myDir"));  Process p = pb.start(); &lt;/string,&gt;&lt;/code&gt;&lt;/pre&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2750481981776347376-7255884752479806033?l=ping80life.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/_OCeDIN2gF1HSiwBXQ6w2fnyPAs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_OCeDIN2gF1HSiwBXQ6w2fnyPAs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/_OCeDIN2gF1HSiwBXQ6w2fnyPAs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_OCeDIN2gF1HSiwBXQ6w2fnyPAs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PingsMemory/~4/C_NtkX_-7sg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ping80life.blogspot.com/feeds/7255884752479806033/comments/default" title="帖子评论" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2750481981776347376&amp;postID=7255884752479806033" title="0 条评论" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/7255884752479806033?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2750481981776347376/posts/default/7255884752479806033?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PingsMemory/~3/C_NtkX_-7sg/how-to-run-unix-shell-script-from-java.html" title="How to run Unix shell script from java code? - Stack Overflow" /><author><name>珍惜生活每一天</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://ping80life.blogspot.com/2012/02/how-to-run-unix-shell-script-from-java.html</feedburner:origLink></entry></feed>

