﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-此心开始浮躁-随笔分类-工具</title><link>http://www.blogjava.net/gen-sky/category/36526.html</link><description>终日昏昏醉梦间，忽闻春尽强登山，  因过竹院逢僧话，偷得浮生半日闲。</description><language>zh-cn</language><lastBuildDate>Wed, 28 Oct 2009 08:17:16 GMT</lastBuildDate><pubDate>Wed, 28 Oct 2009 08:17:16 GMT</pubDate><ttl>60</ttl><item><title> java.nio.BufferOverflowException       异常</title><link>http://www.blogjava.net/gen-sky/archive/2009/10/28/300068.html</link><dc:creator>星期五</dc:creator><author>星期五</author><pubDate>Wed, 28 Oct 2009 07:45:00 GMT</pubDate><guid>http://www.blogjava.net/gen-sky/archive/2009/10/28/300068.html</guid><wfw:comment>http://www.blogjava.net/gen-sky/comments/300068.html</wfw:comment><comments>http://www.blogjava.net/gen-sky/archive/2009/10/28/300068.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gen-sky/comments/commentRss/300068.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gen-sky/services/trackbacks/300068.html</trackback:ping><description><![CDATA[<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #000000;">Failure&nbsp;executing&nbsp;javac,&nbsp;but&nbsp;could&nbsp;not&nbsp;parse&nbsp;the&nbsp;error:<br />
</span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;">编译器&nbsp;(</span><span style="color: #000000;">1.6</span><span style="color: #000000;">.0_07)&nbsp;中出现异常。&nbsp;如果在&nbsp;Bug&nbsp;Parade&nbsp;中没有找到该错误，请在&nbsp;Java&nbsp;Dev<br />
</span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">eloper&nbsp;Connection&nbsp;(http:</span><span style="color: #008000;">//</span><span style="color: #008000;">java.sun.com/webapps/bugreport)&nbsp;&nbsp;对该错误进行归档。&nbsp;请</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">在报告中附上您的程序和以下诊断信息。谢谢您的合作。<br />
</span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">java.nio.BufferOverflowException<br />
</span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.nio.Buffer.nextPutIndex(Buffer.java:</span><span style="color: #000000;">495</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.nio.HeapCharBuffer.put(HeapCharBuffer.java:</span><span style="color: #000000;">145</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.sun.tools.javac.util.DefaultFileManager.decode(DefaultFileManager<br />
</span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">.java:</span><span style="color: #000000;">830</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.sun.tools.javac.util.DefaultFileManager.access$</span><span style="color: #000000;">300</span><span style="color: #000000;">(DefaultFileMan<br />
</span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">ager.java:</span><span style="color: #000000;">76</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.sun.tools.javac.util.DefaultFileManager$RegularFileObject.getChar<br />
</span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">Content(DefaultFileManager.java:</span><span style="color: #000000;">1353</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.sun.tools.javac.util.DefaultFileManager$RegularFileObject.getChar<br />
</span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">Content(DefaultFileManager.java:</span><span style="color: #000000;">1252</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.sun.tools.javac.main.JavaCompiler.readSource(JavaCompiler.java:</span><span style="color: #000000;">48</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">3</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.sun.tools.javac.main.JavaCompiler.parse(JavaCompiler.java:</span><span style="color: #000000;">550</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.sun.tools.javac.main.JavaCompiler.parseFiles(JavaCompiler.java:</span><span style="color: #000000;">80</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;">1</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:</span><span style="color: #000000;">727</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.sun.tools.javac.main.Main.compile(Main.java:</span><span style="color: #000000;">353</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.sun.tools.javac.main.Main.compile(Main.java:</span><span style="color: #000000;">279</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.sun.tools.javac.main.Main.compile(Main.java:</span><span style="color: #000000;">270</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">25</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.sun.tools.javac.Main.compile(Main.java:</span><span style="color: #000000;">87</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">26</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;sun.reflect.NativeMethodAccessorImpl.invoke0(Native&nbsp;Method)<br />
</span><span style="color: #008080;">27</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.<br />
</span><span style="color: #008080;">28</span>&nbsp;<span style="color: #000000;">java:</span><span style="color: #000000;">39</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">29</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces<br />
</span><span style="color: #008080;">30</span>&nbsp;<span style="color: #000000;">sorImpl.java:</span><span style="color: #000000;">25</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">31</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.lang.reflect.Method.invoke(Method.java:</span><span style="color: #000000;">597</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">32</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.codehaus.plexus.compiler.javac.JavacCompiler.compileInProcess(Jav<br />
</span><span style="color: #008080;">33</span>&nbsp;<span style="color: #000000;">acCompiler.java:</span><span style="color: #000000;">420</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">34</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.codehaus.plexus.compiler.javac.JavacCompiler.compile(JavacCompile<br />
</span><span style="color: #008080;">35</span>&nbsp;<span style="color: #000000;">r.java:</span><span style="color: #000000;">141</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">36</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.maven.plugin.AbstractCompilerMojo.execute(AbstractCompiler<br />
</span><span style="color: #008080;">37</span>&nbsp;<span style="color: #000000;">Mojo.java:</span><span style="color: #000000;">493</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">38</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.maven.plugin.CompilerMojo.execute(CompilerMojo.java:</span><span style="color: #000000;">114</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">39</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPlugi<br />
</span><span style="color: #008080;">40</span>&nbsp;<span style="color: #000000;">nManager.java:</span><span style="color: #000000;">483</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">41</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(Defa<br />
</span><span style="color: #008080;">42</span>&nbsp;<span style="color: #000000;">ultLifecycleExecutor.java:</span><span style="color: #000000;">678</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">43</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLi<br />
</span><span style="color: #008080;">44</span>&nbsp;<span style="color: #000000;">fecycle(DefaultLifecycleExecutor.java:</span><span style="color: #000000;">540</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">45</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(Defau<br />
</span><span style="color: #008080;">46</span>&nbsp;<span style="color: #000000;">ltLifecycleExecutor.java:</span><span style="color: #000000;">519</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">47</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHan<br />
</span><span style="color: #008080;">48</span>&nbsp;<span style="color: #000000;">dleFailures(DefaultLifecycleExecutor.java:</span><span style="color: #000000;">371</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">49</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegmen<br />
</span><span style="color: #008080;">50</span>&nbsp;<span style="color: #000000;">ts(DefaultLifecycleExecutor.java:</span><span style="color: #000000;">332</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">51</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLi<br />
</span><span style="color: #008080;">52</span>&nbsp;<span style="color: #000000;">fecycleExecutor.java:</span><span style="color: #000000;">181</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">53</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:</span><span style="color: #000000;">356</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">54</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.maven.DefaultMaven.execute(DefaultMaven.java:</span><span style="color: #000000;">137</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">55</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.maven.cli.MavenCli.main(MavenCli.java:</span><span style="color: #000000;">356</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">56</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;sun.reflect.NativeMethodAccessorImpl.invoke0(Native&nbsp;Method)<br />
</span><span style="color: #008080;">57</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.<br />
</span><span style="color: #008080;">58</span>&nbsp;<span style="color: #000000;">java:</span><span style="color: #000000;">39</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">59</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces<br />
</span><span style="color: #008080;">60</span>&nbsp;<span style="color: #000000;">sorImpl.java:</span><span style="color: #000000;">25</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">61</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.lang.reflect.Method.invoke(Method.java:</span><span style="color: #000000;">597</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">62</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:</span><span style="color: #000000;">315</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">63</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.codehaus.classworlds.Launcher.launch(Launcher.java:</span><span style="color: #000000;">255</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">64</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:</span><span style="color: #000000;">430</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">65</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">66</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.codehaus.classworlds.Launcher.main(Launcher.java:</span><span style="color: #000000;">375</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">67</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">68</span> <br />
<br />
<br />
通过 eclipse IDE 工具的 project --&gt;clean 运行后，可以执行mvn install命令</div>
<img src ="http://www.blogjava.net/gen-sky/aggbug/300068.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gen-sky/" target="_blank">星期五</a> 2009-10-28 15:45 <a href="http://www.blogjava.net/gen-sky/archive/2009/10/28/300068.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Jakarta Commons HttpClient 学习笔记</title><link>http://www.blogjava.net/gen-sky/archive/2009/09/02/293550.html</link><dc:creator>星期五</dc:creator><author>星期五</author><pubDate>Wed, 02 Sep 2009 02:56:00 GMT</pubDate><guid>http://www.blogjava.net/gen-sky/archive/2009/09/02/293550.html</guid><wfw:comment>http://www.blogjava.net/gen-sky/comments/293550.html</wfw:comment><comments>http://www.blogjava.net/gen-sky/archive/2009/09/02/293550.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gen-sky/comments/commentRss/293550.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gen-sky/services/trackbacks/293550.html</trackback:ping><description><![CDATA[转载于Matrix]<br />
<br />
作者： Hilton<br />
<br />
1、HttpClient的功能<br />
<br />
<br />
<div style="overflow: hidden; visibility: hidden; width: 1px; height: 1px; color: #f4fbff;">JAVA手机网[www.cnjm.net]</div>
<br />
<br />
基于标准，纯正java，实现了http1.0和1.1。<br />
<br />
在一个可扩展的OO框架内，实现了HTTP的全部方法(GET, POST, <br />
PUT, DELETE, HEAD, OPTIONS, and TRACE)<br />
<br />
支持HTTPS(ssl上的HTTP)的加密操作<br />
<br />
透明地穿过HTTP代理建立连接<br />
<br />
通过CONNECT方法，利用通过建立穿过HTTP代理的HTTPS连接<br />
<div style="overflow: hidden; visibility: hidden; width: 1px; height: 1px; color: #f4fbff;">JAVA手机网[www.cnjm.net]</div>
<br />
利用本地Java socket，透明地穿过SOCKS(版本5和4）代理建立连接<br />
<br />
支持利用Basic、Digest和NTLM加密的认证<br />
<div style="overflow: hidden; visibility: hidden; width: 1px; height: 1px; color: #f4fbff;">JAVA手机网[www.cnjm.net]</div>
<br />
支持用于上传大文件的Multi-Part表单POST方法<br />
<br />
<div style="overflow: hidden; visibility: hidden; width: 1px; height: 1px; color: #f4fbff;">JAVA手机网[www.cnjm.net]</div>
插件式安全socket实现，易于使用第三方的解决方案<br />
<br />
连接管理，支持多线程应用，支持设定单个主机总连接和最高连接数量,自动检测和关闭失效连接<br />
<br />
直接将请求信息流送到服务器的端口<br />
<br />
直接读取从服务器的端口送出的应答信息<br />
<br />
<div style="overflow: hidden; visibility: hidden; width: 1px; height: 1px; color: #f4fbff;">JAVA手机网[www.cnjm.net]</div>
支持HTTP/1.0中用KeepAlive和HTTP/1.1中用persistance设置的持久连接<br />
<br />
直接访问由服务器送出的应答代码和头部信息<br />
<br />
可设置连接超时时间<br />
<br />
<br />
HttpMethods 实现Command Pattern，以允许并行请求或高效连接复用<br />
<br />
<div style="overflow: hidden; visibility: hidden; width: 1px; height: 1px; color: #f4fbff;">JAVA手机网[www.cnjm.net]</div>
遵循the Apache Software License协议，源码免费可得 <br />
<br />
<br />
<div style="overflow: hidden; visibility: hidden; width: 1px; height: 1px; color: #f4fbff;">JAVA手机网[www.cnjm.net]</div>
<br />
<div style="overflow: hidden; visibility: hidden; width: 1px; height: 1px; color: #f4fbff;">JAVA手机网[www.cnjm.net]</div>
2、预备工作<br />
<br />
对jre1.3.*，如果要HttpClient支持https，则需要下载并安装jsse和jce.安装的步骤如下：<br />
1)下载jsse和jce.<br />
2)检查CLASSPATH中没有与jsse和jce相关的jar包<br />
3)将 US_export_policy.jar、local_policy.jar、jsse.jar、jnet.jar、jce1_2_x.jar、sunjce_provider.jar、jcert.jar复制到目录：<br />
UNIX:$JDK_HOME/jre/lib/ext<br />
<div style="overflow: hidden; visibility: hidden; width: 1px; height: 1px; color: #f4fbff;">JAVA手机网[www.cnjm.net]</div>
Windows:%JDK_HOME%"jre"lib"ext<br />
4)修改下述目录下的java.security文件。<br />
UNIX:$JDK_HOME/jre/lib/security/<br />
Windows:%JDK_HOME%"jre"lib"security"<br />
5)<br />
<div style="overflow: hidden; visibility: hidden; width: 1px; height: 1px; color: #f4fbff;">JAVA手机网[www.cnjm.net]</div>
将<br />
#<br />
# List of providers and their preference orders:<br />
#<br />
<div style="overflow: hidden; visibility: hidden; width: 1px; height: 1px; color: #f4fbff;">JAVA手机网[www.cnjm.net]</div>
security.provider.1=sun.security.provider.Sun<br />
<div style="overflow: hidden; visibility: hidden; width: 1px; height: 1px; color: #f4fbff;">JAVA手机网[www.cnjm.net]</div>
security.provider.2=com.sun.rsajca.Provider<br />
改为：<br />
#<br />
# List of providers and their preference orders:<br />
#<br />
security.provider.1=com.sun.crypto.provider.SunJCE<br />
security.provider.2=sun.security.provider.Sun<br />
security.provider.3=com.sun.rsajca.Provider<br />
security.provider.4=com.sun.net.ssl.internal.ssl.Provider<br />
<br />
HttpClient还要求安装commons-logging，下面跟httpclient一块安装。<br />
<br />
3、取得源码<br />
<br />
<br />
cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic login<br />
password: anoncvs<br />
cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic checkout jakarta-commons/logging<br />
cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic checkout jakarta-commons/httpclient<br />
<br />
编译：<br />
<div style="overflow: hidden; visibility: hidden; width: 1px; height: 1px; color: #f4fbff;">JAVA手机网[www.cnjm.net]</div>
cd jakarta-commons/logging<br />
ant dist<br />
cp dis/*.jar ../httpclient/lib/<br />
cd ../httpclient<br />
ant dist<br />
<br />
<br />
<div style="overflow: hidden; visibility: hidden; width: 1px; height: 1px; color: #f4fbff;">JAVA手机网[www.cnjm.net]</div>
4、使用HttpClient编程的基本步聚<br />
<br />
<br />
创建 HttpClient 的一个实例.<br />
<div style="overflow: hidden; visibility: hidden; width: 1px; height: 1px; color: #f4fbff;">JAVA手机网[www.cnjm.net]</div>
<br />
创
建某个方法
（DeleteMethod，EntityEnclosingMethod，ExpectContinueMethod，GetMethod，HeadMethod，MultipartPostMethod，OptionsMethod，PostMethod，PutMethod，TraceMethod）
的一个实例，一般可用要目标URL为参数。<br />
<br />
让 HttpClient 执行这个方法.<br />
<br />
<div style="overflow: hidden; visibility: hidden; width: 1px; height: 1px; color: #f4fbff;">JAVA手机网[www.cnjm.net]</div>
读取应答信息.<br />
<br />
释放连接.<br />
<br />
处理应答.<br />
<br />
<br />
在执行方法的过程中，有两种异常，一种是HttpRecoverableException，表示偶然性错误发生，一般再试可能成功，另一种是IOException，严重错误。<br />
这儿有这个教程中的一个例程，可以下载。<br />
<br />
<br />
5、认证<br />
<br />
HttpClient三种不同的认证方案: Basic, Digest and NTLM. 这些方案可用于服务器或代理对客户端的认证，简称服务器认证或代理认证。<br />
1)服务器认证(Server Authentication)<br />
HttpClient处理服务器认证几乎是透明的，仅需要开发人员提供登录信息(login
credentials)。登录信息保存在HttpState类的实例中，可以通过 setCredentials(String realm,
Credentials cred)和getCredentials(String
realm)来获取或设置。注意，设定对非特定站点访问所需要的登录信息，将realm参数置为null.
HttpClient内建的自动认证，可以通过HttpMethod类的setDoAuthentication(boolean
doAuthentication)方法关闭，而且这次关闭只影响HttpMethod当前的实例。<br />
抢先认证(Preemptive Authentication)可以通过下述方法打开.<br />
client.getState().setAuthenticationPreemptive(true);<br />
在这种模式时，HttpClient会主动将basic认证应答信息传给服务器，即使在某种情况下服务器可能返回认证失败的应答，这样做主要是为了减少连接的建立。为使每个新建的 HttpState实例都实行抢先认证，可以如下设置系统属性。<br />
setSystemProperty(Authenticator.PREEMPTIVE_PROPERTY, "true");<br />
<br />
Httpclient实现的抢先认证遵循rfc2617.<br />
2)代理认证(proxy authentication)<br />
除了登录信息需单独存放以外，代理认证与服务器认证几乎一致。用 setProxyCredentials(String realm, Credentials cred)和 getProxyCredentials(String realm)设、取登录信息。<br />
3)认证方案(authentication schemes)<br />
Basic<br />
是HTTP中规定最早的也是最兼容(?)的方案，遗憾的是也是最不安全的一个方案，因为它以明码传送用户名和密码。它要求一个UsernamePasswordCredentials实例，可以指定服务器端的访问空间或采用默认的登录信息。<br />
Digest<br />
是在HTTP1.1中增加的一个方案，虽然不如Basic得到的软件支持多，但还是有广泛的使用。Digest方案比Basic方案安全得多，因它根本
就不通过网络传送实际的密码，传送的是利用这个密码对从服务器传来的一个随机数(nonce)的加密串。它要求一个
UsernamePasswordCredentials实例，可以指定服务器端的访问空间或采用默认的登录信息。<br />
NTLM<br />
<div style="overflow: hidden; visibility: hidden; width: 1px; height: 1px; color: #f4fbff;">JAVA手机网[www.cnjm.net]</div>
这是HttpClient支持的最复杂的认证协议。它M$设计的一个私有协议，没有公开的规范说明。一开始由于设计的缺陷，NTLM的安全性比
Digest差，后来经过一个ServicePack补丁后，安全性则比较Digest高。NTLM需要一个NTCredentials实例.
注意，由于NTLM不使用访问空间(realms)的概念，HttpClient利用服务器的域名作访问空间的名字。还需要注意，提供给
NTCredentials的用户名，不要用域名的前缀 - 如: "adrian" 是正确的，而 "DOMAIN"adrian" 则是错的.<br />
NTLM认证的工作机制与basic和digest有很大的差别。这些差别一般由HttpClient处理，但理解这些差别有助避免在使用NTLM认证时出现错误。<br />
<br />
从HttpClientAPI的角度来看，NTLM与其它认证方式一样的工作，差别是需要提供'NTCredentials'实例而不是'UsernamePasswordCredentials'(其实，前者只是扩展了后者)<br />
<br />
对NTLM认证，访问空间是连接到的机器的域名，这对多域名主机会有一些麻烦.只有HttpClient连接中指定的域名才是认证用的域名。建议将realm设为null以使用默认的设置。<br />
<br />
NTLM只是认证了一个连接而不是一请求，所以每当一个新的连接建立就要进行一次认证，且在认证的过程中保持连接是非常重要的。 因此，NTLM不能同时用于代理认证和服务器认证，也不能用于http1.0连接或服务器不支持持久连接的情况。<br />
<br />
<br />
6、重定向<br />
<br />
由于技术限制，以及为保证2.0发布版API的稳定，HttpClient还不能自动处重定向，但对重定向到同一主机、同一端口且采用同一协议的情况HttpClient可以支持。不能自动的处理的情况，包括需要人工交互的情况，或超出httpclient的能力。<br />
当服务器重定向指令指到不同的主机时，HttpClient只是简单地将重定向状态码作为应答状态。所有的300到399（包含两端）的返回码，都表示是重定向应答。常见的有：<br />
<br />
301 永久移动. HttpStatus.SC_MOVED_PERMANENTLY<br />
<br />
<div style="overflow: hidden; visibility: hidden; width: 1px; height: 1px; color: #f4fbff;">JAVA手机网[www.cnjm.net]</div>
302 临时移动. HttpStatus.SC_MOVED_TEMPORARILY<br />
<br />
303 See Other. HttpStatus.SC_SEE_OTHER<br />
<br />
307 临时重定向. HttpStatus.SC_TEMPORARY_REDIRECT<br />
<div style="overflow: hidden; visibility: hidden; width: 1px; height: 1px; color: #f4fbff;">JAVA手机网[www.cnjm.net]</div>
<br />
当收到简单的重定向时，程序应从HttpMethod对象中抽取新的URL并将其下载。另外,限制一下重定向次数是个好的主意，这可以避免递归循环。新的URL可以从头字段Location中抽取，如下：<br />
String redirectLocation;<br />
Header locationHeader = method.getResponseHeader("location");<br />
if (locationHeader != null) {<br />
<div style="overflow: hidden; visibility: hidden; width: 1px; height: 1px; color: #f4fbff;">JAVA手机网[www.cnjm.net]</div>
redirectLocation = locationHeader.getValue();<br />
} else {<br />
// The response is invalid and did not provide the new location for<br />
// the resource. Report an error or possibly handle the response<br />
// like a 404 Not Found error.<br />
}<br />
<br />
特殊重定向：<br />
<br />
300 多重选择. HttpStatus.SC_MULTIPLE_CHOICES<br />
<br />
304 没有改动. HttpStatus.SC_NO T_MODIFIED<br />
<br />
305 使用代理. HttpStatus.SC_USE_PROXY <br />
<br />
<br />
<br />
<br />
7、字符编码(character encoding)<br />
<br />
一个HTTP协议的请求或应答的头部(在http协议中，数据包分为两部分，一部分是头部，由一些名值对构成，一部分是主体(body)，是真正传办理
的数据（如HTML页面等）），必须以US-ASCII编码，这是因为头部不传数据而只描述被要传输的数据的一些信息，一个例外是cookie，它是数据
但是通过头部进行传输的，所以它也要用US-ASCII编码。<br />
HTTP数据包的主体部分，可以用任何一种方式进行编码，默认是ISO-
8859-1，具体可以用头部字段Content-Type指定。可以利用 addRequestHeader方法，设定编码方式；用
getResponseCharSet取得编码方式。对HTML或XML等类型的文档，它们的本身的Content-Type也可以指定编码方式，主要区
分两者的作用范围以得到正确实的解码。<br />
URL的编码标准，由RFC1738指定为，只能是由可打印8位/字节的us-ascii字符组成，80-ff不是us-ascii字符，而00-1F是控制字符，这两个区域中用的字符都须加以编码(encoded)。<br />
<div style="overflow: hidden; visibility: hidden; width: 1px; height: 1px; color: #f4fbff;">JAVA手机网[www.cnjm.net]</div>
<br />
8、Cookies<br />
<br />
HttpClient能自动管理cookie,包括允许服务器设置cookie并在需要的时候自动将cookie返回服务器，它也支持手工设置
cookie后发送到服务器端。不幸的是，对如何处理cookie，有几个规范互相冲突：Netscape Cookie 草案, RFC2109,
RFC2965，而且还有很大数量的软件商的cookie实现不遵循任何规范.
为了处理这种状况，HttpClient提供了策略驱动的cookie管理方式。HttpClient支持的cookie规范有：<br />
Netscape cookie草案，是最早的cookie规范，基于rfc2109。尽管这个规范与rc2109有较大的差别，这样做可以与一些服务器兼容。 <br />
<br />
rfc2109，
是w3c发布的第一个官方cookie规范。理论上讲，所有的服务器在处理cookie(版本1)时，都要遵循此规范，正因如此，HttpClient将
其设为默认的规范。遗憾的是，这个规范太严格了，以致很多服务器不正确的实施了该规范或仍在作用Netscape规范。在这种情况下，应使用兼容规范。<br />
<div style="overflow: hidden; visibility: hidden; width: 1px; height: 1px; color: #f4fbff;">JAVA手机网[www.cnjm.net]</div>
<br />
<div style="overflow: hidden; visibility: hidden; width: 1px; height: 1px; color: #f4fbff;">JAVA手机网[www.cnjm.net]</div>
兼容性规范，设计用来兼容尽可能多的服务器，即使它们并没有遵循标准规范。当解析cookie出现问题时，应考虑采用兼容性规范。<br />
<div style="overflow: hidden; visibility: hidden; width: 1px; height: 1px; color: #f4fbff;">JAVA手机网[www.cnjm.net]</div>
<br />
<div style="overflow: hidden; visibility: hidden; width: 1px; height: 1px; color: #f4fbff;">JAVA手机网[www.cnjm.net]</div>
RFC2965规范暂时没有被HttpClient支持（在以后的版本为会加上），它定义了cookie版本2，并说明了版本1cookie的不足，RFC2965有意有久取代rfc2109.<br />
在HttpClient中，有两种方法来指定cookie规范的使用，<br />
HttpClient client = new HttpClient();<br />
client.getState().setCookiePolicy(CookiePolicy.COMPATIBILITY);<br />
这种方法设置的规范只对当前的HttpState有效，参数可取值CookiePolicy.COMPATIBILITY，CookiePolicy.NETSCAPE_DRAFT或CookiePolicy.RFC2109。<br />
<br />
<div style="overflow: hidden; visibility: hidden; width: 1px; height: 1px; color: #f4fbff;">JAVA手机网[www.cnjm.net]</div>
System.setProperty("apache.commons.httpclient.cookiespec", "COMPATIBILITY");<br />
此法指的规范，对以后每个新建立的HttpState对象都有效，参数可取值"COMPATIBILITY","NETSCAPE_DRAFT"或"RFC2109"。<br />
常有不能解析cookie的问题，但更换到兼容规范大都能解决。<br />
<br />
<br />
9、使用HttpClient遇到问题怎么办?<br />
<br />
<br />
用一个浏览器访问服务器，以确认服务器应答正常<br />
<br />
<div style="overflow: hidden; visibility: hidden; width: 1px; height: 1px; color: #f4fbff;">JAVA手机网[www.cnjm.net]</div>
如果在使代理，关掉代理试试<br />
<br />
另找一个服务器来试试（如果运行着不同的服务器软件更好）<br />
<br />
检查代码是否按教程中讲的思路编写<br />
<br />
设置log级别为debug，找出问题出现的原因<br />
<br />
打开wiretrace，来追踪客户端与服务器的通信，以确实问题出现在什么地方<br />
<br />
用telnet或netcat手工将信息发送到服务器，适合于猜测已经找到了原因而进行试验时<br />
<br />
将netcat以监听方式运行，用作服务器以检查httpclient如何处理应答的。<br />
<br />
利用最新的httpclient试试，bug可能在最新的版本中修复了<br />
<br />
向邮件列表求帮助<br />
<br />
向bugzilla报告bug. <br />
<br />
<br />
<br />
10、SSL<br />
<br />
借助Java Secure Socket Extension (JSSE)，HttpClient全面支持Secure Sockets
Layer (SSL)或IETF Transport Layer Security
(TLS)协议上的HTTP。JSSE已经jre1.4及以后的版本中，以前的版本则需要手工安装设置，具体过程参见Sun网站或本学习笔记。<br />
HttpClient中使用SSL非常简单，参考下面两个例子:<br />
HttpClient httpclient = new HttpClient();<br />
GetMethod httpget = new GetMethod("<a href="http://www.cnjm.net/resfetch/BDW9Dg40zo9tbc.Pz9UiSIIbzhuA-dUGhult" target="_blank">https://www.verisign.com/</a>"); <br />
httpclient.executeMethod(httpget);<br />
System.out.println(httpget.getStatusLine().toString());<br />
，如果通过需要授权的代理，则如下：<br />
HttpClient httpclient = new HttpClient();<br />
httpclient.getHostConfiguration().setProxy("myproxyhost", 8080);<br />
<div style="overflow: hidden; visibility: hidden; width: 1px; height: 1px; color: #f4fbff;">JAVA手机网[www.cnjm.net]</div>
httpclient.getState().setProxyCredentials("my-proxy-realm", " myproxyhost",<br />
new UsernamePasswordCredentials("my-proxy-username", "my-proxy-password"));<br />
GetMethod httpget = new GetMethod("<a href="http://www.cnjm.net/resfetch/CnUnZGQj2I7DwxwcHJQJumFF2EXs4JRvVC.D" target="_blank">https://www.verisign.com/</a>"); <br />
httpclient.executeMethod(httpget);<br />
System.out.println(httpget.getStatusLine().toString());<br />
<br />
<div style="overflow: hidden; visibility: hidden; width: 1px; height: 1px; color: #f4fbff;">JAVA手机网[www.cnjm.net]</div>
在HttpClient中定制SSL的步骤如下：<br />
<br />
提
供了一个实现了
org.apache.commons.httpclient.protocol.SecureProtocolSocketFactory接口的
socket factory。这个 socket
factory负责打一个到服务器的端口，使用标准的或第三方的SSL函数库，并进行象连接握手等初始化操作。通常情况下，这个初始化操作在端口被创建时
自动进行的。<br />
<br />
<div style="overflow: hidden; visibility: hidden; width: 1px; height: 1px; color: #f4fbff;">JAVA手机网[www.cnjm.net]</div>
实例化一个org.apache.commons.httpclient.protocol.Protocol对象。创建这个实例时，需要一个合法的协议类型(如https)，一个定制的socket factory，和一个默认的端中号(如https的443端口).<br />
Protocol myhttps = new Protocol("https", new MySSLSocketFactory(), 443);<br />
然后，这个实例可被设置为协议的处理器。<br />
HttpClient httpclient = new HttpClient();<br />
httpclient.getHostConfiguration().setHost("www.whatever.com", 443, myhttps);<br />
GetMethod httpget = new GetMethod("/");<br />
httpclient.executeMethod(httpget);<br />
<br />
<br />
通过调用Protocol.registerProtocol方法，将此定制的实例，注册为某一特定协议的默认的处理器。由此，可以很方便地定制自己的协议类型(如myhttps)。<br />
Protocol.registerProtocol("myhttps", <br />
new Protocol("https", new MySSLSocketFactory(), 9443));<br />
...<br />
HttpClient httpclient = new HttpClient();<br />
GetMethod httpget = new GetMethod("my<a href="http://www.cnjm.net/resfetch/HTE4-.tb5g5JSYCAgHSAOGP7xWDFvnTw79RJ" target="_blank">https://www.whatever.com/</a>");<br />
httpclient.executeMethod(httpget);<br />
<div style="overflow: hidden; visibility: hidden; width: 1px; height: 1px; color: #f4fbff;">JAVA手机网[www.cnjm.net]</div>
如果想用自己定制的处理器取代https默认的处理器，只需要将其注册为"https"即可。<br />
Protocol.registerProtocol("https", <br />
new Protocol("https", new MySSLSocketFactory(), 443));<br />
HttpClient httpclient = new HttpClient();<br />
GetMethod httpget = new GetMethod("<a href="http://www.cnjm.net/resfetch/Ig9UMDBa10uXlxsbGywbVA8wuGy4xizc4fiX" target="_blank">https://www.whatever.com/</a>");<br />
httpclient.executeMethod(httpget);<br />
<br />
已知的限制和问题<br />
<br />
持续的SSL连接在Sun的低于1.4JVM上不能工作，这是由于JVM的bug造成。<br />
<br />
通过代理访问服务器时，非抢先认证（ Non-preemptive authentication）会失败，这是由于HttpClient的设计缺陷造成的，以后的版本中会修改。<br />
<div style="overflow: hidden; visibility: hidden; width: 1px; height: 1px; color: #f4fbff;">JAVA手机网[www.cnjm.net]</div>
<br />
遇到问题的处理<br />
很多问题，特别是在jvm低于1.4时，是由jsse的安装造成的。<br />
下面的代码，可作为最终的检测手段。<br />
<br />
import java.io.BufferedReader;<br />
import java.io.InputStreamReader;<br />
import java.io.OutputStreamWriter;<br />
import java.io.Writer;<br />
import java.net.Socket;<br />
<br />
import javax.net.ssl.SSLSocketFactory;<br />
<br />
<div style="overflow: hidden; visibility: hidden; width: 1px; height: 1px; color: #f4fbff;">JAVA手机网[www.cnjm.net]</div>
public class Test {<br />
<br />
<div style="overflow: hidden; visibility: hidden; width: 1px; height: 1px; color: #f4fbff;">JAVA手机网[www.cnjm.net]</div>
public static final String TARGET_HTTPS_SERVER = "www.verisign.com"; <br />
public static final int TARGET_HTTPS_PORT = 443; <br />
<br />
public static void main(String[] args) throws Exception {<br />
<br />
Socket socket = SSLSocketFactory.getDefault().<br />
createSocket(TARGET_HTTPS_SERVER, TARGET_HTTPS_PORT);<br />
try {<br />
Writer out = new OutputStreamWriter(<br />
socket.getOutputStream(), "ISO-8859-1");<br />
out.write("GET / HTTP/1.1"r"n"); <br />
out.write("Host: " + TARGET_HTTPS_SERVER + ":" + <br />
TARGET_HTTPS_PORT + ""r"n"); <br />
out.write("Agent: SSL-TEST"r"n"); <br />
<div style="overflow: hidden; visibility: hidden; width: 1px; height: 1px; color: #f4fbff;">JAVA手机网[www.cnjm.net]</div>
out.write(""r"n"); <br />
out.flush(); <br />
BufferedReader in = new BufferedReader(<br />
new InputStreamReader(socket.getInputStream(), "ISO-8859-1"));<br />
String line = null;<br />
while ((line = in.readLine()) != null) {<br />
<div style="overflow: hidden; visibility: hidden; width: 1px; height: 1px; color: #f4fbff;">JAVA手机网[www.cnjm.net]</div>
System.out.println(line);<br />
<div style="overflow: hidden; visibility: hidden; width: 1px; height: 1px; color: #f4fbff;">JAVA手机网[www.cnjm.net]</div>
}<br />
} finally {<br />
socket.close(); <br />
}<br />
}<br />
}<br />
<br />
<br />
<br />
11、httpclient的多线程处理<br />
<div style="overflow: hidden; visibility: hidden; width: 1px; height: 1px; color: #f4fbff;">JAVA手机网[www.cnjm.net]</div>
<br />
使用多线程的主要目的，是为了实现并行的下载。在httpclient运行的过程中，每个http协议的方法，使用一个HttpConnection实
例。由于连接是一种有限的资源，每个连接在某一时刻只能供一个线程和方法使用，所以需要确保在需要时正确地分配连接。HttpClient采用了一种类似
jdbc连接池的方法来管理连接，这个管理工作由 MultiThreadedHttpConnectionManager完成。<br />
MultiThreadedHttpConnectionManager connectionManager = <br />
<div style="overflow: hidden; visibility: hidden; width: 1px; height: 1px; color: #f4fbff;">JAVA手机网[www.cnjm.net]</div>
new MultiThreadedHttpConnectionManager();<br />
HttpClient client = new HttpClient(connectionManager);<br />
此
是，client可以在多个线程中被用来执行多个方法。每次调用HttpClient.executeMethod()
方法，都会去链接管理器申请一个连接实例，申请成功这个链接实例被签出(checkout)，随之在链接使用完后必须归还管理器。管理器支持两个设
置：maxConnectionsPerHost 每个主机的最大并行链接数，默认为2 <br />
maxTotalConnections 客户端总并行链接最大数，默认为20 <br />
<br />
管理器重新利用链接时，采取早归还者先重用的方式（least recently used approach）。<br />
由于是使用HttpClient的程序而不是HttpClient本身来读取应答包的主体，所以HttpClient无法决定什么时间连接不再使用了，这也就要求在读完应答包的主体后必须手工显式地调用releaseConnection()来释放申请的链接。<br />
MultiThreadedHttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager();<br />
HttpClient client = new HttpClient(connectionManager);<br />
...<br />
// 在某个线程中。<br />
GetMethod get = new GetMethod("<a href="http://www.cnjm.net/resfetch/GS8Izc0YK6mpZA.YD9PND8IPGA8KCPnCNNPHqQ__" target="_blank">http://jakarta.apache.org/</a>");<br />
try {<br />
client.executeMethod(get);<br />
// print response to stdout<br />
System.out.println(get.getResponseBodyAsStream());<br />
<div style="overflow: hidden; visibility: hidden; width: 1px; height: 1px; color: #f4fbff;">JAVA手机网[www.cnjm.net]</div>
} finally {<br />
<div style="overflow: hidden; visibility: hidden; width: 1px; height: 1px; color: #f4fbff;">JAVA手机网[www.cnjm.net]</div>
// be sure the connection is released back to the connection <br />
// manager<br />
<div style="overflow: hidden; visibility: hidden; width: 1px; height: 1px; color: #f4fbff;">JAVA手机网[www.cnjm.net]</div>
get.releaseConnection();<br />
}<br />
对每一个HttpClient.executeMethod须有一个method.releaseConnection()与之匹配.<br />
<br />
12、HTTP方法<br />
<br />
<br />
HttpClient支持的HTTP方法有8种，下面分述之。<br />
<br />
1、Options<br />
<br />
HTTP方法Options用来向服务器发送请求，希望获得针对由请求URL(request
url)标志的资源在请求/应答的通信过程可以使用的功能选项。通过这个方法，客户端可以在采取具体行动之前，就可对某一资源决定采取什么动作和/或以及
一些必要条件，或者了解服务器提供的功能。这个方法最典型的应用，就是用来获取服务器支持哪些HTTP方法。<br />
HttpClient中有一个类叫OptionsMethod，来支持这个HTTP方法，利用这个类的getAllowedMethods方法，就可以很简单地实现上述的典型应用。<br />
<br />
<br />
OptionsMethod options = new OptionsMethod("<a href="http://www.cnjm.net/resfetch/BVBDcHC9vJKS1z5mPgZwPks-vT49Qy5LEgbC" target="_blank">http://jakarta.apache.org</a>");<br />
// 执行方法并做相应的异常处理<br />
...<br />
Enumeration allowedMethods = options.getAllowedMethods();<br />
options.releaseConnection();<br />
<div style="overflow: hidden; visibility: hidden; width: 1px; height: 1px; color: #f4fbff;">JAVA手机网[www.cnjm.net]</div>
<br />
2、Get<br />
<br />
HTTP方法GET用来取回请求URI（request-URI）标志的任何信息（以实体(entity)的形式），"get"这个单词本意就是&#8221;获取
&#8220;的意思。如果请求URI指向的一个数据处理过程，那这个过程生成的数据，在应答中以实体的形式被返回，而不是将这个过程的代码的返回。<br />
如果
HTTP包中含有If-ModifiedSince, If-Unmodified-Since, If-Match, If-None-Match,
或
If-Range等头字段，则GET也就变成了&#8221;条件GET&#8220;，即只有满足上述字段描述的条件的实体才被取回，这样可以减少一些非必需的网络传输，或者减
少为获取某一资源的多次请求（如第一次检查，第二次下载）。（一般的浏览器，都有一个临时目录，用来缓存一些网页信息，当再次浏览某个页面的时候，只下载
那些修改过的内容，以加快浏览速度，就是这个道理。至于检查，则常用比GET更好的方法HEAD来实现。）如果HTTP包中含有Range头字段，那么请
求URI指定的实体中，只有决定范围条件的那部分才被取回来。（用过多线程下载工具的朋友，可能比较容易理解这一点）<br />
这个方法的典型应用，用
来从web服务器下载文档。HttpClient定义了一个类叫GetMethod来支持这个方法，用GetMethod类中
getResponseBody, getResponseBodyAsStream 或
getResponseBodyAsString函数就可以取到应答包包体中的文档（如HTML页面）信息。这这三个函数
中，getResponseBodyAsStream通常是最好的方法，主要是因为它可以避免在处理下载的文档之前缓存所有的下载的数据。<br />
<br />
GetMethod get = new GetMethod("<a href="http://www.cnjm.net/resfetch/HTE4-.tbDklJa2N4Y777Y3RjW2PwOMV0774i" target="_blank">http://jakarta.apache.org</a>");<br />
// 执行方法，并处理失败的请求.<br />
...<br />
InputStream in = get.getResponseBodyAsStream();<br />
// 利用输入流来处理信息。<br />
get.releaseConnection();<br />
<div style="overflow: hidden; visibility: hidden; width: 1px; height: 1px; color: #f4fbff;">JAVA手机网[www.cnjm.net]</div>
<br />
<div style="overflow: hidden; visibility: hidden; width: 1px; height: 1px; color: #f4fbff;">JAVA手机网[www.cnjm.net]</div>
对GetMethod的最常见的不正确的使用，是没有将全部的应答主体的数据读出来。还有，必须注意要手工明确地将链接释放。<br />
<br />
3、Head<br />
<div style="overflow: hidden; visibility: hidden; width: 1px; height: 1px; color: #f4fbff;">JAVA手机网[www.cnjm.net]</div>
<br />
HTTP的Head方法，与Get方法完全一致，唯一的差别是服务器不能在应答包中包含主体(message-body)，而且一定不能包含主体。使用
这个方法，可以使得客户无需将资源下载回就可就以得到一些关于它的基本信息。这个方法常用来检查超链的可访问性以及资源最近有没有被修改。<br />
HTTP的head方法最典型的应用，是获取资源的基本信息。HttpClient定义了HeadMethod类支持这个方法，HeadMethod类与其它*Method类一样，用 getResponseHeaders()取回头部信息，而没有自己的特殊方法。<br />
<br />
HeadMethod head = new HeadMethod("<a href="http://www.cnjm.net/resfetch/HTE4-.tbDklJa2N4Y777Y3RjW2PwOMV0774i" target="_blank">http://jakarta.apache.org</a>");<br />
// 执行方法，并处理失败的请求.<br />
...<br />
// 取回应答包的头字段信息.<br />
Header[] headers = head.getResponseHeaders();<br />
<br />
<div style="overflow: hidden; visibility: hidden; width: 1px; height: 1px; color: #f4fbff;">JAVA手机网[www.cnjm.net]</div>
// 只取回最后修改日期字段的信息.<br />
String lastModified = head.getResponseHeader("last-modified").getValue();<br />
<br />
<br />
<br />
4、Post<br />
<br />
Post在英文有&#8220;派驻&#8221;的意思，HTTP方法POST就是要求服务器接受请求包中的实体，并将其作为请求URI的下属资源。从本质上说，这意味着服务
器要保存这个实体信息，而且通常由服务器端的程序进行处理。Post方法的设计意图，是要以一种统一的方式实现下列功能：<br />
对已有的资源做评注<br />
<br />
将信息发布到BBS、新闻组、邮件列表，或类似的文章组中<br />
<br />
将一块数据，提交给数据处理进程<br />
<br />
通过追加操作，来扩展一个数据库<br />
这些都操作期待着在服务器端产生一定的&#8220;副作用&#8221;，如修改了数据库等。<br />
HttpClient定义PostMethod类以支持该HTTP方法，在httpclient中，使用post方法有两个基本的步骤：为请求包准备数
据，然后读取服务器来的应答包的信息。通过调用
setRequestBody()函数，来为请求包提供数据，它可以接收三类参数：输入流、名值对数组或字符串。至于读取应答包需要调用
getResponseBody* 那一系列的方法，与GET方法处理应答包的方法相同。<br />
常见问题是，没有将全部应答读取（无论它对程序是否有用），或没有释放链接资源。
<img src ="http://www.blogjava.net/gen-sky/aggbug/293550.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gen-sky/" target="_blank">星期五</a> 2009-09-02 10:56 <a href="http://www.blogjava.net/gen-sky/archive/2009/09/02/293550.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> eclipse+CVS 的基本使用方法</title><link>http://www.blogjava.net/gen-sky/archive/2009/06/26/284327.html</link><dc:creator>星期五</dc:creator><author>星期五</author><pubDate>Fri, 26 Jun 2009 10:02:00 GMT</pubDate><guid>http://www.blogjava.net/gen-sky/archive/2009/06/26/284327.html</guid><description><![CDATA[<div>eclipse+cvs的基本使用方法</div>
<div>转自：http://hi.baidu.com/ayifa/blog/item/e67bc2fc047567fcfd037f42.html</div>
<table style="table-layout: fixed;">
    <tbody>
        <tr>
            <td>
            <div id="blog_text">很多时候我们在做项目开发时，会用到cvs，现在我给大家介绍一下关于eclipse下怎么使用cvs管理功能，eclipse本身是自带cvs的，我们只要简单设置一下让它连接到cvs服务器上。<br />
            &nbsp;&nbsp;&nbsp;
            看下图<br />
            <img src="http://blog.csdn.net/images/blog_csdn_net/iwo99/50561/o_cvs1.jpg" border="0" height="338" width="586"  alt="" /><br />
            点击cvs的图标出现此画面后，在空白处点击右键就可以，新建一个资源库位置，如下图<br />
            <img src="http://blog.csdn.net/images/blog_csdn_net/iwo99/50561/o_cvs2.jpg" border="0" height="573" width="800"  alt="" /><br />
            输入完信息后，点击完成，就建立好了，跟cvs服务器的连接，下面我们打开cvs服务器上的目录<br />
            <img src="http://blog.csdn.net/images/blog_csdn_net/iwo99/50561/o_cvs3.jpg" border="0" height="575" width="800"  alt="" /><br />
            对于cvs服务器上的目录，我们可以检出，一种是检出为项目，就会将目录检出在eclipse中自动生成一个项目,<br />
            也可以将某个目录检出到任何一个项目中即〔检出到〕这个功能，需要注意的是只有检出的文件，在修改后才可以提交。下面看对文件的操作：<br />
            <img src="http://blog.csdn.net/images/blog_csdn_net/iwo99/50561/o_cvs4.jpg" border="0" height="574" width="800"  alt="" /><br />
            对于文件来说，我们最常用的就是比较cvs中各个版本文件的区别，方便我们查找更新有没有问题，点击任何一个文件点击右键就可看到上面的图片，然后我们使用在资源历史记录中显示，看到下图：<br />
            <img src="http://blog.csdn.net/images/blog_csdn_net/iwo99/50561/o_cvs5.jpg" border="0" height="573" width="800"  alt="" /><br />
            我们按住ctrl键点击鼠标选择两个版本的文件，然后点击鼠标右键，点击比较就可以比较这个文件这两个版本之间的差异了。<br />
            <img src="http://blog.csdn.net/images/blog_csdn_net/iwo99/50561/o_cvs6.jpg" border="0" height="572" width="800"  alt="" /><br />
            下面我们看看怎么样来更新cvs服务器上的文件，前面已经讲了，只有从cvs服务器中检出的文件才可以更新和提交，看下图<br />
            <img src="http://blog.csdn.net/images/blog_csdn_net/iwo99/50561/o_cvs7.jpg" border="0" height="600" width="800"  alt="" /><br />
            在
            项目中选中任何一个检出的文件，点击鼠标右键，选择小组，就可以看到提交和更新等很多功能。你只要更改好后，点击提交就可提交到cvs服务器中，点击更新
            是从cvs服务器中取文件更新本地文件,这里需要注意的是，当我们建立的项目是源代码文件和编译好的类文件是不同目录的时候，是不能传类文件，传的话会导
            致cvs服务器上的文件出问题，只能将类文件单独复制到专门用来上传的目录上传，因为项目在编译的时候会将原文件下的cvs目录也编译到类文件下，所以会
            导致这个问题。<br />
            下面顺便说一个eclipse本地文件的一个历史记录的功能，看到上图中的比较和替换为，就是eclipse一个本地的历史记录功能，帮助你可以恢复以前或者跟以前的文件比较的功能。看下图<img src="http://blog.csdn.net/images/blog_csdn_net/iwo99/50561/o_cvs8.jpg" border="0" height="561" width="800"  alt="" /><br />
            相信大家一看就会明白这个功能。<br />
            关于eclipse＋cvs的基本功能使用其实很简单，大家试一下就知道，我在项目中用得最多的都是它的比较功能，对于文件上传我还是用cvs的客户端程序，因为源代码目录和类文件目录不同，所以这样比较安全，希望<br />
            这些能对各位使用eclipse中的cvs有所帮助。如有问题欢迎指出。<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            －－大肚翁&nbsp;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            2004.10.9<br />
            <div><a href="http://blog.csdn.net/iwo99/archive/2004/10/10/130884.aspx"><font color="#000080">eclipse +cvs 的基本使用方法(二)</font></a> </div>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在第一部分中讲述了一个问题，关于
            项目在编译的时候会将原文件下的cvs目录也编译到类文件下，所以会导致上传类文件出问题。经过这两天的研究发现这个问题是可以解决的。方法如下：<br />
            点击窗口下的首选项看到下图：<br />
            <img src="http://blog.csdn.net/images/blog_csdn_net/iwo99/50561/o_cvs11.jpg" border="0" height="600" width="800"  alt="" /><br />
            按图上所说的，已过滤CVS目录，还有就是去掉完全构建时清空文件夹，这样的话在编译文件是就不会将类文件所在的文件夹中的cvs目录删除。做好这两部就可以解决问题了。<br />
            <br />
            <div><a href="http://blog.csdn.net/iwo99/archive/2004/10/10/131442.aspx"><font color="#000080">eclipse +cvs 的基本使用方法(三)</font></a> </div>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            我们在多人进行一个项目进行开发时，通常会碰到一个问题就是两个人从cvs服务器上同时下载了同一个文件，进行修改，当一个人先提交而另一个人后提交时通
            常就将前一个人修改的覆盖掉了，我们看看eclipse中的cvs是怎样处理这个问题的，首先我们从cvs中检出一个目录为项目为test然后打开一个文
            件test1.txt文件在文件中加了adc如下图：<br />
            <img src="http://blog.csdn.net/images/blog_csdn_net/iwo99/50561/o_cvs12.jpg" border="0" height="306" width="800"  alt="" /><br />
            <br />
            然后我们用cvs的客户端程序下载同一个test目录，然后在test1.txt文件中增加bbb，这样相当于两个人同时修改了同一个文件，我们先提交一个。如下图：<br />
            <img src="http://blog.csdn.net/images/blog_csdn_net/iwo99/50561/o_cvs13.jpg" border="0" height="327" width="800"  alt="" /><br />
            <br />
            然后在eclipse中提交同样的文件test1.txt，如下图<br />
            <br />
            <img src="http://blog.csdn.net/images/blog_csdn_net/iwo99/50561/o_cvs14.jpg" border="0" height="574" width="800"  alt="" /><br />
            会出现一个错误：<br />
            <img src="http://blog.csdn.net/images/blog_csdn_net/iwo99/50561/o_cvs15.jpg" border="0" height="575" width="800"  alt="" /><br />
            这个错误表明了你的提交文件失败了，我再使用另外一个功能，就是与资源库同步功能，在前一张图中可以看到，点击资源库同步后看到下图：图中有相应的说明<br />
            <img src="http://blog.csdn.net/images/blog_csdn_net/iwo99/50561/o_cvs16.jpg" border="0" height="600" width="800"  alt="" /><br />
            这样你就可以知道第一个更新修改了哪里，更重要是你也可以覆盖提交，或者覆盖更新本地的文件，看下图：<br />
            <img src="http://blog.csdn.net/images/blog_csdn_net/iwo99/50561/o_cvs17.jpg" border="0" height="600" width="800"  alt="" /></div>
            </td>
        </tr>
    </tbody>
</table>
<img src ="http://www.blogjava.net/gen-sky/aggbug/284327.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gen-sky/" target="_blank">星期五</a> 2009-06-26 18:02 <a href="http://www.blogjava.net/gen-sky/archive/2009/06/26/284327.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> [转]ANT  打包编译部署工具 学习笔记</title><link>http://www.blogjava.net/gen-sky/archive/2009/06/24/283958.html</link><dc:creator>星期五</dc:creator><author>星期五</author><pubDate>Wed, 24 Jun 2009 08:08:00 GMT</pubDate><guid>http://www.blogjava.net/gen-sky/archive/2009/06/24/283958.html</guid><description><![CDATA[<p>1.安装apache-ant-1.5.4或其他版本</p>
<p>2.配置环境变量:</p>
<p>&nbsp;&nbsp;&nbsp; ANT_HOME=ant安装目录&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp; PATH=%PATH%;%ANT_HOME%\bin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;设置完成后，输入 ant -v<br />
&nbsp;&nbsp;&nbsp;&nbsp; 显示如下：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">Apache&nbsp;Ant&nbsp;version&nbsp;1.7.1&nbsp;compiled&nbsp;on&nbsp;June&nbsp;27&nbsp;2008<br />
</span><span style="color: #008080">2</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />Buildfile:&nbsp;build.xml&nbsp;does&nbsp;not&nbsp;exist!<br />
</span><span style="color: #008080">3</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />Build&nbsp;failed</span></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;说明成功。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>3.build.xml </p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #008000">&lt;!--</span><span style="color: #008000">Ant(another&nbsp;neat&nbsp;tool---另一个整洁的工具)</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">project&nbsp;</span><span style="color: #ff0000">default</span><span style="color: #0000ff">="dist"</span><span style="color: #ff0000">&nbsp;name</span><span style="color: #0000ff">="Project&nbsp;A"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">description</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一段描述信息，没有实际作用。<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">description</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">property&nbsp;元素相当于变量，存放一定的值，一旦给定以后不能改变，只能通过控制台命令行给初始值。<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一般用&nbsp;value&nbsp;给其赋值，这里用&nbsp;location&nbsp;代替&nbsp;value&nbsp;是因为&nbsp;location&nbsp;属性专门设<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;计用于以平台无关的方式包含文件系统路径，也就是当前路径。</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="srcDir"</span><span style="color: #ff0000">&nbsp;location</span><span style="color: #0000ff">="."</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="buildDir"</span><span style="color: #ff0000">&nbsp;location</span><span style="color: #0000ff">="classes"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="distDir"</span><span style="color: #ff0000">&nbsp;location</span><span style="color: #0000ff">="dist"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">一个target&nbsp;元素就是一个任务，一个步骤，如果命令行没有指定开始任务，则由&nbsp;project&nbsp;元素的&nbsp;default&nbsp;属性决定要执行的任务</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">target&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="init"</span><span style="color: #ff0000">&nbsp;description</span><span style="color: #0000ff">="在元素中指定描述信息！"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">echo&nbsp;</span><span style="color: #ff0000">message</span><span style="color: #0000ff">="这里的信息将被输出到控制台！"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">tstamp&nbsp;元素一般不定义属性和内容，不产生任何输出；相反，它根据当前系统时间和日期设置&nbsp;Ant&nbsp;以下属性：<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;属性&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;说明&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;例子<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DSTAMP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设置为当前日期，默认格式为yyyymmdd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20031217<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TSTAMP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设置为当前时间，默认格式为hhmm&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1603<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TODAY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设置为当前日期，带完整的月份&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2003&nbsp;年12&nbsp;月17&nbsp;日</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">tstamp</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">mkdir&nbsp;元素用来创建目录&nbsp;dir&nbsp;属性用来指定目录路径</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">delete&nbsp;元素用来删除目录&nbsp;${buildDir}&nbsp;引用&nbsp;property&nbsp;元素指定的&nbsp;name&nbsp;为&nbsp;buildDir&nbsp;的属性变量</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">mkdir&nbsp;</span><span style="color: #ff0000">dir</span><span style="color: #0000ff">="${buildDir}"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">mkdir&nbsp;</span><span style="color: #ff0000">dir</span><span style="color: #0000ff">="${distDir}"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">文件操作：<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;copy&nbsp;file="src/Test.java"&nbsp;tofile="src/TestCopy.java"/&gt;&nbsp;把文件&nbsp;Test.java&nbsp;拷贝一份&nbsp;TestCopy.java&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;move&nbsp;file="src/Test.java"&nbsp;tofile="src/TestCopy.java"/&gt;&nbsp;把文件&nbsp;Test.java&nbsp;重新命名为&nbsp;TestCopy.java<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;copy&nbsp;file="src/Test.java"&nbsp;todir="archive"/&gt;&nbsp;把文件&nbsp;Test.java&nbsp;从&nbsp;src&nbsp;目录复制一份到&nbsp;archive&nbsp;目录下<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;move&nbsp;file="src/Test.java"&nbsp;todir="archive"/&gt;&nbsp;把文件&nbsp;Test.java&nbsp;从&nbsp;src&nbsp;目录下移动到&nbsp;archive&nbsp;目录下<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;replace&nbsp;file="input.txt"&nbsp;token="old"&nbsp;value="new"/&gt;replace&nbsp;任务，它执行文件中的查找和替换操作。<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;token&nbsp;属性指定要查找的字符串，<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value&nbsp;属性指定一个新的字符串，<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;查找到的标记字符串的所有实例都被替换为这个新的字符串.<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;替换操作将在文件本身之内的适当位置进行。为了提供更详细的输出，可把&nbsp;summary&nbsp;属性设置为<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;true。这将导致该任务输出找到和替换的标记字符串实例的数目。<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;copy&nbsp;todir="archive"&gt;---使用模式匹配复制多个文件<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;fileset&nbsp;dir="src"&gt;--fileset&nbsp;代替&nbsp;file&nbsp;属性<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;include&nbsp;name="*.java"/&gt;--包含&nbsp;src&nbsp;目录下所有的&nbsp;*.java&nbsp;文件<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;exclude&nbsp;name="*.class"/&gt;--不包含&nbsp;src&nbsp;目录下所有的&nbsp;*.class&nbsp;文件<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/fileset&gt;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/copy&gt;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">target</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">target&nbsp;元素的&nbsp;depends&nbsp;属性用来设置多个&nbsp;target&nbsp;元素之间的依赖关系，如果要执行某个任务，必须先执行&nbsp;depends&nbsp;属性指定的所有<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;它所依赖的&nbsp;target&nbsp;元素，只有它所依赖的所有&nbsp;target&nbsp;元素都执行完了才能执行它自己</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">target&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="com"</span><span style="color: #ff0000">&nbsp;depends</span><span style="color: #0000ff">="init"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">javac&nbsp;元素把&nbsp;srcdir&nbsp;指定目录下所有&nbsp;*.java&nbsp;文件编译成&nbsp;*.class&nbsp;文件到&nbsp;destdir&nbsp;指定的目录下！<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果不指定&nbsp;destdir&nbsp;属性，那么默认编译到同一目录下。其他属性：<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;classpath：等价于javac&nbsp;的-classpath&nbsp;选项。<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;debug="true"：指示编译器应该带调试信息编译源文件。<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fork="true"：当你希望指定编译器的某些内存选项，或者需要使用一种不同级别的编译器的时候。该属性设置为&#8220;true&#8221;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;executable="d:sdk141injavac"：指定一个不同的&nbsp;javac&nbsp;可执行文件。<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memoryMaximumSize="128m"：向上边指定的&nbsp;javac&nbsp;传递一个最大内存设置</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">javac&nbsp;</span><span style="color: #ff0000">srcdir</span><span style="color: #0000ff">="${srcDir}"</span><span style="color: #ff0000">&nbsp;destdir</span><span style="color: #0000ff">="${buildDir}"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">target</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">target&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="dist"</span><span style="color: #ff0000">&nbsp;depends</span><span style="color: #0000ff">="com"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">jar&nbsp;元素：在编译&nbsp;Java&nbsp;源文件之后，结果类文件通常被打包到一个&nbsp;JAR&nbsp;文件中，这个文件类似&nbsp;zip&nbsp;归档文<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;件。每个&nbsp;JAR&nbsp;文件都包含一个清单文件，它可以指定该&nbsp;JAR&nbsp;文件的属性。<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;还可以把目录下的所有内容打包为&nbsp;WAR&nbsp;文件<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;destfile:打包后的文件全名<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;basedir:要打包的文件路径</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">jar&nbsp;</span><span style="color: #ff0000">destfile</span><span style="color: #0000ff">="${distDir}/package-${DSTAMP}.jar"</span><span style="color: #ff0000">&nbsp;basedir</span><span style="color: #0000ff">="${buildDir}"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">manifest&nbsp;属性允许指定一个用作该&nbsp;JAR&nbsp;文件的清单的文件。清单文件的内容还可以使用&nbsp;manifest<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;任务在生成文件中指定。这个任务能够像文件系统写入一个清单文件，或者能够实际嵌套在&nbsp;jar&nbsp;之<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;内，以便一次性地创建清单文件和&nbsp;JAR&nbsp;文件。</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">manifest</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">attribute&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="Built-By"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="${user.name}"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">attribute&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="Main-Class"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="package.Main"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">manifest</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">jar</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">jar&nbsp;</span><span style="color: #ff0000">destfile</span><span style="color: #0000ff">="${distDir}/package-src-${DSTAMP}.jar"</span><span style="color: #ff0000">&nbsp;basedir</span><span style="color: #0000ff">="${srcDir}"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">target</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">target&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="zip"</span><span style="color: #ff0000">&nbsp;depends</span><span style="color: #0000ff">="dist"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">zip&nbsp;元素用来创建&nbsp;zip&nbsp;包，和&nbsp;jar&nbsp;元素相似</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">zip&nbsp;</span><span style="color: #ff0000">destfile</span><span style="color: #0000ff">="output.zip"</span><span style="color: #ff0000">&nbsp;basedir</span><span style="color: #0000ff">="output"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">相同的语法也可用于创建&nbsp;tar&nbsp;文件。&nbsp;还可以使用&nbsp;GZip&nbsp;和&nbsp;BZip&nbsp;任务来压缩文件。</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">tar&nbsp;</span><span style="color: #ff0000">destfile</span><span style="color: #0000ff">="output.tar"</span><span style="color: #ff0000">&nbsp;basedir</span><span style="color: #0000ff">="output"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">gzip&nbsp;</span><span style="color: #ff0000">src</span><span style="color: #0000ff">="output.tar"</span><span style="color: #ff0000">&nbsp;zipfile</span><span style="color: #0000ff">="output.tar.gz"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">解压缩和提取文件同样也很简单.</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">unzip&nbsp;</span><span style="color: #ff0000">src</span><span style="color: #0000ff">="output.tar.gz"</span><span style="color: #ff0000">&nbsp;dest</span><span style="color: #0000ff">="extractDir"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">还可以包括&nbsp;overwrite&nbsp;属性来控制覆盖行为。默认设置是覆盖与正在被提取的归档文件中的条目相<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;匹配的所有现有文件。相关的任务名称是&nbsp;untar、unjar、gunzip&nbsp;和&nbsp;bunzip2。</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">target</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">编写一个&nbsp;clean目标来从目标目录移除生成的任何类文件是个很好的习惯。如果想要确<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;保所有源文件都已编译，就可以使用这个任务。这种行为刻画了&nbsp;Ant&nbsp;的许多任务的特点：<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果某个任务能够确定所请求的操作不需要执行，那么该操作就会被跳过。</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">target&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="clean"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">delete&nbsp;</span><span style="color: #ff0000">dir</span><span style="color: #0000ff">="${buildDir}"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">delete&nbsp;</span><span style="color: #ff0000">dir</span><span style="color: #0000ff">="${distDir}"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">target</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">project</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>
<p><br />
</p>
<p><br />
本文来自CSDN博客，转载请标明出处：http://blog.csdn.net/lip009/archive/2006/09/15/1226931.aspx</p>
<img src ="http://www.blogjava.net/gen-sky/aggbug/283958.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gen-sky/" target="_blank">星期五</a> 2009-06-24 16:08 <a href="http://www.blogjava.net/gen-sky/archive/2009/06/24/283958.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MyEclipse  应有技术</title><link>http://www.blogjava.net/gen-sky/archive/2008/12/08/244969.html</link><dc:creator>星期五</dc:creator><author>星期五</author><pubDate>Mon, 08 Dec 2008 03:11:00 GMT</pubDate><guid>http://www.blogjava.net/gen-sky/archive/2008/12/08/244969.html</guid><wfw:comment>http://www.blogjava.net/gen-sky/comments/244969.html</wfw:comment><comments>http://www.blogjava.net/gen-sky/archive/2008/12/08/244969.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gen-sky/comments/commentRss/244969.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gen-sky/services/trackbacks/244969.html</trackback:ping><description><![CDATA[<span style="color: red;">1.</span><br />
<br />
有些时候当我们用MyEclipse 启动 Tomcat 时,会直接进入 Debug 界面 .自动进行调试.<br />
解决方法: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 打开右侧的 breakpoint 界面,将所选择的调试,全部去除.重新启动Tomcat就行了.<br />
<span style="color: red;">2.</span><br />
当 Eclipse&nbsp; 出现页面乱码问题时：<br />
解决方法：<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 点击工程 properties 选项，在 Resource 选项中，找到 Text file encoding 选择 Other：然后在下拉框中找到自己的编码格式。<br />
<img src ="http://www.blogjava.net/gen-sky/aggbug/244969.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gen-sky/" target="_blank">星期五</a> 2008-12-08 11:11 <a href="http://www.blogjava.net/gen-sky/archive/2008/12/08/244969.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>清空IE缓存</title><link>http://www.blogjava.net/gen-sky/archive/2008/12/02/243884.html</link><dc:creator>星期五</dc:creator><author>星期五</author><pubDate>Tue, 02 Dec 2008 03:45:00 GMT</pubDate><guid>http://www.blogjava.net/gen-sky/archive/2008/12/02/243884.html</guid><wfw:comment>http://www.blogjava.net/gen-sky/comments/243884.html</wfw:comment><comments>http://www.blogjava.net/gen-sky/archive/2008/12/02/243884.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gen-sky/comments/commentRss/243884.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gen-sky/services/trackbacks/243884.html</trackback:ping><description><![CDATA[<br />
<br />
<br />
<table border="0" cellpadding="2" cellspacing="2" height="197" width="500">
    <tbody>
        <tr>
            <td>&nbsp;检查以下ie的设置： &nbsp; <br />
            &nbsp;  &nbsp;  &nbsp;  &nbsp; internet(选项）--&gt;常规--&gt;设置--&gt; &nbsp; <br />
            &nbsp;  &nbsp;  &nbsp;  &nbsp; 是否设为：每次访问此页时检查&nbsp; </td>
        </tr>
        <tr>
            <td>&nbsp;awaysrain(绝对零度) </td>
        </tr>
        <tr align="left" valign="middle">
            <td>在 &nbsp; head &nbsp; 区内加入去除缓存的代码: &nbsp; <br />
            &nbsp; 禁用客户端缓存 &nbsp; <br />
            &nbsp; HTML &nbsp; <br />
            &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp; &lt;META &nbsp; HTTP-EQUIV="pragma" &nbsp; CONTENT="no-cache"&gt; &nbsp; <br />
            &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp; &lt;META &nbsp; HTTP-EQUIV="Cache-Control" &nbsp; CONTENT="no-cache, &nbsp; must-revalidate"&gt; &nbsp; <br />
            &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp; &lt;META &nbsp; HTTP-EQUIV="expires" &nbsp; CONTENT="Mon, &nbsp; 23 &nbsp; Jan &nbsp; 1978 &nbsp; 20:52:30 &nbsp; GMT"&gt; &nbsp; <br />
            &nbsp; ASP &nbsp; <br />
            &nbsp; &lt;% &nbsp; <br />
            &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp; Response.Expires &nbsp; = &nbsp; -1 &nbsp; <br />
            &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp; Response.ExpiresAbsolute &nbsp; = &nbsp; Now() &nbsp; - &nbsp; 1 &nbsp; <br />
            &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp; Response.cachecontrol &nbsp; = &nbsp; "no-cache" &nbsp; <br />
            &nbsp; %&gt; &nbsp; <br />
            &nbsp; PHP &nbsp; <br />
            &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp; header("Expires: &nbsp; Mon, &nbsp; 26 &nbsp; Jul &nbsp; 1997 &nbsp; 05:00:00 &nbsp; GMT"); &nbsp; <br />
            &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp; header("Cache-Control: &nbsp; no-cache, &nbsp; must-revalidate"); &nbsp; <br />
            &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp; header("Pragma: &nbsp; no-cache"); &nbsp; <br />
            &nbsp; JSP &nbsp; <br />
            &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp; response.setHeader("Pragma","No-Cache"); &nbsp; <br />
            &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp; response.setHeader("Cache-Control","No-Cache"); &nbsp; <br />
            &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp; response.setDateHeader("Expires", &nbsp; 0);</td>
        </tr>
    </tbody>
</table>
<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/gen-sky/aggbug/243884.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gen-sky/" target="_blank">星期五</a> 2008-12-02 11:45 <a href="http://www.blogjava.net/gen-sky/archive/2008/12/02/243884.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>