<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>liuzongan</title>
    <description></description>
    <link>http://liuzongan.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>关于java 压缩与解压缩</title>
        <author>liuzongan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liuzongan.javaeye.com">liuzongan</a>&nbsp;
          链接：<a href="http://liuzongan.javaeye.com/blog/213002" style="color:red;">http://liuzongan.javaeye.com/blog/213002</a>&nbsp;
          发表时间: 2008年07月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>最近做了一个项目关于java 视频与音频压缩与解压缩,也就是二进制流的压缩,大家有没有好的算法,怎么样压缩比较好??不要使用java自带的类,因为效果不是很理想,为了解决这个问题已经找了好久,我的觉得需要用C来压缩与解压缩了,请教一下了<img src="../../images/smiles/icon_smile.gif" alt="" /></p>
          <br/>
          <span style="color:red;">
            <a href="http://liuzongan.javaeye.com/blog/213002#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 09 Jul 2008 11:40:53 +0800</pubDate>
        <link>http://liuzongan.javaeye.com/blog/213002</link>
        <guid>http://liuzongan.javaeye.com/blog/213002</guid>
      </item>
      <item>
        <title>好不容易打个电话</title>
        <author>liuzongan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liuzongan.javaeye.com">liuzongan</a>&nbsp;
          链接：<a href="http://liuzongan.javaeye.com/blog/201557" style="color:red;">http://liuzongan.javaeye.com/blog/201557</a>&nbsp;
          发表时间: 2008年06月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          好不容易打个电话，就知道怪人家不发信息，我那破手机你又不是不知道，发信息都难死了，你真是把我给气死……就知道说人，信号不好我还要在外面发，家里发布出去。
          <br/>
          <span style="color:red;">
            <a href="http://liuzongan.javaeye.com/blog/201557#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 09 Jun 2008 20:30:52 +0800</pubDate>
        <link>http://liuzongan.javaeye.com/blog/201557</link>
        <guid>http://liuzongan.javaeye.com/blog/201557</guid>
      </item>
      <item>
        <title>关于java动态运行问题  真急 ……</title>
        <author>liuzongan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liuzongan.javaeye.com">liuzongan</a>&nbsp;
          链接：<a href="http://liuzongan.javaeye.com/blog/190171" style="color:red;">http://liuzongan.javaeye.com/blog/190171</a>&nbsp;
          发表时间: 2008年05月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">String s="System.out.println(\"hello World\")";</pre>
<p>&nbsp;用什么类可以让它执行打印:helloWorld,&nbsp;&nbsp;比如class.method(s)就可以让它运行啊,知道的大哥说一声</p>
<p>&nbsp;</p>
<pre name="code" class="java">String str="String abc=new String(\"abc\");"</pre>
<p>&nbsp;这个又怎么样运行呢, 并且存在abc这个对象,呵呵,由于项目中需要,谢谢 了</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://liuzongan.javaeye.com/blog/190171#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 06 May 2008 13:47:33 +0800</pubDate>
        <link>http://liuzongan.javaeye.com/blog/190171</link>
        <guid>http://liuzongan.javaeye.com/blog/190171</guid>
      </item>
      <item>
        <title>我想成为一名java高手</title>
        <author>liuzongan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liuzongan.javaeye.com">liuzongan</a>&nbsp;
          链接：<a href="http://liuzongan.javaeye.com/blog/189500" style="color:red;">http://liuzongan.javaeye.com/blog/189500</a>&nbsp;
          发表时间: 2008年05月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>上次我发了一个贴子（现在有些迷茫!!!），我明白了一些问题，总而言之，我就是想成为一名java高手，如果要成为java高手要经过哪些修炼呢？比如要看什么书之类的啊、高手的标准是什么呢，大家可以讨论讨论一下，我实在是不知道了自己要看些什么书，自认为都会是的，其实都不会，也不知道什么叫做'精通',呵呵，大家说说看，我真的迷茫了</p>
          <br/>
          <span style="color:red;">
            <a href="http://liuzongan.javaeye.com/blog/189500#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 04 May 2008 20:14:14 +0800</pubDate>
        <link>http://liuzongan.javaeye.com/blog/189500</link>
        <guid>http://liuzongan.javaeye.com/blog/189500</guid>
      </item>
      <item>
        <title>现在有些迷茫!!!</title>
        <author>liuzongan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liuzongan.javaeye.com">liuzongan</a>&nbsp;
          链接：<a href="http://liuzongan.javaeye.com/blog/189127" style="color:red;">http://liuzongan.javaeye.com/blog/189127</a>&nbsp;
          发表时间: 2008年05月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>最近都不知道自己干些什么，也不知道下步该学些什么，对以后会更好的发展呢，本人一真想去做游戏开（directs）发去，可是又不知道它的前景怎么样，又想去做C++，又不知道该不该学（好多人是从C++转到java）呵呵，都不知道学些什么，向大哥们请教directX/openGl（游戏开发）&nbsp;&nbsp; java&nbsp;&nbsp; c++市场上的工资高低，哪一种最有前途，如果有更好的发展方向不防说说看<img src="../../images/smiles/icon_biggrin.gif" alt="" />，谢谢了迷茫迷茫迷茫迷茫迷茫，真的迷茫！！！</p>
<p>&nbsp;&nbsp;&nbsp; (后来加的)今天看到了这样的帖子(<a href="http://www.javaeye.com/topic/189685">http://www.javaeye.com/topic/189685</a>)我和他的感觉 是一样的,做j2ee开发好像天天就是增删改查,没有什么特殊,一点挑战性的工作都没有,就是觉没有意思,也感觉java工资也就高不起来了,就想转到其它的语言.呵呵</p>
          <br/>
          <span style="color:red;">
            <a href="http://liuzongan.javaeye.com/blog/189127#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 03 May 2008 23:29:56 +0800</pubDate>
        <link>http://liuzongan.javaeye.com/blog/189127</link>
        <guid>http://liuzongan.javaeye.com/blog/189127</guid>
      </item>
      <item>
        <title>请教服务器推送技术????</title>
        <author>liuzongan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liuzongan.javaeye.com">liuzongan</a>&nbsp;
          链接：<a href="http://liuzongan.javaeye.com/blog/187578" style="color:red;">http://liuzongan.javaeye.com/blog/187578</a>&nbsp;
          发表时间: 2008年04月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>由于项目的需要,最近学习了一下glassfish服务器推送推送技术,但还是感觉它不是想象中的那么好,除了glassfish自带的服务器推送技术与lightsSteamer外,还有没有其它的服务器推送技术的框架????</p>
          <br/>
          <span style="color:red;">
            <a href="http://liuzongan.javaeye.com/blog/187578#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 28 Apr 2008 15:41:36 +0800</pubDate>
        <link>http://liuzongan.javaeye.com/blog/187578</link>
        <guid>http://liuzongan.javaeye.com/blog/187578</guid>
      </item>
      <item>
        <title>请教:spring+hbernate search+spring mvc建立索引问题</title>
        <author>liuzongan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liuzongan.javaeye.com">liuzongan</a>&nbsp;
          链接：<a href="http://liuzongan.javaeye.com/blog/186693" style="color:red;">http://liuzongan.javaeye.com/blog/186693</a>&nbsp;
          发表时间: 2008年04月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>最近做了个hibernate search搜索,但出现了一个问题,就是save()时不能建立索引(保存时有'刘宗安'这个数据的), 我用下面的代码:</p>
<pre name="code" class="java">  Query query = parser.parse("刘宗安");
   org.hibernate.Query hibQuery = fullTextSession.createFullTextQuery(query, clz);
   result = hibQuery.list();</pre>
<p>&nbsp;查询不出来啊,result返回0,但保存时在我的索引目录下自动新件了一个文件(好像是索引文件,但是查询不出来),现在用代码手动方式建立索引</p>
<pre name="code" class="java">List&lt;SubPhoto&gt; subPhotoL = super.getObjects();
      for (SubPhoto subPhotoIndex : subPhotoL)
     {
            fullTextSession.index(subPhotoIndex);
      }</pre>
<p>&nbsp;再进行查询,result就有数据了,但我发现我删除一条记录时,可以删除索引(我测试过了)</p>
<p>我的jar是:hibernate-annotations-3.3.1.GA&nbsp;&nbsp;&nbsp; hibernate-search-3.0.1.GA&nbsp; hibernate-3.2.6.ga</p>
<p>spring2.5</p>
<p>我不知道是否要加这个Listener(我没有加)</p>
<pre name="code" class="xml">&lt;hibernate-configuration&gt;
&lt;session-factory&gt;
...
&lt;event type="post-collection-recreate"/&gt;
&lt;listener class="org.hibernate.search.event.FullTextIndexCollectionEventListener"/&gt;
&lt;/event&gt;
&lt;event type="post-collection-remove"/&gt;
&lt;listener class="org.hibernate.search.event.FullTextIndexCollectionEventListener"/&gt;
&lt;/event&gt;
&lt;event type="post-collection-update"/&gt;
&lt;listener class="org.hibernate.search.event.FullTextIndexCollectionEventListener"/&gt;
&lt;/event&gt;
&lt;/session-factory&gt;
&lt;/hibernate-configuration&gt;</pre>
<p>&nbsp;好像下面一句话说,不用加了listener</p>
<p>Those additional event listeners have been introduced in Hibernate 3.2.6. note the FullTextIndexCollectionEventListener<br />usage. You need to explicitly reference those event listeners unless you use Hibernate Annotations<br />3.3.1 and above.</p>
<p>是不是这样啊?????</p>
          <br/>
          <span style="color:red;">
            <a href="http://liuzongan.javaeye.com/blog/186693#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Apr 2008 12:22:58 +0800</pubDate>
        <link>http://liuzongan.javaeye.com/blog/186693</link>
        <guid>http://liuzongan.javaeye.com/blog/186693</guid>
      </item>
      <item>
        <title>glassfish服务器推送技术</title>
        <author>liuzongan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liuzongan.javaeye.com">liuzongan</a>&nbsp;
          链接：<a href="http://liuzongan.javaeye.com/blog/183975" style="color:red;">http://liuzongan.javaeye.com/blog/183975</a>&nbsp;
          发表时间: 2008年04月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>昨天就了一下glassfish例子 ,与大家分享一下</p>
<p>新建一个servlet:</p>
<pre name="code" class="java">package org.comet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.sun.enterprise.web.connector.grizzly.comet.CometContext;
import com.sun.enterprise.web.connector.grizzly.comet.CometEngine;

public class CometChat extends HttpServlet
{

	/**
	 * Constructor of the object.
	 */
	CometEngine engine = null;
	CometContext metaContext = null;

	public CometChat()
	{
		super();
	}

	/**
	 * Destruction of the servlet. &lt;br&gt;
	 */
	public void destroy()
	{
		super.destroy(); // Just puts "destroy" string in log
		// Put your code here
	}

	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		CometResponseHandler handler = null;

		response.setContentType("text/plain");
		response.setStatus(HttpServletResponse.SC_OK);
		if(request.getRequestURI().equals(request.getContextPath()+"/servlet/CometChat")){
			handler = new CometResponseHandler(request.getContextPath()+"/servlet/CometChat");
			handler.attach(response);
			metaContext.addCometHandler(handler);
		}

		PrintWriter writer = response.getWriter();
		writer.flush();
		writer.println("---START---");
		writer.flush();

	}


	/**
	 * Initialization of the servlet. &lt;br&gt;
	 * 
	 * @throws ServletException
	 *             if an error occurs
	 */
	public void init() throws ServletException
	{
		// Put your code here
		super.init();
		engine = CometEngine.getEngine();
		metaContext = engine.register("/servlet/CometChat");

		Thread t = new Thread()
		{
			public int i = 0;

			public void run()
			{
				while (true)
				{

					try
					{
						Thread.sleep(10000);
						metaContext.notify(new Integer(i++));
					}
					catch (IOException e)
					{
						e.printStackTrace();
					}
					catch (InterruptedException e)
					{
						e.printStackTrace();
						return;
					}
				}
			}
		};

		t.start();

	}

}
</pre>
<p>&nbsp;然后有一个JavaBean</p>
<pre name="code" class="java">package org.comet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.http.HttpServletResponse;

import com.sun.enterprise.web.connector.grizzly.comet.CometContext;
import com.sun.enterprise.web.connector.grizzly.comet.CometEngine;
import com.sun.enterprise.web.connector.grizzly.comet.CometEvent;
import com.sun.enterprise.web.connector.grizzly.comet.CometHandler;

public class CometResponseHandler implements CometHandler&lt;HttpServletResponse&gt;
{
	private HttpServletResponse httpServletResponse;
	private String contextPath = null;

	public CometResponseHandler(String contextPath)
	{

	}

	public void attach(HttpServletResponse httpServletResponse)
	{
		this.httpServletResponse = httpServletResponse;
	}

	public void onEvent(CometEvent event) throws IOException
	{
		System.out.println("==== onEvent =====");
		PrintWriter printWriter = httpServletResponse.getWriter();
		printWriter.println("Handler:" + this.toString() + " - event{type:\"" + event.getType() + "\",\""
				+ event.attachment().toString() + "\"} IP=");
		printWriter.flush();
	}

	public void onInitialize(CometEvent event) throws IOException
	{
		System.out.println("==== onInitialize =====");
	}

	public void onTerminate(CometEvent event) throws IOException
	{
		System.out.println("==== onTerminate =====");
		onInterrupt(event);
	}

	public void onInterrupt(CometEvent event) throws IOException
	{
		System.out.println("==== onInterrupt =====");
		CometEngine cometEngine = CometEngine.getEngine();
		CometContext cometContext = cometEngine.getCometContext(contextPath);
		cometContext.removeCometHandler(this);
	}



}
</pre>
<p>&nbsp;deploy在glassfish吧</p>
          <br/>
          <span style="color:red;">
            <a href="http://liuzongan.javaeye.com/blog/183975#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 18 Apr 2008 09:38:49 +0800</pubDate>
        <link>http://liuzongan.javaeye.com/blog/183975</link>
        <guid>http://liuzongan.javaeye.com/blog/183975</guid>
      </item>
      <item>
        <title>Portlet MVC Framework 怎么运行 </title>
        <author>liuzongan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liuzongan.javaeye.com">liuzongan</a>&nbsp;
          链接：<a href="http://liuzongan.javaeye.com/blog/163766" style="color:red;">http://liuzongan.javaeye.com/blog/163766</a>&nbsp;
          发表时间: 2008年02月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          请助:Portlet MVC Framework 怎么运行 <br />spring 网站下载spring-framework-2.5.1,里面有个petportal例子,我能在TOMCAT中运行petportal,正常启动,但我不知道打什么URL进入首页,我试过好多URL(http://localhost:8080/petportal/view等)<br /><br />请教??????
          <br/>
          <span style="color:red;">
            <a href="http://liuzongan.javaeye.com/blog/163766#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 21 Feb 2008 08:51:03 +0800</pubDate>
        <link>http://liuzongan.javaeye.com/blog/163766</link>
        <guid>http://liuzongan.javaeye.com/blog/163766</guid>
      </item>
      <item>
        <title>请助:Portlet MVC Framework 怎么运行</title>
        <author>liuzongan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liuzongan.javaeye.com">liuzongan</a>&nbsp;
          链接：<a href="http://liuzongan.javaeye.com/blog/163737" style="color:red;">http://liuzongan.javaeye.com/blog/163737</a>&nbsp;
          发表时间: 2008年02月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          spring 网站下载spring-framework-2.5.1,里面有个petportal例子,我能在TOMCAT中运行petportal,正常启动,但我不知道打什么URL进入首页,我试过好多URL(http://localhost:8080/petportal/view等)请教??????
          <br/>
          <span style="color:red;">
            <a href="http://liuzongan.javaeye.com/blog/163737#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 20 Feb 2008 22:22:36 +0800</pubDate>
        <link>http://liuzongan.javaeye.com/blog/163737</link>
        <guid>http://liuzongan.javaeye.com/blog/163737</guid>
      </item>
      <item>
        <title>搜索文档的好方法</title>
        <author>liuzongan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liuzongan.javaeye.com">liuzongan</a>&nbsp;
          链接：<a href="http://liuzongan.javaeye.com/blog/158548" style="color:red;">http://liuzongan.javaeye.com/blog/158548</a>&nbsp;
          发表时间: 2008年01月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
                过前几天我也不知道，百度与google有这种方法搜索功能，以前只是打个关键字进行搜索一下，然后就慢慢找找了，有时候找一个东西的确是很困难<br /><ul><li>比如你想google中搜索acegi相关文档 ，打入关键字：acegi filetype:pdf</li><li>比如你想在一个站点下搜索ant，也可以打入关键字:ant site:www.apache.org</li></ul><p>在百度里面搜索关键字格式不一样，可以点击百度与google的高级搜索，那里面可以生成关键字格式的 </p>
          <br/>
          <span style="color:red;">
            <a href="http://liuzongan.javaeye.com/blog/158548#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 23 Jan 2008 10:05:08 +0800</pubDate>
        <link>http://liuzongan.javaeye.com/blog/158548</link>
        <guid>http://liuzongan.javaeye.com/blog/158548</guid>
      </item>
      <item>
        <title>呵呵呵呵呵呵呵呵呵呵</title>
        <author>liuzongan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liuzongan.javaeye.com">liuzongan</a>&nbsp;
          链接：<a href="http://liuzongan.javaeye.com/blog/157957" style="color:red;">http://liuzongan.javaeye.com/blog/157957</a>&nbsp;
          发表时间: 2008年01月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          
          <br/>
          <span style="color:red;">
            <a href="http://liuzongan.javaeye.com/blog/157957#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 21 Jan 2008 10:56:09 +0800</pubDate>
        <link>http://liuzongan.javaeye.com/blog/157957</link>
        <guid>http://liuzongan.javaeye.com/blog/157957</guid>
      </item>
      <item>
        <title>hidden cursor (隐藏光标）</title>
        <author>liuzongan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liuzongan.javaeye.com">liuzongan</a>&nbsp;
          链接：<a href="http://liuzongan.javaeye.com/blog/151379" style="color:red;">http://liuzongan.javaeye.com/blog/151379</a>&nbsp;
          发表时间: 2007年12月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; 最近由于项目的需要，我们的头要求我做关于java远程控制系统，昨天遇到一个问题：在远程控制桌面不能有自己的光标(也是就要隐藏这个光标）,好像java API中没有隐藏方法，折腾了半天终于找到了解决的办法，代码如下：</p>
<p>&nbsp; </p>
<div class="code_title">
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">int</span><span>[]&nbsp;pixels&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;</span><span class="keyword">int</span><span>[</span><span class="number">16</span><span>&nbsp;*&nbsp;</span><span class="number">16</span><span>];&nbsp;&nbsp;</span><span class="comment">//用int数组可以构建一个图片 </span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>Image&nbsp;image&nbsp;=&nbsp;java.awt.Toolkit.getDefaultToolkit().createImage(</span><span class="keyword">new</span><span>&nbsp;MemoryImageSource(</span><span class="number">16</span><span>,&nbsp;</span><span class="number">16</span><span>,&nbsp;pixels,&nbsp;</span><span class="number">0</span><span>,&nbsp;</span><span class="number">16</span><span>)); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>Cursor&nbsp;transparentCursor&nbsp;=&nbsp;java.awt.Toolkit.getDefaultToolkit().createCustomCursor(image,&nbsp;</span><span class="keyword">new</span><span>&nbsp;Point(</span><span class="number">0</span><span>,&nbsp;</span><span class="number">0</span><span>),&nbsp;</span><span class="string">&quot;invisiblecursor&quot;</span><span>);&nbsp;</span><span class="comment">//invisiblecursor是任意取的 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>setCursor(transparentCursor);&nbsp;&nbsp;&nbsp;</span></li>
</ol>
</div>
</div>
<p>&nbsp;</p>
<p>关于远程控制原理与实现，下一期将会讲到</p>
          <br/>
          <span style="color:red;">
            <a href="http://liuzongan.javaeye.com/blog/151379#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 28 Dec 2007 09:02:56 +0800</pubDate>
        <link>http://liuzongan.javaeye.com/blog/151379</link>
        <guid>http://liuzongan.javaeye.com/blog/151379</guid>
      </item>
      <item>
        <title>B/S远程桌面</title>
        <author>liuzongan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liuzongan.javaeye.com">liuzongan</a>&nbsp;
          链接：<a href="http://liuzongan.javaeye.com/blog/146851" style="color:red;">http://liuzongan.javaeye.com/blog/146851</a>&nbsp;
          发表时间: 2007年12月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;javax.imageio.ImageIO; &nbsp;&nbsp;</span></span> </li>
    <li class=""><span></span><span class="keyword">import</span><span>&nbsp;java.awt.Rectangle; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;java.awt.Robot; &nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="keyword">import</span><span>&nbsp;java.awt.Toolkit; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;java.awt.image.BufferedImage; &nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="keyword">import</span><span>&nbsp;java.awt.Dimension; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;javax.servlet.*; &nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="keyword">import</span><span>&nbsp;javax.servlet.http.*; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;java.io.*; &nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="keyword">import</span><span>&nbsp;java.util.*; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;SnapShot &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">extends</span><span>&nbsp;HttpServlet &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">implements</span><span>&nbsp;SingleThreadModel&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;CONTENT_TYPE&nbsp;=&nbsp;</span><span class="string">&quot;image/jpeg&quot;</span><span>; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="comment">//Initialize&nbsp;global&nbsp;variables </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;init()&nbsp;</span><span class="keyword">throws</span><span>&nbsp;ServletException&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="comment">//Process&nbsp;the&nbsp;HTTP&nbsp;Get&nbsp;request </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;doGet(HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;response)&nbsp;</span><span class="keyword">throws</span><span>&nbsp;ServletException,&nbsp;IOException&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//设置客户端的文件相应类型 </span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;response.setContentType(CONTENT_TYPE); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//获取屏幕的分辨率 </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;Dimension&nbsp;d&nbsp;=&nbsp;Toolkit.getDefaultToolkit().getScreenSize(); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">try</span><span>&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{BufferedImage&nbsp;screenshot&nbsp;=&nbsp;(</span><span class="keyword">new</span><span>&nbsp;Robot()).createScreenCapture(</span><span class="keyword">new</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rectangle(</span><span class="number">0</span><span>,&nbsp;</span><span class="number">0</span><span>,&nbsp;(</span><span class="keyword">int</span><span>)&nbsp;d.getWidth(),&nbsp;(</span><span class="keyword">int</span><span>)&nbsp;d.getHeight())); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;imageFormat&nbsp;=&nbsp;</span><span class="string">&quot;jpg&quot;</span><span>; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServletOutputStream&nbsp;sos&nbsp;=&nbsp;response.getOutputStream(); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//将图像数据流写入客户端 </span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ImageIO.write(screenshot,&nbsp;imageFormat,&nbsp;sos); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sos.close(); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.flushBuffer(); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">catch</span><span>&nbsp;(Exception&nbsp;ex)&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="comment">//Clean&nbsp;up&nbsp;resources </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;destroy()&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>} &nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>&nbsp;</p>
<p>还有一个远程控制参考网址:</p>
<p><font face="Arial">http://www.netyi.net/book-download.aspx?BookID=133a0880-41c9-4772-b422-275ed4534c6e</font></p>
          <br/>
          <span style="color:red;">
            <a href="http://liuzongan.javaeye.com/blog/146851#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 08 Dec 2007 11:57:16 +0800</pubDate>
        <link>http://liuzongan.javaeye.com/blog/146851</link>
        <guid>http://liuzongan.javaeye.com/blog/146851</guid>
      </item>
      <item>
        <title>Java 的 流操作</title>
        <author>liuzongan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liuzongan.javaeye.com">liuzongan</a>&nbsp;
          链接：<a href="http://liuzongan.javaeye.com/blog/146841" style="color:red;">http://liuzongan.javaeye.com/blog/146841</a>&nbsp;
          发表时间: 2007年12月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>接触java时间也不短了，可是对java的基础还是很模糊，真的郁闷，特别是对IO流方面的知识了解特别少.</p>
<p>有时候做一些应用不知道怎么入手，比喻说上传附件时，要求不能放在应用服务器下面(防止应用服务器下文件容量太大)，这样就带来了一个问题，要使用这个附件时应用服务器就不能访问到，怎么办呢？想了几天最近只好选择流操作了， 可只又不熟悉，只好找资料</p>
<p>下面讲一个例子：</p>
<p>上传附件是一张相片</p>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">img</span><span>&nbsp;</span><span class="attribute">src</span><span>=</span><span class="attribute-value">&quot;downloadImage.do&quot;</span><span>&nbsp;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<p>这个展示一张图片,用一个Action进行用流图片进行显示</p>
<p>下面是downloadImage对应的Action代码</p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="comment">//&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpServletRequest&nbsp;request&nbsp;&nbsp;&nbsp;&nbsp; //根据你的Action得到&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpServletResponse&nbsp;response&nbsp;&nbsp; //根据你的Action得到&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServletOutputStream&nbsp;out=response.getOutputStream();&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //获取文件&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;file=</span><span class="keyword">new</span><span>&nbsp;File(</span><span class="string">&quot;C:\\Sunset.jpg&quot;</span><span>);&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //这样写大文件瞬间占用内存 </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">byte</span><span>[]&nbsp;bate=</span><span class="keyword">new</span><span>&nbsp;</span><span class="keyword">byte</span><span>[(</span><span class="keyword">int</span><span>)file.length()];;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt">&nbsp; </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileInputStream&nbsp;fileStream=</span><span class="keyword">new</span><span>&nbsp;FileInputStream(file);&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fileStream.read(bate,</span><span class="number">0</span><span>,(</span><span class="keyword">int</span><span>)file.length());&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.write(bate);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>&nbsp;下面转载一个下载的例子：</p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;java.io.*; &nbsp;&nbsp;</span></span> </li>
    <li class=""><span></span><span class="keyword">import</span><span>&nbsp;java.net.*; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;java.util.*; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="comment">/** </span>&nbsp; </li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;
    <p>Title:&nbsp;个人开发的API</p>
    </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;
    <p>Description:&nbsp;将指定的HTTP网络资源在本地以文件形式存放</p>
    </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;
    <p>Copyright:&nbsp;Copyright&nbsp;(c)&nbsp;2004</p>
    </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;
    <p>Company:&nbsp;NewSky</p>
    </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;@author&nbsp;MagicLiao </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;@version&nbsp;1.0 </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;*/</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class="alt"><span></span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;HttpGet&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">boolean</span><span>&nbsp;DEBUG&nbsp;=&nbsp;</span><span class="keyword">true</span><span>;</span><span class="comment">//调试用 </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;BUFFER_SIZE&nbsp;=&nbsp;</span><span class="number">8096</span><span>;</span><span class="comment">//缓冲区大小 </span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;Vector&nbsp;vDownLoad&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Vector();</span><span class="comment">//URL列表 </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;Vector&nbsp;vFileList&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Vector();</span><span class="comment">//下载后的保存文件名列表 </span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="comment">/** </span>&nbsp; </li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;*&nbsp;构造方法 </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;HttpGet()&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="comment">/** </span>&nbsp; </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;*&nbsp;清除下载列表 </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;resetList()&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;vDownLoad.clear(); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;vFileList.clear(); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="comment">/** </span>&nbsp; </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;*&nbsp;增加下载列表项 </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;* </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;url&nbsp;String </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;filename&nbsp;String </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;addItem(String&nbsp;url,&nbsp;String&nbsp;filename)&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;vDownLoad.add(url); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;vFileList.add(filename); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="comment">/** </span>&nbsp; </li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;*&nbsp;根据列表下载资源 </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;downLoadByList()&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;url&nbsp;=&nbsp;</span><span class="keyword">null</span><span>; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;filename&nbsp;=&nbsp;</span><span class="keyword">null</span><span>; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//按列表顺序保存资源 </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>&nbsp;(</span><span class="keyword">int</span><span>&nbsp;i&nbsp;=&nbsp;</span><span class="number">0</span><span>;&nbsp;i&nbsp;&lt;&nbsp;vDownLoad.size();&nbsp;i++)&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url&nbsp;=&nbsp;(String)&nbsp;vDownLoad.get(i); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;filename&nbsp;=&nbsp;(String)&nbsp;vFileList.get(i); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">try</span><span>&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;saveToFile(url,&nbsp;filename); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">catch</span><span>&nbsp;(IOException&nbsp;err)&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(DEBUG)&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span class="string">&quot;资源[&quot;</span><span>&nbsp;+&nbsp;url&nbsp;+&nbsp;</span><span class="string">&quot;]下载失败!!!&quot;</span><span>); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(DEBUG)&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span class="string">&quot;下载完成!!!&quot;</span><span>); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="comment">/** </span>&nbsp; </li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;*&nbsp;将HTTP资源另存为文件 </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;* </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;destUrl&nbsp;String </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;fileName&nbsp;String </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;*&nbsp;@throws&nbsp;Exception </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;saveToFile(String&nbsp;destUrl,&nbsp;String&nbsp;fileName)&nbsp;</span><span class="keyword">throws</span><span>&nbsp;IOException&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;FileOutputStream&nbsp;fos&nbsp;=&nbsp;</span><span class="keyword">null</span><span>; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;BufferedInputStream&nbsp;bis&nbsp;=&nbsp;</span><span class="keyword">null</span><span>; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;HttpURLConnection&nbsp;httpUrl&nbsp;=&nbsp;</span><span class="keyword">null</span><span>; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;URL&nbsp;url&nbsp;=&nbsp;</span><span class="keyword">null</span><span>; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">byte</span><span>[]&nbsp;buf&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;</span><span class="keyword">byte</span><span>[BUFFER_SIZE]; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">int</span><span>&nbsp;size&nbsp;=&nbsp;</span><span class="number">0</span><span>; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//建立链接 </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;url&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;URL(destUrl); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;httpUrl&nbsp;=&nbsp;(HttpURLConnection)&nbsp;url.openConnection(); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//连接指定的资源 </span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;httpUrl.connect(); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//获取网络输入流 </span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;bis&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;BufferedInputStream(httpUrl.getInputStream()); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//建立文件 </span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;fos&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;FileOutputStream(fileName); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(</span><span class="keyword">this</span><span>.DEBUG)&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>System.out.println(</span><span class="string">&quot;正在获取链接[&quot;</span><span>&nbsp;+&nbsp;destUrl&nbsp;+&nbsp;</span><span class="string">&quot;]的内容...\n将其保存为文件[&quot;</span><span>&nbsp;+&nbsp;fileName&nbsp;+&nbsp;</span><span class="string">&quot;]&quot;</span><span>); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//保存文件 </span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">while</span><span>&nbsp;(&nbsp;(size&nbsp;=&nbsp;bis.read(buf))&nbsp;!=&nbsp;-</span><span class="number">1</span><span>)&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fos.write(buf,&nbsp;</span><span class="number">0</span><span>,&nbsp;size); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;fos.close(); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;bis.close(); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;httpUrl.disconnect(); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="comment">/** </span>&nbsp; </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;*&nbsp;设置代理服务器 </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;* </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;proxy&nbsp;String </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;proxyPort&nbsp;String </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setProxyServer(String&nbsp;proxy,&nbsp;String&nbsp;proxyPort)&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//设置代理服务器 </span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;System.getProperties().put(</span><span class="string">&quot;proxySet&quot;</span><span>,&nbsp;</span><span class="string">&quot;true&quot;</span><span>); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;System.getProperties().put(</span><span class="string">&quot;proxyHost&quot;</span><span>,&nbsp;proxy); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;System.getProperties().put(</span><span class="string">&quot;proxyPort&quot;</span><span>,&nbsp;proxyPort); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="comment">/** </span>&nbsp; </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;*&nbsp;设置认证用户名与密码 </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;* </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;uid&nbsp;String </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;pwd&nbsp;String </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setAuthenticator(String&nbsp;uid,&nbsp;String&nbsp;pwd)&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;Authenticator.setDefault(</span><span class="keyword">new</span><span>&nbsp;MyAuthenticator(uid,&nbsp;pwd)); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="comment">/** </span>&nbsp; </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;*&nbsp;主方法(用于测试) </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;* </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;argv&nbsp;String[] </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;main(String&nbsp;argv[])&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;HttpGet&nbsp;oInstance&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;HttpGet(); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">try</span><span>&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="comment">//增加下载列表（此处用户可以写入自己代码来增加下载列表） </span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>oInstance.addItem(</span><span class="string">&quot;http://www.ebook.com/java/网络编程001.zip&quot;</span><span>,</span><span class="string">&quot;./网络编程1.zip&quot;</span><span>); &nbsp;&nbsp;</span> </li>
    <li class=""><span>oInstance.addItem(</span><span class="string">&quot;http://www.ebook.com/java/网络编程002.zip&quot;</span><span>,</span><span class="string">&quot;./网络编程2.zip&quot;</span><span>); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>oInstance.addItem(</span><span class="string">&quot;http://www.ebook.com/java/网络编程003.zip&quot;</span><span>,</span><span class="string">&quot;./网络编程3.zip&quot;</span><span>); &nbsp;&nbsp;</span> </li>
    <li class=""><span>oInstance.addItem(</span><span class="string">&quot;http://www.ebook.com/java/网络编程004.zip&quot;</span><span>,</span><span class="string">&quot;./网络编程4.zip&quot;</span><span>); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>oInstance.addItem(</span><span class="string">&quot;http://www.ebook.com/java/网络编程005.zip&quot;</span><span>,</span><span class="string">&quot;./网络编程5.zip&quot;</span><span>); &nbsp;&nbsp;</span> </li>
    <li class=""><span>oInstance.addItem(</span><span class="string">&quot;http://www.ebook.com/java/网络编程006.zip&quot;</span><span>,</span><span class="string">&quot;./网络编程6.zip&quot;</span><span>); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>oInstance.addItem(</span><span class="string">&quot;http://www.ebook.com/java/网络编程007.zip&quot;</span><span>,</span><span class="string">&quot;./网络编程7.zip&quot;</span><span>); &nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="comment">//开始下载 </span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>oInstance.downLoadByList(); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">catch</span><span>&nbsp;(Exception&nbsp;err)&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(err.getMessage()); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
</ol>
</div>
          <br/>
          <span style="color:red;">
            <a href="http://liuzongan.javaeye.com/blog/146841#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 08 Dec 2007 10:49:15 +0800</pubDate>
        <link>http://liuzongan.javaeye.com/blog/146841</link>
        <guid>http://liuzongan.javaeye.com/blog/146841</guid>
      </item>
      <item>
        <title>重构之临时变量(Replace Temp with Query)</title>
        <author>liuzongan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liuzongan.javaeye.com">liuzongan</a>&nbsp;
          链接：<a href="http://liuzongan.javaeye.com/blog/127378" style="color:red;">http://liuzongan.javaeye.com/blog/127378</a>&nbsp;
          发表时间: 2007年09月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>当你的程序以一个临时变量保存某一表达式的运算结果</p>
<p><font size="2"><strong>将这个表达式提炼到一个独立函数中，将这个临时变量的所有［被引用点］替换为［对新函数的调用］，新函数可被其他函数使用</strong></font></p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">double</span><span>&nbsp;&nbsp;basePrice=_quantity * _itemPrice;</span></span> </li>
    <li class="alt"><span><span>if(basePrice&gt;1000){</span></span> </li>
    <li class="alt"><span><span>&nbsp;&nbsp;&nbsp;&nbsp; return basePrice * 0.95;</span></span> </li>
    <li class="alt"><span><span>else</span></span> </li>
    <li class="alt"><span><span>&nbsp;&nbsp;&nbsp;&nbsp; return basePrice * 0.38;</span></span> </li>
    <li class="alt"><span><span>}</span></span> </li>
    <li class="alt"><span><span>......</span></span> </li>
</ol>
</div>
<p>&nbsp;</p>
<p>提炼后：</p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">if (basePrice()&gt;1000){<br />
    &nbsp;&nbsp;&nbsp; return basePrice() * 0.95</span></span> </li>
    <li class="alt"><span><span class="keyword">else</span></span> </li>
    <li class="alt"><span><span class="keyword">&nbsp;&nbsp;&nbsp;&nbsp;return basePrice() * 0.38</span></span> </li>
    <li class="alt"><span><span class="keyword">}</span></span> </li>
    <li class="alt"><span><span class="keyword">......</span></span> </li>
    <li class="alt"><span><span class="keyword">double basePrice(){</span></span> </li>
    <li class="alt"><span><span class="keyword">&nbsp;&nbsp;&nbsp; return _quantity * _itemPrice;<br />
    }</span></span> </li>
</ol>
</div>
<p>动机：<br />
临时变量的问题在于：它们是暂时的，而且只能在所属函数内使用，由于临时变量只有在所属内才可见，所以它们会驱使你写出更长的函数，因为只有这样你才能访问到想要访问的临时变量，如果把临时变量替换为一个查询式（query method），那么同一个CLASS中的所有函数都将获得这份信息。这将带给你极大帮助，使你能够为这个CLASS编写更清晰的代码。</p>
<p>这个重构手法较为直率的情况就是：临时变量只被赋值一次，或者赋值给临时变量的表达式不受其他条件影响，其他情况比较情况棘手，但也有可能发生，你可能需要先运用Split Temporary Variable 或Separate Query from Modifier 使情况变得简单一些。如果你想替换的临时变量是用来收集结果的（例如循环中的累加值），你就需要将某些程序的逻辑（例如循环）拷贝到查询式（query method）去。</p>
<p><br />
作法：</p>
<ul>
    <li>找出只被赋值一次的临时变量 </li>
    <li>将临时变量声明为 final </li>
    <li>编译（这可确保临时变量的确只被赋值一次） </li>
    <li>将对该临时变量赋值之语句的等号右侧部分提炼到一个独立函数中。详细步骤：首先将函数声明为private，之后你可能会发现有更多CLASS需要使用它，彼时你可轻易放松对它的保护。确保提炼出来的函数无任何连带影响，就对它进行Separate Query from Modifier </li>
    <li>编译，测试 </li>
</ul>
<p>&nbsp;范例：<br />
首先，我从一个简单函数开始：<br />
</p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">double</span><span>&nbsp;&nbsp;getPrice()</span></span> </li>
    <li class="alt"><span><span>{ &nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">int</span><span>&nbsp;basePrice=_quantity+_itemPrice; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">double</span><span>&nbsp;discountFactor; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(basePrice&gt;</span><span class="number">1000</span><span>) &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;discountFactor=</span><span class="number">0.95</span><span>; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">else</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;discountFactor=</span><span class="number">0.98</span><span>; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r</span><span class="keyword">eturn</span><span>&nbsp;&nbsp;basePrice&nbsp;=&nbsp;discountFactor; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span>&nbsp;</span> </li>
    <li class="alt"><span>}&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>&nbsp;我希望将这个两个变量都替换掉，当然，每次一个。</p>
<p>尽管这里的代码十分清楚，我还是先把临时变量声明为final，检查它们是否的确只被赋值一次：</p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">double</span><span>&nbsp;getPrice() &nbsp;&nbsp;</span></span> </li>
    <li class=""><span>{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">final</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;basePrice&nbsp;=&nbsp;_quantity&nbsp;*&nbsp;_itemPrice; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">final</span><span>&nbsp;</span><span class="keyword">double</span><span>&nbsp;discountFactor; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(basePrice&gt;</span><span class="number">1000</span><span>) &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;discountFactor=</span><span class="number">0.95</span><span>; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span><span class="keyword">else</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;discountFactory=</span><span class="number">0.98</span><span>; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;basePrice&nbsp;*&nbsp;discountFactor; &nbsp;&nbsp;</span> </li>
    <li class=""><span>}&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>这么一来，如果有任何问题，编译器就会警告我，之所以先做这件事，因为如果临时变量不只被赋值一次，不该进行这项重构了，接下来我开始替换临时变量了，每次一个，首先我把赋值动作的右侧表达式提炼出来。</p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">double</span><span>&nbsp;getPrice() &nbsp;&nbsp;</span></span> </li>
    <li class=""><span>{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">final</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;basePrice&nbsp;=&nbsp;basePrice(); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">final</span><span>&nbsp;</span><span class="keyword">double</span><span>&nbsp;discountFactor; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(basePrice&nbsp;&gt;</span><span class="number">1000</span><span>) &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;discountFactor&nbsp;=</span><span class="number">0.95</span><span>; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">else</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;discountFactor&nbsp;=</span><span class="number">0.98</span><span>; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;basePrice&nbsp;*&nbsp;discountFactor; &nbsp;&nbsp;</span> </li>
    <li class=""><span>} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;basePrice() &nbsp;&nbsp;</span> </li>
    <li class=""><span>{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;_quantity&nbsp;*&nbsp;_itemPrice; &nbsp;&nbsp;</span> </li>
    <li class=""><span>} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>再把临时变量的引用点替换掉：</p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">double</span><span>&nbsp;getPrice() &nbsp;&nbsp;</span></span> </li>
    <li class=""><span>{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">final</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;basePrice&nbsp;=&nbsp;basePrice(); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">final</span><span>&nbsp;</span><span class="keyword">double</span><span>&nbsp;discountFactor; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(&nbsp;basePrice()&gt;</span><span class="number">1000</span><span>&nbsp;) &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;discountFactor&nbsp;=&nbsp;</span><span class="number">0.95</span><span>; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">else</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;discountFactor&nbsp;=&nbsp;</span><span class="number">0.98</span><span>; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;basePrice()&nbsp;*&nbsp;discountFactor; &nbsp;&nbsp;</span> </li>
    <li class=""><span>}&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>下一步：</p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">double</span><span>&nbsp;getPrice()&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></span> </li>
    <li class=""><span>{&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">final</span><span>&nbsp;</span><span class="keyword">double</span><span>&nbsp;discountFactor;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(&nbsp;basePrice()&gt;</span><span class="number">1000</span><span>&nbsp;)&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;discountFactor&nbsp;=&nbsp;</span><span class="number">0.95</span><span>;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">else</span><span>&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;discountFactor&nbsp;=&nbsp;</span><span class="number">0.98</span><span>;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;basePrice()&nbsp;*&nbsp;discountFactor;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>}&nbsp;&nbsp;&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>下一步（仔细观察代码）</p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">double</span><span>&nbsp;getPrice()&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></span> </li>
    <li class=""><span>{&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;basePrice()&nbsp;*&nbsp;discountFactor();&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>}&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">double</span><span>&nbsp;discountFactor() &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp; </span><span class="keyword">if</span><span>&nbsp;(&nbsp;basePrice()&gt;</span><span class="number">1000</span><span>&nbsp;)&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;&nbsp;</span><span class="number">0.95</span><span>;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">else</span><span>&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;&nbsp;</span><span class="number">0.98</span><span>;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;basePrice() &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;_quantity&nbsp;*&nbsp;_itemPrice; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>}&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>是多么简单啊(代码有错请指点）</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://liuzongan.javaeye.com/blog/127378#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 26 Sep 2007 19:26:20 +0800</pubDate>
        <link>http://liuzongan.javaeye.com/blog/127378</link>
        <guid>http://liuzongan.javaeye.com/blog/127378</guid>
      </item>
      <item>
        <title>重构之提炼代码</title>
        <author>liuzongan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liuzongan.javaeye.com">liuzongan</a>&nbsp;
          链接：<a href="http://liuzongan.javaeye.com/blog/127265" style="color:red;">http://liuzongan.javaeye.com/blog/127265</a>&nbsp;
          发表时间: 2007年09月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>前几天北京图书大厦买了两本书&lt;&lt;重构，改善既有代码的设计&gt;&gt;与&lt;<agile rails="" development="" web="" with=""></agile>&gt;<agile rails="" development="" web="" with=""></agile></p>
<p>特意把书的代码一个字一个字粘出来，望能帮助我们这些开发人员对＂重构＂理解提供一些帮助，</p>
<p>当你有一段代码可以被组织在一起独立出来</p>
<p><strong>将这段代码放进一个独立函数中，并让函数名称解释该函数的用途</strong></p>
<p>函数的命名是非常重要的，以前我做开发的时候，从来我就不考虑这么多，只要这个函数能跑起来就行，我也不去管那么多，现在看了&quot;重构&quot;，感觉它有另外一种思想，望大家好好学习！！</p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">void</span><span>&nbsp;&nbsp;printOwing(</span><span class="keyword">double</span><span>&nbsp;amonut){ &nbsp;&nbsp;</span></span> </li>
    <li class=""><span>printBanner();&nbsp;&nbsp;&nbsp;</span> </li>
    <li class=""><span></span></li>
    <li class=""><span>//print details</span> </li>
    <li class=""><span>System.out.println(&quot;name:&quot;+_name);</span> </li>
    <li class=""><span>System.out.println(&quot;&quot;amount:&quot;+amount);</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>}&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>&nbsp;</p>
<p>重构后的代码：</p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">void</span><span>&nbsp;printOwing(</span><span class="keyword">double</span><span>&nbsp;amonut){&nbsp;&nbsp;&nbsp;</span></span> </li>
    <li class="alt"><span><span>&nbsp;&nbsp;&nbsp;&nbsp; printBanner();</span></span> </li>
    <li class="alt"><span><span>&nbsp;&nbsp;&nbsp;&nbsp; printDetails(amount
    <div class="code_title"></div>
    </span></span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span> <span></span></li>
    <li class=""><span>void printDetails(double amount){<br />
    &nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;name:&quot;+_name);</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;amount:&quot;+amount);</span> </li>
    <li class=""><span>}</span> </li>
</ol>
</div>
<p>可以看出现在变成了两个方法，把一部分语句抽出来做为一个方法！！</p>
<p>Extract Method 是最常见的重构方法之一。看见一个过长的函数或者一段需要注释才能让人理解用途的代码，就会将这个段代码放进一个独立函数中。</p>
<p>有数个原因造成简短面有良好的命名的函数。首先，如果每个函数的粒度都江堰市很小(finely grained)，那么函数之间彼此复用的机会就更大了，其次，这会使高层函数代码读起来就像一系列注释；再者，如果函数都是细粒度，那么函数的覆写（override）也会更容易些.</p>
<p>作法：</p>
<ul>
    <li>创造一个新函数，根据这个函数的意图来给它命名 </li>
    <li>仔细检查提炼出的代码，看看其中是否引用了（作用域限于源函数）的变量（包括局部变量和源函数参数） </li>
    <li>检查是否有（仅仅用于被提炼代码）的临时变量，如果有，在目标函数中将它们声明为临时变量 </li>
    <li>检查被提炼码，看看是否有任何局部变量的值被它改变，如果一个临时变量值被修改了，看看是否可以将被提炼码处理为一个查询（Query)，并将结果值给相关变量， </li>
    <li>将被提炼代码中需要读取的局部变量，当作函数传给目标函数 </li>
</ul>
<p><font size="2"><strong>范例1）：无局部变量（No&nbsp; Local Variables）</strong></font></p>
<div class="code_title">java 代码</div>
<div class="code_title">
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">void</span><span>&nbsp;printOwing()</span></span></li>
    <li class="alt"><span><span>{&nbsp;&nbsp;&nbsp;</span></span> &nbsp; </li>
    <li class="alt">&nbsp;&nbsp;&nbsp; &nbsp;Enumeration e =_orders.elements(); </li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp; double outstanding=0.0;&nbsp; &nbsp; </li>
    <li class="alt">&nbsp; </li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//calculate outstanding&nbsp; </li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;*******************************&quot;);&nbsp; </li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;********* Customer Owes********&quot;);&nbsp; </li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp; System.out.pritnln(&quot;*******************************&quot;); </li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp; //calculate outstanding </li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp; while(e.hasMoreElements() </li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp; { </li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Order each=(Order)e.nextElement(); </li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; outstanding +=each.getAmount(); </li>
    <li class="alt">　　 ｝ </li>
    <li class="alt">&nbsp; </li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp; //print details </li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;name:&quot;+_name); </li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;amount:&quot;+outstanding);<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </li>
    <li class=""><span>}&nbsp;&nbsp;</span> </li>
</ol>
</div>
</div>
<p>&nbsp;重构后：</p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">void</span><span>&nbsp;printOwing(){ &nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; Enumeration&nbsp;e=_orders.elements();&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; double&nbsp;outstanding=0.0;</span> </li>
    <li class=""><span></span></li>
    <li class=""><span><strong>&nbsp;&nbsp;&nbsp;&nbsp; printBanner();</strong></span> </li>
    <li class=""><span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; //calculate outstanding</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; while (e.hasMoreElements())</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; {</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Order order=(Order)e.nextElement();</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;outstanding +=each.getAmount();</span> <span><br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;</span> </li>
    <li class="">&nbsp;</li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //print details</span> </li>
    <li class=""><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;name:&quot;+_name);</font> </li>
    <li class=""><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;amount:&quot;+outstanding);<br />
    </font>&nbsp; </li>
    <li class=""><span>}</span> </li>
    <li class=""><span>&nbsp;</span> </li>
    <li class=""><span>void printBanner(){</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; //print banner</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;*******************************&quot;;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&quot;*********** Customer Owes *****&quot;);</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;*******************************&quot;):<br />
    }</span> </li>
</ol>
<p class="alt">&nbsp;</p>
</div>
<p><font size="2"><strong></strong></font></p>
<p><font size="2"><strong>范例2）：对局部变量再赋值（Reassigning）</strong></font></p>
<font size="2">
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">void</span><span>&nbsp;printOwing(){&nbsp;&nbsp;&nbsp;</span></span> </li>
    <li class="alt"><span><span>&nbsp;&nbsp;&nbsp;&nbsp; printBanner();</span></span> </li>
    <li class="alt"><span><span>&nbsp;&nbsp;&nbsp;&nbsp; double outstanding=<strong>getOutstanding</strong>();</span></span> </li>
    <li class="alt"><span><span>&nbsp;&nbsp;&nbsp;&nbsp; printDetails(outstanding);</span></span> </li>
    <li class=""><span>}&nbsp;&nbsp;</span> </li>
    <li class="">&nbsp; </li>
    <li class=""><span>double getOutstanding()</span> </li>
    <li class=""><span>{</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;Enumeration e=_orders.elements();</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;while (e.hasMoreElements())</span> </li>
    <li class=""><span>&nbsp;&nbsp; {</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Order each=(Order)e.nextElement();</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; outstanding +=each.getAmount();</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp; }</span> </li>
    <li class=""><span>&nbsp;&nbsp; return outstanding;<br />
    }</span> </li>
    <li class=""><span></span></li>
</ol>
</div>
</font>
<p><strong><font size="2">Enumeration 变量 e 只有被提炼码中用到，所以可以将它整个搬到新函数中，double 变量oustanding 在被提炼码内外都被用到，所以我必须让提炼的新函数返回它。</font></strong></p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">double</span><span>&nbsp;getOutstanding()</span></span> </li>
    <li class="alt"><span><span>{&nbsp;&nbsp;&nbsp;</span></span> </li>
    <li class="alt"><span><span>&nbsp;&nbsp;&nbsp; Enumeration e=_orders.elements();</span></span> </li>
    <li class="alt"><span><span>&nbsp;&nbsp;&nbsp; double <strong>result</strong>=0.0;</span></span> </li>
    <li class="alt"><span><span>&nbsp;&nbsp;&nbsp; while(e.hasMoreElements())</span></span> </li>
    <li class="alt"><span><span>&nbsp;&nbsp;&nbsp; {</span></span> </li>
    <li class="alt"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;Order each=(Order)e.nextElement();</span></span> </li>
    <li class="alt"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result +=each.getAmount();</span></span> </li>
    <li class="alt"><span><span>&nbsp;&nbsp;&nbsp;&nbsp; }</span></span> </li>
    <li class="alt"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;return <strong>result</strong>;<br />
    }</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>最后提炼成：</p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">void</span><span>&nbsp;print() &nbsp;&nbsp;</span></span> </li>
    <li class=""><span>{&nbsp;&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; printBanner();</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; double outstanding=getOutstanding();</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; printDetails(outstanding);</span> </li>
    <li class="alt"><span>}&nbsp;&nbsp;</span> </li>
</ol>
</div>
简单吧，呵呵
          <br/>
          <span style="color:red;">
            <a href="http://liuzongan.javaeye.com/blog/127265#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 26 Sep 2007 13:13:25 +0800</pubDate>
        <link>http://liuzongan.javaeye.com/blog/127265</link>
        <guid>http://liuzongan.javaeye.com/blog/127265</guid>
      </item>
      <item>
        <title>JAVA中的反射机制详解</title>
        <author>liuzongan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liuzongan.javaeye.com">liuzongan</a>&nbsp;
          链接：<a href="http://liuzongan.javaeye.com/blog/127258" style="color:red;">http://liuzongan.javaeye.com/blog/127258</a>&nbsp;
          发表时间: 2007年09月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <h1>JAVA中的反射机制详解</h1>
<div class="from_info">http://www.sina.com.cn 2007年09月25日&nbsp;09:47&nbsp; <font color="#a20010"><span class="linkRed02"><a href="http://news.ccidnet.com/" target="_blank">赛迪网</a></span></font></div>
<!--正文内容开始--><!-- google_ad_section_start -->
<div class="artibody" id="artibody"><!-- 正文内部文字导航 : begin --><!-- 正文内部文字导航 : end -->[page title= subtitle=]
<p>　　作者：baocl</p>
<p>　　JAVA反射机制</p>
<p>　　JAVA反射机制是在运行状态中，对于任意一个类，都能够知道这个类的所有属性和方法；对于任意一个对象，都能够调用它的任意一个方法；这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。</p>
<p>　　Java反射机制主要提供了以下功能： 在运行时判断任意一个对象所属的类；在运行时构造任意一个类的对象；在运行时判断任意一个类所具有的成员变量和方法；在运行时调用任意一个对象的方法；生成动态代理。</p>
<p>　　1. 得到某个对象的属性</p>
<p>　　1 public Object getProperty(Object owner, String fieldName) throws Exception {</p>
<p>　　2 Class ownerClass = owner.getClass();</p>
<p>　　3 </p>
<p>　　4 Field field = ownerClass.getField(fieldName);</p>
<p>　　5 </p>
<p>　　6 Object property = field.get(owner);</p>
<p>　　7 </p>
<p>　　8 return property;</p>
<p>　　9 }</p>
<p>　　Class ownerClass = owner.getClass()：得到该对象的Class。</p>
<p>　　Field field = ownerClass.getField(fieldName)：通过Class得到类声明的属性。</p>
<p>　　Object property = field.get(owner)：通过对象得到该属性的实例，如果这个属性是非公有的，这里会报IllegalAccessException。</p>
<p>　　2. 得到某个类的静态属性</p>
<p>　　1 public Object getStaticProperty(String className, String fieldName)</p>
<p>　　2 throws Exception {</p>
<p>　　3 Class ownerClass = Class.forName(className);</p>
<p>　　4 </p>
<p>　　5 Field field = ownerClass.getField(fieldName);</p>
<p>　　6 </p>
<p>　　7 Object property = field.get(ownerClass);</p>
<p>　　8 </p>
<p>　　9 return property;</p>
<p>　　10 }</p>
<p>　　Class ownerClass = Class.forName(className) ：首先得到这个类的Class。</p>
<p>　　Field field = ownerClass.getField(fieldName)：和上面一样，通过Class得到类声明的属性。</p>
<p>　　Object property = field.get(ownerClass) ：这里和上面有些不同，因为该属性是静态的，所以直接从类的Class里取。</p>
<p>　　3. 执行某对象的方法</p>
<p>　　1 public Object invokeMethod(Object owner, String methodName, Object[] args) throws Exception {</p>
<p>　　2 </p>
<p>　　3 Class ownerClass = owner.getClass();</p>
<p>　　4 </p>
<p>　　5 Class[] argsClass = new Class[args.length];</p>
<p>　　6 </p>
<p>　　7 for (int i = 0, j = args.length; i &lt; j; i++) {</p>
<p>　　8 argsClass[i] = args[i].getClass();</p>
<p>　　9 }</p>
<p>　　10 </p>
<p>　　11 Method method = ownerClass.getMethod(methodName, argsClass);</p>
<p>　　12 </p>
<p>　　13 return method.invoke(owner, args);</p>
<p>　　14 }</p>
<p>　　Class owner_class = owner.getClass() ：首先还是必须得到这个对象的Class。</p>
<p>　　5～9行：配置参数的Class数组，作为寻找Method的条件。</p>
<p>　　Method method = ownerClass.getMethod(methodName, argsClass)：通过Method名和参数的Class数组得到要执行的Method。</p>
<p>　　method.invoke(owner, args)：执行该Method，invoke方法的参数是执行这个方法的对象，和参数数组。返回值是Object，也既是该方法的返回值。</p>
<p>　　4. 执行某个类的静态方法</p>
<p>　　1 public Object invokeStaticMethod(String className, String methodName,</p>
<p>　　2 Object[] args) throws Exception {</p>
<p>　　3 Class ownerClass = Class.forName(className);</p>
<p>　　4 </p>
<p>　　5 Class[] argsClass = new Class[args.length];</p>
<p>　　6 </p>
<p>　　7 for (int i = 0, j = args.length; i &lt; j; i++) {</p>
<p>　　8 argsClass[i] = args[i].getClass();</p>
<p>　　9 }</p>
<p>　　10 </p>
<p>　　11 Method method = ownerClass.getMethod(methodName, argsClass);</p>
<p>　　12 </p>
<p>　　13 return method.invoke(null, args);</p>
<p>　　14 }</p>
<p>　　基本的原理和实例3相同，不同点是最后一行，invoke的一个参数是null，因为这是静态方法，不需要借助实例运行。</p>
<p>　　5. 新建实例</p>
<p>　　1 </p>
<p>　　2 public Object newInstance(String className, Object[] args) throws Exception {</p>
<p>　　3 Class newoneClass = Class.forName(className);</p>
<p>　　4 </p>
<p>　　5 Class[] argsClass = new Class[args.length];</p>
<p>　　6 </p>
<p>　　7 for (int i = 0, j = args.length; i &lt; j; i++) {</p>
<p>　　8 argsClass[i] = args[i].getClass();</p>
<p>　　9 }</p>
<p>　　10 </p>
<p>　　11 Constructor cons = newoneClass.getConstructor(argsClass);</p>
<p>　　12 </p>
<p>　　13 return cons.newInstance(args);</p>
<p>　　14 </p>
<p>　　15 }</p>
<p>　　这里说的方法是执行带参数的构造函数来新建实例的方法。如果不需要参数，可以直接使用newoneClass.newInstance()来实现。</p>
<p>　　Class newoneClass = Class.forName(className)：第一步，得到要构造的实例的Class。</p>
<p>　　第5～第9行：得到参数的Class数组。</p>
<p>　　Constructor cons = newoneClass.getConstructor(argsClass)：得到构造子。</p>
<p>　　cons.newInstance(args)：新建实例。</p>
<p>　　6. 判断是否为某个类的实例</p>
<p>　　1 public boolean isInstance(Object obj, Class cls) {</p>
<p>　　2 return cls.isInstance(obj);</p>
<p>　　3 }</p>
<p>　　7. 得到数组中的某个元素</p>
<p>　　1 public Object getByArray(Object array, int index) {</p>
<p>　　2 return Array.get(array,index);</p>
<p>　　3 }</p>
</div>
          <br/>
          <span style="color:red;">
            <a href="http://liuzongan.javaeye.com/blog/127258#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 26 Sep 2007 12:45:15 +0800</pubDate>
        <link>http://liuzongan.javaeye.com/blog/127258</link>
        <guid>http://liuzongan.javaeye.com/blog/127258</guid>
      </item>
      <item>
        <title>maven使用自己资料</title>
        <author>liuzongan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liuzongan.javaeye.com">liuzongan</a>&nbsp;
          链接：<a href="http://liuzongan.javaeye.com/blog/126914" style="color:red;">http://liuzongan.javaeye.com/blog/126914</a>&nbsp;
          发表时间: 2007年09月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font size="2"><a href="http://maven.apache.org/guides/getting-started/index.html#What_is_Maven">maven.apache.org/guides/getting-started/index.html#What_is_Maven</a></font></p>
<p><font size="2">新建JAVA普通项目：</font></p>
<p><font size="2"><strong>mvn archetype:create \<br />
&nbsp; -DarchetypeGroupId=org.apache.maven.archetypes \<br />
&nbsp; -DgroupId=com.mycompany.app \<br />
&nbsp; -DartifactId=my-app</strong></font></p>
<p><strong><font size="2">新建WTP web项目：</font></strong></p>
<pre><strong>mvn archetype:create \
    -DarchetypeGroupId=org.apache.maven.archetypes \
    -DarchetypeArtifactId=maven-archetype-webapp \
    -DgroupId=com.mycompany.app \
    -DartifactId=my-webapp</strong></pre>
<p><strong><font size="2">下面是对pom.xml文件里面的标签进行讲解：</font></strong></p>
<li><strong>project</strong> This is the top-level element in all Maven pom.xml files. </li>
<li><strong>modelVersion</strong> This element indicates what version of the object model this POM is using. The version of the model itself changes very infrequently but it is mandatory in order to ensure stability of use if and when the Maven developers deem it necessary to change the model. </li>
<li><strong>groupId</strong> This element indicates the unique identifier of the organization or group that created the project. The groupId is one of the key identifiers of a project and is typically based on the fully qualified domain name of your organization. For example <tt>org.apache.maven.plugins</tt> is the designated groupId for all Maven plug-ins. </li>
<li><strong>artifactId</strong> This element indicates the unique base name of the primary artifact being generated by this project. The primary artifact for a project is typically a JAR file. Secondary artifacts like source bundles also use the artifactId as part of their final name. A typical artifact produced by Maven would have the form <artifactid></artifactid>-<version></version>.<extension></extension> (for example, <tt>myapp-1.0.jar</tt> ). </li>
<li><strong>packaging</strong> This element indicates the package type to be used by this artifact (e.g. JAR, WAR, EAR, etc.). This not only means if the artifact produced is JAR, WAR, or EAR but can also indicate a specific lifecycle to use as part of the build process. (The lifecycle is a topic we will deal with further on in the guide. For now, just keep in mind that the indicated packaging of a project can play a part in customizing the build lifecycle.) The default value for the <tt>packaging</tt> element is JAR so you do not have to specify this for most projects. </li>
<li><strong>version</strong> This element indicates the version of the artifact generated by the project. Maven goes a long way to help you with version management and you will often see the <tt>SNAPSHOT</tt> designator in a version, which indicates that a project is in a state of development. We will discuss the use of snapshots and how they work further on in this guide. </li>
<li><strong>name</strong> This element indicates the display name used for the project. This is often used in Maven's generated documentation. </li>
<li><strong>url</strong> This element indicates where the project's site can be found. This is often used in Maven's generated documentation. </li>
<li><strong>description</strong> This element provides a basic description of your project. This is often used in Maven's generated documentation.
<p>以下maven自已的命令格式：<br />
<font size="2"><strong>mvn compile</strong></font></p>
<p><font size="2"><strong>mvn test</strong></font></p>
<p><font size="2"><strong>mvn&nbsp;test-compile (&nbsp;simply want to compile your test sources ）</strong></font></p>
<p><strong><font size="2">mvn clean test-compile</font></strong></p>
<p><font size="2"><strong>mvn install</strong></font></p>
<p><strong><font size="2">mvn clean install</font></strong></p>
<p><font size="2"><strong>mvn clean&nbsp;&nbsp; </strong></font></p>
</li>
<li>
<p><font size="2"><strong>mvn&nbsp; install（可将你的项目打包成jar文件放到你的.m2/repo下面了)</strong></font></p>
<p><strong>&nbsp;mvn package</strong></p>
</li>
<li>
<p><font size="2"><strong>mvn site</strong></font></p>
</li>
<p><strong><font size="2">mvn resources:resources</font></strong></p>
<li>
<p><font size="2"><strong>mvn idea:idea</strong></font></p>
<p><font size="2"><strong>mvn eclipse:eclipse</strong></font>&nbsp;&nbsp;</p>
<p><font size="2"><strong>mvn eclipse:clean</strong></font></p>
<p><strong>mvn process-resources</strong></p>
<pre>mvn process-resources &quot;-Dcommand.line.prop=hello again&quot;
</pre>
<p># application.properties<br />
java.version=${java.version}<br />
command.line.prop=${command.line.prop}<br />
</p>
</li>
<li>
<p># application.properties<br />
application.name=${pom.name}<br />
application.version=${pom.version}<br />
&nbsp;&nbsp; </p>
<div><build></build><br />
&nbsp; <build></build><br />
&nbsp;&nbsp;&nbsp; <resources></resources><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <resource></resource><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <directory></directory>src/main/resources<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <filtering></filtering>true<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; </div>
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; </li>
<li>mvn deploy
<div class="code_title">java 代码</div>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span>[...] &nbsp;&nbsp;</span></span> </li>
    <li class=""><span></span><span class="tag">&lt;</span><span class="tag-name">distributionManagement</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="tag">&lt;</span><span class="tag-name">repository</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="tag">&lt;</span><span class="tag-name">id</span><span class="tag">&gt;</span><span>proficio-repository</span><span class="tag"><span class="tag-name">id</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span></span><span class="tag">&lt;</span><span class="tag-name">name</span><span class="tag">&gt;</span><span>Proficio&nbsp;Repository</span><span class="tag"><span class="tag-name">name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span></span><span class="tag">&lt;</span><span class="tag-name">url</span><span class="tag">&gt;</span><span>file://${basedir}/target/deploy</span><span class="tag"><span class="tag-name">url</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span></span><span class="tag"><span class="tag-name">repository</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span></span><span class="tag"><span class="tag-name">distributionManagement</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>[...]&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p><br />
&nbsp;指定编译后目录：<br />
</p>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">build</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">directory</span><span class="tag">&gt;</span><span>${basedir}/target</span><span class="tag"><span class="tag-name">directory</span><span class="tag">&gt;</span><span>&nbsp;&nbsp; &nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span></span><span class="tag"><span class="tag-name">build</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
</ol>
</div>
<p>&nbsp;</p>
</li>
<li>
<p><strong>For this example, we will configure the Java compiler to allow JDK 5.0 sources. This is as simple as adding this to your POM:</strong></p>
<p>
<table cellspacing="1" border="1" summary="" width="664" cellpadding="1" style="WIDTH: 664px; HEIGHT: 23px">
    <tbody>
        <tr>
            <td>
            <pre>...<br /><strong><build></build><br />&nbsp; <plugins></plugins><br />&nbsp;&nbsp;&nbsp; <plugin></plugin><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <groupid></groupid>org.apache.maven.plugins<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <artifactid></artifactid>maven-compiler-plugin<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <configuration></configuration><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <source></source>1.5<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <target></target>1.5<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; <br />&nbsp; <br /></strong><br />...</pre>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p>dependencies</p>
<p>dependency这行依赖</p>
</li>
<li>
<p><font face="Arial">http://www.devzuz.com/web/guest/downloads</font></p>
</li>
          <br/>
          <span style="color:red;">
            <a href="http://liuzongan.javaeye.com/blog/126914#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 25 Sep 2007 14:44:44 +0800</pubDate>
        <link>http://liuzongan.javaeye.com/blog/126914</link>
        <guid>http://liuzongan.javaeye.com/blog/126914</guid>
      </item>
      <item>
        <title>重构入门（1）</title>
        <author>liuzongan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liuzongan.javaeye.com">liuzongan</a>&nbsp;
          链接：<a href="http://liuzongan.javaeye.com/blog/126818" style="color:red;">http://liuzongan.javaeye.com/blog/126818</a>&nbsp;
          发表时间: 2007年09月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font size="2" face="Comic Sans MS">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 每当要进行重构的时候，第一个步骤永远相同：我得为即将修改的代码建立一给可靠的测试环境，这些测试是必要的，因为尽管遵循重构准则可以使用我避免绝大多数的臭虫引入机会！！</font><font size="2">&nbsp;</font></p>
<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6600">&nbsp;<font face="Arial">重构之前，首先检查自己是否有一套可靠的测试机制，这些测试必须有自我检验（self-checking)能力!</font></font></font></p>
<p><font size="2" color="#ff6600">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 重构技术系以微小的步伐修改程序。如果你犯下错误，很容易便可发现它!</font></p>
<p><font size="2" color="#ff6600">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#ff00ff">任何一个傻瓜能写计算机可以理解的代码，惟有写出人类容易理解的代码，才是优秀的程序员!</font></font></p>
<p><font size="2">有时候会保留旧函数，让它调用新函数，如果旧函数是一个public 函数，而我又不想修改其他class的接口，这便是一种有用的手法</font></p>
          <br/>
          <span style="color:red;">
            <a href="http://liuzongan.javaeye.com/blog/126818#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 25 Sep 2007 10:11:33 +0800</pubDate>
        <link>http://liuzongan.javaeye.com/blog/126818</link>
        <guid>http://liuzongan.javaeye.com/blog/126818</guid>
      </item>
  </channel>
</rss>