<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_hoojo</title><subtitle type="text">学习在于积累：滴水可以石穿！学而不思则罔，思而不学则殆！</subtitle><id>http://feed.cnblogs.com/blog/u/74515/rss</id><updated>2012-05-18T02:32:45Z</updated><author><name>hoojo</name><uri>http://www.cnblogs.com/hoojo/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hoojo/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/74515/rss"/><entry><id>http://www.cnblogs.com/hoojo/archive/2012/05/17/2506845.html</id><title type="text">Jwchat 的安装和配置、Service unavailable、Authorization failed问题汇总</title><summary type="text">上一篇介绍了Openfire开源聊天IM服务器的安装：http://www.cnblogs.com/hoojo/archive/2012/05/17/2506769.html 这篇文章介绍Jwchat的安装和配置 首先Jwchat的配置和安装需要具备的环境： Tomcat 5.0.28+/Tomcat 6 JDK 1.6+ Openfire 3.7.1 1、 下载jwchat工程文件 ...</summary><published>2012-05-17T13:28:00Z</published><updated>2012-05-17T13:28:00Z</updated><author><name>hoojo</name><uri>http://www.cnblogs.com/hoojo/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hoojo/archive/2012/05/17/2506845.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hoojo/archive/2012/05/17/2506845.html"/><content type="html">&lt;p&gt;上一篇介绍了Openfire开源聊天IM服务器的安装：&lt;a title="http://www.cnblogs.com/hoojo/archive/2012/05/17/2506769.html" href="http://www.cnblogs.com/hoojo/archive/2012/05/17/2506769.html"&gt;http://www.cnblogs.com/hoojo/archive/2012/05/17/2506769.html&lt;/a&gt;&lt;/p&gt; &lt;p&gt;这篇文章介绍Jwchat的安装和配置&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;首先Jwchat的配置和安装需要具备的环境：  &lt;p&gt;Tomcat 5.0.28+/Tomcat 6  &lt;p&gt;JDK 1.6+  &lt;p&gt;Openfire 3.7.1  &lt;p&gt;1、 下载jwchat工程文件  &lt;p&gt;下载站点：&lt;a href="http://blog.jwchat.org/jwchat/download/"&gt;http://blog.jwchat.org/jwchat/download/&lt;/a&gt;  &lt;p&gt;Zip下载：&lt;a href="http://downloads.sourceforge.net/jwchat/jwchat-1.0.zip?use_mirror"&gt;http://downloads.sourceforge.net/jwchat/jwchat-1.0.zip?use_mirror&lt;/a&gt;=  &lt;p&gt;&amp;nbsp; &lt;p&gt;2、 下载完成后，将jwchat-1.0.zip解压到你的tomcat的webapps目录，将jwchat-1.0命名为jwchat，如果不这样的话，可能会出现错误，如Authorization failed。至少这样会方便你访问jwchat工程。  &lt;p&gt;然后将index.html.zh_CN等这样带有*.后缀.zh_CN的这样的文件的.zh_CN都删掉，进行重命名。.zh_CN是表示中文版的，当然你也可以直接将*.后缀.后缀的文件进行重命名，那样就是默认的英文版的了。  &lt;p&gt;批量命名工具类：  &lt;div id="codeSnippetWrapper"&gt; &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;package com.hoo.util;&lt;!--CRLF--&gt;&amp;nbsp;&lt;!--CRLF--&gt;import java.io.File;&lt;!--CRLF--&gt;&amp;nbsp;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt; 文件命名工具类&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @createDate 2012-5-14 下午01:58:14&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @file FileRenameUtils.java&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @package com.hoo.util&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @blog http://blog.csdn.net/IBM_hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @email hoojo_@126.com&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @version 1.0&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; */&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;abstract&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; FileRenameUtils {&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; final &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; String FILE_PATH = &lt;span style="color: #006080"&gt;"D:\\apache-tomcat-6.0.33\\webapps\\jwchat"&lt;/span&gt;;&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt; 将指定目录下的文件的type类型的文件，进行重命名，命名后的文件将去掉type&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * &amp;lt;p&amp;gt;example: 如果type = html； index.html.html -&amp;gt; index.html&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * &amp;lt;p&amp;gt;example: 如果type = zh_CN； index.html.zh_CN -&amp;gt; index.html&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @createDate 2012-5-16 下午02:16:48&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param path&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param type&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     */&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; rename(String path, String type) {&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (path == &lt;span style="color: #0000ff"&gt;null&lt;/span&gt; || &lt;span style="color: #006080"&gt;""&lt;/span&gt;.equals(path)) {&lt;!--CRLF--&gt;            path = FILE_PATH;&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;        File dir = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; File(path);&lt;!--CRLF--&gt;        File[] list = dir.listFiles();&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (File file : list) {&lt;!--CRLF--&gt;            String name = file.getName();&lt;!--CRLF--&gt;            String[] s = name.split(&lt;span style="color: #006080"&gt;"\\."&lt;/span&gt;);&lt;!--CRLF--&gt;            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (s.length == 3 &amp;amp;&amp;amp; type.equals(s[2])) {&lt;!--CRLF--&gt;                System.&lt;span style="color: #0000ff"&gt;out&lt;/span&gt;.println(s[0] + &lt;span style="color: #006080"&gt;"--"&lt;/span&gt; + s[1] + &lt;span style="color: #006080"&gt;"--"&lt;/span&gt; + s[2]);&lt;!--CRLF--&gt;                file.renameTo(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; File(path + &lt;span style="color: #006080"&gt;"/"&lt;/span&gt; + s[0] + &lt;span style="color: #006080"&gt;"."&lt;/span&gt; + s[1]));&lt;!--CRLF--&gt;            }&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; main(String[] args) {&lt;!--CRLF--&gt;    FileRenameUtils.rename(&lt;span style="color: #006080"&gt;"D:\\apache-tomcat-6.0.33\\webapps\\jwchat"&lt;/span&gt;, &lt;span style="color: #006080"&gt;"zh_CN"&lt;/span&gt;);&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;}&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;3、 下载JabberHTTPBind这个包，因为直接下载的jwchat没有WEB-INF、web.xml是无法运行的。 &lt;p&gt;JabberHTTPBind是jwchat进行http bind通信的一种方式，它可以让jwchat和openfire进行链接通信。 &lt;p&gt;站点：&lt;a href="http://blog.jwchat.org/jhb/"&gt;http://blog.jwchat.org/jhb/&lt;/a&gt; &lt;p&gt;下载地址：&lt;a href="http://blog.jwchat.org/download/JabberHTTPBind-1.1.1.zip"&gt;http://blog.jwchat.org/download/JabberHTTPBind-1.1.1.zip&lt;/a&gt; &lt;p&gt;JabberHTTPBind会依赖xalan的library库 &lt;p&gt;下载站点：&lt;a href="http://xml.apache.org/xalan-j/downloads.html"&gt;http://xml.apache.org/xalan-j/downloads.html&lt;/a&gt; &lt;p&gt;下载目录：&lt;a href="http://labs.renren.com/apache-mirror/xml/xalan-j/"&gt;http://labs.renren.com/apache-mirror/xml/xalan-j/&lt;/a&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;4、 下载完成后，将JabberHTTPBind的zip解压出来的WEB-INF、META-INF一并放到刚才的jwchat目录中，并且将刚才下载的xalan的xalan.jar,serializer.jar, xercesImpl.jar, xml-apis.jar放到webapps\jwchat\WEB-INF\lib目录下即可。 &lt;p&gt;&amp;nbsp; &lt;p&gt;5、 修改jwchat目录中的相关配置 &lt;p&gt;修改config.js文件 &lt;div id="codeSnippetWrapper"&gt;&lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; BACKENDS = &lt;!--CRLF--&gt;[&lt;!--CRLF--&gt;        {&lt;!--CRLF--&gt;            ……&lt;!--CRLF--&gt;        },&lt;!--CRLF--&gt;        {&lt;!--CRLF--&gt;            ……&lt;!--CRLF--&gt;        },&lt;!--CRLF--&gt;        {&lt;!--CRLF--&gt;            name:&lt;span style="color: #006080"&gt;"Open Relay"&lt;/span&gt;,&lt;!--CRLF--&gt;            description:&lt;span style="color: #006080"&gt;"HTTP Binding backend that allows connecting to any jabber server"&lt;/span&gt;,&lt;!--CRLF--&gt;            httpbase:&lt;span style="color: #006080"&gt;"/JHB/"&lt;/span&gt;, &lt;span style="color: #008000"&gt;/* 修改这里为：/jwchat/JHB/ */&lt;/span&gt;&lt;!--CRLF--&gt;            type:&lt;span style="color: #006080"&gt;"binding"&lt;/span&gt;,&lt;!--CRLF--&gt;            default_server: SITENAME&lt;!--CRLF--&gt;        },&lt;!--CRLF--&gt;        {&lt;!--CRLF--&gt;            ……&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;];&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;修改WEB-INF目录下的web.xml文件 &lt;div id="codeSnippetWrapper"&gt;&lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;servlet-mapping&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;servlet-name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Jabber HTTP Binding Servlet&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;servlet-name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;url-pattern&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;/&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;url-pattern&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;!--CRLF--&gt;         url-pattern修改为：/JHB/&lt;!--CRLF--&gt;         &lt;span style="color: #008000"&gt;&amp;lt;!-- 这里的修改主页是对应上面的config.js，如果config.js的httpbase配置是/jwchat/，那这里的就不用修改了 --&amp;gt;&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;servlet-mapping&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;6、 启动tomcat后，访问&lt;a href="http://localhost:8080/jwchat/"&gt;http://localhost:8080/jwchat/&lt;/a&gt; &lt;p&gt;如果登录出现Service unavailable这个问题，那么会有以下几种情况： &lt;p&gt;A、 表明服务器不可用，可能是openfire服务器没有启动， &lt;p&gt;B、 webapps\jwchat \config.js的配置有问题，如var SITENAME = "localhost";和openfire服务器地址没有对应 &lt;p&gt;C、 伴随出现：Exception in thread "Thread-34" javax.xml.transform.TransformerFactoryConfigurationError: Provider org.apache.xalan.processor.TransformerFactoryImpl not found异常，可能是tomcat版本低于tomcat6或是jwchat缺少相应的jar包，如缺少xml的serializer.jar、xalan.jar、xercesImpl.jar、xml-apis.jar &lt;p&gt;D、 如果在满足了c步骤，有添加jra包还出现Exception in thread "Thread-34" javax.xml.transform.TransformerFactoryConfigurationError: Provider org.apache.xalan.processor.TransformerFactoryImpl not found异常，建议删除tomcat/work目录下的缓存，然后重启tomcat试试&lt;p&gt;&amp;nbsp; &lt;p&gt;7、 如果登录出现Authorization failed验证失败，那么有以下几种可能的情况： &lt;p&gt;A、 用户没有注册 &lt;p&gt;B、 openfire的证书（C:\Program Files\openfire\resources\security）没有安装到相应的jdk的C:\Program Files\Java\jre6\lib\security目录下 &lt;p&gt;如果出现这种异常信息：javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed也表明是安全证书的问题； &lt;p&gt;关于解决ssl验证，网上有人说在jsjac.js中的if(this.has_sasl) 这行前面加上this.has_sasl = false;来取消ssl安全证书的验证。 &lt;p&gt;C、 如果你的工程名称不是jwchat，建议把它修改成jwchat并且修改config.xml的相关链接的配置（httpbase） &lt;p&gt;D、 还有可能是你当前的用户没有注册，这个时候你可以注册一个用户或是在openfire控制台的用户组中添加一个用户，然后再等了看看是否存在这个问题。 &lt;p&gt;&amp;nbsp; &lt;p&gt;8、 修改服务器名称 &lt;p&gt;点击服务器à服务器管理器à编辑属性 修改服务器名称 &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hoojo/201205/201205172127261699.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/hoojo/201205/201205172127351232.png" width="562" height="177"&gt;&lt;/a&gt; &lt;p&gt;修改后的服务器名称 &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hoojo/201205/201205172127403179.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/hoojo/201205/201205172127434834.png" width="342" height="196"&gt;&lt;/a&gt; &lt;p&gt;出现叹号，我们要删除安全证书，点击服务器à服务器设置à服务器安全证书删掉这里的证书。 &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hoojo/201205/201205172127486290.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/hoojo/201205/20120517212751694.png" width="562" height="69"&gt;&lt;/a&gt; &lt;p&gt;删除后，在当前页面会出现提示，然后按照提示点击相应的链接，重启服务器，然后登陆，再生成证书 &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hoojo/201205/201205172127524989.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/hoojo/201205/201205172127546153.png" width="281" height="81"&gt;&lt;/a&gt; &lt;p&gt;生成证书需要点时间，然后生成完成后，手动重启openfire服务器，再次登陆发现警告没有了。 &lt;p&gt;&amp;nbsp; &lt;a href="http://images.cnblogs.com/cnblogs_com/hoojo/201205/201205172128008624.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/hoojo/201205/201205172128021948.png" width="316" height="186"&gt;&lt;/a&gt; &lt;p&gt;9、 在服务器端增加配置 &lt;p&gt;xmpp.httpbind.client.requests.polling = 0 &lt;p&gt;xmpp.httpbind.client.requests.wait = 10 &lt;img src="http://www.cnblogs.com/hoojo/aggbug/2506845.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hoojo/archive/2012/05/17/2506845.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hoojo/archive/2012/05/17/2506769.html</id><title type="text">Openfire 的安装和配置</title><summary type="text">1、 下载最新的openfire安装文件官方下载站点：http://www.igniterealtime.org/downloads/index.jsp#openfire下载地址：Exe：http://www.igniterealtime.org/downloads/download-landing.jsp?file=openfire/openfire_3_7_1.exeZIP: http://www.igniterealtime.org/downloads/download-landing.jsp?file=openfire/openfire_3_7_1.zip我使用的是zip解压版的安装文</summary><published>2012-05-17T11:58:00Z</published><updated>2012-05-17T11:58:00Z</updated><author><name>hoojo</name><uri>http://www.cnblogs.com/hoojo/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hoojo/archive/2012/05/17/2506769.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hoojo/archive/2012/05/17/2506769.html"/><content type="html">&lt;p&gt;1、 下载最新的openfire安装文件&lt;/p&gt;&lt;p&gt;官方下载站点：&lt;a href="http://www.igniterealtime.org/downloads/index.jsp#openfire"&gt;http://www.igniterealtime.org/downloads/index.jsp#openfire&lt;/a&gt;&lt;/p&gt;&lt;p&gt;下载地址：&lt;/p&gt;&lt;p&gt;Exe：&lt;a href="http://www.igniterealtime.org/downloads/download-landing.jsp?file=openfire/openfire_3_7_1.exe"&gt;http://www.igniterealtime.org/downloads/download-landing.jsp?file=openfire/openfire_3_7_1.exe&lt;/a&gt;&lt;/p&gt;&lt;p&gt;ZIP: &lt;a href="http://www.igniterealtime.org/downloads/download-landing.jsp?file=openfire/openfire_3_7_1.zip"&gt;http://www.igniterealtime.org/downloads/download-landing.jsp?file=openfire/openfire_3_7_1.zip&lt;/a&gt;&lt;/p&gt;&lt;p&gt;我使用的是zip解压版的安装文件。&lt;/p&gt;&lt;p&gt;其中openfire是服务器，下面还有一个spark，这个是一个XMPP协议通信聊天的CS的IM软件，它可以通过openfire进行聊天对话。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;2、 下载完成后，如果你下载的是exe文件，执行你的安装文件，进行安装。这里我是zip的文件。解压后，复制openfire目录到C:\Program Files\目录下；一定要在C:\Program Files\目录下的；这样openfire就安装完成了。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;3、 下面我们启动openfire服务器，并配置它。在C:\Program Files\openfire\bin目录下有一个电灯泡的openfire.exe文件，双击执行，启动完成后可以看到&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hoojo/201205/201205171956274089.png"&gt;&lt;img style="display: inline; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/hoojo/201205/201205171956296333.png" alt="image" width="360" height="271" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;4、 点击Launch Admin按钮进入&lt;a href="http://127.0.0.1:9090/setup/index.jsp"&gt;http://127.0.0.1:9090/setup/index.jsp&lt;/a&gt;页面，配置openfire服务器&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;5、 选择语言 中文简体&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hoojo/201205/201205171956325512.png"&gt;&lt;img style="display: inline; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/hoojo/201205/201205171956341311.png" alt="image" width="289" height="348" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;点击continue进入&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;6、 配置服务器域名&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hoojo/201205/201205171956364211.png"&gt;&lt;img style="display: inline; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/hoojo/201205/201205171956379062.png" alt="image" width="396" height="175" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;如果你是本地访问，那么你可以不修改或是使用localhost、127.0.0.1的方式&lt;/p&gt;&lt;p&gt;如果你用于外网或局域网访问，那么你的地址配置成外网或局域网地址&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;7、 选择数据库&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hoojo/201205/201205171956383390.png"&gt;&lt;img style="display: inline; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/hoojo/201205/201205171956465073.png" alt="image" width="273" height="183" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;选择openfire自带的，当然你也可以选择你的数据库类型。如Oracle、SQLServer、MySQL等。如果openfire没有带jdbc的连接驱动，你需要添加连接数据库的jdbc驱动；驱动放在C:\Program Files\openfire\lib目录下&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;8、 选择特性配置，默认即可&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hoojo/201205/201205171956499269.png"&gt;&lt;img style="display: inline; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/hoojo/201205/201205171956513465.png" alt="image" width="351" height="202" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;9、 管理员邮件，可以跳过这步&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hoojo/201205/201205171956555577.png"&gt;&lt;img style="display: inline; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/hoojo/201205/201205171957075859.png" alt="image" width="385" height="188" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;10、 安装完成&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hoojo/201205/201205171957081857.png"&gt;&lt;img style="display: inline; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/hoojo/201205/201205171957103120.png" alt="image" width="192" height="146" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;进入管理员控制台页面&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;11、 进入&lt;a href="http://127.0.0.1:9090/login.jsp"&gt;http://127.0.0.1:9090/login.jsp&lt;/a&gt;页面后，输入admin、密码admin登陆进入&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hoojo/201205/201205171957338725.png"&gt;&lt;img style="display: inline; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/hoojo/201205/201205171957436522.png" alt="image" width="244" height="93" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;12、 进入后可以看到&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hoojo/201205/201205171957468733.png"&gt;&lt;img style="display: inline; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/hoojo/201205/201205171957534037.png" alt="image" width="493" height="351" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;服务器名称就是jwchat的连接地址；你可以使用Spark、jwchat链接这个地址进行IM通信聊天&amp;hellip;&amp;hellip;&lt;/p&gt;&lt;p&gt;至此，openfire的安装和配置已经完成。下一篇文章开始完成jwchat的安装和配置。&lt;/p&gt;&lt;p&gt;如果你需要更换服务器名称ip，请看下一篇文章！&lt;/p&gt;&lt;img src="http://www.cnblogs.com/hoojo/aggbug/2506769.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hoojo/archive/2012/05/17/2506769.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hoojo/archive/2012/05/13/2498151.html</id><title type="text">Operfire 安装指南</title><summary type="text">本文的英文原文来自 http://www.igniterealtime.org/builds/openfire/docs/latest/documentation/install-guide.html安装指南Openfire是一个强大的即时消息（IM）和聊天服务器，它实现了XMPP协议。这份文件将引导您通过安装Openfire。对于更多的功能和信息的完整列表，请访问Openfire网站：http://www.igniterealtime.org/projects/openfire/目录1 安装1.1 Windows1.2 Linux/Unix2 安装概述3 分发版里的文件4 安装数据库5 安装</summary><published>2012-05-13T07:30:00Z</published><updated>2012-05-13T07:30:00Z</updated><author><name>hoojo</name><uri>http://www.cnblogs.com/hoojo/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hoojo/archive/2012/05/13/2498151.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hoojo/archive/2012/05/13/2498151.html"/><content type="html">&lt;p&gt;&lt;strong&gt;本文的英文原文来自 &lt;a href="http://www.igniterealtime.org/builds/openfire/docs/latest/documentation/install-guide.html"&gt;http://www.igniterealtime.org/builds/openfire/docs/latest/documentation/install-guide.html&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;安装指南&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Openfire是一个强大的即时消息（IM）和聊天服务器，它实现了XMPP协议。这份文件将引导您通过安装Openfire。对于更多的功能和信息的完整列表，请访问Openfire网站：&lt;a href="http://www.igniterealtime.org/projects/openfire/"&gt;http://www.igniterealtime.org/projects/openfire/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;目录&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;1 安装&lt;ul&gt;&lt;li&gt;1.1 Windows&lt;/li&gt;&lt;li&gt;1.2 Linux/Unix&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;2 安装概述&lt;/li&gt;&lt;li&gt;3 分发版里的文件&lt;/li&gt;&lt;li&gt;4 安装数据库&lt;/li&gt;&lt;li&gt;5 安装服务器&lt;/li&gt;&lt;li&gt;6 管理控制台&lt;/li&gt;&lt;li&gt;7 在Windows下运行Openfire&lt;ul&gt;&lt;li&gt;7.1 Windows服务&lt;/li&gt;&lt;li&gt;7.2 自定义参数&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;8 在Linux/Unix下运行Openfire&lt;ul&gt;&lt;li&gt;8.1 自定义参数&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;9 插件&lt;ul&gt;&lt;li&gt;9.1 安装插件&lt;/li&gt;&lt;li&gt;9.2 管理插件&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;安装&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Windows&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;运行Openfire 安装包. 应用缺省将被安装于目录 c:\Program Files\Openfire .&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Linux/Unix&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;可选择RPM包或tar.gz包. 如果使用RPM包, 用你的包管理器运行把它Openfire安装到目录 /opt/openfire:&lt;/p&gt;rpm -ivh openfire_3_0_0.rpm&lt;p&gt;如果使用.tar.gz包, 解压到目录 /opt 或 /usr/bin:&lt;/p&gt;tar -xzvf openfire_3_0_0.tar.gz&lt;br/&gt;mv openfire /opt&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;: .tar.gz包不一定包含Java虚拟机(JRE). 所以, 你必须之前就有 JDK 或 JRE 1.5.0 (Java 5) 或之后安装到你的系统里. 你可以在命令行键入 "java -version" 来检查你的java版本，然后 (如果必要) 访问 &lt;a href="http://java.sun.com/"&gt;http://java.sun.com&lt;/a&gt;更新你的Java安装.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;安装概述&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;为了完成Openfire的安装, 你需要执行以下步骤:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;数据库 - 如果你选择使用一个外部数据库, 你必须准备为Openfire准备好你的数据库.&lt;/li&gt;&lt;li&gt;安装 - 使用内置的基于web的安装工具来安装和验证服务器的配置.&lt;/li&gt;&lt;li&gt;管理控制台 - 使用基于web的管理工具来管理服务器.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;本文也包括以下信息:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;在Windows下运行&lt;/li&gt;&lt;li&gt;在Unix/Linux下运行&lt;/li&gt;&lt;li&gt;安装和使用插件&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;分发版里的文件&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;你的分发版里的文件应该像下面这样 (为了简短一点，一些子目录被忽略了):&lt;/p&gt;openfire/&lt;br/&gt; |- readme.html&lt;br/&gt; |- license.html&lt;br/&gt; |- conf/&lt;br/&gt; |- bin/&lt;br/&gt; |- jre/&lt;br/&gt; |- lib/&lt;br/&gt; |- plugins/&lt;br/&gt;     |- admin/&lt;br/&gt; |- resources/&lt;br/&gt;     |-database/&lt;br/&gt;     |-security/&lt;br/&gt; |- documentation/&lt;br/&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;conf&lt;/strong&gt;目录Openfire用来存放配置文件.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;bin&lt;/strong&gt;目录包含了服务器的可执行文件. 根据你安装的不同分发版, 可用的执行文件也不同.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;jre&lt;/strong&gt;目录包含了一个 Java 5 虚拟机，打包在Windows和RPM版本Openfire里面的.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;lib&lt;/strong&gt;目录包含了运行Openfire所需要的库.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;plugins&lt;/strong&gt;目录包含了服务器插件. 缺省地, Openfire带了一个基于web的管理控制台插件.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;resources/database&lt;/strong&gt;目录包含 SQL 架构文件，用来新建Openfire数据库, 以及已有安装的更新脚本.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;resources/security&lt;/strong&gt;目录是Openfire维护keystores的地方，用来支持SSL连接安全性.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;documentation&lt;/strong&gt; 目录包含了服务器文档.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;安装数据库&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Openfire能把它的数据存储在一个嵌入式的数据库里，你也能选择使用一个外部数据库,例如MySQL或Oracle. 如果你喜欢使用外部数据库, 你必须在开始安装之前准备好它. 更多信息见&lt;a href="http://www.igniterealtime.org/builds/openfire/docs/latest/documentation/database.html"&gt;数据库安装&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;安装服务器&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Openfire內建了一个基于web的, "向导"驱动的安装和配置工具. 简单地启动Openfire(分平台的指引如下) 并使用浏览器连接到管理控制台. 基于web的管理控制台的缺省端口是9090. 如果你和Openfire在同一台机器, 以下URL通常会起作用: &lt;a href="http://127.0.0.1:9090/"&gt;http://127.0.0.1:9090&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;管理控制台&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;在完成上述步骤之后, Openfire将被配置，你可以用基于web的管理控制台管理服务器. URL应该和你用来安装服务器用的那个一样，除非你在安装期间修改了那个端口.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;在Windows下运行Openfire&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;如果你使用了Openfire安装包, 在你的开始菜单里会有一个快捷方式来启动图形化启动器. 否则, 在你的 Openfire 安装位置的 bin/ 目录运行 openfire.exe . 在启动界面上有一个按钮，允许你自动打开你的web浏览器连接正确的URL来完成服务器的安装&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.igniterealtime.org/builds/openfire/docs/latest/documentation/images/launcher.png" alt="launcher.png" /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Windows服务&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;如果你正在Windows下运行Openfire, 你或许想在初始化安装之后把Openfire作为一个标准的Windows来运行. 如果你使用Windows安装包, 一个 openfire-service.exe 文件将会出现在安装目录下的 bin 目录. 你可以使用这个可执行文件来安装和控制Openfire服务.&lt;/p&gt;&lt;p&gt;从控制台窗口, 你可以运行以下命令:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;openfire-service /install&lt;/strong&gt;-- 安装服务.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;openfire-service /uninstall&lt;/strong&gt;-- 卸载服务.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;openfire-service /start&lt;/strong&gt;-- 启动服务.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;openfire-service /stop&lt;/strong&gt; -- 停止服务.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;img src="http://www.igniterealtime.org/builds/openfire/docs/latest/documentation/images/windows_service.png" alt="windows_service.png" /&gt;&lt;/p&gt;&lt;p&gt;你也可以在Windows控制面板使用服务工具来启动和停止服务.&lt;/p&gt;&lt;p&gt;注意: 那个图形化的启动器目前和Windows服务还不兼容. 如果你安装了服务, 你应该使用上述的服务控制台来控制服务而不是这个图形启动器.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;自定义参数&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;高级用户可能希望传递参数到Java虚拟机(VM)来定制Openfire的运行时环境. 你可以在你的Openfire安装目录下的 bin/ 目录建立 vmoptions 文件来做到这一点. 对于 Windows服务, 你要建一个新文本文件，名为 openfire-service.vmoptions. 每个给VM的参数应该独立占用文件中的一行. 例如, 设置最小堆栈大小为 512 MB 和最大 VM 堆栈为 1024 MB, 你可以用:&lt;/p&gt;-Xms512m&lt;br/&gt;-Xmx1024m&lt;p&gt;要新建参数给普通的启动器, 新建一个文件，名为 openfired.vmoptions (因为 openfire.exe 启动器会调用 openfired.exe 可执行文件来实际地启动服务器).&lt;/p&gt;&lt;p&gt;&lt;strong&gt;在Linux/Unix下运行Openfire&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;如果你正在一个 Red Hat 或类 Red Hat 的系统上运行 (CentOS, Fedora, 等等), 我们建议使用RPM，因为它包含一些标准的类Red Hat环境的自定义处理. 假设你使用了RPM, 你可以使用&lt;strong&gt;/etc/init.d/openfire&lt;/strong&gt;脚本启动和停止Openfire.&lt;/p&gt;# /etc/init.d/openfire&lt;br/&gt;Usage /etc/init.d/openfire {start|stop|restart|status|condrestart|reload}&lt;br/&gt;# /etc/init.d/openfire start&lt;br/&gt;Starting openfire:&lt;p&gt;如果你正在一个不同的Linux/Unix变种下运行, 并且/或你使用了tar.gz '安装包', 你可以使用你的Openfire安装目录下的 bin/openfire 脚本启动和停止Openfire:&lt;/p&gt;# ./openfire&lt;br/&gt;Usage: ./openfire {start|stop}&lt;br/&gt;# ./openfire start&lt;br/&gt;Starting openfire&lt;p&gt;如果你想把Openfire安装成一个服务, 在 bin/extra 目录提供了两个脚本:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;redhat-postinstall.sh -- 自动把Openfire安装为Red Hat的服务. 它会新建一个"jive"用户，然后拷贝 openfired 脚本到你的 init.d 目录. 这个脚本必须以root身份来运行. 更多信息请看脚本里的注释.&lt;/li&gt;&lt;li&gt;openfired -- 把Openfire当成服务运行的脚本. 你必须手工配置这个脚本. 更多信息请看脚本里的注释.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;如果你通过RPM安装，不推荐你使用这些脚本. RPM已经把这些脚本照顾得很好了.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;自定义参数&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;你可以在你的Openfire安装目录下的 bin/ 目录建立 vmoptions 文件来做到这一点. 对于 Windows服务, 你要建一个新文本文件，名为 openfire-service.vmoptions. 每个给VM的参数应该独立占用文件中的一行. 例如, 设置最小堆栈大小为 512 MB 和最大 VM 堆栈为 1024 MB, 你可以用:&lt;/p&gt;&lt;p&gt;高级用户可能希望传递参数到Java虚拟机(VM)来定制Openfire的运行时环境. 如果你是通过RPM安装的, 你可以编辑 /etc/sysconfig/openfire 文件并找到 OPENFIRE_OPTS 选项来定制它. 如果你通过.tar.gz安装的, 你要调整你的启动脚本来满足你的需要.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;插件&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;插件给Openfire增加了额外的特性和协议支持. 在安装完你的Openfire之后, 你可能想下载并安装插件以增进你的服务器. 插件可从 igniterealtime.org 的 plugins 页面下载或直接从内部的管理控制台直接下载.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;安装插件&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;如果你从Openfire内部的管理控制台下载了一个插件, 它将被自动安装. 如果你手工下载这个插件(打包成一个.jar文件), 你可以通过把插件文件拷贝到Openfire安装目录下的 plugins/ 目录来布署它. 一个插件监控器将自动解包这个插件到一个目录并安装这个插件到Openfire. 你也可以在管理控制台使用"上传插件"功能(在 插件 标签页) 来从本地文件系统装入一个插件到服务器.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;管理插件&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;插件可通过内部的Openfire管理控制台来管理. 你也可以在任何时候通过删除插件的JAR文件来手工删除一个插件(当你这么干了，Openfire将从内存自动移除这个插件并删除它的目录).&lt;/p&gt;&lt;img src="http://www.cnblogs.com/hoojo/aggbug/2498151.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hoojo/archive/2012/05/13/2498151.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hoojo/archive/2012/05/11/2495991.html</id><title type="text">Java 利用SWFUpload多文件上传 session 为空失效，不能验证的问题</title><summary type="text">我们都知道普通的文件上传是通过表单进行文件上传的，还不能达到异步上传的目的。通过使用某些技术手段，比如jquery form.js可以达到异步上传的目的，但最重要的问题在于，它不能够进行多个文件的上传。如果你要上传多个文件，必须一个一个地上传，同时还要在界面上处理当上传完一个文件之后，下一个文件上传框的问题。 现在我们有了一个更多的运行，即使用swfupload进行多文件异步上传。顾名思义，它是...</summary><published>2012-05-11T06:14:00Z</published><updated>2012-05-11T06:14:00Z</updated><author><name>hoojo</name><uri>http://www.cnblogs.com/hoojo/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hoojo/archive/2012/05/11/2495991.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hoojo/archive/2012/05/11/2495991.html"/><content type="html">&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 我们都知道普通的文件上传是通过表单进行文件上传的，还不能达到异步上传的目的。通过使用某些技术手段，比如jquery form.js可以达到异步上传的目的，但最重要的问题在于，它不能够进行多个文件的上传。如果你要上传多个文件，必须一个一个地上传，同时还要在界面上处理当上传完一个文件之后，下一个文件上传框的问题。&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 现在我们有了一个更多的运行，即使用swfupload进行多文件异步上传。顾名思义，它是一个flash的上传工具，但在界面上的表现形式使它和普通的html元素一样，没有复杂的展现，就一个普通的上传框，即可达到想要目的。  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 关于swfupload的使用这里自不必多，这里主要介绍的是解决在java web开发过程中经常碰到的验证失败的问题。这是因为flash在上传的时候使用的是和浏览器不同的会话，flash的SWFUpload上传利用socket套接字进行通信，所以导致session和原来上一次的会话不同，导致session丢失。这样就导致服务器在验证时自然被认为是新会话，从而验证不能通过，导致上传不能成功了。&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 解决问题的方法，就是让flash在上传文件的时候带上同在一个界面的session标识，这通常是修改其中的upload_url来达到我们的目的，修改如下所示：  &lt;div id="codeSnippetWrapper"&gt; &lt;div id="codeSnippet" style="padding-right: 0px; padding-left: 0px; font-size: 10pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;upload_url: &lt;span style="color: #006080"&gt;"/admin/infobuild/image/upload.action;jsessionid=${pageContext.session.id }"&lt;/span&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;上面这句话，必须放到jsp界面上，因为里面使用到了JavaWeb的语法，当然这可以修改，通过将&amp;lt;%=session.getId()%&amp;gt; 或 ${pageContext.session.id } 放到特殊的js变量中，可以达到隐藏变量的目的。比如如下的代码：&lt;div id="codeSnippetWrapper"&gt;&lt;div id="codeSnippet" style="padding-right: 0px; padding-left: 0px; font-size: 10pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&amp;lt;!-- 这句要房子jsp页面中的script脚本中，或是放在servlet的response.getWriter()流中的script脚本中；总之要在swfupload 的js引入之前执行 --&amp;gt;&lt;!--CRLF--&gt;window[&lt;span style="color: #006080"&gt;"sessionId"&lt;/span&gt;]=&lt;span style="color: #006080"&gt;"${pageContext.session.id}"&lt;/span&gt;; &lt;!--CRLF--&gt;&amp;lt;!-- 这句话就可以在引入的js中使用 --&amp;gt;&lt;!--CRLF--&gt;upload_url: Gtip.util.addContextPath(&lt;span style="color: #006080"&gt;"/admin/infobuild/image/upload.action;jsessionId"&lt;/span&gt;  + &lt;span style="color: #006080"&gt;"="&lt;/span&gt; + window[&lt;span style="color: #006080"&gt;"sessionId"&lt;/span&gt;]),&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上方案是解决在jsp页面中解决的取值java的变量值；&lt;/p&gt;&lt;p&gt;如上代码的第一句放到jsp文件中，如jsp的公共include文件中。下面一句就放到js文件中，如引入的upload.js文件当中。&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 但以上代码还存在一个问题，就是默认的sessionName问题。在tomcat或者其它j2ee容器，默认的sessionName也是 jsessionId。如果我们修改了sessionName如通过tomcat的server.xml修改session_cookie_name，这样默认的sessionName就是我们修改之后的了。解决此问题，需要再加一个参数设置才可，如下所示：&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div id="codeSnippetWrapper"&gt;&lt;div id="codeSnippet" style="padding-right: 0px; padding-left: 0px; font-size: 10pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&amp;lt;!-- 这三行放在include 导入的那个jsp的页面中 --&amp;gt;&lt;!--CRLF--&gt;window[&lt;span style="color: #006080"&gt;"contextPath"&lt;/span&gt;] = &lt;span style="color: #006080"&gt;"${pageContext.request.contextPath}"&lt;/span&gt;;&lt;!--CRLF--&gt;window[&lt;span style="color: #006080"&gt;"sessionId"&lt;/span&gt;] = &lt;span style="color: #006080"&gt;"${pageContext.session.id}"&lt;/span&gt;;&lt;!--CRLF--&gt;window[&lt;span style="color: #006080"&gt;"sessionName"&lt;/span&gt;] = &lt;span style="color: #006080"&gt;"jsessionId"&lt;/span&gt;;&lt;!--CRLF--&gt;&amp;nbsp;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;// js中使用jsp中设置的window的变量值&lt;/span&gt;&lt;!--CRLF--&gt;upload_url: addContextPath(&lt;span style="color: #006080"&gt;"/admin/infobuild/image/upload.action;"&lt;/span&gt; + window[&lt;span style="color: #006080"&gt;"sessionName"&lt;/span&gt;] + &lt;span style="color: #006080"&gt;"="&lt;/span&gt; + window[&lt;span style="color: #006080"&gt;"sessionId"&lt;/span&gt;])&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;以上代码的前三行放到公共的include.jsp中，最后一行放到公共的upload.js中。这样即可满足最终要求了。&lt;br&gt;不过有一点不好的即是，在部署环境中时，如果部署环境修改了sessionName，则必须在此include.jsp中修改一个具体的sessionName才可。&lt;p&gt;转载请标明出处:&lt;a href="http://www.iflym.com"&gt;i flym&lt;/a&gt;&lt;br&gt;本文地址:&lt;a href="http://www.iflym.com/index.php/code/201108190001.html"&gt;http://www.iflym.com/index.php/code/201108190001.html&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/hoojo/aggbug/2495991.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hoojo/archive/2012/05/11/2495991.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hoojo/archive/2012/03/17/2402848.html</id><title type="text">Ext [DDTabPanel、FoodImageField、ImageChooser]扩展组件</title><summary type="text">开发环境： System：Windows WebBrowser：IE6+、Firefox3+ JavaEE Server：tomcat5.0.2.8、tomcat6 IDE：eclipse、MyEclipse 6.5 开发依赖库： JavaEE5、ext 2.2.2 Email：hoojo_@126.com Blog：http://blog.csdn.net/IBM_hoojo http://ho...</summary><published>2012-03-16T19:05:00Z</published><updated>2012-03-16T19:05:00Z</updated><author><name>hoojo</name><uri>http://www.cnblogs.com/hoojo/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hoojo/archive/2012/03/17/2402848.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hoojo/archive/2012/03/17/2402848.html"/><content type="html">【摘要】开发环境： System：Windows WebBrowser：IE6+、Firefox3+ JavaEE Server：tomcat5.0.2.8、tomcat6 IDE：eclipse、MyEclipse 6.5 开发依赖库： JavaEE5、ext 2.2.2 Email：hoojo_@126.com Blog：http://blog.csdn.net/IBM_hoojo http://ho... &lt;a href="开发环境： System：Windows WebBrowser：IE6+、Firefox3+ JavaEE Server：tomcat5.0.2.8、tomcat6 IDE：eclipse、MyEclipse 6.5 开发依赖库： JavaEE5、ext 2.2.2 Email：hoojo_@126.com Blog：http://blog.csdn.net/IBM_hoojo http://ho..." target="_blank"&gt;http://www.cnblogs.com/hoojo/archive/2012/03/17/2402848.html&lt;/a&gt;&lt;img src="http://www.cnblogs.com/hoojo/aggbug/2402848.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hoojo/archive/2012/03/17/2402848.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hoojo/archive/2012/02/27/2369769.html</id><title type="text">ExtJS Form扩展组件[ColorFiled, DateTimeFiled, IconCombo, MultiComboBox, DynamicTreeCombox]</title><summary type="text">支持Form颜色选择组件、日期时间选择组件、带图标的下拉列表、多选下来列表、动态下拉列表树等组件 开发环境： System：Windows WebBrowser：IE6+、Firefox3+ JavaEE Server：tomcat5.0.2.8、tomcat6 IDE：eclipse、MyEclipse 8 开发依赖库： JavaEE5、ext 2.2.2 Email：hoojo...</summary><published>2012-02-27T06:11:00Z</published><updated>2012-02-27T06:11:00Z</updated><author><name>hoojo</name><uri>http://www.cnblogs.com/hoojo/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hoojo/archive/2012/02/27/2369769.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hoojo/archive/2012/02/27/2369769.html"/><content type="text">支持Form颜色选择组件、日期时间选择组件、带图标的下拉列表、多选下来列表、动态下拉列表树等组件 开发环境： System：Windows WebBrowser：IE6+、Firefox3+ JavaEE Server：tomcat5.0.2.8、tomcat6 IDE：eclipse、MyEclipse 8 开发依赖库： JavaEE5、ext 2.2.2 Email：hoojo...</content></entry><entry><id>http://www.cnblogs.com/hoojo/archive/2012/02/17/2355384.html</id><title type="text">NoSQL 之 Morphia 操作 MongoDB</title><summary type="text">上两篇文章:http://www.cnblogs.com/hoojo/archive/2011/06/01/2066426.html http://www.cnblogs.com/hoojo/archive/2011/06/02/2068665.html 介绍到了在MongoDB的控制台完成MongoDB的数据操作、以及通过Java MongoDB 的驱动完成在Java中对MongoDB的操作，...</summary><published>2012-02-17T02:25:00Z</published><updated>2012-02-17T02:25:00Z</updated><author><name>hoojo</name><uri>http://www.cnblogs.com/hoojo/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hoojo/archive/2012/02/17/2355384.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hoojo/archive/2012/02/17/2355384.html"/><content type="html">&lt;div id="codeSnippetWrapper"&gt;&amp;nbsp;&lt;/div&gt; &lt;p&gt;上两篇文章:&lt;a href="http://www.cnblogs.com/hoojo/archive/2011/06/01/2066426.html"&gt;http://www.cnblogs.com/hoojo/archive/2011/06/01/2066426.html&lt;/a&gt; &lt;p&gt;&lt;a href="http://www.cnblogs.com/hoojo/archive/2011/06/02/2068665.html"&gt;http://www.cnblogs.com/hoojo/archive/2011/06/02/2068665.html&lt;/a&gt; &lt;p&gt;介绍到了在MongoDB的控制台完成MongoDB的数据操作、以及通过Java MongoDB 的驱动完成在Java中对MongoDB的操作，通过前两篇文章我们对MongoDB有了全面、深刻的认识和理解。现在我们就看看利用Morphia库来操作MongoDB。 &lt;p&gt;开发环境： &lt;p&gt;System：Windows &lt;p&gt;IDE：eclipse、MyEclipse 8 &lt;p&gt;Database：mongoDB &lt;p&gt;开发依赖库： &lt;p&gt;JavaEE5、mongo-2.5.3.jar、junit-4.8.2.jar &lt;p&gt;Email：hoojo_@126.com &lt;p&gt;Blog：&lt;a href="http://blog.csdn.net/IBM_hoojo"&gt;http://blog.csdn.net/IBM_hoojo&lt;/a&gt; &lt;p&gt;&lt;a href="http://hoojo.cnblogs.com/"&gt;http://hoojo.cnblogs.com/&lt;/a&gt; &lt;p&gt;&lt;strong&gt;一、准备工作&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;1、 首先，下载mongoDB对Java支持的驱动包 &lt;p&gt;驱动包下载地址：&lt;a href="https://github.com/mongodb/mongo-java-driver/downloads"&gt;https://github.com/mongodb/mongo-java-driver/downloads&lt;/a&gt; &lt;p&gt;mongoDB对Java的相关支持、技术：&lt;a href="http://www.mongodb.org/display/DOCS/Java+Language+Center"&gt;http://www.mongodb.org/display/DOCS/Java+Language+Center&lt;/a&gt; &lt;p&gt;驱动源码下载：&lt;a href="https://download.github.com/mongodb-mongo-java-driver-r2.6.1-7-g6037357.zip"&gt;https://download.github.com/mongodb-mongo-java-driver-r2.6.1-7-g6037357.zip&lt;/a&gt; &lt;p&gt;在线查看源码：&lt;a href="https://github.com/mongodb/mongo-java-driver"&gt;https://github.com/mongodb/mongo-java-driver&lt;/a&gt; &lt;p&gt;Morphia jar包下载：&lt;a title="http://code.google.com/p/morphia/downloads/list" href="http://code.google.com/p/morphia/downloads/list"&gt;http://code.google.com/p/morphia/downloads/list&lt;/a&gt; &lt;p&gt;2、 下面建立一个JavaProject工程，导入下载下来的驱动包。即可在Java中使用Morphia，目录如下： &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hoojo/201202/201202171024233566.jpg"&gt;&lt;img title="clip_image002" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="235" alt="clip_image002" src="http://images.cnblogs.com/cnblogs_com/hoojo/201202/201202171024334656.jpg" width="244" border="0"&gt;&lt;/a&gt; &lt;p&gt;&lt;strong&gt;二、Java操作MongoDB示例&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;在本示例之前你需要启动mongod.exe的服务，在你安装mongoDB的目录中，找到mongod.exe启动服务后，下面的程序才能顺利执行； &lt;p&gt;1、 Java操作mongoDB数据库，操作索引 &lt;p&gt;Mongo mongo = new Mongo(); &lt;p&gt;这样就创建了一个MongoDB的数据库连接对象，它默认连接到当前机器的localhost地址，端口是27017。 &lt;p&gt;DB db = mongo.getDB(“test”); &lt;p&gt;这样就获得了一个test的数据库，如果mongoDB中没有创建这个数据库也是可以正常运行的。如果你&lt;a href="http://www.cnblogs.com/hoojo/archive/2011/06/01/2066426.html"&gt;读过上一篇文章&lt;/a&gt;就知道，mongoDB可以在没有创建这个数据库的情况下，完成数据的添加操作。当添加的时候，没有这个库，mongoDB会自动创建当前数据库。 &lt;p&gt;得到了db，下一步我们要获取一个“聚集集合DBCollection”，通过db对象的getCollection方法来完成。 &lt;p&gt;DBCollection users = db.getCollection("users"); &lt;p&gt;这样就获得了一个DBCollection，它相当于我们数据库的“表”。 &lt;p&gt;查询所有数据 &lt;p&gt;DBCursor cur = users.find(); &lt;p&gt;while (cur.hasNext()) { &lt;p&gt;System.out.println(cur.next()); &lt;p&gt;} &lt;p&gt;用BasicDBObjectBuilder，向users对象中添加数据 &lt;p&gt;user = BasicDBObjectBuilder.&lt;i&gt;start&lt;/i&gt;("id", 1546555) &lt;p&gt;.append("name", "jojo").add("address", "gz") &lt;p&gt;.append("email", "hoojo_@126.com") &lt;p&gt;.get(); &lt;p&gt;插入数据 &lt;p&gt;users.insert(user); &lt;p&gt;可以利用JSON工具来序列化对象数据 &lt;p&gt;JSON.&lt;i&gt;serialize&lt;/i&gt;(cur) &lt;p&gt;完整源码 &lt;div id="codeSnippetWrapper"&gt; &lt;div id="codeSnippet" style="padding-right: 0px; padding-left: 0px; font-size: 10pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;package&lt;/span&gt; com.hoo.test;&lt;!--CRLF--&gt;&amp;nbsp;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; java.net.UnknownHostException;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; com.hoo.entity.User;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; com.hoo.util.BasicDBObjectUtils;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; com.mongodb.BasicDBObjectBuilder;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; com.mongodb.DB;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; com.mongodb.DBCollection;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; com.mongodb.DBCursor;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; com.mongodb.DBObject;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; com.mongodb.Mongo;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; com.mongodb.MongoException;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; com.mongodb.util.JSON;&lt;!--CRLF--&gt;&amp;nbsp;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt; Mongo实例对象的相关方法测试&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @createDate 2011-5-24 下午02:42:29&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @file MongoDBTest.java&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @package com.hoo.test&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @project MongoDB&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @blog http://blog.csdn.net/IBM_hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @email hoojo_@126.com&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @version 1.0&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; */&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; MongoDBTest {&lt;!--CRLF--&gt;&amp;nbsp;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; main(String[] args) &lt;span style="color: #0000ff"&gt;throws&lt;/span&gt; UnknownHostException, MongoException {&lt;!--CRLF--&gt;        Mongo mg = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Mongo();&lt;!--CRLF--&gt;        &lt;!--CRLF--&gt;        System.out.println(&lt;span style="color: #006080"&gt;"查询所有的Database的名称"&lt;/span&gt;);&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (String name : mg.getDatabaseNames()) {&lt;!--CRLF--&gt;            System.out.println(&lt;span style="color: #006080"&gt;"dbName: "&lt;/span&gt; + name);&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;        &lt;!--CRLF--&gt;        System.out.println(&lt;span style="color: #006080"&gt;"查询test库中的所有collection集合（表）名称"&lt;/span&gt;);&lt;!--CRLF--&gt;        DB db = mg.getDB(&lt;span style="color: #006080"&gt;"test"&lt;/span&gt;);&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (String name : db.getCollectionNames()) {&lt;!--CRLF--&gt;            System.out.println(&lt;span style="color: #006080"&gt;"collectionName: "&lt;/span&gt; + name);&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;        &lt;!--CRLF--&gt;        System.out.println(&lt;span style="color: #006080"&gt;"添加测试数据"&lt;/span&gt;);&lt;!--CRLF--&gt;        DBCollection users = db.getCollection(&lt;span style="color: #006080"&gt;"users"&lt;/span&gt;);&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;try&lt;/span&gt; {&lt;!--CRLF--&gt;            &lt;span style="color: #008000"&gt;// 用自定义BasicDBObjectUtils工具类，将User Enity对象转换成DBObject&lt;/span&gt;&lt;!--CRLF--&gt;            DBObject user = BasicDBObjectUtils.castModel2DBObject(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; User(&lt;span style="color: #006080"&gt;"345567"&lt;/span&gt;, &lt;span style="color: #006080"&gt;"jack"&lt;/span&gt;, 22, &lt;span style="color: #006080"&gt;"beijin"&lt;/span&gt;));&lt;!--CRLF--&gt;            users.insert(user);&lt;!--CRLF--&gt;            &lt;span style="color: #008000"&gt;// 用BasicDBObjectBuilder构建一个DBObject对象&lt;/span&gt;&lt;!--CRLF--&gt;            user = BasicDBObjectBuilder.start(&lt;span style="color: #006080"&gt;"id"&lt;/span&gt;, 1546555).append(&lt;span style="color: #006080"&gt;"name"&lt;/span&gt;, &lt;span style="color: #006080"&gt;"jojo"&lt;/span&gt;).add(&lt;span style="color: #006080"&gt;"address"&lt;/span&gt;, &lt;span style="color: #006080"&gt;"gz"&lt;/span&gt;).append(&lt;span style="color: #006080"&gt;"email"&lt;/span&gt;, &lt;span style="color: #006080"&gt;"hoojo_@126.com"&lt;/span&gt;).get();&lt;!--CRLF--&gt;            users.insert(user);&lt;!--CRLF--&gt;        } &lt;span style="color: #0000ff"&gt;catch&lt;/span&gt; (Exception e) {&lt;!--CRLF--&gt;            e.printStackTrace();&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;        &lt;!--CRLF--&gt;        System.out.println(&lt;span style="color: #006080"&gt;"游标查询所有users集合数据"&lt;/span&gt;);&lt;!--CRLF--&gt;        DBCursor cur = users.find();&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;while&lt;/span&gt; (cur.hasNext()) {&lt;!--CRLF--&gt;            System.out.println(cur.next());&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;        System.out.println(&lt;span style="color: #006080"&gt;"查询游标相关内容"&lt;/span&gt;);&lt;!--CRLF--&gt;        System.out.println(cur.count());&lt;!--CRLF--&gt;        System.out.println(cur.getCursorId());&lt;!--CRLF--&gt;        System.out.println(cur.getOptions());&lt;!--CRLF--&gt;        System.out.println(cur.getQuery());&lt;!--CRLF--&gt;        System.out.println(cur.getSizes().listIterator());&lt;!--CRLF--&gt;        &lt;!--CRLF--&gt;        System.out.println(cur.itcount());&lt;!--CRLF--&gt;        &lt;span style="color: #008000"&gt;//System.out.println(cur.length());&lt;/span&gt;&lt;!--CRLF--&gt;        System.out.println(cur.size());&lt;!--CRLF--&gt;        System.out.println(cur.numGetMores());&lt;!--CRLF--&gt;        System.out.println(cur.curr());&lt;!--CRLF--&gt;        &lt;span style="color: #008000"&gt;//System.out.println(cur.toArray().get(0));&lt;/span&gt;&lt;!--CRLF--&gt;        &lt;!--CRLF--&gt;        System.out.println(&lt;span style="color: #006080"&gt;"显示游标查询到的所有内容： "&lt;/span&gt; + JSON.serialize(cur));&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;}&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;工具类，将带有getter、setter方法的Java类序列化成DBObject对象&lt;div id="codeSnippetWrapper"&gt;&lt;div id="codeSnippet" style="padding-right: 0px; padding-left: 0px; font-size: 10pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;package&lt;/span&gt; com.hoo.util;&lt;!--CRLF--&gt;&amp;nbsp;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; java.lang.reflect.Method;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; com.mongodb.BasicDBObject;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; com.mongodb.DBObject;&lt;!--CRLF--&gt;&amp;nbsp;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt; 将Entity/Model转换成DBObject&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @createDate 2011-5-30下午01:53:08&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @file BasicDBObjectUtil.java&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @package com.hoo.util&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @project MongoDB&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @blog http://blog.csdn.net/IBM_hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @email hoojo_@126.com&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @version 1.0&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; */&lt;/span&gt;&lt;!--CRLF--&gt;publicclass BasicDBObjectUtils {&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt;&amp;lt;T&amp;gt; DBObject castModel2DBObject(T entity) &lt;span style="color: #0000ff"&gt;throws&lt;/span&gt; Exception {&lt;!--CRLF--&gt;        Method[] method =  entity.getClass().getMethods();&lt;!--CRLF--&gt;        &lt;!--CRLF--&gt;        DBObject dbObject = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; BasicDBObject();&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (Method m : method) {&lt;!--CRLF--&gt;            &lt;span style="color: #008000"&gt;//System.out.println(m.getName());&lt;/span&gt;&lt;!--CRLF--&gt;            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (m.getName().startsWith(&lt;span style="color: #006080"&gt;"get"&lt;/span&gt;)) {&lt;!--CRLF--&gt;                String name = m.getName().replace(&lt;span style="color: #006080"&gt;"get"&lt;/span&gt;, &lt;span style="color: #006080"&gt;""&lt;/span&gt;);&lt;!--CRLF--&gt;                &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (Method m2 : method) {&lt;!--CRLF--&gt;                    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (m2.getName().equals(&lt;span style="color: #006080"&gt;"set"&lt;/span&gt; + name)) {&lt;!--CRLF--&gt;                        name = name.substring(0, 1).toLowerCase() + name.substring(1);&lt;!--CRLF--&gt;                        Object returnVal = m.invoke(entity, &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Object[] {});&lt;!--CRLF--&gt;                        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (returnVal != null) {&lt;!--CRLF--&gt;                            &lt;span style="color: #008000"&gt;//System.out.println(name + " : " + m.invoke(shipping, new Object[] {}));&lt;/span&gt;&lt;!--CRLF--&gt;                            dbObject.put(name, returnVal);&lt;!--CRLF--&gt;                        }&lt;!--CRLF--&gt;                    }&lt;!--CRLF--&gt;                }&lt;!--CRLF--&gt;            }&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;        System.out.println(&lt;span style="color: #006080"&gt;"dbObject: "&lt;/span&gt; + dbObject);&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; dbObject;&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;}&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;2、 完成索引操作，首先建立一个MongoDB4IndexTest.java，基本测试代码如下：&lt;div id="codeSnippetWrapper"&gt;&lt;div id="codeSnippet" style="padding-right: 0px; padding-left: 0px; font-size: 10pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;package&lt;/span&gt; com.hoo.test;&lt;!--CRLF--&gt;&amp;nbsp;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; java.net.UnknownHostException;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; java.util.ArrayList;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; java.util.List;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; org.bson.types.ObjectId;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; org.junit.After;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; org.junit.Before;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; org.junit.Test;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; com.mongodb.BasicDBObject;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; com.mongodb.Bytes;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; com.mongodb.DB;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; com.mongodb.DBCollection;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; com.mongodb.DBCursor;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; com.mongodb.DBObject;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; com.mongodb.Mongo;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; com.mongodb.MongoException;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; com.mongodb.QueryOperators;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; com.mongodb.util.JSON;&lt;!--CRLF--&gt;&amp;nbsp;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt; 实现MongoDB的Index操作&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @createDate 2011-6-2 下午03:21:23&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @file MongoDB4IndexTest.java&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @package com.hoo.test&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @project MongoDB&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @blog http://blog.csdn.net/IBM_hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @email hoojo_@126.com&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @version 1.0&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; */&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; MongoDB4IndexTest {&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; Mongo mg = null;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; DB db;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; DBCollection users;&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    @Before&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; init() {&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;try&lt;/span&gt; {&lt;!--CRLF--&gt;            mg = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Mongo();&lt;!--CRLF--&gt;            &lt;span style="color: #008000"&gt;//mg = new Mongo("localhost", 27017);&lt;/span&gt;&lt;!--CRLF--&gt;        } &lt;span style="color: #0000ff"&gt;catch&lt;/span&gt; (UnknownHostException e) {&lt;!--CRLF--&gt;            e.printStackTrace();&lt;!--CRLF--&gt;        } &lt;span style="color: #0000ff"&gt;catch&lt;/span&gt; (MongoException e) {&lt;!--CRLF--&gt;            e.printStackTrace();&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;        &lt;span style="color: #008000"&gt;//获取temp DB；如果默认没有创建，mongodb会自动创建&lt;/span&gt;&lt;!--CRLF--&gt;        db = mg.getDB(&lt;span style="color: #006080"&gt;"temp"&lt;/span&gt;);&lt;!--CRLF--&gt;        &lt;span style="color: #008000"&gt;//获取users DBCollection；如果默认没有创建，mongodb会自动创建&lt;/span&gt;&lt;!--CRLF--&gt;        users = db.getCollection(&lt;span style="color: #006080"&gt;"users"&lt;/span&gt;);&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    @After&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; destory() {&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (mg != null)&lt;!--CRLF--&gt;            mg.close();&lt;!--CRLF--&gt;        mg = null;&lt;!--CRLF--&gt;        db = null;&lt;!--CRLF--&gt;        users = null;&lt;!--CRLF--&gt;        System.gc();&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; print(Object o) {&lt;!--CRLF--&gt;        System.out.println(o);&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;}&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;3、 下面完成对象Collection的index的操作&lt;div id="codeSnippetWrapper"&gt;&lt;div id="codeSnippet" style="padding-right: 0px; padding-left: 0px; font-size: 10pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt; 测试Collection的index相关操作&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @createDate 2012-2-16 下午08:32:26&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; */&lt;/span&gt;&lt;!--CRLF--&gt;@Test&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; testIndex() {&lt;!--CRLF--&gt;    query();&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (DBObject index : coll.getIndexInfo()) {&lt;!--CRLF--&gt;        print(&lt;span style="color: #006080"&gt;"IndexInfo: "&lt;/span&gt; + index);&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    coll.dropIndexes();&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;//创建索引&lt;/span&gt;&lt;!--CRLF--&gt;    coll.createIndex(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; BasicDBObject(&lt;span style="color: #006080"&gt;"name"&lt;/span&gt;, &lt;span style="color: #006080"&gt;"idx_name"&lt;/span&gt;));&lt;!--CRLF--&gt;    print(coll.findOne(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; BasicDBObject(&lt;span style="color: #006080"&gt;"name"&lt;/span&gt;, &lt;span style="color: #006080"&gt;"haha"&lt;/span&gt;)));&lt;!--CRLF--&gt;    coll.createIndex(coll.findOne(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; BasicDBObject(&lt;span style="color: #006080"&gt;"name"&lt;/span&gt;, &lt;span style="color: #006080"&gt;"haha"&lt;/span&gt;)));&lt;!--CRLF--&gt;    DBObject o = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; BasicDBObject(&lt;span style="color: #006080"&gt;"unique"&lt;/span&gt;, true);&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;//coll.createIndex(coll.findOne(), o);&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;// 修改索引，如果存在就修改不存在就添加&lt;/span&gt;&lt;!--CRLF--&gt;    coll.ensureIndex(o);&lt;!--CRLF--&gt;    coll.ensureIndex(&lt;span style="color: #006080"&gt;"age_1"&lt;/span&gt;);&lt;!--CRLF--&gt;    coll.ensureIndex(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; BasicDBObject(&lt;span style="color: #006080"&gt;"age3_1"&lt;/span&gt;, 6), &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; BasicDBObject(&lt;span style="color: #006080"&gt;"ts"&lt;/span&gt;, -1));&lt;!--CRLF--&gt;    coll.ensureIndex(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; BasicDBObject(&lt;span style="color: #006080"&gt;"age_2"&lt;/span&gt;, 1), &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; BasicDBObject( &lt;span style="color: #006080"&gt;"ts"&lt;/span&gt; , 1 ));&lt;!--CRLF--&gt;    coll.ensureIndex(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; BasicDBObject(&lt;span style="color: #006080"&gt;"password"&lt;/span&gt;, 2), &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; BasicDBObject( &lt;span style="color: #006080"&gt;"z"&lt;/span&gt; , &lt;span style="color: #006080"&gt;"idx"&lt;/span&gt; ));&lt;!--CRLF--&gt;    coll.ensureIndex(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; BasicDBObject(&lt;span style="color: #006080"&gt;"password"&lt;/span&gt;, 1), &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; BasicDBObject( &lt;span style="color: #006080"&gt;"etc"&lt;/span&gt; , &lt;span style="color: #006080"&gt;"idx"&lt;/span&gt; ));&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;// 创建唯一索引&lt;/span&gt;&lt;!--CRLF--&gt;    coll.ensureIndex(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; BasicDBObject(&lt;span style="color: #006080"&gt;"emial"&lt;/span&gt;, 2), &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; BasicDBObject(&lt;span style="color: #006080"&gt;"unique"&lt;/span&gt;, false));&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;// 创建索引，指定索引名称default_index&lt;/span&gt;&lt;!--CRLF--&gt;    coll.ensureIndex(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; BasicDBObject(&lt;span style="color: #006080"&gt;"address"&lt;/span&gt;, 1), &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; BasicDBObject( &lt;span style="color: #006080"&gt;"name"&lt;/span&gt; , &lt;span style="color: #006080"&gt;"default_index"&lt;/span&gt;));&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;// 创建索引对象，索引名称user_index&lt;/span&gt;&lt;!--CRLF--&gt;    coll.ensureIndex(coll.findOne(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; BasicDBObject(&lt;span style="color: #006080"&gt;"name"&lt;/span&gt;, &lt;span style="color: #006080"&gt;"hoho"&lt;/span&gt;)), &lt;span style="color: #006080"&gt;"user_index"&lt;/span&gt;);&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;// 唯一索引&lt;/span&gt;&lt;!--CRLF--&gt;    coll.ensureIndex(coll.findOne(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; BasicDBObject(&lt;span style="color: #006080"&gt;"name"&lt;/span&gt;, &lt;span style="color: #006080"&gt;"hehe"&lt;/span&gt;)), &lt;span style="color: #006080"&gt;"users_index_unique"&lt;/span&gt;, true);&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;// 查询所有索引&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (DBObject index : coll.getIndexInfo()) {&lt;!--CRLF--&gt;        print(&lt;span style="color: #006080"&gt;"IndexInfo: "&lt;/span&gt; + index);&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    print(DBCollection.genIndexName(coll.findOne()));&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;//coll.dropIndex(coll.findOne());&lt;/span&gt;&lt;!--CRLF--&gt;    print(DBCollection.genIndexName(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; BasicDBObject(&lt;span style="color: #006080"&gt;"password"&lt;/span&gt;, 2)));&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;//coll.dropIndex(DBCollection.genIndexName(new BasicDBObject("password", 2)));&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;//coll.dropIndexes();&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;//coll.dropIndexes("assword_1");&lt;/span&gt;&lt;!--CRLF--&gt;}&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;三、Morphia基本操作&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;1、 morphia可以利用annotation对JavaEntity进行注解，那样我们就可以用morphia操作JavaEntity对象&lt;div id="codeSnippetWrapper"&gt;&lt;div id="codeSnippet" style="padding-right: 0px; padding-left: 0px; font-size: 10pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;package&lt;/span&gt; com.hoo.entity;&lt;!--CRLF--&gt;&amp;nbsp;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; com.google.code.morphia.annotations.Entity;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; com.google.code.morphia.annotations.Id;&lt;!--CRLF--&gt;&amp;nbsp;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt; JavaEntity对象&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @createDate 2011-5-31上午11:45:21&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @file User.java&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @package com.hoo.entity&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @project Morphia&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @blog http://blog.csdn.net/IBM_hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @email hoojo_@126.com&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @version 1.0&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; */&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;//利用morphia的annotation进行注解&lt;/span&gt;&lt;!--CRLF--&gt;@Entity&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; User {&lt;!--CRLF--&gt;    @Id&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;long&lt;/span&gt; id;&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; String name;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;boolean&lt;/span&gt; sex;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; age;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; String address;&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; User() {&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; User(&lt;span style="color: #0000ff"&gt;long&lt;/span&gt; id, String name, &lt;span style="color: #0000ff"&gt;boolean&lt;/span&gt; sex, &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; age, String address) {&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;super&lt;/span&gt;();&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.id = id;&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.name = name;&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.sex = sex;&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.age = age;&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.address = address;&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;//getter、setter&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    @Override&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; String toString() {&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.id + &lt;span style="color: #006080"&gt;"#"&lt;/span&gt; + &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.name + &lt;span style="color: #006080"&gt;"#"&lt;/span&gt; + &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.age + &lt;span style="color: #006080"&gt;"#"&lt;/span&gt; + &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.sex + &lt;span style="color: #006080"&gt;"#"&lt;/span&gt; + &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.address;&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;}&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;2、 对Morphia对象一些简单的使用，看看该对象提供了哪些基本的操作方法&lt;div id="codeSnippetWrapper"&gt;&lt;div id="codeSnippet" style="padding-right: 0px; padding-left: 0px; font-size: 10pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;package&lt;/span&gt; com.hoo.test.morphia;&lt;!--CRLF--&gt;&amp;nbsp;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; java.net.UnknownHostException;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; org.junit.After;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; org.junit.Before;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; org.junit.Test;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; com.google.code.morphia.Datastore;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; com.google.code.morphia.EntityInterceptor;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; com.google.code.morphia.Morphia;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; com.google.code.morphia.mapping.MappedClass;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; com.google.code.morphia.mapping.Mapper;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; com.google.code.morphia.mapping.cache.EntityCache;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; com.hoo.entity.User;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; com.mongodb.BasicDBObjectBuilder;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; com.mongodb.Mongo;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; com.mongodb.MongoException;&lt;!--CRLF--&gt;&amp;nbsp;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt; morphia对象的简单测试&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @createDate 2011-5-31上午11:30:20&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @file MorphiaTest.java&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @package com.hoo.test&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @project Morphia&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @blog http://blog.csdn.net/IBM_hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @email hoojo_@126.com&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @version 1.0&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; */&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; MorphiaTest {&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; Mongo mongo;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; Morphia morphia;&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    @Before&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; init() {&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;try&lt;/span&gt; {&lt;!--CRLF--&gt;            mongo = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Mongo();&lt;!--CRLF--&gt;        } &lt;span style="color: #0000ff"&gt;catch&lt;/span&gt; (UnknownHostException e) {&lt;!--CRLF--&gt;            e.printStackTrace();&lt;!--CRLF--&gt;        } &lt;span style="color: #0000ff"&gt;catch&lt;/span&gt; (MongoException e) {&lt;!--CRLF--&gt;            e.printStackTrace();&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;        morphia = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Morphia();&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; print(Object o) {&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (o != null) {&lt;!--CRLF--&gt;            System.out.println(o.toString());&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt; morphia对象的简单测试&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     */&lt;/span&gt;&lt;!--CRLF--&gt;    @SuppressWarnings(&lt;span style="color: #006080"&gt;"deprecation"&lt;/span&gt;)&lt;!--CRLF--&gt;    @Test&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; testMorphia() {&lt;!--CRLF--&gt;        &lt;span style="color: #008000"&gt;// 创建一个Datastore，过时的方法不推荐使用&lt;/span&gt;&lt;!--CRLF--&gt;        Datastore ds = morphia.createDatastore(&lt;span style="color: #006080"&gt;"myTestDB"&lt;/span&gt;);&lt;!--CRLF--&gt;        print(&lt;span style="color: #006080"&gt;"createDatastore: "&lt;/span&gt; + ds);&lt;!--CRLF--&gt;        &lt;span style="color: #008000"&gt;// 创建ds&lt;/span&gt;&lt;!--CRLF--&gt;        ds = morphia.createDatastore(mongo, &lt;span style="color: #006080"&gt;"myTestDB"&lt;/span&gt;);&lt;!--CRLF--&gt;        print(&lt;span style="color: #006080"&gt;"createDatastore: "&lt;/span&gt; + ds);&lt;!--CRLF--&gt;        &lt;span style="color: #008000"&gt;// 创建一个带用户名、密码的ds&lt;/span&gt;&lt;!--CRLF--&gt;        &lt;span style="color: #008000"&gt;//ds = morphia.createDatastore(mongo, "myTestDB", "admin", new char[] { '1', '2', '3', '4', '5', '6' });&lt;/span&gt;&lt;!--CRLF--&gt;        &lt;!--CRLF--&gt;        &lt;span style="color: #008000"&gt;// 设置操作资源对象，这里设置User.class 就可以完成对User的一系列操作&lt;/span&gt;&lt;!--CRLF--&gt;        &lt;span style="color: #008000"&gt;//morphia.map(User.class);&lt;/span&gt;&lt;!--CRLF--&gt;        &lt;span style="color: #008000"&gt;//morphia.mapPackage("com.hoo.entity");//会把整个包下面的类都加载进来&lt;/span&gt;&lt;!--CRLF--&gt;        &lt;span style="color: #008000"&gt;// 将对象转成DBObject&lt;/span&gt;&lt;!--CRLF--&gt;        print(&lt;span style="color: #006080"&gt;"toDBObject: "&lt;/span&gt; + morphia.toDBObject(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; User(System.currentTimeMillis(), &lt;span style="color: #006080"&gt;"jackson"&lt;/span&gt;, true, 22, null)));&lt;!--CRLF--&gt;        &lt;span style="color: #008000"&gt;// 将参数2转换成参数1的类型&lt;/span&gt;&lt;!--CRLF--&gt;        print(&lt;span style="color: #006080"&gt;"fromDBObject: "&lt;/span&gt; + morphia.fromDBObject(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;, BasicDBObjectBuilder.start(&lt;span style="color: #006080"&gt;"sex"&lt;/span&gt;, true).get()));&lt;!--CRLF--&gt;        print(&lt;span style="color: #006080"&gt;"getMapper: "&lt;/span&gt; + morphia.getMapper());&lt;!--CRLF--&gt;        print(&lt;span style="color: #006080"&gt;"isMapped: "&lt;/span&gt; + morphia.isMapped(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;));&lt;!--CRLF--&gt;        &lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt; 对Mapper对象相关操作&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @createDate 2012-2-16下午10:20:38&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     */&lt;/span&gt;&lt;!--CRLF--&gt;    @Test&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; testMapper() {&lt;!--CRLF--&gt;        Mapper mapper = morphia.getMapper();&lt;!--CRLF--&gt;        &lt;span style="color: #008000"&gt;// 添加对象映射&lt;/span&gt;&lt;!--CRLF--&gt;        print(&lt;span style="color: #006080"&gt;"addMappedClass: "&lt;/span&gt; + mapper.addMappedClass(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;));&lt;!--CRLF--&gt;        &lt;span style="color: #008000"&gt;//print(mapper.addMappedClass(mapper.addMappedClass(User.class));&lt;/span&gt;&lt;!--CRLF--&gt;        &lt;!--CRLF--&gt;        &lt;span style="color: #008000"&gt;// 创建实体缓存&lt;/span&gt;&lt;!--CRLF--&gt;        print(&lt;span style="color: #006080"&gt;"createEntityCache: "&lt;/span&gt; + mapper.createEntityCache());&lt;!--CRLF--&gt;        print(mapper.getCollectionName(&lt;span style="color: #006080"&gt;"myTestDB"&lt;/span&gt;));&lt;!--CRLF--&gt;        print(mapper.getConverters());&lt;!--CRLF--&gt;        User user = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; User(System.currentTimeMillis(), &lt;span style="color: #006080"&gt;"jackson"&lt;/span&gt;, true, 22, null);&lt;!--CRLF--&gt;        user.setId(1306814012734L);&lt;!--CRLF--&gt;        print(mapper.getId(user));&lt;!--CRLF--&gt;        &lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (EntityInterceptor ei : mapper.getInterceptors()) {&lt;!--CRLF--&gt;            System.out.println(&lt;span style="color: #006080"&gt;"EntityInterceptor: "&lt;/span&gt; + ei);&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;&amp;nbsp;&lt;!--CRLF--&gt;        &lt;span style="color: #008000"&gt;// 查询主键&lt;/span&gt;&lt;!--CRLF--&gt;        print(&lt;span style="color: #006080"&gt;"getKey: "&lt;/span&gt; + mapper.getKey(user));&lt;!--CRLF--&gt;        &lt;span style="color: #008000"&gt;// 所有已经映射的class&lt;/span&gt;&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (MappedClass mc : mapper.getMappedClasses()) {&lt;!--CRLF--&gt;            System.out.println(&lt;span style="color: #006080"&gt;"getMappedClasses: "&lt;/span&gt; + mc);&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;        &lt;!--CRLF--&gt;        print(&lt;span style="color: #006080"&gt;"mcMap: "&lt;/span&gt; + mapper.getMCMap());&lt;!--CRLF--&gt;        &lt;!--CRLF--&gt;        print(&lt;span style="color: #006080"&gt;"getOptions: "&lt;/span&gt; + mapper.getOptions());&lt;!--CRLF--&gt;        print(&lt;span style="color: #006080"&gt;"keyToRef: "&lt;/span&gt; + mapper.keyToRef(mapper.getKey(user)));&lt;!--CRLF--&gt;        print(&lt;span style="color: #006080"&gt;"refToKey: "&lt;/span&gt; + mapper.refToKey(mapper.keyToRef(mapper.getKey(user))));&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt; 实体缓存&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     */&lt;/span&gt;&lt;!--CRLF--&gt;    @Test&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; testEntityCache() {&lt;!--CRLF--&gt;        EntityCache ec = morphia.getMapper().createEntityCache();&lt;!--CRLF--&gt;        print(&lt;span style="color: #006080"&gt;"EntityCache: "&lt;/span&gt; + ec);&lt;!--CRLF--&gt;        Datastore ds = morphia.createDatastore(mongo, &lt;span style="color: #006080"&gt;"myTestDB"&lt;/span&gt;);&lt;!--CRLF--&gt;        User user = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; User(System.currentTimeMillis(), &lt;span style="color: #006080"&gt;"jackson"&lt;/span&gt;, true, 22, null);&lt;!--CRLF--&gt;        user.setId(1306814012734L);&lt;!--CRLF--&gt;        &lt;!--CRLF--&gt;        &lt;span style="color: #008000"&gt;// 添加实体&lt;/span&gt;&lt;!--CRLF--&gt;        ec.putEntity(ds.getKey(user), user);&lt;!--CRLF--&gt;        &lt;span style="color: #008000"&gt;// 代理&lt;/span&gt;&lt;!--CRLF--&gt;        ec.putProxy(ds.getKey(user), user);&lt;!--CRLF--&gt;        &lt;!--CRLF--&gt;        print(&lt;span style="color: #006080"&gt;"getKey: "&lt;/span&gt; + ds.getKey(user));&lt;!--CRLF--&gt;        print(&lt;span style="color: #006080"&gt;"getProxy: "&lt;/span&gt; + ec.getProxy(ds.getKey(user)));&lt;!--CRLF--&gt;        print(&lt;span style="color: #006080"&gt;"getEntity: "&lt;/span&gt; + ec.getEntity(ds.getKey(user)));&lt;!--CRLF--&gt;        &lt;!--CRLF--&gt;        print(ec.exists(ds.getKey(user)));&lt;!--CRLF--&gt;        &lt;!--CRLF--&gt;        print(&lt;span style="color: #006080"&gt;"stats: "&lt;/span&gt; + ec.stats());&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    @After&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; destory() {&lt;!--CRLF--&gt;        mongo = null;&lt;!--CRLF--&gt;        morphia = null;&lt;!--CRLF--&gt;        System.gc();&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;}&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;四、利用Morphia完成对Datastore对象的CRUD操作&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;1、 首先添加如下准备代码，随后的方法直接添加到该文件中即可&lt;div id="codeSnippetWrapper"&gt;&lt;div id="codeSnippet" style="padding-right: 0px; padding-left: 0px; font-size: 10pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;package&lt;/span&gt; com.hoo.test.ds;&lt;!--CRLF--&gt;&amp;nbsp;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; java.net.UnknownHostException;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; java.util.ArrayList;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; java.util.List;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; org.junit.After;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; org.junit.Before;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; org.junit.Test;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; com.google.code.morphia.Datastore;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; com.google.code.morphia.Key;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; com.google.code.morphia.Morphia;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; com.google.code.morphia.query.UpdateOperations;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; com.hoo.entity.User;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; com.mongodb.Mongo;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; com.mongodb.MongoException;&lt;!--CRLF--&gt;&amp;nbsp;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt; Datastore增删改查操作&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @createDate 2011-5-31下午06:29:04&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @fileDatastore DatastoreTest.java&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @package com.hoo.test.ds&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @project Morphia&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @blog http://blog.csdn.net/IBM_hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @email hoojo_@126.com&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @version 1.0&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; */&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; DatastoreTest {&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; Mongo mongo;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; Morphia morphia;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; Datastore ds;&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    @Before&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; init() {&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;try&lt;/span&gt; {&lt;!--CRLF--&gt;            mongo = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Mongo();&lt;!--CRLF--&gt;        } &lt;span style="color: #0000ff"&gt;catch&lt;/span&gt; (UnknownHostException e) {&lt;!--CRLF--&gt;            e.printStackTrace();&lt;!--CRLF--&gt;        } &lt;span style="color: #0000ff"&gt;catch&lt;/span&gt; (MongoException e) {&lt;!--CRLF--&gt;            e.printStackTrace();&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;        morphia = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Morphia();&lt;!--CRLF--&gt;        morphia.map(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;);&lt;!--CRLF--&gt;        ds = morphia.createDatastore(mongo, &lt;span style="color: #006080"&gt;"temp"&lt;/span&gt;);&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; print(Object o) {&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (o != null) {&lt;!--CRLF--&gt;            System.out.println(o.toString());&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;    * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt; 查询所有&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;    * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;    * @createDate 2012-2-16 下午10:36:13&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;    */&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; query() {&lt;!--CRLF--&gt;        Iterable&amp;lt;User&amp;gt; it = ds.createQuery(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;).fetch();&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;while&lt;/span&gt;(it.iterator().hasNext()) {&lt;!--CRLF--&gt;            print(&lt;span style="color: #006080"&gt;"fetch: "&lt;/span&gt; + it.iterator().next());&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    @After&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; destory() {&lt;!--CRLF--&gt;        mongo = null;&lt;!--CRLF--&gt;        morphia = null;&lt;!--CRLF--&gt;        ds = null;&lt;!--CRLF--&gt;        System.gc();&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;}&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;2、 增删改CUD操作&lt;div id="codeSnippetWrapper"&gt;&lt;div id="codeSnippet" style="padding-right: 0px; padding-left: 0px; font-size: 10pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt; CUD增删改&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @createDate 2012-2-16 下午10:46:08&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; */&lt;/span&gt;&lt;!--CRLF--&gt;@Test&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; testCUD() {&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;// 添加测试数据&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; i = 0; i &amp;lt; 50; i++) {&lt;!--CRLF--&gt;        User u = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; User(System.currentTimeMillis() + i, &lt;span style="color: #006080"&gt;"test-"&lt;/span&gt; + i, ((i % 2 == 0)? true: false), 18 + i, &lt;span style="color: #006080"&gt;"china-gz#"&lt;/span&gt; + i);&lt;!--CRLF--&gt;        print(ds.save(u));&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;//ds.delete(ds.createQuery(User.class));&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    List&amp;lt;User&amp;gt; users = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ArrayList&amp;lt;User&amp;gt;();&lt;!--CRLF--&gt;    users.add(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; User(1306907246518L, &lt;span style="color: #006080"&gt;"zhangsan"&lt;/span&gt;, true, 22, &lt;span style="color: #006080"&gt;"china-gz"&lt;/span&gt;));&lt;!--CRLF--&gt;    User user = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; User(System.currentTimeMillis() + 3, &lt;span style="color: #006080"&gt;"zhaoliu"&lt;/span&gt;, true, 29, &lt;span style="color: #006080"&gt;"china-beijin"&lt;/span&gt;);&lt;!--CRLF--&gt;    users.add(user);&lt;!--CRLF--&gt;    users.add(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; User(System.currentTimeMillis() + 6, &lt;span style="color: #006080"&gt;"wangwu"&lt;/span&gt;, true, 24, &lt;span style="color: #006080"&gt;"china-shanghai"&lt;/span&gt;));&lt;!--CRLF--&gt;    users.add(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; User(System.currentTimeMillis() + 9, &lt;span style="color: #006080"&gt;"lisi"&lt;/span&gt;, true, 26, &lt;span style="color: #006080"&gt;"china-wuhan"&lt;/span&gt;));&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;//添加集合&lt;/span&gt;&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"save: "&lt;/span&gt; + ds.save(users));&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;//添加数组&lt;/span&gt;&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"save: "&lt;/span&gt; + ds.save(users.toArray()));&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.query();&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"getKey: "&lt;/span&gt; + ds.find(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;, &lt;span style="color: #006080"&gt;"id"&lt;/span&gt;, 1306907246518L).getKey());&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;//修改操作&lt;/span&gt;&lt;!--CRLF--&gt;    UpdateOperations&amp;lt;User&amp;gt; uo = ds.createUpdateOperations(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;);&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"update: "&lt;/span&gt; + ds.update(ds.find(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;, &lt;span style="color: #006080"&gt;"id"&lt;/span&gt;, 1306907246518L).getKey(), uo).getUpdatedCount());&lt;!--CRLF--&gt;    uo.add(&lt;span style="color: #006080"&gt;"name"&lt;/span&gt;, &lt;span style="color: #006080"&gt;"zhaoliuliu"&lt;/span&gt;).set(&lt;span style="color: #006080"&gt;"age"&lt;/span&gt;, 29).set(&lt;span style="color: #006080"&gt;"sex"&lt;/span&gt;, true).add(&lt;span style="color: #006080"&gt;"address"&lt;/span&gt;, &lt;span style="color: #006080"&gt;"gzz"&lt;/span&gt;);&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"update: "&lt;/span&gt; + ds.update(ds.find(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;, &lt;span style="color: #006080"&gt;"id"&lt;/span&gt;, 1306907246518L).getKey(), uo).getUpdatedCount());&lt;!--CRLF--&gt;&amp;nbsp;&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"update: "&lt;/span&gt; + ds.update(ds.createQuery(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;).field(&lt;span style="color: #006080"&gt;"id"&lt;/span&gt;).equal(1306907246518L), uo).getUpdatedCount());&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"update: "&lt;/span&gt; + ds.update(ds.find(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;, &lt;span style="color: #006080"&gt;"id"&lt;/span&gt;, 1306907246518L), uo).getUpdatedCount());&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    uo = ds.createUpdateOperations(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;);&lt;!--CRLF--&gt;    uo.set(&lt;span style="color: #006080"&gt;"name"&lt;/span&gt;, &lt;span style="color: #006080"&gt;"zhaoqq"&lt;/span&gt;).set(&lt;span style="color: #006080"&gt;"age"&lt;/span&gt;, 29).set(&lt;span style="color: #006080"&gt;"sex"&lt;/span&gt;, true).add(&lt;span style="color: #006080"&gt;"address"&lt;/span&gt;, &lt;span style="color: #006080"&gt;"fzz"&lt;/span&gt;);&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"update: "&lt;/span&gt; + ds.update(ds.find(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;, &lt;span style="color: #006080"&gt;"id"&lt;/span&gt;, 1306907246518L).get(), uo).getUpdatedCount());&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"update: "&lt;/span&gt; + ds.update(ds.createQuery(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;).field(&lt;span style="color: #006080"&gt;"id"&lt;/span&gt;).equal(1306907246518L), uo, true).getUpdatedCount());&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;// 修改第一个对象&lt;/span&gt;&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"updateFirst: "&lt;/span&gt; + ds.updateFirst(ds.createQuery(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;).field(&lt;span style="color: #006080"&gt;"id"&lt;/span&gt;).equal(1306907246518L), uo).getUpdatedCount());&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;//当参数createIfMissing为true的时候，如果修改的对象不存在就会添加这条数据，如果为false的情况下，不存在也不添加&lt;/span&gt;&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"updateFirst: "&lt;/span&gt; + ds.updateFirst(ds.createQuery(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;).field(&lt;span style="color: #006080"&gt;"id"&lt;/span&gt;).equal(1306907246519L), uo, true).getUpdatedCount());&lt;!--CRLF--&gt;    user.setId(1306907246518L);&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"updateFirst: "&lt;/span&gt; + ds.updateFirst(ds.createQuery(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;).field(&lt;span style="color: #006080"&gt;"id"&lt;/span&gt;).equal(1306907246518L), user, true).getUpdatedCount());&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    user.setId(1306916670518L);&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;// 合并&lt;/span&gt;&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"merge: "&lt;/span&gt; + ds.merge(user).getId());&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.query();&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;//删除&lt;/span&gt;&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"delete: "&lt;/span&gt; + ds.delete(ds.createQuery(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;).field(&lt;span style="color: #006080"&gt;"id"&lt;/span&gt;).equal(1306907246518L)).getN());&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"delete: "&lt;/span&gt; + ds.delete(ds.find(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;, &lt;span style="color: #006080"&gt;"age"&lt;/span&gt;, 29).get()).getN());&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;//print("delete: " + ds.delete(User.class, 1306911594631L).getN());&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;//print("delete: " + ds.delete(User.class, users).getN());&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;//ds.delete(ds.createQuery(User.class));&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.query();&lt;!--CRLF--&gt;}&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;3、 Find查询操作&lt;div id="codeSnippetWrapper"&gt;&lt;div id="codeSnippet" style="padding-right: 0px; padding-left: 0px; font-size: 10pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt; find查询&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @createDate 2012-2-16 下午10:45:55&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; */&lt;/span&gt;&lt;!--CRLF--&gt;@Test&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; testFind() {&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"find: "&lt;/span&gt; + ds.find(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;).asList());&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;//like&lt;/span&gt;&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"find-contains: "&lt;/span&gt; + ds.find(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;).field(&lt;span style="color: #006080"&gt;"name"&lt;/span&gt;).contains(&lt;span style="color: #006080"&gt;"test-1"&lt;/span&gt;).asList());&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;//忽略大小写&lt;/span&gt;&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"find-containsIgnoreCase: "&lt;/span&gt; + ds.find(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;).field(&lt;span style="color: #006080"&gt;"name"&lt;/span&gt;).containsIgnoreCase(&lt;span style="color: #006080"&gt;"ja"&lt;/span&gt;).asList());&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"find-endsWith: "&lt;/span&gt; + ds.find(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;).field(&lt;span style="color: #006080"&gt;"name"&lt;/span&gt;).endsWith(&lt;span style="color: #006080"&gt;"22"&lt;/span&gt;).asList());&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"find-endsWithIgnoreCase: "&lt;/span&gt; + ds.find(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;).field(&lt;span style="color: #006080"&gt;"name"&lt;/span&gt;).endsWithIgnoreCase(&lt;span style="color: #006080"&gt;"CK"&lt;/span&gt;).asList());&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;//过滤null或是没有name属性的&lt;/span&gt;&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"find-doesNotExist: "&lt;/span&gt; + ds.find(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;).field(&lt;span style="color: #006080"&gt;"name"&lt;/span&gt;).doesNotExist().asList());&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;//查询name有值的数据&lt;/span&gt;&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"find-doesNotExist: "&lt;/span&gt; + ds.find(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;).field(&lt;span style="color: #006080"&gt;"name"&lt;/span&gt;).exists().asList());&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;//age &amp;gt; 48&lt;/span&gt;&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"find-greaterThan: "&lt;/span&gt; + ds.find(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;).field(&lt;span style="color: #006080"&gt;"age"&lt;/span&gt;).greaterThan(66).asList());&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;//age &amp;gt;= 48&lt;/span&gt;&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"find-greaterThan: "&lt;/span&gt; + ds.find(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;).field(&lt;span style="color: #006080"&gt;"age"&lt;/span&gt;).greaterThanOrEq(66).asList());&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    List&amp;lt;Integer&amp;gt; ageList = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ArrayList&amp;lt;Integer&amp;gt;(); &lt;!--CRLF--&gt;    ageList.add(22);&lt;!--CRLF--&gt;    ageList.add(55);&lt;!--CRLF--&gt;    ageList.add(66);&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;//all&lt;/span&gt;&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"find-hasAllOf: "&lt;/span&gt; + ds.find(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;).field(&lt;span style="color: #006080"&gt;"age"&lt;/span&gt;).hasAllOf(ageList).asList());&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;//in&lt;/span&gt;&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"find-hasAnyOf: "&lt;/span&gt; + ds.find(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;).field(&lt;span style="color: #006080"&gt;"age"&lt;/span&gt;).hasAnyOf(ageList).asList());&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;//not in&lt;/span&gt;&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"find-hasNoneOf: "&lt;/span&gt; + ds.find(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;).field(&lt;span style="color: #006080"&gt;"age"&lt;/span&gt;).hasNoneOf(ageList).asList());&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;//elemMatch&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;//print("find-hasThisElement: " + ds.find(User.class).field("age").hasThisElement(55).asList());&lt;/span&gt;&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"find-hasThisOne: "&lt;/span&gt; + ds.find(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;).field(&lt;span style="color: #006080"&gt;"age"&lt;/span&gt;).hasThisOne(55).asList());&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"find-in: "&lt;/span&gt; + ds.find(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;).field(&lt;span style="color: #006080"&gt;"age"&lt;/span&gt;).in(ageList).asList());&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"find-lessThan: "&lt;/span&gt; + ds.find(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;).field(&lt;span style="color: #006080"&gt;"age"&lt;/span&gt;).lessThan(20).asList());&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"find-lessThanOrEq: "&lt;/span&gt; + ds.find(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;).field(&lt;span style="color: #006080"&gt;"age"&lt;/span&gt;).lessThanOrEq(18).asList());&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;//print("find-lessThanOrEq: " + ds.find(User.class).field("age").near(.2, .8).asList());&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"find: "&lt;/span&gt; + ds.find(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;, &lt;span style="color: #006080"&gt;"id"&lt;/span&gt;, 1306813979609L).get());&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"find: "&lt;/span&gt; + ds.find(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;, &lt;span style="color: #006080"&gt;"age"&lt;/span&gt;, 28, 1, 2).asList());&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"findAndDelete: "&lt;/span&gt; + ds.findAndDelete(ds.createQuery(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;).field(&lt;span style="color: #006080"&gt;"id"&lt;/span&gt;).equal(1306813979609L)));&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"find: "&lt;/span&gt; + ds.find(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;).asList());&lt;!--CRLF--&gt;}&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;4、 Query查询操作&lt;div id="codeSnippetWrapper"&gt;&lt;div id="codeSnippet" style="padding-right: 0px; padding-left: 0px; font-size: 10pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt; query查询&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @createDate 2012-2-16 下午10:40:10&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; */&lt;/span&gt;&lt;!--CRLF--&gt;@Test&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; testQuery() {&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;// 查询所有&lt;/span&gt;&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"query: "&lt;/span&gt; + ds.createQuery(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;).asList());&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;// 查询主键&lt;/span&gt;&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"query key: "&lt;/span&gt; + ds.createQuery(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;).asKeyList());&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;// 结果集数量&lt;/span&gt;&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"query: "&lt;/span&gt; + ds.createQuery(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;).countAll());&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;// 抓取查询所有记录&lt;/span&gt;&lt;!--CRLF--&gt;    Iterable&amp;lt;User&amp;gt; it = ds.createQuery(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;).fetch();&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;while&lt;/span&gt;(it.iterator().hasNext()) {&lt;!--CRLF--&gt;        print(&lt;span style="color: #006080"&gt;"fetch: "&lt;/span&gt; + it.iterator().next());&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;// null &lt;/span&gt;&lt;!--CRLF--&gt;    it = ds.createQuery(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;).fetchEmptyEntities();&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;while&lt;/span&gt;(it.iterator().hasNext()) {&lt;!--CRLF--&gt;        print(&lt;span style="color: #006080"&gt;"fetchEmptyEntities: "&lt;/span&gt; + it.iterator().next());&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;// all key&lt;/span&gt;&lt;!--CRLF--&gt;    Iterable&amp;lt;Key&amp;lt;User&amp;gt;&amp;gt; itkeys = ds.createQuery(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;).fetchKeys();&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;while&lt;/span&gt;(itkeys.iterator().hasNext()) {&lt;!--CRLF--&gt;        print(&lt;span style="color: #006080"&gt;"fetchKeys: "&lt;/span&gt; + itkeys.iterator().next());&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;// age &amp;gt; 24&lt;/span&gt;&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"query: "&lt;/span&gt; + ds.createQuery(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;).filter(&lt;span style="color: #006080"&gt;"age &amp;gt; "&lt;/span&gt;, 24).asList());&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;// age in (20, 28)&lt;/span&gt;&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"query: "&lt;/span&gt; + ds.createQuery(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;).filter(&lt;span style="color: #006080"&gt;"age in "&lt;/span&gt;, newint[] { 20, 28 }).asList());&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;// limit 3&lt;/span&gt;&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"query: "&lt;/span&gt; + ds.createQuery(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;).limit(3).asList());&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;// 分页类似MySQL&lt;/span&gt;&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"query: "&lt;/span&gt; + ds.createQuery(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;).offset(11).limit(5).asList());&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;// order排序，默认asc&lt;/span&gt;&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"query: "&lt;/span&gt; + ds.createQuery(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;).order(&lt;span style="color: #006080"&gt;"age"&lt;/span&gt;).asList());&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;//desc&lt;/span&gt;&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"query: "&lt;/span&gt; + ds.createQuery(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;).order(&lt;span style="color: #006080"&gt;"-age"&lt;/span&gt;).asList());&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;// 组合排序 order by age, name&lt;/span&gt;&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"query: "&lt;/span&gt; + ds.createQuery(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;).order(&lt;span style="color: #006080"&gt;"age, name"&lt;/span&gt;).asList());&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"query: "&lt;/span&gt; + ds.createQuery(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;).queryNonPrimary().asList());&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"query: "&lt;/span&gt; + ds.createQuery(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;).queryPrimaryOnly().asList());&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;//如果include 为true就表示取该属性的值，其他的默认null，反之为false则该属性为null，取其他的值&lt;/span&gt;&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"query: "&lt;/span&gt; + ds.createQuery(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;).retrievedFields(false, &lt;span style="color: #006080"&gt;"age"&lt;/span&gt;).asList());&lt;!--CRLF--&gt;}&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;5、 get和count查询&lt;div id="codeSnippetWrapper"&gt;&lt;div id="codeSnippet" style="padding-right: 0px; padding-left: 0px; font-size: 10pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt; get查询&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @createDate 2012-2-16 下午10:39:09&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; */&lt;/span&gt;&lt;!--CRLF--&gt;@Test&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; testGet() {&lt;!--CRLF--&gt;    User user = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; User();&lt;!--CRLF--&gt;    user.setId(1306916670518L);&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"get: "&lt;/span&gt; + ds.get(user));&lt;!--CRLF--&gt;    List&amp;lt;Long&amp;gt; ids = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ArrayList&amp;lt;Long&amp;gt;();&lt;!--CRLF--&gt;    ids.add(1306907246519L);&lt;!--CRLF--&gt;    ids.add(1306916670524L);&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;// 通过id集合查询相当于in ()&lt;/span&gt;&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"get: "&lt;/span&gt; + ds.get(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;, ids).asList());&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;// id查询&lt;/span&gt;&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"get: "&lt;/span&gt; + ds.get(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;, 1306916670524L));&lt;!--CRLF--&gt;}&lt;!--CRLF--&gt;&amp;nbsp;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt; count查询&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @createDate 2012-2-16 下午10:38:02&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; */&lt;/span&gt;&lt;!--CRLF--&gt;@Test&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; testGetCount() {&lt;!--CRLF--&gt;    User user = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; User();&lt;!--CRLF--&gt;    user.setId(1306916670518L);&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"getCount: "&lt;/span&gt; + ds.getCount(user));&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"getCount: "&lt;/span&gt; + ds.getCount(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;));&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    List&amp;lt;Long&amp;gt; ids = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ArrayList&amp;lt;Long&amp;gt;();&lt;!--CRLF--&gt;    ids.add(1306907246519L);&lt;!--CRLF--&gt;    ids.add(1306916670524L);&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"getCount: "&lt;/span&gt; + ds.getCount(ds.get(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;, ids)));&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;// age &amp;gt; 22的记录&lt;/span&gt;&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"getCount: "&lt;/span&gt; + ds.getCount(ds.createQuery(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;).filter(&lt;span style="color: #006080"&gt;"age &amp;gt; "&lt;/span&gt;, 22)));&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;// 所有&lt;/span&gt;&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"countAll: "&lt;/span&gt; + ds.get(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;, ids).countAll());&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"countAll: "&lt;/span&gt; + ds.find(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;).countAll());&lt;!--CRLF--&gt;}&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;6、 其他操作&lt;div id="codeSnippetWrapper"&gt;&lt;div id="codeSnippet" style="padding-right: 0px; padding-left: 0px; font-size: 10pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;@Test&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; testOthers() {&lt;!--CRLF--&gt;    query();&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;/** 索引 */&lt;/span&gt;&lt;!--CRLF--&gt;    ds.ensureIndexes(); &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;// 同时用annotation也可以给指定的属性建立索引&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;// 只需用在JavaEntity建立索引的属性上添加annotation&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;/*@Indexed(value = IndexDirection.ASC, name = "address_index")&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;    String address;&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;    // 建立唯一索引&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;    @Indexed(value = IndexDirection.ASC, name = "bandName", unique = true)&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;    String name;*/&lt;/span&gt;&lt;!--CRLF--&gt;&amp;nbsp;&lt;!--CRLF--&gt;    ds.ensureCaps();&lt;!--CRLF--&gt;    User user = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; User();&lt;!--CRLF--&gt;    user.setId(1306916670518L);&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"getDB: "&lt;/span&gt; + ds.getDB());&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"getDefaultWriteConcern: "&lt;/span&gt; + ds.getDefaultWriteConcern());&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"DBColl: "&lt;/span&gt; + ds.getCollection(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;)); &lt;span style="color: #008000"&gt;// 查询User对象对应的集合&lt;/span&gt;&lt;!--CRLF--&gt;    Key&amp;lt;User&amp;gt; key = ds.getKey(user); &lt;span style="color: #008000"&gt;// 主键&lt;/span&gt;&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"getKey: "&lt;/span&gt; + key);&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"exists: "&lt;/span&gt; + ds.exists(user)); &lt;span style="color: #008000"&gt;//是否存在该对象&lt;/span&gt;&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"exists: "&lt;/span&gt; + ds.exists(ds.getKey(user)));&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"getByKey: "&lt;/span&gt; + ds.getByKey(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;, key));&lt;!--CRLF--&gt;    List&amp;lt;Key&amp;lt;User&amp;gt;&amp;gt; keys = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ArrayList&amp;lt;Key&amp;lt;User&amp;gt;&amp;gt;();&lt;!--CRLF--&gt;    keys.add(key);&lt;!--CRLF--&gt;    user.setId(1306916670521L);&lt;!--CRLF--&gt;    keys.add(ds.getKey(user));&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"getByKey: "&lt;/span&gt; + ds.getByKeys(keys));&lt;!--CRLF--&gt;    print(&lt;span style="color: #006080"&gt;"getByKey: "&lt;/span&gt; + ds.getByKeys(User.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;, keys));&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    query();&lt;!--CRLF--&gt;}&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;用Morphia操作对象相对比较简单，它对MongoDB对Java的操作进行了一些封装，特别是查询这方面的。有没有感觉像是在用Hibernate？&lt;img src="http://www.cnblogs.com/hoojo/aggbug/2355384.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hoojo/archive/2012/02/17/2355384.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hoojo/archive/2012/02/16/2354663.html</id><title type="text">jQuery 获取屏幕高度、宽度</title><summary type="text">做手机Web开发做浏览器兼容用到了，所以在网上找了些汇总下。 alert($(window).height()); //浏览器当前窗口可视区域高度 alert($(document).height()); //浏览器当前窗口文档的高度 alert($(document.body).height());//浏览器当前窗口文档body的高度 alert($(document.body).outerH...</summary><published>2012-02-16T09:43:00Z</published><updated>2012-02-16T09:43:00Z</updated><author><name>hoojo</name><uri>http://www.cnblogs.com/hoojo/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hoojo/archive/2012/02/16/2354663.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hoojo/archive/2012/02/16/2354663.html"/><content type="html">&lt;p&gt;做手机Web开发做浏览器兼容用到了，所以在网上找了些汇总下。&lt;/p&gt; &lt;div id="codeSnippetWrapper"&gt; &lt;div id="codeSnippet" style="padding-right: 0px; padding-left: 0px; font-size: 10pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;alert($(window).height()); &lt;span style="color: #008000"&gt;//浏览器当前窗口可视区域高度 &lt;/span&gt;&lt;!--CRLF--&gt;alert($(document).height()); &lt;span style="color: #008000"&gt;//浏览器当前窗口文档的高度 &lt;/span&gt;&lt;!--CRLF--&gt;alert($(document.body).height());&lt;span style="color: #008000"&gt;//浏览器当前窗口文档body的高度 &lt;/span&gt;&lt;!--CRLF--&gt;alert($(document.body).outerHeight(&lt;span style="color: #0000ff"&gt;true&lt;/span&gt;));&lt;span style="color: #008000"&gt;//浏览器当前窗口文档body的总高度 包括border padding margin &lt;/span&gt;&lt;!--CRLF--&gt;alert($(window).width()); &lt;span style="color: #008000"&gt;//浏览器当前窗口可视区域宽度 &lt;/span&gt;&lt;!--CRLF--&gt;alert($(document).width());&lt;span style="color: #008000"&gt;//浏览器当前窗口文档对象宽度 &lt;/span&gt;&lt;!--CRLF--&gt;alert($(document.body).width());&lt;span style="color: #008000"&gt;//浏览器当前窗口文档body的高度 &lt;/span&gt;&lt;!--CRLF--&gt;alert($(document.body).outerWidth(&lt;span style="color: #0000ff"&gt;true&lt;/span&gt;));&lt;span style="color: #008000"&gt;//浏览器当前窗口文档body的总宽度 包括border padding margin &lt;/span&gt;&lt;!--CRLF--&gt;&amp;nbsp;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;// 获取页面的高度、宽度&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; getPageSize() {&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; xScroll, yScroll;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (window.innerHeight &amp;amp;&amp;amp; window.scrollMaxY) {&lt;!--CRLF--&gt;        xScroll = window.innerWidth + window.scrollMaxX;&lt;!--CRLF--&gt;        yScroll = window.innerHeight + window.scrollMaxY;&lt;!--CRLF--&gt;    } &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; {&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (document.body.scrollHeight &amp;gt; document.body.offsetHeight) { &lt;span style="color: #008000"&gt;// all but Explorer Mac    &lt;/span&gt;&lt;!--CRLF--&gt;            xScroll = document.body.scrollWidth;&lt;!--CRLF--&gt;            yScroll = document.body.scrollHeight;&lt;!--CRLF--&gt;        } &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; { &lt;span style="color: #008000"&gt;// Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari    &lt;/span&gt;&lt;!--CRLF--&gt;            xScroll = document.body.offsetWidth;&lt;!--CRLF--&gt;            yScroll = document.body.offsetHeight;&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; windowWidth, windowHeight;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (self.innerHeight) { &lt;span style="color: #008000"&gt;// all except Explorer    &lt;/span&gt;&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (document.documentElement.clientWidth) {&lt;!--CRLF--&gt;            windowWidth = document.documentElement.clientWidth;&lt;!--CRLF--&gt;        } &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; {&lt;!--CRLF--&gt;            windowWidth = self.innerWidth;&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;        windowHeight = self.innerHeight;&lt;!--CRLF--&gt;    } &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; {&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (document.documentElement &amp;amp;&amp;amp; document.documentElement.clientHeight) { &lt;span style="color: #008000"&gt;// Explorer 6 Strict Mode    &lt;/span&gt;&lt;!--CRLF--&gt;            windowWidth = document.documentElement.clientWidth;&lt;!--CRLF--&gt;            windowHeight = document.documentElement.clientHeight;&lt;!--CRLF--&gt;        } &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; {&lt;!--CRLF--&gt;            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (document.body) { &lt;span style="color: #008000"&gt;// other Explorers    &lt;/span&gt;&lt;!--CRLF--&gt;                windowWidth = document.body.clientWidth;&lt;!--CRLF--&gt;                windowHeight = document.body.clientHeight;&lt;!--CRLF--&gt;            }&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;    }       &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;// for small pages with total height less then height of the viewport    &lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (yScroll &amp;lt; windowHeight) {&lt;!--CRLF--&gt;        pageHeight = windowHeight;&lt;!--CRLF--&gt;    } &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; {&lt;!--CRLF--&gt;        pageHeight = yScroll;&lt;!--CRLF--&gt;    }    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;// for small pages with total width less then width of the viewport    &lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (xScroll &amp;lt; windowWidth) {&lt;!--CRLF--&gt;        pageWidth = xScroll;&lt;!--CRLF--&gt;    } &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; {&lt;!--CRLF--&gt;        pageWidth = windowWidth;&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    arrayPageSize = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Array(pageWidth, pageHeight, windowWidth, windowHeight);&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; arrayPageSize;&lt;!--CRLF--&gt;}&lt;!--CRLF--&gt;&amp;nbsp;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;// 滚动条&lt;/span&gt;&lt;!--CRLF--&gt;document.body.scrollTop;&lt;!--CRLF--&gt;$(document).scrollTop();&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/hoojo/aggbug/2354663.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hoojo/archive/2012/02/16/2354663.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hoojo/archive/2012/02/14/2350782.html</id><title type="text">Rational Rose 2003 下载、破解及安装方法（图文）</title><summary type="text">方法一： 1、安装Rational Rose2003时，在需选择安装项的时候，只选择Rational Rose EnterPrise Edition即可，不需选择其他项，之后选择“DeskTop Installation from CD Image“，一路下一步。出现Mem_pointer_Bad错误，点击确定继续； 2、安装finish后将弹出的Rational License Key Ad...</summary><published>2012-02-14T03:44:00Z</published><updated>2012-02-14T03:44:00Z</updated><author><name>hoojo</name><uri>http://www.cnblogs.com/hoojo/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hoojo/archive/2012/02/14/2350782.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hoojo/archive/2012/02/14/2350782.html"/><content type="html">&lt;p&gt;&lt;strong&gt;&lt;font size="4"&gt;方法一：&lt;/font&gt;&lt;/strong&gt;  &lt;p&gt;1、安装Rational Rose2003时，在需选择安装项的时候，只选择Rational Rose EnterPrise Edition即可，不需选择其他项，之后选择“DeskTop Installation from CD Image“，一路下一步。出现Mem_pointer_Bad错误，点击确定继续；  &lt;p&gt;2、安装finish后将弹出的Rational License Key Administrator向导等窗口关闭。若有连接FLEXlm License Server的出错提示框出现，也关闭它们。  &lt;p&gt;安装会出现 Mem_pointer_Bad 错误，原因应该是某个函数因为安全等级问题而无法运行，只要下载一个SHW32.dll把 ../Rational/Rose/SHW32.dll替换即可。(注：此方法可以避免报错，但是亦可能会造成Rose新建工程报Automation错误，所以此方法基本无效。。。任他报错吧！囧)  &lt;p&gt;下载地址： &lt;a href="http://www.oyksoft.com/soft/1880.html"&gt;http://www.oyksoft.com/soft/1880.html&lt;/a&gt;  &lt;p&gt;3、安装好Rational Rose Enterprise Editon后，打开rose2003crack.rar压缩包，里面有四个文件，分别为flexlm.cpl、license.dat、lmgrd.exe、rational.exe。  &lt;p&gt;4、用记事本打开license.dat文件，大约在文件的中间位置有：  &lt;p&gt;SERVER MICROSOFT ANY  &lt;p&gt;DAEMON rational "C:\Program Files\Rational\common\rational.exe"  &lt;p&gt;将其修改为：SERVER 计算机名　ANY&amp;nbsp;&amp;nbsp; DAEMON rational "自己安装的目录\rational.exe"后，保存。  &lt;p&gt;5、将license.dat、 lmgrd.exe 、rational.exe三个文件一起拷贝到：安装目录\rational\common\&amp;nbsp;&amp;nbsp; 下面。  &lt;p&gt;如：若为默认则为：C:\Program Files\Rational\common\目录。  &lt;p&gt;6、将flexlm.cpl拷贝到C:\Windows\system32目录下。  &lt;p&gt;7、进入控制面板，则在控制面板的上方会增加了一个图标，即FLEXlm License Manager，将其打开，在Setup页中lmgrd.exe右侧目录写为：C:\Program Files\Rational\Common\lmgrd.exe（若为默认安装目录）  &lt;p&gt;License File右侧目录写为：C:\Program Files\Rational\Common\license.dat 点击“应用”。  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hoojo/201202/201202141143308704.jpg"&gt;&lt;img title="clip_image001" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="294" alt="clip_image001" src="http://images.cnblogs.com/cnblogs_com/hoojo/201202/201202141143345578.jpg" width="480" border="0"&gt;&lt;/a&gt;  &lt;p&gt;8、回到Control页，点击Start，若出现"Server Started"，则表示已经成功，可以点击Status,若状态为：计算机名：license server UP(MASTER)则成功。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;a href="http://images.cnblogs.com/cnblogs_com/hoojo/201202/201202141143378940.jpg"&gt;&lt;img title="clip_image002" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="294" alt="clip_image002" src="http://images.cnblogs.com/cnblogs_com/hoojo/201202/20120214114340109.jpg" width="480" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;9、这时可打开安装的Rational Rose Enterprise Edition，若还是出现Error，则打开Rational License Key Administrator ，点击工具栏中的第一个工具（Start WIzard）,点击下一步，在Server Name中的名字改为自己的计算机名，port可以不输，能进入下一个管理窗口并且没出错提示，就代表license server配置成功，Rational的产品应该可以运行了。  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hoojo/201202/201202141143443013.jpg"&gt;&lt;img title="clip_image003" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="251" alt="clip_image003" src="http://images.cnblogs.com/cnblogs_com/hoojo/201202/201202141143462962.jpg" width="429" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hoojo/201202/201202141143491100.jpg"&gt;&lt;img title="clip_image004" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="361" alt="clip_image004" src="http://images.cnblogs.com/cnblogs_com/hoojo/201202/201202141143547658.jpg" width="644" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hoojo/201202/201202141143576560.jpg"&gt;&lt;img title="clip_image005" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="411" alt="clip_image005" src="http://images.cnblogs.com/cnblogs_com/hoojo/201202/201202141144016466.jpg" width="603" border="0"&gt;&lt;/a&gt;  &lt;p&gt;——————————————————————————————————————————————————  &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;strong&gt;&lt;font size="4"&gt;更简单方法二：&lt;/font&gt;&lt;/strong&gt;  &lt;p&gt;安装完成后，下载&lt;a href="http://www.fs2you.com/files/b1ef213a-54a5-11dd-8b0c-0019d11a795f/"&gt;rational_perm.dat&lt;/a&gt;覆盖到Common文件夹即可完成破解，简单吧 o(∩_∩)o...哈哈！  &lt;p&gt;###########################################################################  &lt;p&gt;另一版本：  &lt;p&gt;FROM:http://blog.csdn.net/fenglibing/archive/2007/08/17/1747693.aspx  &lt;p&gt;这么好的东西，不拿来出分享，我对不起原作者呀。但是我这里不知道作者是谁，感谢在先了。  &lt;p&gt;&lt;a href="http://www.oyksoft.com/soft/1880.html"&gt;http://www.oyksoft.com/soft/1880.html&lt;/a&gt;  &lt;p&gt;&lt;a href="http://files.cnblogs.com/lixianhuei/rose2003crack.rar"&gt;http://files.cnblogs.com/lixianhuei/rose2003crack.rar&lt;/a&gt;  &lt;p&gt;以上两个网址分别是用来下载Rational Rose 2003及其破解软件的。  &lt;p&gt;１、安装Rational Rose2003时，在需选择安装项的时候，只选择Rational Rose EnterPrise Edition即可，不需选择其他项。  &lt;p&gt;２、安装好Rational Rose Enterprise Editon后，打开rose2003crack.rar压缩包，里面有四个文件，分别为flexlm.cpl、license.dat、lmgrd.exe、rational.exe。  &lt;p&gt;３、用记事本或者是EditPlus打开license.dat文件，大约在文件的中间位置有：SERVER Microsoft ANY  &lt;p&gt;DAEMON rational “C:\Program Files\Rational\common\rational.exe”将其修改为：SERVER 计算机名　ANY DAEMON rational “自己安装的目录\rational.exe”后，保存  &lt;p&gt;注：若是按默认目录安装，则只需修改计算机名即可。  &lt;p&gt;４、将license.dat、 lmgrd.exe 、rational.exe三个文件一起拷贝到：安装目录\rational\common\ 下面。  &lt;p&gt;如：若为默认则为：C:\Program Files\Rational\common\目录。  &lt;p&gt;５、将flexlm.cpl拷贝到system32目录下。如win2000系统中为C:\WINNT\system32目录。  &lt;p&gt;６、进入控制面板，则在控制面板的上方会增加了一个图标，即FLEXlm License Manager，将其打开，在Setup页中lmgrd.exe右侧目录写为：C:\Program Files\Rational\Common\lmgrd.exe（若为默认安装目录）  &lt;p&gt;License File右侧目录写为：C:\Program Files\Rational\Common\license.dat  &lt;p&gt;７、回到Control页，点击Start，若出现”Server Started”，则表示已经成功，可以点击Status,若状态为：计算机名：license server UP(MASTER)则成功。  &lt;p&gt;８、这时可打开安装的Rational Rose Enterprise Edition，若还是出现Error，则打开Rational License Key Administrator ，点击工具栏中的第一个工具（Start WIzard）,点击下一步，在Server Name中的名字改为自己的计算机名即可。因现在的学习需在使用Rational Rose，所以进行了安装，但确实花了不少工夫，所以特把自己安装的经验来跟大家一起分享，希望能对大家有所帮助。  &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;该文章为转载文章，原文作者应该是163.com的blog，但找不到作者blog，只能通过图片url找到是163.com的&lt;/p&gt;&lt;img src="http://www.cnblogs.com/hoojo/aggbug/2350782.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hoojo/archive/2012/02/14/2350782.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hoojo/archive/2012/02/10/2345234.html</id><title type="text">分享文件一个上传工具类</title><summary type="text">最近在搭建一个项目，需要用到很多通用的工具类，自己也写了几个。现在分享一下，也方便自己以后使用。如果你觉得不错的话，也欢迎转载。blog http://blog.csdn.net/IBM_hoojohttp://hoojo.cnblogs.comhttp://hoojo.blogjava.netemail hoojo_@126.com 文件上传状态枚举类： package com.hoo.en...</summary><published>2012-02-10T05:48:00Z</published><updated>2012-02-10T05:48:00Z</updated><author><name>hoojo</name><uri>http://www.cnblogs.com/hoojo/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hoojo/archive/2012/02/10/2345234.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hoojo/archive/2012/02/10/2345234.html"/><content type="html">&lt;p&gt;最近在搭建一个项目，需要用到很多通用的工具类，自己也写了几个。现在分享一下，也方便自己以后使用。如果你觉得不错的话，也欢迎转载。&lt;br&gt;blog &lt;br&gt;&lt;a href="http://blog.csdn.net/IBM_hoojo"&gt;http://blog.csdn.net/IBM_hoojo&lt;/a&gt;&lt;br&gt;&lt;a href="http://hoojo.cnblogs.com"&gt;http://hoojo.cnblogs.com&lt;/a&gt;&lt;br&gt;&lt;a href="http://hoojo.blogjava.net"&gt;http://hoojo.blogjava.net&lt;/a&gt;&lt;br&gt;email &lt;a href="mailto:hoojo_@126.com"&gt;hoojo_@126.com&lt;/a&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;文件上传状态枚举类：&lt;/p&gt; &lt;div id="codeSnippetWrapper"&gt; &lt;div id="codeSnippet" style="padding-right: 0px; padding-left: 0px; font-size: 10pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;package&lt;/span&gt; com.hoo.enums;&lt;!--CRLF--&gt;&amp;nbsp;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt; 文件上传状态&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @package com.hoo.enums&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @fileName UploadState.java&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @createDate 2010-10-11 下午12:18:14&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; */&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;enum&lt;/span&gt; UploadState {&lt;!--CRLF--&gt;    UPLOAD_SUCCSSS(0, &lt;span style="color: #006080"&gt;"上传文件成功！"&lt;/span&gt;), &lt;!--CRLF--&gt;    UPLOAD_FAILURE(1, &lt;span style="color: #006080"&gt;"上传文件失败！"&lt;/span&gt;), &lt;!--CRLF--&gt;    UPLOAD_TYPE_ERROR(2, &lt;span style="color: #006080"&gt;"上传文件类型错误！"&lt;/span&gt;), &lt;!--CRLF--&gt;    UPLOAD_OVERSIZE(3, &lt;span style="color: #006080"&gt;"上传文件过大！"&lt;/span&gt;),&lt;!--CRLF--&gt;    UPLOAD_ZEROSIZE(4, &lt;span style="color: #006080"&gt;"上传文件为空！"&lt;/span&gt;),&lt;!--CRLF--&gt;    UPLOAD_NOTFOUND(5, &lt;span style="color: #006080"&gt;"上传文件路径错误！"&lt;/span&gt;);&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; String state;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; flag;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; String getState() {&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.state;&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; getFlag() {&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.flag;&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    UploadState(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; flag, String state) {&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.state = state;&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.flag = flag;&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;}&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;文件上传工具类code：&lt;/p&gt;&lt;div id="codeSnippetWrapper"&gt;&lt;div id="codeSnippet" style="padding-right: 0px; padding-left: 0px; font-size: 10pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;package&lt;/span&gt; com.hoo.util;&lt;!--CRLF--&gt;&amp;nbsp;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; java.io.File;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; java.io.FileInputStream;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; java.io.FileNotFoundException;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; java.io.FileOutputStream;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; java.io.IOException;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; java.io.InputStream;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; java.text.SimpleDateFormat;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; java.util.Date;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; java.util.Random;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; java.util.UUID;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; org.apache.commons.io.FileUtils;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; com.hoo.enums.UploadState;&lt;!--CRLF--&gt;&amp;nbsp;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;/***&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt; 文件上传工具类&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @createDate Oct 9, 2010 11:12:47 PM&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @file UploadFileUtils.java&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @package com.hoo.util&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @blog http://blog.csdn.net/IBM_hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @email hoojo_@126.com&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; * @version 1.0&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt; */&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;abstract&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; UploadFileUtils {&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;//上传文件保存路径&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; String path = &lt;span style="color: #006080"&gt;"/upload/"&lt;/span&gt;;&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;//定义可以上传文件的后缀数组,默认"*"，代表所有&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; String[] filePostfixs = { &lt;span style="color: #006080"&gt;"*"&lt;/span&gt; };&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; String[] typeImages = { &lt;span style="color: #006080"&gt;"gif"&lt;/span&gt;, &lt;span style="color: #006080"&gt;"jpeg"&lt;/span&gt;, &lt;span style="color: #006080"&gt;"png"&lt;/span&gt;, &lt;span style="color: #006080"&gt;"jpg"&lt;/span&gt;, &lt;span style="color: #006080"&gt;"tif"&lt;/span&gt;, &lt;span style="color: #006080"&gt;"bmp"&lt;/span&gt; };&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; String[] typeOthers = { &lt;span style="color: #006080"&gt;"html"&lt;/span&gt;, &lt;span style="color: #006080"&gt;"htm"&lt;/span&gt;, &lt;span style="color: #006080"&gt;"doc"&lt;/span&gt;, &lt;span style="color: #006080"&gt;"xls"&lt;/span&gt;, &lt;span style="color: #006080"&gt;"txt"&lt;/span&gt;, &lt;span style="color: #006080"&gt;"zip"&lt;/span&gt;, &lt;span style="color: #006080"&gt;"rar"&lt;/span&gt;, &lt;span style="color: #006080"&gt;"pdf"&lt;/span&gt;, &lt;span style="color: #006080"&gt;"cll"&lt;/span&gt; };&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;//上传文件的最大长度&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;long&lt;/span&gt; maxFileSize = 1024 * 1024 * 1024 * 2L;&lt;span style="color: #008000"&gt;//2G&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;//一次读取多少字节&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; bufferSize = 1024 * 8;&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;final&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; init() {&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (bufferSize &amp;gt; Integer.MAX_VALUE) {&lt;!--CRLF--&gt;            bufferSize = 1024 * 8;&lt;!--CRLF--&gt;        } &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (bufferSize &amp;lt; 8) {&lt;!--CRLF--&gt;            bufferSize = 8;&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (maxFileSize &amp;lt; 1) {&lt;!--CRLF--&gt;            maxFileSize = 1024 * 1024 * 1024 * 2L;&lt;!--CRLF--&gt;        } &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (maxFileSize &amp;gt; Long.MAX_VALUE) {&lt;!--CRLF--&gt;            maxFileSize = 1024 * 1024 * 1024 * 2L;&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt;通过输入流参数上传文件&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @createDate Oct 9, 2010 11:22:47 PM&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param uploadFileName 文件名称&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param savePath 保存路径&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param InputStream 上传的文件的输入流&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @return 是否上传成功&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @throws Exception&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     */&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; UploadState upload4Stream(String fileName, String path, InputStream is) &lt;span style="color: #0000ff"&gt;throws&lt;/span&gt; Exception {&lt;!--CRLF--&gt;        init();&lt;!--CRLF--&gt;        UploadState state = UploadState.UPLOAD_FAILURE;&lt;!--CRLF--&gt;        FileOutputStream fos = null;&lt;!--CRLF--&gt;       &lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;try&lt;/span&gt; {&lt;!--CRLF--&gt;            path = getDoPath(path);&lt;!--CRLF--&gt;            mkDir(path);&lt;!--CRLF--&gt;            fos = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; FileOutputStream(path + fileName);   &lt;!--CRLF--&gt;              &lt;!--CRLF--&gt;            &lt;span style="color: #0000ff"&gt;byte&lt;/span&gt;[] buffer = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #0000ff"&gt;byte&lt;/span&gt;[bufferSize];   &lt;!--CRLF--&gt;            &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; len = 0;   &lt;!--CRLF--&gt;            &lt;span style="color: #0000ff"&gt;while&lt;/span&gt; ((len = is.read(buffer)) &amp;gt; 0) {   &lt;!--CRLF--&gt;                fos.write(buffer, 0, len);   &lt;!--CRLF--&gt;            }&lt;!--CRLF--&gt;            state = UploadState.UPLOAD_SUCCSSS;&lt;!--CRLF--&gt;        } &lt;span style="color: #0000ff"&gt;catch&lt;/span&gt; (FileNotFoundException e) {   &lt;!--CRLF--&gt;            state = UploadState.UPLOAD_NOTFOUND;&lt;!--CRLF--&gt;               &lt;span style="color: #0000ff"&gt;throw&lt;/span&gt; e;&lt;!--CRLF--&gt;        } &lt;span style="color: #0000ff"&gt;catch&lt;/span&gt; (IOException e) {   &lt;!--CRLF--&gt;            state = UploadState.UPLOAD_FAILURE;&lt;!--CRLF--&gt;            &lt;span style="color: #0000ff"&gt;throw&lt;/span&gt; e; &lt;!--CRLF--&gt;        } &lt;span style="color: #0000ff"&gt;finally&lt;/span&gt; {&lt;!--CRLF--&gt;            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (is != null) {&lt;!--CRLF--&gt;                is.close();&lt;!--CRLF--&gt;            }&lt;!--CRLF--&gt;            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (fos != null) {&lt;!--CRLF--&gt;                fos.flush();&lt;!--CRLF--&gt;                fos.close();&lt;!--CRLF--&gt;            }&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; state;   &lt;!--CRLF--&gt;    }   &lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt;上传文件&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @createDate Oct 9, 2010 11:33:27 PM&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param uploadFileName 文件名称&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param savePath 保存路径&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param uploadFile 上传的文件&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @return 是否上传成功&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @throws Exception&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     */&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; UploadState upload4Stream(String fileName, String path, File file) &lt;span style="color: #0000ff"&gt;throws&lt;/span&gt; Exception {&lt;!--CRLF--&gt;        init();&lt;!--CRLF--&gt;        UploadState state = UploadState.UPLOAD_FAILURE;&lt;!--CRLF--&gt;        FileInputStream fis = null;&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;try&lt;/span&gt; {&lt;!--CRLF--&gt;            &lt;span style="color: #0000ff"&gt;long&lt;/span&gt; size = file.length();&lt;!--CRLF--&gt;            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (size &amp;lt;= 0) {&lt;!--CRLF--&gt;                state = UploadState.UPLOAD_ZEROSIZE;&lt;!--CRLF--&gt;            } &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; {&lt;!--CRLF--&gt;                &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (size &amp;lt;= maxFileSize) {&lt;!--CRLF--&gt;                    fis = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; FileInputStream(file); &lt;!--CRLF--&gt;                    state = upload4Stream(fileName, path, fis);&lt;!--CRLF--&gt;                } &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; {&lt;!--CRLF--&gt;                    state = UploadState.UPLOAD_OVERSIZE;&lt;!--CRLF--&gt;                }&lt;!--CRLF--&gt;            }&lt;!--CRLF--&gt;        } &lt;span style="color: #0000ff"&gt;catch&lt;/span&gt; (FileNotFoundException e) {   &lt;!--CRLF--&gt;            state = UploadState.UPLOAD_NOTFOUND;&lt;!--CRLF--&gt;               &lt;span style="color: #0000ff"&gt;throw&lt;/span&gt; e;&lt;!--CRLF--&gt;        } &lt;span style="color: #0000ff"&gt;catch&lt;/span&gt; (IOException e) {   &lt;!--CRLF--&gt;            state = UploadState.UPLOAD_FAILURE;&lt;!--CRLF--&gt;            &lt;span style="color: #0000ff"&gt;throw&lt;/span&gt; e; &lt;!--CRLF--&gt;        } &lt;span style="color: #0000ff"&gt;finally&lt;/span&gt; {&lt;!--CRLF--&gt;            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (fis != null) {&lt;!--CRLF--&gt;                fis.close();&lt;!--CRLF--&gt;            }&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; state;   &lt;!--CRLF--&gt;    }   &lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt;通过数组进行验证文件类型上传&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @createDate Oct 10, 2010 3:39:34 PM&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param fileName 文件名称&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param path 文件路径&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param file 文件&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param allowTypes 文件后缀、类型数组&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @return 返回是否上传成功&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @throws Exception&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     */&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; UploadState upload4Stream(String fileName, String path, File file, String[] allowTypes) &lt;span style="color: #0000ff"&gt;throws&lt;/span&gt; Exception {&lt;!--CRLF--&gt;        UploadState state = UploadState.UPLOAD_FAILURE;&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (validTypeByName(fileName, allowTypes)) {&lt;!--CRLF--&gt;            state = upload4Stream(fileName, path, file);&lt;!--CRLF--&gt;        } &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; {&lt;!--CRLF--&gt;            state = UploadState.UPLOAD_TYPE_ERROR;&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; state; &lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt;通过数组进行验证文件类型上传&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @createDate Oct 10, 2010 3:43:30 PM&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param fileName 文件名称&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param path 文件路径&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param InputStream 文件输入流&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param allowTypes 文件后缀、类型数组&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @return 返回是否上传成功&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @throws Exception&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     */&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; UploadState upload4Stream(String fileName, String path, InputStream fs, String[] allowTypes) &lt;span style="color: #0000ff"&gt;throws&lt;/span&gt; Exception {&lt;!--CRLF--&gt;        UploadState state = UploadState.UPLOAD_FAILURE;&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (validTypeByName(fileName, allowTypes)) {&lt;!--CRLF--&gt;            state = upload4Stream(fileName, path, fs);&lt;!--CRLF--&gt;        } &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; {&lt;!--CRLF--&gt;            state = UploadState.UPLOAD_TYPE_ERROR;&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; state; &lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt; 利用FileUtils上传文件；其中maxFileSize是限制上传文件的大小&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @createDate Oct 9, 2010 11:49:15 PM&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param fileName 文件名称&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param path 保存路径&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param file 文件&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @return 是否上传成功&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @throws Exception&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     */&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;boolean&lt;/span&gt; upload4CopyFile(String fileName, String path, File file) &lt;span style="color: #0000ff"&gt;throws&lt;/span&gt; Exception {&lt;!--CRLF--&gt;        init();&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;boolean&lt;/span&gt; success = false;&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (file.length() &amp;lt;= maxFileSize) {&lt;!--CRLF--&gt;            path = getDoPath(path);&lt;!--CRLF--&gt;            mkDir(path);&lt;!--CRLF--&gt;            File destFile = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; File(path, fileName);&lt;!--CRLF--&gt;            FileUtils.copyFile(file, destFile);&lt;!--CRLF--&gt;            success = true;&lt;!--CRLF--&gt;        } &lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; success;   &lt;!--CRLF--&gt;    }  &lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt;上传指定文件类型的文件&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @createDate Oct 10, 2010 12:30:09 PM&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param fileName 文件名&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param path 路径&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param file 文件&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param allowTypes 类型、后缀数组&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @return 成功上传的文件名&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @throws Exception&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     */&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;boolean&lt;/span&gt; upload4CopyFile(String fileName, String path, File file, String[] allowTypes) &lt;span style="color: #0000ff"&gt;throws&lt;/span&gt; Exception {   &lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;boolean&lt;/span&gt; success = false;&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (validTypeByName(fileName, allowTypes)) {&lt;!--CRLF--&gt;            success = upload4CopyFile(fileName, path, file);&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; success;   &lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt; 根据文件名和类型数组验证文件类型是否合法，flag是否忽略大小写&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @createDate Oct 10, 2010 11:54:54 AM&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param fileName 文件名&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param allowTypes 类型数组&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param flag 是否获得大小写&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @return 是否验证通过&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     */&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;boolean&lt;/span&gt; validTypeByName(String fileName, String[] allowTypes, &lt;span style="color: #0000ff"&gt;boolean&lt;/span&gt; flag) {&lt;!--CRLF--&gt;        String suffix = getType(fileName);&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;boolean&lt;/span&gt; valid = false;&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (allowTypes.length &amp;gt; 0 &amp;amp;&amp;amp; &lt;span style="color: #006080"&gt;"*"&lt;/span&gt;.equals(allowTypes[0])) {&lt;!--CRLF--&gt;            valid = true;&lt;!--CRLF--&gt;        } &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; {&lt;!--CRLF--&gt;            &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (String type : allowTypes) {&lt;!--CRLF--&gt;                &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (flag) {&lt;span style="color: #008000"&gt;//不区分大小写后缀&lt;/span&gt;&lt;!--CRLF--&gt;                    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (suffix != null &amp;amp;&amp;amp; suffix.equalsIgnoreCase(type)) {&lt;!--CRLF--&gt;                        valid = true;&lt;!--CRLF--&gt;                        &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;&lt;!--CRLF--&gt;                    }&lt;!--CRLF--&gt;                } &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; {&lt;span style="color: #008000"&gt;//严格区分大小写&lt;/span&gt;&lt;!--CRLF--&gt;                    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (suffix != null &amp;amp;&amp;amp; suffix.equals(type)) {&lt;!--CRLF--&gt;                        valid = true;&lt;!--CRLF--&gt;                        &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;&lt;!--CRLF--&gt;                    }&lt;!--CRLF--&gt;                }&lt;!--CRLF--&gt;            }&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; valid;&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt;根据文件名称和类型数组验证文件类型是否合法&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @createDate Oct 10, 2010 10:27:17 AM&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param fileName 文件名&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param allowTypes 文件类型数组&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @return 是否合法&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     */&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;boolean&lt;/span&gt; validTypeByName(String fileName, String[] allowTypes) {&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; validTypeByName(fileName, allowTypes, true);&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt; 根据后缀和类型数组验证文件类型是否合法，flag是否区分后缀大小写，true严格大小写&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @createDate Oct 10, 2010 12:00:10 PM&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param suffix 后缀名&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param allowTypes 文件类型数组&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param flag 是否区分大小写&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @return 是否合法&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     */&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;boolean&lt;/span&gt; validTypeByPostfix(String suffix, String[] allowTypes, &lt;span style="color: #0000ff"&gt;boolean&lt;/span&gt; flag) {&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;boolean&lt;/span&gt; valid = false;&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (allowTypes.length &amp;gt; 0 &amp;amp;&amp;amp; &lt;span style="color: #006080"&gt;"*"&lt;/span&gt;.equals(allowTypes[0])) {&lt;!--CRLF--&gt;            valid = true;&lt;!--CRLF--&gt;        } &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; {&lt;!--CRLF--&gt;            &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (String type : allowTypes) {&lt;!--CRLF--&gt;                &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (flag) {&lt;span style="color: #008000"&gt;//不区分大小写后缀&lt;/span&gt;&lt;!--CRLF--&gt;                    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (suffix != null &amp;amp;&amp;amp; suffix.equalsIgnoreCase(type)) {&lt;!--CRLF--&gt;                        valid = true;&lt;!--CRLF--&gt;                        &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;&lt;!--CRLF--&gt;                    }&lt;!--CRLF--&gt;                } &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; {&lt;span style="color: #008000"&gt;//严格区分大小写&lt;/span&gt;&lt;!--CRLF--&gt;                    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (suffix != null &amp;amp;&amp;amp; suffix.equals(type)) {&lt;!--CRLF--&gt;                        valid = true;&lt;!--CRLF--&gt;                        &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;&lt;!--CRLF--&gt;                    }&lt;!--CRLF--&gt;                }&lt;!--CRLF--&gt;            }&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; valid;&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt;根据文件后缀名和类型数组，验证文件类型是否合法&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @createDate Oct 10, 2010 10:25:32 AM&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param suffix 后缀名&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param allowTypes 类型数组&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @return 是否合法&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     */&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;boolean&lt;/span&gt; validTypeByPostfix(String suffix, String[] allowTypes) {&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; validTypeByPostfix(suffix, allowTypes, true);&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt;验证当前后缀、文件类型是否是图片类型&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * typeImages 可以设置图片类型&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @createDate Oct 10, 2010 12:17:18 PM&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param suffix 验证文件的后缀&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @return 是否合法&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     */&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;boolean&lt;/span&gt; validTypeByPostfix4Images(String suffix) {&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; validTypeByPostfix(suffix, typeImages);&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt;验证当前后缀、文件类型是否是非图片类型（常用办公文件类型）&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * typeOthers 可以设置文件类型&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @createDate Oct 10, 2010 12:18:18 PM&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param suffix 验证文件的后缀&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @return 是否合法&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     */&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;boolean&lt;/span&gt; validTypeByPostfix4Others(String suffix) {&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; validTypeByPostfix(suffix, typeOthers);&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt;验证当前文件名、文件类型是否是图片类型&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * typeImages 可以设置图片类型&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @createDate Oct 10, 2010 12:19:18 PM&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param fileName 验证文件的名称&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @return 是否合法&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     */&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;boolean&lt;/span&gt; validTypeByName4Images(String fileName) {&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; validTypeByName(fileName, typeImages);&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt;验证当前文件名称、文件类型是否是非图片类型（常用办公文件类型）&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * typeOthers 可以设置文件类型&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @createDate Oct 10, 2010 12:21:22 PM&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param fileName 验证文件的名称&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @return 是否合法&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     */&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;boolean&lt;/span&gt; validTypeByName4Others(String fileName) {&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; validTypeByName(fileName, typeOthers);&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt;传递一个路径和文件名称，删除该文件&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @createDate Oct 10, 2010 10:47:57 AM&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param fileName 文件名称&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param path 路径&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @return 是否删除成功&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     */&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;boolean&lt;/span&gt; removeFile(String fileName, String path) {&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;boolean&lt;/span&gt; flag = false;&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (isFileExist(fileName, path)) {&lt;!--CRLF--&gt;            File file = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; File(getDoPath(path) + fileName);&lt;!--CRLF--&gt;            flag = file.delete();&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; flag;&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt;删除当前文件&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @createDate Oct 10, 2010 10:49:54 AM&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param file 要删除的文件&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @return 是否删除成功&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     */&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;boolean&lt;/span&gt; removeFile(File file) {&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;boolean&lt;/span&gt; flag = false;&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (file != null &amp;amp;&amp;amp; file.exists()) {&lt;!--CRLF--&gt;            flag = file.delete();&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; flag;&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt;删除某个文件&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @createDate Oct 12, 2010 9:33:06 PM&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param path 传递该文件路径&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @return 删除是否成功&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     */&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;boolean&lt;/span&gt; removeFile(String path) {&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; removeFile(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; File(path));&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt;删除当前文件下面所有文件&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @createDate Oct 12, 2010 9:27:33 PM&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param file File 要删除的文件夹下面文件的文件对象&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @return 是否删除成功，如果有一个文件删除失败，将返回false&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     */&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;boolean&lt;/span&gt; removeFile4Dir(File file) {&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;boolean&lt;/span&gt; flag = false;&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (file != null &amp;amp;&amp;amp; file.exists() &amp;amp;&amp;amp; file.isDirectory()) {&lt;!--CRLF--&gt;            File[] allFile = file.listFiles();&lt;!--CRLF--&gt;            &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (File f : allFile) {&lt;!--CRLF--&gt;                flag = f.delete();&lt;!--CRLF--&gt;                &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!flag) {&lt;!--CRLF--&gt;                    System.err.println(&lt;span style="color: #006080"&gt;"删除文件"&lt;/span&gt; + f.getAbsolutePath() + &lt;span style="color: #006080"&gt;"出错了！"&lt;/span&gt;);&lt;!--CRLF--&gt;                    &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;&lt;!--CRLF--&gt;                }&lt;!--CRLF--&gt;            }&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; flag;&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt;删除当前目录下所有文件&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @createDate Oct 12, 2010 9:34:41 PM&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param path 目录、路径&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @return 是否成功&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     */&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;boolean&lt;/span&gt; removeFile4Dir(String path) {&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; removeFile4Dir(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; File(path));&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt;删除某个文件夹下的所有文件（除目录），包含子文件夹的文件&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @createDate Oct 12, 2010 9:30:01 PM&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param file 即将删除文件夹对象&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @return 是否删除成功&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     */&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;boolean&lt;/span&gt; removeAllFile4Dir(File file) {&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;boolean&lt;/span&gt; flag = false;&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (file != null &amp;amp;&amp;amp; file.exists() &amp;amp;&amp;amp; file.isDirectory()) {&lt;!--CRLF--&gt;            File[] allFile = file.listFiles();&lt;!--CRLF--&gt;            &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (File f : allFile) {&lt;!--CRLF--&gt;                &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!f.isDirectory()) {&lt;!--CRLF--&gt;                    flag = f.delete();&lt;!--CRLF--&gt;                } &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; {&lt;!--CRLF--&gt;                    flag = removeAllFile4Dir(f);&lt;!--CRLF--&gt;                }&lt;!--CRLF--&gt;                &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!flag) {&lt;!--CRLF--&gt;                    System.err.println(&lt;span style="color: #006080"&gt;"删除文件"&lt;/span&gt; + f.getAbsolutePath() + &lt;span style="color: #006080"&gt;"出错了！"&lt;/span&gt;);&lt;!--CRLF--&gt;                    &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;&lt;!--CRLF--&gt;                }&lt;!--CRLF--&gt;            }&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; flag;&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt;删除某个目录下所有文件（不包含文件夹，包含文件夹下的文件）&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @createDate Oct 12, 2010 9:36:17 PM&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param path&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @return&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     */&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;boolean&lt;/span&gt; removeAllFile4Dir(String path) {&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; removeAllFile4Dir(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; File(path));&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt; 传入一个文件名，得到这个文件名称的后缀&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @createDate Oct 9, 2010 11:30:46 PM&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param fileName 文件名&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @return 后缀名&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     */&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; String getSuffix(String fileName) {&lt;!--CRLF--&gt;         &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; index = fileName.lastIndexOf(&lt;span style="color: #006080"&gt;"."&lt;/span&gt;);&lt;!--CRLF--&gt;         &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (index != -1) {&lt;!--CRLF--&gt;             String suffix = fileName.substring(index);&lt;span style="color: #008000"&gt;//后缀&lt;/span&gt;&lt;!--CRLF--&gt;             &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; suffix; &lt;!--CRLF--&gt;         } &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; {&lt;!--CRLF--&gt;             &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; null;&lt;!--CRLF--&gt;         }&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt;和文件后缀一样，不同的是没有“.”&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @createDate Oct 10, 2010 2:42:43 PM&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param fileName 文件名称&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @return&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     */&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; String getType(String fileName) {&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; index = fileName.lastIndexOf(&lt;span style="color: #006080"&gt;"."&lt;/span&gt;);&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (index != -1) {&lt;!--CRLF--&gt;            String suffix = fileName.substring(index + 1);&lt;span style="color: #008000"&gt;//后缀&lt;/span&gt;&lt;!--CRLF--&gt;            &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; suffix; &lt;!--CRLF--&gt;        } &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; {&lt;!--CRLF--&gt;            &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; null;&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;   }&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt; 传递一个文件名称和一个新名称，组合成一个新的带后缀文件名&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * 当传递的文件名没有后缀，会添加默认的后缀&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @createDate Oct 9, 2010 10:53:06 PM&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param fileName 文件名称&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param newName 新文件名称&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param nullSuffix 为没有后缀的文件所添加的后缀;eg:txt&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @return String 文件名称&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     */&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; String getNewFileName(String fileName, String newName, String nullSuffix) {&lt;!--CRLF--&gt;        String suffix = getSuffix(fileName);&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (suffix != null) {&lt;!--CRLF--&gt;            newName += suffix; &lt;!--CRLF--&gt;        } &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; {&lt;!--CRLF--&gt;            newName = newName.concat(&lt;span style="color: #006080"&gt;"."&lt;/span&gt;).concat(nullSuffix);&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; newName;   &lt;!--CRLF--&gt;    } &lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt; 利用uuid产生一个随机的name&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @createDate Oct 9, 2010 10:45:27 PM&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param fileName 带后缀的文件名称&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @return String 随机生成的name&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     */&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; String getRandomName(String fileName) {&lt;!--CRLF--&gt;        String randomName = UUID.randomUUID().toString();&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; getNewFileName(fileName, randomName, &lt;span style="color: #006080"&gt;"txt"&lt;/span&gt;);&lt;!--CRLF--&gt;    } &lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt; 用当前日期、时间和1000以内的随机数组合成的文件名称&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @createDate Oct 9, 2010 11:01:47 PM&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param fileName 文件名称&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @return 新文件名称&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     */&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; String getNumberName(String fileName) {&lt;!--CRLF--&gt;        SimpleDateFormat format = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SimpleDateFormat(&lt;span style="color: #006080"&gt;"yyMMddhhmmss"&lt;/span&gt;);&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; rand = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Random().nextInt(1000);&lt;!--CRLF--&gt;        String numberName = format.format(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Date()) + rand;&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; getNewFileName(fileName, numberName, &lt;span style="color: #006080"&gt;"txt"&lt;/span&gt;);&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt;判断该文件是否存在&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @createDate Oct 10, 2010 12:00:44 AM&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param fileName 文件名称&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param path 目录&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @return 是否存在&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     */&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;boolean&lt;/span&gt; isFileExist(String fileName, String path) {&lt;!--CRLF--&gt;        File file = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; File(getDoPath(path) + fileName);&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; file.exists();&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt;返回可用的文件名&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @createDate Oct 10, 2010 1:02:45 AM&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param fileName 文件名&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param path 路径&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @return 可用文件名&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     */&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; String getBracketFileName(String fileName, String path) {&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; getBracketFileName(fileName, fileName, path, 1);&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt;递归处理文件名称，直到名称不重复（对文件名、目录文件夹都可用）&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * eg: a.txt --&amp;gt; a(1).txt&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * 文件夹upload--&amp;gt; 文件夹upload(1)&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @createDate Oct 10, 2010 12:56:27 AM&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param fileName 文件名称&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param path 文件路径&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param num 累加数字，种子&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @return 返回没有重复的名称&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     */&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; String getBracketFileName(String fileName, String bracketName, String path, &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; num) {&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;boolean&lt;/span&gt; exist = isFileExist(bracketName, path);&lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (exist) {&lt;!--CRLF--&gt;            &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; index = fileName.lastIndexOf(&lt;span style="color: #006080"&gt;"."&lt;/span&gt;);&lt;!--CRLF--&gt;            String suffix = &lt;span style="color: #006080"&gt;""&lt;/span&gt;;&lt;!--CRLF--&gt;            bracketName = fileName;&lt;!--CRLF--&gt;            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (index != -1) {&lt;!--CRLF--&gt;                suffix = fileName.substring(index);&lt;!--CRLF--&gt;                bracketName = fileName.substring(0, index);&lt;!--CRLF--&gt;            }&lt;!--CRLF--&gt;            bracketName += &lt;span style="color: #006080"&gt;"("&lt;/span&gt; + num + &lt;span style="color: #006080"&gt;")"&lt;/span&gt; + suffix;&lt;!--CRLF--&gt;            num++;&lt;!--CRLF--&gt;            bracketName = getBracketFileName(fileName, bracketName, path, num);&lt;!--CRLF--&gt;        } &lt;!--CRLF--&gt;        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; bracketName;&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;/**&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt;处理后的系统文件路径&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @author hoojo&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @createDate Oct 10, 2010 12:49:31 AM&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @param path 文件路径&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     * @return 返回处理后的路径&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span style="color: #008000"&gt;     */&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; String getDoPath(String path) {&lt;!--CRLF--&gt;        path = path.replace(&lt;span style="color: #006080"&gt;"\\", "&lt;/span&gt;/&lt;span style="color: #006080"&gt;");&lt;!--CRLF--&gt;        String lastChar = path.substring(path.length() - 1);&lt;!--CRLF--&gt;        if (!"&lt;/span&gt;/&lt;span style="color: #006080"&gt;".equals(lastChar)) {&lt;!--CRLF--&gt;            path += "&lt;/span&gt;/&lt;span style="color: #006080"&gt;";&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;        return path;&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    /**&lt;!--CRLF--&gt;     * &amp;lt;b&amp;gt;function:&amp;lt;/b&amp;gt; 创建指定的path路径目录&lt;!--CRLF--&gt;     * @author hoojo&lt;!--CRLF--&gt;     * @createDate Oct 9, 2010 11:03:49 PM&lt;!--CRLF--&gt;     * @param path 目录、路径&lt;!--CRLF--&gt;     * @return 是否创建成功&lt;!--CRLF--&gt;     * @throws Exception&lt;!--CRLF--&gt;     */&lt;!--CRLF--&gt;    public static boolean mkDir(String path) throws Exception {   &lt;!--CRLF--&gt;        File file = null;   &lt;!--CRLF--&gt;        try {   &lt;!--CRLF--&gt;            file = new File(path);   &lt;!--CRLF--&gt;            if (!file.exists()) {   &lt;!--CRLF--&gt;                return file.mkdirs();   &lt;!--CRLF--&gt;            }   &lt;!--CRLF--&gt;        } catch (RuntimeException e) {   &lt;!--CRLF--&gt;            throw e;&lt;!--CRLF--&gt;        } finally {   &lt;!--CRLF--&gt;            file = null;   &lt;!--CRLF--&gt;        }   &lt;!--CRLF--&gt;        return false;   &lt;!--CRLF--&gt;    }   &lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    /**&lt;!--CRLF--&gt;     * 创建缩略图&lt;!--CRLF--&gt;     * @param file 上传的文件流&lt;!--CRLF--&gt;     * @param height 最小的尺寸&lt;!--CRLF--&gt;     * @throws IOException&lt;!--CRLF--&gt;     */&lt;!--CRLF--&gt;    /*public static void writeBrevityPic(File file, float width, float height) throws IOException {&lt;!--CRLF--&gt;        Image src = javax.imageio.ImageIO.read(file); // 构造Image对象&lt;!--CRLF--&gt;        int old_w = src.getWidth(null); // 得到源图宽&lt;!--CRLF--&gt;        int old_h = src.getHeight(null);&lt;!--CRLF--&gt;        int new_w = 0;&lt;!--CRLF--&gt;        int new_h = 0; // 得到源图长&lt;!--CRLF--&gt;        float tempdouble;&lt;!--CRLF--&gt;        if (old_w &amp;gt;= old_h) {&lt;!--CRLF--&gt;            tempdouble = old_w / width;&lt;!--CRLF--&gt;        } else {&lt;!--CRLF--&gt;            tempdouble = old_h / height;&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;&amp;nbsp;&lt;!--CRLF--&gt;        if (old_w &amp;gt;= width || old_h &amp;gt;= height) { // 如果文件小于锁略图的尺寸则复制即可&lt;!--CRLF--&gt;            new_w = Math.round(old_w / tempdouble);&lt;!--CRLF--&gt;            new_h = Math.round(old_h / tempdouble);// 计算新图长宽&lt;!--CRLF--&gt;            while (new_w &amp;gt; width &amp;amp;&amp;amp; new_h &amp;gt; height) {&lt;!--CRLF--&gt;                if (new_w &amp;gt; width) {&lt;!--CRLF--&gt;                    tempdouble = new_w / width;&lt;!--CRLF--&gt;                    new_w = Math.round(new_w / tempdouble);&lt;!--CRLF--&gt;                    new_h = Math.round(new_h / tempdouble);&lt;!--CRLF--&gt;                }&lt;!--CRLF--&gt;                if (new_h &amp;gt; height) {&lt;!--CRLF--&gt;                    tempdouble = new_h / height;&lt;!--CRLF--&gt;                    new_w = Math.round(new_w / tempdouble);&lt;!--CRLF--&gt;                    new_h = Math.round(new_h / tempdouble);&lt;!--CRLF--&gt;                }&lt;!--CRLF--&gt;            }&lt;!--CRLF--&gt;            BufferedImage tag = new BufferedImage(new_w, new_h, BufferedImage.TYPE_INT_RGB);&lt;!--CRLF--&gt;            tag.getGraphics().drawImage(src, 0, 0, new_w, new_h, null); // 绘制缩小后的图&lt;!--CRLF--&gt;            FileOutputStream newimage = new FileOutputStream(file); // 输出到文件流&lt;!--CRLF--&gt;            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(newimage);&lt;!--CRLF--&gt;            JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(tag);&lt;!--CRLF--&gt;            param.setQuality((float) (100 / 100.0), true);// 设置图片质量,100最大,默认70&lt;!--CRLF--&gt;            encoder.encode(tag, param);&lt;!--CRLF--&gt;            encoder.encode(tag); // 将JPEG编码&lt;!--CRLF--&gt;            newimage.close();&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;    }*/&lt;!--CRLF--&gt;    &lt;!--CRLF--&gt;    public static void main(String[] args) throws Exception {&lt;!--CRLF--&gt;        String path = "&lt;/span&gt;F:/Example Exercise/ExtJS/MultiUpload/WebRoot/upload&lt;span style="color: #006080"&gt;";&lt;!--CRLF--&gt;        //System.out.println(mkDir(path));&lt;!--CRLF--&gt;        System.out.println(getDoPath(path));&lt;!--CRLF--&gt;        System.out.println(getBracketFileName("&lt;/span&gt;a.txt&lt;span style="color: #006080"&gt;", getDoPath(path)));&lt;!--CRLF--&gt;        System.out.println(getNumberName("&lt;/span&gt;a.jpg&lt;span style="color: #006080"&gt;"));&lt;!--CRLF--&gt;        System.out.println(getNumberName("&lt;/span&gt;a.jpg&lt;span style="color: #006080"&gt;"));&lt;!--CRLF--&gt;        System.out.println(getNewFileName("&lt;/span&gt;a&lt;span style="color: #006080"&gt;", "&lt;/span&gt;bbb&lt;span style="color: #006080"&gt;", "&lt;/span&gt;txt&lt;span style="color: #006080"&gt;"));&lt;!--CRLF--&gt;        System.out.println(getRandomName("&lt;/span&gt;a.htm&lt;span style="color: #006080"&gt;"));&lt;!--CRLF--&gt;        System.out.println(getSuffix("&lt;/span&gt;a.jpg&lt;span style="color: #006080"&gt;"));&lt;!--CRLF--&gt;        System.out.println(getType("&lt;/span&gt;a.jpg&lt;span style="color: #006080"&gt;"));&lt;!--CRLF--&gt;        //List&amp;lt;File&amp;gt; list = getFiles(path);&lt;!--CRLF--&gt;        //List&amp;lt;File&amp;gt; list = getFiles(path, "&lt;/span&gt;xml&lt;span style="color: #006080"&gt;");&lt;!--CRLF--&gt;        //List&amp;lt;File&amp;gt; list = getFiles(path, typeImages);&lt;!--CRLF--&gt;        //List&amp;lt;File&amp;gt; list = getFiles(path, typeOthers);&lt;!--CRLF--&gt;        //List&amp;lt;File&amp;gt; list = getFiles(path, typeImages, false);&lt;!--CRLF--&gt;        /*List&amp;lt;File&amp;gt; list = getFiles(path, "&lt;/span&gt;GIF&lt;span style="color: #006080"&gt;", true);&lt;!--CRLF--&gt;        for (File f : list) {&lt;!--CRLF--&gt;            System.out.println("&lt;/span&gt;Name:&lt;span style="color: #006080"&gt;" + f.getName());&lt;!--CRLF--&gt;            System.out.println(f.getAbsolutePath() + "&lt;/span&gt;#&lt;span style="color: #006080"&gt;" + f.getPath());&lt;!--CRLF--&gt;        }*/&lt;!--CRLF--&gt;        System.out.println(removeFile("&lt;/span&gt;a.txt&lt;span style="color: #006080"&gt;", path));&lt;!--CRLF--&gt;        System.out.println("&lt;/span&gt;#############################################&lt;span style="color: #006080"&gt;");&lt;!--CRLF--&gt;        System.out.println("&lt;/span&gt;###&lt;span style="color: #006080"&gt;" + validTypeByName("&lt;/span&gt;a&lt;span style="color: #006080"&gt;", new String[]{"&lt;/span&gt;*&lt;span style="color: #006080"&gt;"}));&lt;!--CRLF--&gt;        System.out.println("&lt;/span&gt;###&lt;span style="color: #006080"&gt;" + validTypeByName("&lt;/span&gt;a.JPG&lt;span style="color: #006080"&gt;", typeImages));&lt;!--CRLF--&gt;        System.out.println("&lt;/span&gt;###&lt;span style="color: #006080"&gt;" + validTypeByName("&lt;/span&gt;a.JPG&lt;span style="color: #006080"&gt;", typeImages, false));&lt;!--CRLF--&gt;        System.out.println(validTypeByPostfix("&lt;/span&gt;cals&lt;span style="color: #006080"&gt;", new String[]{"&lt;/span&gt;*&lt;span style="color: #006080"&gt;", "&lt;/span&gt;b&lt;span style="color: #006080"&gt;"}));&lt;!--CRLF--&gt;        System.out.println(validTypeByPostfix("&lt;/span&gt;b&lt;span style="color: #006080"&gt;", new String[]{"&lt;/span&gt;cal&lt;span style="color: #006080"&gt;", "&lt;/span&gt;B"}, false));&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;}&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/hoojo/aggbug/2345234.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hoojo/archive/2012/02/10/2345234.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
