﻿<?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-nighty</title><link>http://www.blogjava.net/nighty/</link><description /><language>zh-cn</language><lastBuildDate>Sun, 23 Nov 2008 20:47:40 GMT</lastBuildDate><pubDate>Sun, 23 Nov 2008 20:47:40 GMT</pubDate><ttl>60</ttl><item><title>ubuntu安装Java开发环境</title><link>http://www.blogjava.net/nighty/archive/2008/08/29/225619.html</link><dc:creator>寒武纪</dc:creator><author>寒武纪</author><pubDate>Fri, 29 Aug 2008 09:07:00 GMT</pubDate><guid>http://www.blogjava.net/nighty/archive/2008/08/29/225619.html</guid><wfw:comment>http://www.blogjava.net/nighty/comments/225619.html</wfw:comment><comments>http://www.blogjava.net/nighty/archive/2008/08/29/225619.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/nighty/comments/commentRss/225619.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nighty/services/trackbacks/225619.html</trackback:ping><description><![CDATA[<strong style="color: #0000ff">Java环境安装<br />
</strong>&nbsp;&nbsp;&nbsp; 1.&nbsp; 从sun主页下载JDK for Linux版本。这里下载的是jdk-6u6-linux-i586.bin。<br />
&nbsp;&nbsp;&nbsp; 2. 用root用户登录ubuntu，或是在普通用户下用su命令切换用户。切换到所需的安装目录。类型：<strong>cd &lt;目录路径名&gt;&nbsp;&nbsp; </strong>例如，要在 /usr/java/ 目录中&nbsp; 安装软件，请键入：<strong>cd /usr/java/，</strong>把jdk-6u6-linux-i586.bin文件拷贝这个目录里面，设置权限为可执行类型：<strong>chmod a+x jre-6u6-linux-i586.bin<br />
</strong>&nbsp;&nbsp;&nbsp; 3. 启动安装过程。键入：<strong>./jre-6u&lt;version&gt;-linux-i586.bin。</strong>接下来会提示二进制的许可协议，键入yes回车即可。安装过程如果遇到一些问题，都同样键入yes就可以。<br />
&nbsp;&nbsp;&nbsp; 4. 一路下来，最后看到Done字样，就完成了Java环境的安装。安装的位置就是当前目录 /usr/java，当然你可以选择在别的位置。可以用ls命令查看一下是否正常。<br />
<br />
<span style="color: #0000ff"><strong>环境变量配置</strong></span><br />
&nbsp;&nbsp; 上面安装完毕后，直接在shell里面输入java是不起作用的，需要先配置一下环境变量。一般都会用export命令，不过这样设置只对当前shell起作用，重启或是切换到别的shell会话就不起作用了。可以选择配置 .bashr文件。用vi或是gedit打开，在末尾添加下面的内容<br />
&nbsp;&nbsp; <strong>export JAVA_HOME=/usr/java/jdk1.6.0_06<br />
&nbsp;&nbsp; export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar<br />
&nbsp;&nbsp; export PATH=$PATH:$JAVA_HOME/bin<br />
</strong>&nbsp;&nbsp;&nbsp;然后保存。再在shell里面试验一下是否安装成功。echo一下各个变量是否正常，然后输入java -version看看。<br />
&nbsp; 还有一种方式是修改/etc/profile，这样相当于修改系统配置文件，对所有用户都有影响，我在尝试的过程可能输入了一些异常字符，导致整个ubuntu无法用GUI登录，无奈只能用文本登录，然后再次把profile改回来才正常。<br />
&nbsp;&nbsp; 好了之后可以先试一下用vi新建一个Hello的Java文件，然后编译一下试运行。<br />
<br />
Eclipse安装<br />
&nbsp;&nbsp; Linux下面的Eclipse在ubuntu的界面渲染下看起来非常漂亮。先从Eclipse社区下载一个Linux版本的，这里下载的是europa版本的gz包。只要解压到一个目录就可以，这里选择/opt/eclipse下面。Eclipse是解压就可以使用的。不过为了方便，我们在桌面做一个启动器把启动目标指向到Eclipse的安装目的地，选择里面已有的图标文件，这样就完成了。不过默认Eclipse是找不到Java执行路径的，有网友写了这样一个脚本eclipse.sh 放到/usr/local/bin目录下，记得加上775权限。然后把启动器位置指到这里eclispe.sh。下面是eclipse.sh的内容：<br />
&nbsp;&nbsp;&nbsp; <strong>#!/bin/bash<br />
&nbsp;&nbsp;&nbsp; #<br />
&nbsp;&nbsp;&nbsp; # 执行 eclipse 2.1.1 <br />
&nbsp;&nbsp;&nbsp; #<br />
&nbsp;&nbsp;&nbsp; export JAVA_HOME=/usr/java/XXX<br />
&nbsp;&nbsp;&nbsp; export CLASSPATH=/usr/java/XXX/lib<br />
&nbsp;&nbsp;&nbsp; /opt/eclipse/eclipse -vm /usr/java/XXX/bin/java -data ~/workspace &amp;<br />
&nbsp;&nbsp;&nbsp; # -vm 参数用以指定使用哪一个 jvm 来执行Eclipse，<br />
&nbsp;&nbsp;&nbsp; # -date参数用以指定Eclipse的数据目录。在此指定其存在用户根目录(~)下的workspace目录中<br />
</strong>&nbsp;&nbsp; <br />
&nbsp;&nbsp; 还有一个比较笨的方法，Eclipse默认会去找它自己目录下是不是有jre存在，如果有，它就可以启动，那么你可以直接把先前安装好的JDK里面的JRE目录整个复制到Eclipse里面。然后就可以直接运行了。下面看一下效果<br />
&nbsp;&nbsp; <img height="768" alt="" src="http://www.blogjava.net/images/blogjava_net/nighty/eclipse_linux.JPG" width="1024" border="0" />
<img src ="http://www.blogjava.net/nighty/aggbug/225619.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nighty/" target="_blank">寒武纪</a> 2008-08-29 17:07 <a href="http://www.blogjava.net/nighty/archive/2008/08/29/225619.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RssOwl2源码阅读 -- ActionSet</title><link>http://www.blogjava.net/nighty/archive/2008/08/21/223431.html</link><dc:creator>寒武纪</dc:creator><author>寒武纪</author><pubDate>Thu, 21 Aug 2008 03:29:00 GMT</pubDate><guid>http://www.blogjava.net/nighty/archive/2008/08/21/223431.html</guid><wfw:comment>http://www.blogjava.net/nighty/comments/223431.html</wfw:comment><comments>http://www.blogjava.net/nighty/archive/2008/08/21/223431.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nighty/comments/commentRss/223431.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nighty/services/trackbacks/223431.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; ActionSet是Eclipse RCP里面一非常重要的概念，因为菜单、工具栏、上下文菜单、状态栏很多操作都是共享的，所以Action就是用来处理重复出现的东西。至于Eclipse里面定义ActionSet有非常多的技巧，可能无法一一列举，而且使用方法也多种多样。下面介绍的是RssOwl2项目的ui源代码部分的一小块。<br />
&nbsp;&nbsp; 1.&nbsp; 菜单的插入点 -- GroupMarker和Separator的使用<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ApplicationActionBarAdvisor类是定义全局所有Action插入点和入口，查看fillMenuBar(IMenuManager)方法，为了简化，以其中的辅助方法createFileMenu(IMenuManager)为例，讲述一下实现菜单&#8220;文件&#8221;的内容，先看一下菜单的结构<br />
<div align="left"><img height="330" alt="" src="http://www.blogjava.net/images/blogjava_net/nighty/file.JPG" width="425" border="0" /><br />
</div>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 像Close，Import...之类的非常简单，看一下它是如何实现New这个子菜单的。首先看一下它的源代码如何定义插入点<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<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 id="Codehighlighter1_0_15_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_15_Open_Text.style.display='none'; Codehighlighter1_0_15_Closed_Image.style.display='inline'; Codehighlighter1_0_15_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_0_15_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_0_15_Closed_Text.style.display='none'; Codehighlighter1_0_15_Open_Image.style.display='inline'; Codehighlighter1_0_15_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span id="Codehighlighter1_0_15_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_0_15_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000">&nbsp;Menu:&nbsp;File&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_69_1206_Open_Image" onclick="this.style.display='none'; Codehighlighter1_69_1206_Open_Text.style.display='none'; Codehighlighter1_69_1206_Closed_Image.style.display='inline'; Codehighlighter1_69_1206_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_69_1206_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_69_1206_Closed_Text.style.display='none'; Codehighlighter1_69_1206_Open_Image.style.display='inline'; Codehighlighter1_69_1206_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;createFileMenu(IMenuManager&nbsp;menuBar)&nbsp;</span><span id="Codehighlighter1_69_1206_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_69_1206_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;MenuManager&nbsp;fileMenu&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;MenuManager(</span><span style="color: #000000">"</span><span style="color: #000000">&amp;File</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;IWorkbenchActionConstants.M_FILE);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;menuBar.add(fileMenu);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;fileMenu.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;GroupMarker(IWorkbenchActionConstants.FILE_START));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;fileMenu.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;GroupMarker(IWorkbenchActionConstants.NEW_EXT));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;fileMenu.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Separator());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;fileMenu.add(getAction(ActionFactory.CLOSE.getId()));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;fileMenu.add(getAction(ActionFactory.CLOSE_ALL.getId()));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;fileMenu.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;GroupMarker(IWorkbenchActionConstants.CLOSE_EXT));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;fileMenu.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Separator());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;fileMenu.add(getAction(ActionFactory.SAVE_AS.getId()));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;fileMenu.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;GroupMarker(IWorkbenchActionConstants.SAVE_EXT));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;fileMenu.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Separator());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;fileMenu.add(getAction(ActionFactory.PRINT.getId()));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;fileMenu.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Separator());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;fileMenu.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;fileMenu.add(fReopenEditors);&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;TODO&nbsp;Consider&nbsp;moving&nbsp;into&nbsp;a&nbsp;"Go"&nbsp;Menu!</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;fileMenu.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Separator());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;fileMenu.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;GroupMarker(IWorkbenchActionConstants.FILE_END));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;fileMenu.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Separator());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;fileMenu.add(getAction(ActionFactory.QUIT.getId()));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;}</span></span></div>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 其中有一行fileMenu.add(new GroupMarker(IWorkbenchActionConstants.NEW_EXT)); 这里是定义一个GroupMarker作为组标记，把子菜单New容纳进来。这个NEW_EXT的值是：new.ext<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 现在跳回到plugin.xml去看一下它的ActionSet定义，结构如下：<br />
<img height="240" alt="" src="http://www.blogjava.net/images/blogjava_net/nighty/actionSet.jpg" width="242" border="1" />，点击New(menu)，它的path值为：file/new.ext，这个路径就是在createFileMenu方法定义的路径，第一个是&#8220;File&#8221;本身的ID。也就是把子菜单New(menu)插入到指定的那个GroupMarker，ID为new.ext。然后定义了三个ID分别为bookmark，newsbin,searchmark,的groupmarker和一个folder的separator，这个三ID分别就对应上面actionSet定义的三个action，以其中的Bookmark（action）为例，它的menubarPath为：file/new_sub/bookmark，代表插入到"File"主菜单中定义的new_sub子菜单中，new_sub是New(menu)的ID。因为folder是定义为separator，所以它会有一条分隔线。这只是RssOwl的定义方法，其实以前自己做开发的时候是没有这样定义的，而且把子菜单New也写在方法fillMenuBar中的，菜单把ID都写在里面，ActionSet的配置就没有子菜单出现了，但是这样定义看起来就比较乱。采用这种写法感觉比较简洁。<br />
&nbsp;&nbsp;&nbsp; 2.&nbsp; Action的实现<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 仍以bookmark为例，它的实现类是NewBookMarkAction，实现了IWorkbenchWindowActionDelegate, IObjectActionDelegate二个接口，第一个是ActionSet指定实现接口，第二个是对象操作菜单要求实现的接口（但事实发现没有再定义它的配置，可能是internal版本的原因），也就是说这个Action是多功能，它将会出现在主菜单，工具栏，和局部的右键菜单上。主菜单和工具栏的位置都在ActionSet配置定义了，看看它的右键菜单实现是在哪里的，这个右键是在视图Bookmarks定义的，那么跳转到org.rssowl.ui.internal.views.explorer.BookMarkExplorer类去看看。里面有一个hookContextualMenu()方法，就是定义它的右键菜单的，看一下代码实现：<br />
<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 id="Codehighlighter1_34_761_Open_Image" onclick="this.style.display='none'; Codehighlighter1_34_761_Open_Text.style.display='none'; Codehighlighter1_34_761_Closed_Image.style.display='inline'; Codehighlighter1_34_761_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_34_761_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_34_761_Closed_Text.style.display='none'; Codehighlighter1_34_761_Open_Image.style.display='inline'; Codehighlighter1_34_761_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;hookContextualMenu()&nbsp;</span><span id="Codehighlighter1_34_761_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_34_761_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;MenuManager&nbsp;manager&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;MenuManager();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_86_99_Open_Image" onclick="this.style.display='none'; Codehighlighter1_86_99_Open_Text.style.display='none'; Codehighlighter1_86_99_Closed_Image.style.display='inline'; Codehighlighter1_86_99_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_86_99_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_86_99_Closed_Text.style.display='none'; Codehighlighter1_86_99_Open_Image.style.display='inline'; Codehighlighter1_86_99_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_86_99_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_86_99_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000">&nbsp;New&nbsp;Menu&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;MenuManager&nbsp;newMenu&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;MenuManager(</span><span style="color: #000000">"</span><span style="color: #000000">New</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;manager.add(newMenu);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_182_199_Open_Image" onclick="this.style.display='none'; Codehighlighter1_182_199_Open_Text.style.display='none'; Codehighlighter1_182_199_Closed_Image.style.display='inline'; Codehighlighter1_182_199_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_182_199_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_182_199_Closed_Text.style.display='none'; Codehighlighter1_182_199_Open_Image.style.display='inline'; Codehighlighter1_182_199_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_182_199_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_182_199_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000">&nbsp;New&nbsp;BookMark&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_243_743_Open_Image" onclick="this.style.display='none'; Codehighlighter1_243_743_Open_Text.style.display='none'; Codehighlighter1_243_743_Closed_Image.style.display='inline'; Codehighlighter1_243_743_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_243_743_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_243_743_Closed_Text.style.display='none'; Codehighlighter1_243_743_Open_Image.style.display='inline'; Codehighlighter1_243_743_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;newMenu.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Action(</span><span style="color: #000000">"</span><span style="color: #000000">Bookmark<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span style="color: #000000">"</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_243_743_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_243_743_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
<img id="Codehighlighter1_285_629_Open_Image" onclick="this.style.display='none'; Codehighlighter1_285_629_Open_Text.style.display='none'; Codehighlighter1_285_629_Closed_Image.style.display='inline'; Codehighlighter1_285_629_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_285_629_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_285_629_Closed_Text.style.display='none'; Codehighlighter1_285_629_Open_Image.style.display='inline'; Codehighlighter1_285_629_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;run()&nbsp;</span><span id="Codehighlighter1_285_629_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_285_629_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IStructuredSelection&nbsp;selection&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(IStructuredSelection)&nbsp;fViewer.getSelection();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IFolder&nbsp;parent&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;getParent(selection);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IMark&nbsp;position&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(IMark)&nbsp;((selection.getFirstElement()&nbsp;</span><span style="color: #0000ff">instanceof</span><span style="color: #000000">&nbsp;IMark)&nbsp;</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;selection.getFirstElement()&nbsp;:&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;NewBookMarkAction(fViewSite.getShell(),&nbsp;parent,&nbsp;position).run(</span><span style="color: #0000ff">null</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
<img id="Codehighlighter1_698_737_Open_Image" onclick="this.style.display='none'; Codehighlighter1_698_737_Open_Text.style.display='none'; Codehighlighter1_698_737_Closed_Image.style.display='inline'; Codehighlighter1_698_737_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_698_737_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_698_737_Closed_Text.style.display='none'; Codehighlighter1_698_737_Open_Image.style.display='inline'; Codehighlighter1_698_737_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;ImageDescriptor&nbsp;getImageDescriptor()&nbsp;</span><span id="Codehighlighter1_698_737_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_698_737_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;OwlUI.BOOKMARK;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">其它定义<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" /></span><span style="color: #000000">}</span></span></div>
&nbsp;&nbsp;&nbsp;&nbsp; 原来实现也很简单，只是往MenuManager里面添加一个Action而已,而且run方法就是直接调用定义好的NewBookMarkAction的run方法，但是把选中对象做为参数传进去，因为这个new是涉及当前上下文选择对象的。<br />
&nbsp;&nbsp;&nbsp; 3. 下拉类型的工具按钮定义<br />
&nbsp;&nbsp;&nbsp; 非常常见的Dropdown类型的工具栏按钮可以把功能类型的按钮归为一类，做成一个下拉菜单形式，有默认的按下功能，也有可以选择其它类似功能的下三角形式，样子如下：<br />
<img height="123" alt="" src="http://www.blogjava.net/images/blogjava_net/nighty/dropdown.JPG" width="139" border="0" /><br />
&nbsp;&nbsp;&nbsp; 这个dropdown的Action是定义在ActionSet配置里的。style是pulldown类型的，所以实现类NewTypeDropdownAction实现了IWorkbenchWindowPulldownDelegate接口，它的run方法就是定义默认点击不做选择时的事情，这个下拉菜单是实现getMenu(Control parent)方法而来，它定义了如何生成这个菜单，这就用到了最原始的SWT中的MenuItem了，并且为它们添加SelectionListener，方法实现，不用说都知道了，又是New一个先前定义好的NewBookMarkAction类，然后又是调用它的run方法。所以总结一下，Action的重用不一定是这个类的重用，关键是它的run方法的重用，在不同的场景下它的外在表现形式可能会多种多样，但是它的run内容是一致的。像添加这种添加的run大部分时候都是弹出一个对话框，而对话框大都又是Winzard类型的，因为Winzard可以共享放到dialog里面。所以这种复用的思想在Eclipse里面随处可见。<br />
&nbsp;&nbsp; 归结一下，其实这些技巧都是次要的，因为做GUI一个比较痛苦的事情就是经常要写很多重复类似的代码，抽取的不好，可能就变得不伦不类了。怎么利用它的这种思想，把复用的代码都抽取在一起，而阅读起来又比较轻松才是关键。<br />
&nbsp;&nbsp; 知道的就这些，先介绍到这里，下次再谈谈其它新的发现。<br />
<img src ="http://www.blogjava.net/nighty/aggbug/223431.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nighty/" target="_blank">寒武纪</a> 2008-08-21 11:29 <a href="http://www.blogjava.net/nighty/archive/2008/08/21/223431.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>学习RssOwl2中的添加隐藏工具栏和状态栏的功能</title><link>http://www.blogjava.net/nighty/archive/2008/07/31/219038.html</link><dc:creator>寒武纪</dc:creator><author>寒武纪</author><pubDate>Thu, 31 Jul 2008 07:13:00 GMT</pubDate><guid>http://www.blogjava.net/nighty/archive/2008/07/31/219038.html</guid><wfw:comment>http://www.blogjava.net/nighty/comments/219038.html</wfw:comment><comments>http://www.blogjava.net/nighty/archive/2008/07/31/219038.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/nighty/comments/commentRss/219038.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nighty/services/trackbacks/219038.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;&nbsp; 许久没有弄RCP了，刚好近来闲暇一点，找来个RSSOwl的源代码看看，有点收获。RssOwl非常出名，只是可能很多人不知道它是用Java做的。以前看过RssOwl第一版的源码，没有详细研究，down下来之后放上公司的共享CVS服务器，倒是几个同事饶有兴趣地研究起来。第一个版本写得较早，可能Eclipse的RCP框架都还没有出来，所以全部采用的SWT/JFace...&nbsp;&nbsp;<a href='http://www.blogjava.net/nighty/archive/2008/07/31/219038.html'>阅读全文</a><img src ="http://www.blogjava.net/nighty/aggbug/219038.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nighty/" target="_blank">寒武纪</a> 2008-07-31 15:13 <a href="http://www.blogjava.net/nighty/archive/2008/07/31/219038.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>httpClient3.1中文参数GET请求的解决方法</title><link>http://www.blogjava.net/nighty/archive/2008/07/16/215143.html</link><dc:creator>寒武纪</dc:creator><author>寒武纪</author><pubDate>Wed, 16 Jul 2008 02:31:00 GMT</pubDate><guid>http://www.blogjava.net/nighty/archive/2008/07/16/215143.html</guid><wfw:comment>http://www.blogjava.net/nighty/comments/215143.html</wfw:comment><comments>http://www.blogjava.net/nighty/archive/2008/07/16/215143.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/nighty/comments/commentRss/215143.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nighty/services/trackbacks/215143.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 最近一个程序出了点问题，对于中文参数的GET请求，服务器无法解析出正确的参数。刚好服务器的那端是另一个项目组负责，是异构系统，当初测试的时候也是走流程化，涉及到很多工作上的协调就比较麻烦，测试也不充分，像赶鸭子上架一样就上线了，催说是项目紧急。当然这是话外，不多废话。<br />
&nbsp;&nbsp;&nbsp; httpClient的GetMethod类加入参数的方法是如下：
<table cellspacing="0" cellpadding="3" width="100%" summary="" border="1">
    <tbody>
        <tr class="TableRowColor" bgcolor="white">
            <td valign="top" align="right" width="1%">void</td>
            <td><code><strong><a href="mk:@MSITStore:D:\开源项目\Jakarta\httpclient\commons-httpclient-3.1\apidocs.chm::/org/apache/commons/httpclient/HttpMethodBase.html#setQueryString(org.apache.commons.httpclient.NameValuePair[])">setQueryString</a></strong>(<a title="class in org.apache.commons.httpclient" href="mk:@MSITStore:D:\开源项目\Jakarta\httpclient\commons-httpclient-3.1\apidocs.chm::/org/apache/commons/httpclient/NameValuePair.html">NameValuePair</a>[]&nbsp;params)</code> <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets the query string of this HTTP method.</td>
        </tr>
        <tr class="TableRowColor" bgcolor="white">
            <td valign="top" align="right" width="1%"><font size="-1"><code>&nbsp;void</code></font></td>
            <td><code><strong><a href="mk:@MSITStore:D:\开源项目\Jakarta\httpclient\commons-httpclient-3.1\apidocs.chm::/org/apache/commons/httpclient/HttpMethodBase.html#setQueryString(java.lang.String)">setQueryString</a></strong>(<a title="class or interface in java.lang" href="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</a>&nbsp;queryString)</code> <br />
            </td>
        </tr>
    </tbody>
</table>
&nbsp;&nbsp; 跟踪一下httpClient的GetMethod的源代码，继承自HttpMethodBase，源码如下：<br />
&nbsp;&nbsp;
<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 id="Codehighlighter1_47_84_Open_Image" onclick="this.style.display='none'; Codehighlighter1_47_84_Open_Text.style.display='none'; Codehighlighter1_47_84_Closed_Image.style.display='inline'; Codehighlighter1_47_84_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_47_84_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_47_84_Closed_Text.style.display='none'; Codehighlighter1_47_84_Open_Image.style.display='inline'; Codehighlighter1_47_84_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setQueryString(String&nbsp;queryString)&nbsp;</span><span id="Codehighlighter1_47_84_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_47_84_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.queryString&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;queryString;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_142_276_Open_Image" onclick="this.style.display='none'; Codehighlighter1_142_276_Open_Text.style.display='none'; Codehighlighter1_142_276_Closed_Image.style.display='inline'; Codehighlighter1_142_276_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_142_276_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_142_276_Closed_Text.style.display='none'; Codehighlighter1_142_276_Open_Image.style.display='inline'; Codehighlighter1_142_276_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setQueryString(NameValuePair[]&nbsp;params)&nbsp;</span><span id="Codehighlighter1_142_276_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_142_276_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;LOG.trace(</span><span style="color: #000000">"</span><span style="color: #000000">enter&nbsp;HttpMethodBase.setQueryString(NameValuePair[])</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;queryString&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;EncodingUtil.formUrlEncode(params,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">UTF-8</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
&nbsp;&nbsp; EncodingUtil是httpClient定义的一个编码工具类，由于默认设置的是UTF-8，所以对于一些系统可能就无法识别。可以在外部这样更改：<br />
method.setQueryString(EncodingUtil.formUrlEncode(pair, "GB2312"));另外，<span style="color: red">注意请求头也要修改为对应的一致编码方式</span>，method.addRequestHeader("Content-type" , "text/html; charset=GB2312");如果这二个编码不一致，就会引起乱码。<br />
&nbsp;&nbsp; 刚开始的时候尝试过都使用一致的UTF-8，但是发现还是乱码，这应该是服务器的原因。IE默认的就是采用操作系统Windows的中文编码去进行Encoder的，服务器原先基本上都为IE服务的，所以改为GB2312就能正常识别得到。<br />
&nbsp;&nbsp; 另外，上面提到的EncodingUtil这个工具是从apache的另一个组件codec包装而来的，而非SUN的URLEncoder。有兴趣的可以研读一下源代码。
<img src ="http://www.blogjava.net/nighty/aggbug/215143.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nighty/" target="_blank">寒武纪</a> 2008-07-16 10:31 <a href="http://www.blogjava.net/nighty/archive/2008/07/16/215143.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>httpclient3.1使用小结</title><link>http://www.blogjava.net/nighty/archive/2008/06/11/207121.html</link><dc:creator>寒武纪</dc:creator><author>寒武纪</author><pubDate>Wed, 11 Jun 2008 07:18:00 GMT</pubDate><guid>http://www.blogjava.net/nighty/archive/2008/06/11/207121.html</guid><wfw:comment>http://www.blogjava.net/nighty/comments/207121.html</wfw:comment><comments>http://www.blogjava.net/nighty/archive/2008/06/11/207121.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/nighty/comments/commentRss/207121.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nighty/services/trackbacks/207121.html</trackback:ping><description><![CDATA[<p>Jakarta的httpclient3.1是最新版本，项目中需要用程序模拟浏览器的GET和POST动作。在使用过程中遇到不少问题。<br />
1. 带附件的POST提交<br />
&nbsp;&nbsp;&nbsp; 最开始都是使用MultipartPostMethod这个类，现在已经废弃这个类了。API说明：<strong>Deprecated.</strong>&nbsp;<em>Use <a title="class in org.apache.commons.httpclient.methods.multipart" href="mk:@MSITStore:D:\开源项目\Jakarta\httpclient\commons-httpclient-3.1\apidocs.chm::/org/apache/commons/httpclient/methods/multipart/MultipartRequestEntity.html"><code>MultipartRequestEntity</code></a> in conjunction with <a title="class in org.apache.commons.httpclient.methods" href="mk:@MSITStore:D:\开源项目\Jakarta\httpclient\commons-httpclient-3.1\apidocs.chm::/org/apache/commons/httpclient/methods/PostMethod.html"><code>PostMethod</code></a> instead.</em>&nbsp;&nbsp; 使用PostMethod可以实现的功能，就没有必要再弄一个MultipartPostMethod了。下面是一段最简单的示例：</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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">PostMethod&nbsp;post&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;PostMethod();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NameValuePair[]&nbsp;pairs&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;NameValuePair[</span><span style="color: #000000">2</span><span style="color: #000000">];<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pairs[</span><span style="color: #000000">0</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;NameValuePair(</span><span style="color: #000000">"</span><span style="color: #000000">para1</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">value1</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pairs[</span><span style="color: #000000">0</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;NameValuePair(</span><span style="color: #000000">"</span><span style="color: #000000">para2</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">value2</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;post.setRequestBody(pairs);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpClient&nbsp;client&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;HttpClient();<br />
<img id="Codehighlighter1_262_297_Open_Image" onclick="this.style.display='none'; Codehighlighter1_262_297_Open_Text.style.display='none'; Codehighlighter1_262_297_Closed_Image.style.display='inline'; Codehighlighter1_262_297_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_262_297_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_262_297_Closed_Text.style.display='none'; Codehighlighter1_262_297_Open_Image.style.display='inline'; Codehighlighter1_262_297_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_262_297_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_262_297_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;client.executeMethod(post);<br />
<img id="Codehighlighter1_323_351_Open_Image" onclick="this.style.display='none'; Codehighlighter1_323_351_Open_Text.style.display='none'; Codehighlighter1_323_351_Closed_Image.style.display='inline'; Codehighlighter1_323_351_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_323_351_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_323_351_Closed_Text.style.display='none'; Codehighlighter1_323_351_Open_Image.style.display='inline'; Codehighlighter1_323_351_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(HttpException&nbsp;e)&nbsp;</span><span id="Codehighlighter1_323_351_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_323_351_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
<img id="Codehighlighter1_375_403_Open_Image" onclick="this.style.display='none'; Codehighlighter1_375_403_Open_Text.style.display='none'; Codehighlighter1_375_403_Closed_Image.style.display='inline'; Codehighlighter1_375_403_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_375_403_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_375_403_Closed_Text.style.display='none'; Codehighlighter1_375_403_Open_Image.style.display='inline'; Codehighlighter1_375_403_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(IOException&nbsp;e)&nbsp;</span><span id="Codehighlighter1_375_403_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_375_403_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
&nbsp;&nbsp; 这是针对一般的form形式的提交，而且这个form里面不带附件的。如果带附件，那么这种方法就不起作用，附件上传的参数和普通参数无法一同在服务器获取到。<font size="-1">org.apache.commons.httpclient.methods.multipart </font>这个包就是为处理文件上传这种多形式参数的情况的。最主要的类是Part（代表一种post object），它有二个比较重要的子类：FilePart和StringPart，一个是文件的参数，另一个就是普通的文本参数。它的典型使用方法如下：<br />
<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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">String&nbsp;url&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">http://localhost:8080/HttpTest/Test</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PostMethod&nbsp;postMethod&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;PostMethod(url);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringPart&nbsp;sp&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;StringPart(</span><span style="color: #000000">"</span><span style="color: #000000">TEXT</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">testValue</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FilePart&nbsp;fp&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;FilePart(</span><span style="color: #000000">"</span><span style="color: #000000">file</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">test.txt</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;File(</span><span style="color: #000000">"</span><span style="color: #000000">./temp/test.txt</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_348_355_Open_Image" onclick="this.style.display='none'; Codehighlighter1_348_355_Open_Text.style.display='none'; Codehighlighter1_348_355_Closed_Image.style.display='inline'; Codehighlighter1_348_355_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_348_355_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_348_355_Closed_Text.style.display='none'; Codehighlighter1_348_355_Open_Image.style.display='inline'; Codehighlighter1_348_355_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MultipartRequestEntity&nbsp;mrp</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;MultipartRequestEntity(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Part[]</span><span id="Codehighlighter1_348_355_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_348_355_Open_Text"><span style="color: #000000">{sp,&nbsp;fp}</span></span><span style="color: #000000">,&nbsp;postMethod<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getParams());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;postMethod.setRequestEntity(mrp);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">执行postMethod</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpClient&nbsp;httpClient&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;HttpClient();<br />
<img id="Codehighlighter1_530_575_Open_Image" onclick="this.style.display='none'; Codehighlighter1_530_575_Open_Text.style.display='none'; Codehighlighter1_530_575_Closed_Image.style.display='inline'; Codehighlighter1_530_575_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_530_575_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_530_575_Closed_Text.style.display='none'; Codehighlighter1_530_575_Open_Image.style.display='inline'; Codehighlighter1_530_575_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_530_575_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_530_575_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;httpClient.executeMethod(postMethod);<br />
<img id="Codehighlighter1_601_629_Open_Image" onclick="this.style.display='none'; Codehighlighter1_601_629_Open_Text.style.display='none'; Codehighlighter1_601_629_Closed_Image.style.display='inline'; Codehighlighter1_601_629_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_601_629_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_601_629_Closed_Text.style.display='none'; Codehighlighter1_601_629_Open_Image.style.display='inline'; Codehighlighter1_601_629_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(HttpException&nbsp;e)&nbsp;</span><span id="Codehighlighter1_601_629_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_601_629_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
<img id="Codehighlighter1_653_681_Open_Image" onclick="this.style.display='none'; Codehighlighter1_653_681_Open_Text.style.display='none'; Codehighlighter1_653_681_Closed_Image.style.display='inline'; Codehighlighter1_653_681_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_653_681_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_653_681_Closed_Text.style.display='none'; Codehighlighter1_653_681_Open_Image.style.display='inline'; Codehighlighter1_653_681_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(IOException&nbsp;e)&nbsp;</span><span id="Codehighlighter1_653_681_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_653_681_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
&nbsp;&nbsp;&nbsp; 在第二行PostMethod postMethod = new PostMethod();后面，有人说需要使用postMehtod.setRequestHeader("Content-type", "multipart/form-data"); Content-type的请求类型进行更改。但是我在使用过程没有加上这一句，查了一下httpCleint的默认Content-type是application/octet-stream。应该是没有影响的。对于MIME类型的请求，httpclient建议全用MulitPartRequestEntity进行包装，就是上面的用法。<br />
<br />
2.&nbsp; 参数中文的处理问题<br />
&nbsp;&nbsp;&nbsp; httpclient的默认编码都是ISO-8859-1，那肯定就无法支持中文参数了。引用一下这篇文章：<a href="http://thinkbase.net/w/main/Wiki?HttpClient+POST+%E7%9A%84+UTF-8+%E7%BC%96%E7%A0%81%E9%97%AE%E9%A2%98">http://thinkbase.net/w/main/Wiki?HttpClient+POST+%E7%9A%84+UTF-8+%E7%BC%96%E7%A0%81%E9%97%AE%E9%A2%98</a> ，按照作者的说法，就可以正常解决中文编码的问题。其中最关键的是修改EncodingUtil这个类的一个方法实现。另外，FilePart和StringPart的构造方法都有一个带编码指定的参数，为了减少问题的出现，建议所有的都带上统一的编码，包括postMethod.getParams()。示例如下：<br />
<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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">String&nbsp;url&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">http://localhost:8080/HttpTest/Test</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PostMethod&nbsp;postMethod&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;PostMethod(url);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringPart&nbsp;sp&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;StringPart(</span><span style="color: #000000">"</span><span style="color: #000000">TEXT</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">testValue</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">GB2312</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FilePart&nbsp;fp&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;FilePart(</span><span style="color: #000000">"</span><span style="color: #000000">file</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">test.txt</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;File(</span><span style="color: #000000">"</span><span style="color: #000000">./temp/test.txt</span><span style="color: #000000">"</span><span style="color: #000000">),&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">GB2312</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;postMethod.getParams().setContentCharset(</span><span style="color: #000000">"</span><span style="color: #000000">GB2312</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img id="Codehighlighter1_435_442_Open_Image" onclick="this.style.display='none'; Codehighlighter1_435_442_Open_Text.style.display='none'; Codehighlighter1_435_442_Closed_Image.style.display='inline'; Codehighlighter1_435_442_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_435_442_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_435_442_Closed_Text.style.display='none'; Codehighlighter1_435_442_Open_Image.style.display='inline'; Codehighlighter1_435_442_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MultipartRequestEntity&nbsp;mrp</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;MultipartRequestEntity(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Part[]</span><span id="Codehighlighter1_435_442_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_435_442_Open_Text"><span style="color: #000000">{sp,&nbsp;fp}</span></span><span style="color: #000000">,&nbsp;postMethod<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getParams());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;postMethod.setRequestEntity(mrp);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">执行postMethod</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpClient&nbsp;httpClient&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;HttpClient();<br />
<img id="Codehighlighter1_617_662_Open_Image" onclick="this.style.display='none'; Codehighlighter1_617_662_Open_Text.style.display='none'; Codehighlighter1_617_662_Closed_Image.style.display='inline'; Codehighlighter1_617_662_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_617_662_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_617_662_Closed_Text.style.display='none'; Codehighlighter1_617_662_Open_Image.style.display='inline'; Codehighlighter1_617_662_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_617_662_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_617_662_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;httpClient.executeMethod(postMethod);<br />
<img id="Codehighlighter1_688_716_Open_Image" onclick="this.style.display='none'; Codehighlighter1_688_716_Open_Text.style.display='none'; Codehighlighter1_688_716_Closed_Image.style.display='inline'; Codehighlighter1_688_716_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_688_716_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_688_716_Closed_Text.style.display='none'; Codehighlighter1_688_716_Open_Image.style.display='inline'; Codehighlighter1_688_716_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(HttpException&nbsp;e)&nbsp;</span><span id="Codehighlighter1_688_716_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_688_716_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
<img id="Codehighlighter1_740_768_Open_Image" onclick="this.style.display='none'; Codehighlighter1_740_768_Open_Text.style.display='none'; Codehighlighter1_740_768_Closed_Image.style.display='inline'; Codehighlighter1_740_768_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_740_768_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_740_768_Closed_Text.style.display='none'; Codehighlighter1_740_768_Open_Image.style.display='inline'; Codehighlighter1_740_768_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(IOException&nbsp;e)&nbsp;</span><span id="Codehighlighter1_740_768_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_740_768_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
<br />
<img src ="http://www.blogjava.net/nighty/aggbug/207121.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nighty/" target="_blank">寒武纪</a> 2008-06-11 15:18 <a href="http://www.blogjava.net/nighty/archive/2008/06/11/207121.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VMware6.03安装VMware tools for ubuntu8.04</title><link>http://www.blogjava.net/nighty/archive/2008/06/03/205603.html</link><dc:creator>寒武纪</dc:creator><author>寒武纪</author><pubDate>Tue, 03 Jun 2008 09:27:00 GMT</pubDate><guid>http://www.blogjava.net/nighty/archive/2008/06/03/205603.html</guid><wfw:comment>http://www.blogjava.net/nighty/comments/205603.html</wfw:comment><comments>http://www.blogjava.net/nighty/archive/2008/06/03/205603.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/nighty/comments/commentRss/205603.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nighty/services/trackbacks/205603.html</trackback:ping><description><![CDATA[&nbsp;&nbsp; 1. 先下载VMWare Tools for linux，下面是一个下载链接 <a href="http://vmware.cn/Soft/UploadSoft9f4/VMware%20Workstation%206.02%C2%CC%C9%AB%BE%AB%BC%F2%D3%A2%CE%C4%B0%E6/vmware_tools_linux.rar">http://vmware.cn/Soft/UploadSoft9f4/VMware%20Workstation%206.02%C2%CC%C9%AB%BE%AB%BC%F2%D3%A2%CE%C4%B0%E6/vmware_tools_linux.rar</a> <br />
&nbsp;&nbsp; 2. 解压出一个linux.iso文件，这个就是tools工具的安装光盘镜像。事先你必须正确安装了Linux，我安装的ubuntu8.04，在VM上点击&#8220;编辑虚拟机设置&#8221;，CD-ROM方式改为&#8220;使用ISO镜像&#8221;，选择linux.iso，确定<br />
&nbsp;&nbsp; 3.&nbsp;启动你的虚拟机操作系统，然后切换出来鼠标，选择主菜单&#8220;虚拟机&#8221;--&gt; &#8220;安装VMware Tools&#8221;，ubuntu会自动搜索到该CDROM，直接打个桌面的图标即可。可以看到二个文件：VMwareTools-xxx-i386.rpm和VMwareTools- xxx.tar.gz。rpm是RedHat的安装包，这里我们应该使用gz文件，把这个gz文件直接复制到桌面，解压，生成一个<a class="st_tag internal_tag" title="标签 VMware 下的日志" href="http://felixqu.com/tag/vmware/" rel="tag">vmware</a>-tools-distrib 目录。<br />
&nbsp;&nbsp; 4. 打开终端，跳桌面这个<a class="st_tag internal_tag" title="标签 VMware 下的日志" href="http://felixqu.com/tag/vmware/" rel="tag">vmware</a>-tools-distrib 目录。输入下面的命令：$ sudo ./<a class="st_tag internal_tag" title="标签 VMware 下的日志" href="http://felixqu.com/tag/vmware/" rel="tag">vmware</a>-install.pl（回车后会提示输入你的密码，并且密码不会显示出来，表明你将以更高级权限执行一个动作——安装软件；再次回车后安装开始）<br />
&nbsp;&nbsp; 5. 安装过程会有一系列的问题确认，类似windows的安装向导提示，一路回车下去，采用默认方式就可以。<br />
&nbsp;&nbsp; 6. 最后安装成功会提示选择桌面环境的默认分辨率。分辨率可以以后再调整。<br />
&nbsp;&nbsp; 7. 安装后鼠标的滑轮可能不好使了。我们这样解决这个问题，还是打开终端，输入：<span style="font-size: x-small"><em>$ sudo gedit /etc/X11/xorg.conf</em></span>&nbsp;&nbsp; <span style="font-size: x-small">这个命令使系统以root权限打开鼠标配置文件/etc/X11/xorg.conf。把文件中的 </span><span style="font-size: x-small"><em>Option &#8220;Protocol&#8221; &#8220;ps/2&#8221;</em>改成 </span><span style="font-size: x-small"><em>Option &#8220;Protocol&#8221; &#8220;IMPS/2&#8221; 。</em>保存，然后重新启动ubuntu。<br />
<br />
&nbsp;&nbsp; 补充：关于VMware安装ubuntu8.04和VMware tools以后，真实系统和虚拟系统的文件共享仍存在问题的，无法直接从外部的windows拖文件放入虚拟系统里面。挂载U盘或是分区也比较麻烦。后来想可以利用光驱，自己把要共享的文件制作成Windows下面的ISO文件，然后装截入光驱，直接在虚拟光驱里面打开，就可以直接操作。</span>
<img src ="http://www.blogjava.net/nighty/aggbug/205603.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nighty/" target="_blank">寒武纪</a> 2008-06-03 17:27 <a href="http://www.blogjava.net/nighty/archive/2008/06/03/205603.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse3.3安装中文语言包</title><link>http://www.blogjava.net/nighty/archive/2008/05/30/204106.html</link><dc:creator>寒武纪</dc:creator><author>寒武纪</author><pubDate>Fri, 30 May 2008 07:44:00 GMT</pubDate><guid>http://www.blogjava.net/nighty/archive/2008/05/30/204106.html</guid><wfw:comment>http://www.blogjava.net/nighty/comments/204106.html</wfw:comment><comments>http://www.blogjava.net/nighty/archive/2008/05/30/204106.html#Feedback</comments><slash:comments>13</slash:comments><wfw:commentRss>http://www.blogjava.net/nighty/comments/commentRss/204106.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nighty/services/trackbacks/204106.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp; Eclipse3.3出来很久了，一直都使用英文版，刚好看到有网友介绍Eclipse的一个Project，叫Babel，官方的描述这样：Eclipse is a global community. It is in everyone's interest to ensure that Eclipse is available and translated in as many locales as possible. 项目的主页地址是：<a href="http://www.eclipse.org/babel/">http://www.eclipse.org/babel/</a> 。按照说明从这里可以下载安装到语言包。<br />
&nbsp;&nbsp; 直接从Eclipse3.3的菜单"Help --&gt; Software Updates --&gt; Find and Insatll..."，新建一个远程站点，URL为 <a href="http://download.eclipse.org/technology/babel/update-site/">http://download.eclipse.org/technology/babel/update-site/</a> ，然后直接在线安装。在弹出的语言选择界面上选择中文简体。如下图：<br />
&nbsp;&nbsp;&nbsp;<img height="801" alt="" src="http://www.blogjava.net/images/blogjava_net/nighty/update.JPG" width="741" border="0" /></p>
<p>&nbsp;&nbsp;&nbsp; 网络情况如果正常的话，安装应该不会有问题的，中间可能会弹出几次下载jar文件失败的对话框，继续retry就行。<br />
&nbsp;&nbsp;&nbsp;<img height="262" alt="" src="http://www.blogjava.net/images/blogjava_net/nighty/download.JPG" width="999" border="0" /><br />
&nbsp;&nbsp;&nbsp; 最后重启一下，可以看到都变成中文界面的。<br />
&nbsp;&nbsp;&nbsp; <img height="768" alt="" src="http://www.blogjava.net/images/blogjava_net/nighty/v.jpg" width="1024" border="0" /><br />
&nbsp; <br />
&nbsp; 原来是3.3的Eclipse，怎么变成3.2呢？原因估计是语言插件的版本是3.2的导致的，所以你看到有一些地方汉化并不完全，像Error Log视图的标题，项目右键菜单，以及一些顶级菜单都没有完全汉化。<br />
&nbsp; 希望以后Babel项目后面更新跟得上主版本的变化，不过习惯了英文版的，其实也是差不多的。</p>
<img src ="http://www.blogjava.net/nighty/aggbug/204106.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nighty/" target="_blank">寒武纪</a> 2008-05-30 15:44 <a href="http://www.blogjava.net/nighty/archive/2008/05/30/204106.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于Java命令行交互方式</title><link>http://www.blogjava.net/nighty/archive/2008/05/23/202314.html</link><dc:creator>寒武纪</dc:creator><author>寒武纪</author><pubDate>Fri, 23 May 2008 01:41:00 GMT</pubDate><guid>http://www.blogjava.net/nighty/archive/2008/05/23/202314.html</guid><wfw:comment>http://www.blogjava.net/nighty/comments/202314.html</wfw:comment><comments>http://www.blogjava.net/nighty/archive/2008/05/23/202314.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/nighty/comments/commentRss/202314.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nighty/services/trackbacks/202314.html</trackback:ping><description><![CDATA[&nbsp;&nbsp; 普通的程序交互方式有命令行和GUI形式。对于GUI样式，交互的设计可以多种多样，但是Java做命令行交互，似乎存在着一些不足。<br />
&nbsp;&nbsp; 命令行交互是传统的交互方式，如果程序有时候需要在Unix或是Linux等系统上运动时，以这种方式出现的可能性就比较大。命令行包括<br />
&nbsp;&nbsp; 输入和回显问题，一般是以行结束，或是以某个结束符为终命令终止标识。System.out 和System.err就用于标准的输出和错误输出，System.in用于标准的输入接受，一般情况下都是指键盘。<br />
&nbsp;&nbsp; 如果接受参数输入，一般的程序结构如下：<br />
&nbsp;&nbsp;
<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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">BufferedReader&nbsp;in&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;BufferedReader(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;InputStreamReader(System.in));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">==Please&nbsp;input&nbsp;password==：</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />String&nbsp;pass&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;in.readLine();</span></div>
&nbsp;&nbsp; 输入的时候显示屏自动进行输入回显。这个时候如果遇到输入密码等敏感数据的时候，就无法用*或是#这样的符号进行回显屏蔽，容易暴露安全问题。<br />
&nbsp;&nbsp; 解决的可能想法：<br />
&nbsp;&nbsp; 1.&nbsp; 通过监听键盘事件，对输入的回显进行截获取，把回显进行屏蔽，但是监听器如何知道何时是输入密码，何时是输入普通数据？比较难以控制，而且这种监听应该是线程化的，可能会存在一些意想不到的问题。<br />
&nbsp;&nbsp; 2.&nbsp; 如果用纯Java难以实现，那么是否可以使用其它语言的功能进行补充，比如JNI，或是Windows下面的Dos脚本，Linux平台的Shell脚本来进行补充。不过这样就不太平台无关了。<br />
&nbsp;&nbsp; 3.&nbsp; 可能sun发现了这个不足之处，从1.6版本开始，增加了一个java.io.Console类，代表与当前 Java 虚拟机关联的基于字符的控制台设备，这个Console是对原来System.in这种不足的补充，提供了像<code><strong><a href="mk:@MSITStore:D:\jdk6.ZH_cn.chm::/j2se6/api/java/io/Console.html#readPassword()">readPassword</a></strong>()</code>等这样的实用方法，具体请参考API文档，就是专门用于对敏感信息的读取。但是这是基于Java1.6的，如果有些场景受限制，不能使用1.6，那么还是无法解决上面的问题。后来查阅了一下Console类的实现方式，想直接把它的实现方式移植到1.4.xx上是比较难的，因为用到了一些高版本的新特性。使用Console要注意的是：虚拟机是否具有控制台取决于底层平台，还取决于调用虚拟机的方式。如果虚拟机从一个交互式命令行开始启动，且没有重定向标准输入和输出流，那么其控制台将存在，并且通常连接到键盘并从虚拟机启动的地方显示。如果虚拟机是自动启动的（例如，由后台作业调度程序启动），那么它通常没有控制台。如果你在Eclipse里面启动程序调用Console，那么通常是没有控制台，还是得从外部的命令行方式才能调用得到。<br />
&nbsp;&nbsp; 总体想一下，感觉应该还是从第2点出发，牺牲掉一点通用性，这样才能满足这种功能需求。
<img src ="http://www.blogjava.net/nighty/aggbug/202314.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nighty/" target="_blank">寒武纪</a> 2008-05-23 09:41 <a href="http://www.blogjava.net/nighty/archive/2008/05/23/202314.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java MD5加密生成摘要</title><link>http://www.blogjava.net/nighty/archive/2008/05/08/199246.html</link><dc:creator>寒武纪</dc:creator><author>寒武纪</author><pubDate>Thu, 08 May 2008 07:02:00 GMT</pubDate><guid>http://www.blogjava.net/nighty/archive/2008/05/08/199246.html</guid><wfw:comment>http://www.blogjava.net/nighty/comments/199246.html</wfw:comment><comments>http://www.blogjava.net/nighty/archive/2008/05/08/199246.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nighty/comments/commentRss/199246.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nighty/services/trackbacks/199246.html</trackback:ping><description><![CDATA[<p dir="ltr">&nbsp;&nbsp;&nbsp;&nbsp;刚好最近项目中需要用到一点加密的东西，java安全类库提供了一个<strong>java.security.MessageDigest类，</strong>此 MessageDigest 类为应用程序提供信息摘要算法的功能，如 MD5 或 SHA 算法。信息摘要是安全的单向哈希函数，它接收任意大小的数据，并输出固定长度的哈希值。有现成的当然是最好的，省事省力。<br />
&nbsp;&nbsp;&nbsp;&nbsp;MD5的非常有实际应用性。有网友给出这样的描述，可以参照一下：<a href="http://blog.csdn.net/Daping_Zhang/archive/2005/05/28/382688.aspx">http://blog.csdn.net/Daping_Zhang/archive/2005/05/28/382688.aspx</a><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;该类的<code><strong><a href="mk:@MSITStore:D:\jdk6.ZH_cn.chm::/j2se6/api/java/security/MessageDigest.html#getInstance(java.lang.String)">getInstance</a></strong>(<a title="java.lang 中的类" href="mk:@MSITStore:D:\jdk6.ZH_cn.chm::/j2se6/api/java/lang/String.html">String</a>&nbsp;algorithm)</code>&nbsp;方法返回一个MessageDigest的实体，加密的一系统的<code><strong><a href="mk:@MSITStore:D:\jdk6.ZH_cn.chm::/j2se6/api/java/security/MessageDigest.html#digest()">digest</a></strong>()</code>方法和<code><strong><a href="mk:@MSITStore:D:\jdk6.ZH_cn.chm::/j2se6/api/java/security/MessageDigest.html#update(byte)">update</a></strong>(byte&nbsp;input)方法。加密后返回一个byte[]，16位，我们经常见到很多开源网站的下载地址会有一个[md5]的链接，打开其实就是一小段文本内容。例如：<br />
</code>&nbsp;&nbsp;&nbsp;&nbsp;MD5 (commons-logging-1.1.1-bin.zip) = f88520ed791673aed6cc4591bc058b55<br />
&nbsp;&nbsp;&nbsp;&nbsp;这是Jakarta的logging组件下载时提供的MD5摘要信息，是对这个zip包进行全文加密生成的摘要，摘要码就是后面的f88520ed791673aed6cc4591bc058b55，如果你下载以后，按照MD5的算法生成自己的摘要，如果这二个摘要一样，就证明这个文件是没有被人篡改过的。<br />
&nbsp;&nbsp;&nbsp;&nbsp;遇到的问题是Java的MessageDigest类执行后返回的byte[16]得转换成十六进制的字符串，如果直接用new String(byte[])，得到的结果将是不正确的。算法有很多网友提供了，照搬了。比较有趣的是，commons-logging提供的那个MD5居然和我自己生成的不一样(难道文件被修改过？)，后来尝试了其它地方提供的MD5码，都没有问题。<br />
&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"><img id="Codehighlighter1_24_2213_Open_Image" onclick="this.style.display='none'; Codehighlighter1_24_2213_Open_Text.style.display='none'; Codehighlighter1_24_2213_Closed_Image.style.display='inline'; Codehighlighter1_24_2213_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_24_2213_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_24_2213_Closed_Text.style.display='none'; Codehighlighter1_24_2213_Open_Image.style.display='inline'; Codehighlighter1_24_2213_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;MD5Builder&nbsp;</span><span id="Codehighlighter1_24_2213_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_24_2213_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;Logger&nbsp;logger&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Logger.getLogger(MD5Builder.</span><span style="color: #0000ff">class</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;用来将字节转换成&nbsp;16&nbsp;进制表示的字符</span><span style="color: #008000"><br />
<img id="Codehighlighter1_139_223_Open_Image" onclick="this.style.display='none'; Codehighlighter1_139_223_Open_Text.style.display='none'; Codehighlighter1_139_223_Closed_Image.style.display='inline'; Codehighlighter1_139_223_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_139_223_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_139_223_Closed_Text.style.display='none'; Codehighlighter1_139_223_Open_Image.style.display='inline'; Codehighlighter1_139_223_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;hexDigits[]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_139_223_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_139_223_Open_Text"><span style="color: #000000">{&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">0</span><span style="color: #000000">'</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">1</span><span style="color: #000000">'</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">2</span><span style="color: #000000">'</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">3</span><span style="color: #000000">'</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">4</span><span style="color: #000000">'</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">5</span><span style="color: #000000">'</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">6</span><span style="color: #000000">'</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">7</span><span style="color: #000000">'</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">8</span><span style="color: #000000">'</span><span style="color: #000000">,<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">9</span><span style="color: #000000">'</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">a</span><span style="color: #000000">'</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">b</span><span style="color: #000000">'</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">c</span><span style="color: #000000">'</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">d</span><span style="color: #000000">'</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">e</span><span style="color: #000000">'</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">f</span><span style="color: #000000">'</span><span style="color: #000000">&nbsp;}</span></span><span style="color: #000000">;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_230_298_Open_Image" onclick="this.style.display='none'; Codehighlighter1_230_298_Open_Text.style.display='none'; Codehighlighter1_230_298_Closed_Image.style.display='inline'; Codehighlighter1_230_298_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_230_298_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_230_298_Closed_Text.style.display='none'; Codehighlighter1_230_298_Open_Image.style.display='inline'; Codehighlighter1_230_298_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_230_298_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**&nbsp;*/</span><span id="Codehighlighter1_230_298_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;对文件全文生成MD5摘要<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;file&nbsp;&nbsp;&nbsp;要加密的文件<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@return</span><span style="color: #008000">&nbsp;MD5摘要码<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_340_1119_Open_Image" onclick="this.style.display='none'; Codehighlighter1_340_1119_Open_Text.style.display='none'; Codehighlighter1_340_1119_Closed_Image.style.display='inline'; Codehighlighter1_340_1119_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_340_1119_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_340_1119_Closed_Text.style.display='none'; Codehighlighter1_340_1119_Open_Image.style.display='inline'; Codehighlighter1_340_1119_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;String&nbsp;getMD5(File&nbsp;file)&nbsp;</span><span id="Codehighlighter1_340_1119_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_340_1119_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileInputStream&nbsp;fis&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img id="Codehighlighter1_378_927_Open_Image" onclick="this.style.display='none'; Codehighlighter1_378_927_Open_Text.style.display='none'; Codehighlighter1_378_927_Closed_Image.style.display='inline'; Codehighlighter1_378_927_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_378_927_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_378_927_Closed_Text.style.display='none'; Codehighlighter1_378_927_Open_Image.style.display='inline'; Codehighlighter1_378_927_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_378_927_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_378_927_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageDigest&nbsp;md&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;MessageDigest.getInstance(</span><span style="color: #000000">"</span><span style="color: #000000">MD5</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.info(</span><span style="color: #000000">"</span><span style="color: #000000">MD5摘要长度：</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;md.getDigestLength());<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fis&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;FileInputStream(file);<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">byte</span><span style="color: #000000">[]&nbsp;buffer&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">byte</span><span style="color: #000000">[</span><span style="color: #000000">2048</span><span style="color: #000000">];<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;length&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.info(</span><span style="color: #000000">"</span><span style="color: #000000">开始生成摘要</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">long</span><span style="color: #000000">&nbsp;s&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;System.currentTimeMillis();<br />
<img id="Codehighlighter1_690_729_Open_Image" onclick="this.style.display='none'; Codehighlighter1_690_729_Open_Text.style.display='none'; Codehighlighter1_690_729_Closed_Image.style.display='inline'; Codehighlighter1_690_729_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_690_729_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_690_729_Closed_Text.style.display='none'; Codehighlighter1_690_729_Open_Image.style.display='inline'; Codehighlighter1_690_729_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">&nbsp;((length&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;fis.read(buffer))&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_690_729_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_690_729_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md.update(buffer,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;length);<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.info(</span><span style="color: #000000">"</span><span style="color: #000000">摘要生成成功,总用时:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;(System.currentTimeMillis()&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;s)&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">ms</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">byte</span><span style="color: #000000">[]&nbsp;b&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;md.digest();<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;byteToHexString(b);<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;16位加密<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;return&nbsp;buf.toString().substring(8,&nbsp;24);</span><span style="color: #008000"><br />
<img id="Codehighlighter1_950_1016_Open_Image" onclick="this.style.display='none'; Codehighlighter1_950_1016_Open_Text.style.display='none'; Codehighlighter1_950_1016_Closed_Image.style.display='inline'; Codehighlighter1_950_1016_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_950_1016_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_950_1016_Closed_Text.style.display='none'; Codehighlighter1_950_1016_Open_Image.style.display='inline'; Codehighlighter1_950_1016_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(Exception&nbsp;ex)&nbsp;</span><span id="Codehighlighter1_950_1016_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_950_1016_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.error(ex);<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ex.printStackTrace();<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img id="Codehighlighter1_1025_1116_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1025_1116_Open_Text.style.display='none'; Codehighlighter1_1025_1116_Closed_Image.style.display='inline'; Codehighlighter1_1025_1116_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1025_1116_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1025_1116_Closed_Text.style.display='none'; Codehighlighter1_1025_1116_Open_Image.style.display='inline'; Codehighlighter1_1025_1116_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #0000ff">finally</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_1025_1116_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_1025_1116_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_1034_1056_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1034_1056_Open_Text.style.display='none'; Codehighlighter1_1034_1056_Closed_Image.style.display='inline'; Codehighlighter1_1034_1056_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1034_1056_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1034_1056_Closed_Text.style.display='none'; Codehighlighter1_1034_1056_Open_Image.style.display='inline'; Codehighlighter1_1034_1056_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_1034_1056_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_1034_1056_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fis.close();<br />
<img id="Codehighlighter1_1081_1112_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1081_1112_Open_Text.style.display='none'; Codehighlighter1_1081_1112_Closed_Image.style.display='inline'; Codehighlighter1_1081_1112_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1081_1112_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1081_1112_Closed_Text.style.display='none'; Codehighlighter1_1081_1112_Open_Image.style.display='inline'; Codehighlighter1_1081_1112_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(IOException&nbsp;ex)&nbsp;</span><span id="Codehighlighter1_1081_1112_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_1081_1112_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ex.printStackTrace();<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img id="Codehighlighter1_1123_1204_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1123_1204_Open_Text.style.display='none'; Codehighlighter1_1123_1204_Closed_Image.style.display='inline'; Codehighlighter1_1123_1204_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1123_1204_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1123_1204_Closed_Text.style.display='none'; Codehighlighter1_1123_1204_Open_Image.style.display='inline'; Codehighlighter1_1123_1204_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1123_1204_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**&nbsp;*/</span><span id="Codehighlighter1_1123_1204_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;对一段String生成MD5加密信息<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;message&nbsp;要加密的String<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@return</span><span style="color: #008000">&nbsp;生成的MD5信息<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_1250_1548_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1250_1548_Open_Text.style.display='none'; Codehighlighter1_1250_1548_Closed_Image.style.display='inline'; Codehighlighter1_1250_1548_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1250_1548_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1250_1548_Closed_Text.style.display='none'; Codehighlighter1_1250_1548_Open_Image.style.display='inline'; Codehighlighter1_1250_1548_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;String&nbsp;getMD5(String&nbsp;message)</span><span id="Codehighlighter1_1250_1548_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_1250_1548_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_1258_1444_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1258_1444_Open_Text.style.display='none'; Codehighlighter1_1258_1444_Closed_Image.style.display='inline'; Codehighlighter1_1258_1444_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1258_1444_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1258_1444_Closed_Text.style.display='none'; Codehighlighter1_1258_1444_Open_Image.style.display='inline'; Codehighlighter1_1258_1444_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_1258_1444_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_1258_1444_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageDigest&nbsp;md&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;MessageDigest.getInstance(</span><span style="color: #000000">"</span><span style="color: #000000">MD5</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.info(</span><span style="color: #000000">"</span><span style="color: #000000">MD5摘要长度：</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;md.getDigestLength());<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">byte</span><span style="color: #000000">[]&nbsp;b&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;md.digest(message.getBytes());<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;byteToHexString(b);<br />
<img id="Codehighlighter1_1481_1545_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1481_1545_Open_Text.style.display='none'; Codehighlighter1_1481_1545_Closed_Image.style.display='inline'; Codehighlighter1_1481_1545_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1481_1545_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1481_1545_Closed_Text.style.display='none'; Codehighlighter1_1481_1545_Open_Image.style.display='inline'; Codehighlighter1_1481_1545_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(NoSuchAlgorithmException&nbsp;e)&nbsp;</span><span id="Codehighlighter1_1481_1545_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_1481_1545_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.error(e);<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_1556_1644_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1556_1644_Open_Text.style.display='none'; Codehighlighter1_1556_1644_Closed_Image.style.display='inline'; Codehighlighter1_1556_1644_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1556_1644_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1556_1644_Closed_Text.style.display='none'; Codehighlighter1_1556_1644_Open_Image.style.display='inline'; Codehighlighter1_1556_1644_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1556_1644_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**&nbsp;*/</span><span id="Codehighlighter1_1556_1644_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;把byte[]数组转换成十六进制字符串表示形式<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span