﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-9910-随笔分类-java</title><link>http://www.blogjava.net/sdyjmc/category/17746.html</link><description>单飞</description><language>zh-cn</language><lastBuildDate>Fri, 05 Apr 2019 08:19:54 GMT</lastBuildDate><pubDate>Fri, 05 Apr 2019 08:19:54 GMT</pubDate><ttl>60</ttl><item><title>微同商城使用私库解决打包编译问题</title><link>http://www.blogjava.net/sdyjmc/archive/2019/04/04/433704.html</link><dc:creator>单飞</dc:creator><author>单飞</author><pubDate>Thu, 04 Apr 2019 01:36:00 GMT</pubDate><guid>http://www.blogjava.net/sdyjmc/archive/2019/04/04/433704.html</guid><wfw:comment>http://www.blogjava.net/sdyjmc/comments/433704.html</wfw:comment><comments>http://www.blogjava.net/sdyjmc/archive/2019/04/04/433704.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sdyjmc/comments/commentRss/433704.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sdyjmc/services/trackbacks/433704.html</trackback:ping><description><![CDATA[<div>微同商城 搭建私服</div><div><div>[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:<br />deploy (default-deploy) on project platform: Failed to deploy artifacts: Could n<br />ot find artifact com.platform:platform:pom:1.0.0 in releases(http://nkf:<br />8081/repository/xiaowang-host/) -&gt; [Help 1]<br /><br />&nbsp;&nbsp;&nbsp; &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;<br />&nbsp;&nbsp;&nbsp; &lt;groupId&gt;com.platform&lt;/groupId&gt;<br />&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;platform&lt;/artifactId&gt;<br />&nbsp;&nbsp;&nbsp; &lt;version&gt;1.0.0&lt;/version&gt;<br />&nbsp;&nbsp;&nbsp; &lt;packaging&gt;pom&lt;/packaging&gt;<br />&nbsp;&nbsp;&nbsp; &lt;description&gt;platform&lt;/description&gt;</div></div><div></div><div><div>[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:<br />deploy (default-deploy) on project platform: Deployment failed: repository eleme<br />nt was not specified in the POM inside distributionManagement element or in -Dal<br />tDeploymentRepository=id::layout::url parameter -&gt; [Help 1]</div></div><div></div><div></div><div><div>[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:<br />deploy (default-deploy) on project platform-mp: Failed to deploy artifacts: Coul<br />d not find artifact com.platform:platform-mp:jar:1.0.0 in releases (http:<br />//nkf:8081/repository/xiaowang-host/) -&gt; [Help 1]</div></div><div></div><div></div><div>搭建私服<br />D:\public\mvn\apache-maven-3.2.2\conf\settings.xml<br />&lt;mirror&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;id&gt;nexus-aliyun&lt;/id&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mirrorOf&gt;central&lt;/mirrorOf&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;Nexus aliyun&lt;/name&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;url&gt;http://maven.aliyun.com/nexus/content/groups/public&lt;/url&gt;<br />&nbsp;&nbsp;&nbsp; &lt;/mirror&gt;<br />阿里仓库改为中央仓库<br /><br />N:\JetBrains\platform\pom.xml<br /><br />解决上传第二方jar文件和下载第二方jar文件问题:<br /><br />&lt;distributionManagement&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;repository&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;id&gt;releases.xiaowang&lt;/id&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;Releases&lt;/name&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;url&gt;http://server2:8081/repository/xiaowang-host/&lt;/url&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/repository&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;snapshotRepository&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;id&gt;snapshots.xiaowang&lt;/id&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;Snapshot&lt;/name&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;url&gt;http://server2:8081/repository/xiaowang-host/&lt;/url&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/snapshotRepository&gt;<br />&nbsp;&nbsp;&nbsp; &lt;/distributionManagement&gt;<br />&nbsp;&nbsp;&nbsp; &lt;repositories&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;repository&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;id&gt;releases.xiaowang&lt;/id&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;url&gt;http://server2:8081/repository/xiaowang-host/&lt;/url&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;releases&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;enabled&gt;true&lt;/enabled&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;updatePolicy&gt;always&lt;/updatePolicy&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/releases&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;snapshots&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;enabled&gt;true&lt;/enabled&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;updatePolicy&gt;always&lt;/updatePolicy&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/snapshots&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/repository&gt;<br />&nbsp;&nbsp;&nbsp; &lt;/repositories&gt;<br /><br /><br />其它pom.xml文件无需做改变,就可以使用mvn deploy 上传和下载第二方jar文件<br />然后使用mvn package 就没有问题了。</div><img src ="http://www.blogjava.net/sdyjmc/aggbug/433704.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sdyjmc/" target="_blank">单飞</a> 2019-04-04 09:36 <a href="http://www.blogjava.net/sdyjmc/archive/2019/04/04/433704.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hornetq  could not obtain connection to any of these urls localhost 1099 jboss</title><link>http://www.blogjava.net/sdyjmc/archive/2015/08/05/426607.html</link><dc:creator>单飞</dc:creator><author>单飞</author><pubDate>Wed, 05 Aug 2015 01:15:00 GMT</pubDate><guid>http://www.blogjava.net/sdyjmc/archive/2015/08/05/426607.html</guid><wfw:comment>http://www.blogjava.net/sdyjmc/comments/426607.html</wfw:comment><comments>http://www.blogjava.net/sdyjmc/archive/2015/08/05/426607.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/sdyjmc/comments/commentRss/426607.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sdyjmc/services/trackbacks/426607.html</trackback:ping><description><![CDATA[<div>could not obtain connection to any of these urls localhost 1099 jboss</div><br />修改 <div>run.bat</div><br /><div>-Djnp.host=172.16.0.128 -Dhornetq.remoting.netty.host=172.16.0.23</div>-Djava.rmi.server.hostname=172.16.0.23修改后:<br /><div><br />REM set CLUSTER_PROPS="-Djnp.port=1099 -Djnp.rmiPort=1098 -Djnp.host=172.16.0.23 -Dhornetq.remoting.netty.host=172.16.0.23 -Dhornetq.remoting.netty.port=5445"<br />set JVM_ARGS=%CLUSTER_PROPS% -XX:+UseParallelGC&nbsp; -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -Xms512M -Xmx1024M -Dhornetq.config.dir=%CONFIG_DIR%&nbsp; -Djava.util.logging.config.file=%CONFIG_DIR%\logging.properties -Djava.library.path=. -Djava.rmi.server.hostname=172.16.0.23<br /></div>run.sh<br /><br /><div>export CLUSTER_PROPS="-Djnp.port=6099 -Djnp.rmiPort=6098 -Djnp.host=server23 -Dhornetq.remoting.netty.host=server23 -Dhornetq.remoting.netty.port=6445"<br />export JVM_ARGS="$CLUSTER_PROPS&nbsp; -Xms512M -Xmx4096M -Dhornetq.config.dir=$CONFIG_DIR -Djava.util.logging.config.file=$CONFIG_DIR/logging.properties -Djava.library.path=. -Dcom.sun.management.jmxre<br />mote -Dcom.sun.management.jmxremote.port=4000 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=server23"</div><img src ="http://www.blogjava.net/sdyjmc/aggbug/426607.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sdyjmc/" target="_blank">单飞</a> 2015-08-05 09:15 <a href="http://www.blogjava.net/sdyjmc/archive/2015/08/05/426607.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux 环境下tomcat启动失败问题</title><link>http://www.blogjava.net/sdyjmc/archive/2014/12/04/421044.html</link><dc:creator>单飞</dc:creator><author>单飞</author><pubDate>Thu, 04 Dec 2014 08:37:00 GMT</pubDate><guid>http://www.blogjava.net/sdyjmc/archive/2014/12/04/421044.html</guid><wfw:comment>http://www.blogjava.net/sdyjmc/comments/421044.html</wfw:comment><comments>http://www.blogjava.net/sdyjmc/archive/2014/12/04/421044.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sdyjmc/comments/commentRss/421044.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sdyjmc/services/trackbacks/421044.html</trackback:ping><description><![CDATA[<div><div>严重: Error deploying web application directory  news<br />java.lang.ClassFormatError: com/sun/faces/config/ConfigureListener :  illegal LocalVariableTable missing: LVT<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at  java.lang.ClassLoader.defineClass1(Native Method)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at  java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at  java.lang.ClassLoader.defineClass(ClassLoader.java:615)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at  java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  at  org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1814)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  at  org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:868)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  at  org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1321)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  at  org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1200)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  at  org.apache.catalina.startup.WebAnnotationSet.loadClassAnnotation(WebAnnotationSet.java:144)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  at  org.apache.catalina.startup.WebAnnotationSet.loadApplicationListenerAnnotations(WebAnnotationSet.java:72)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  at  org.apache.catalina.startup.WebAnnotationSet.loadApplicationAnnotations(WebAnnotationSet.java:55)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  at  org.apache.catalina.startup.ContextConfig.applicationAnnotationsConfig(ContextConfig.java:296)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  at  org.apache.catalina.startup.ContextConfig.start(ContextConfig.java:1061)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  at  org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:260)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  at  org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  at  org.apache.catalina.core.StandardContext.start(StandardContext.java:4237)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  at  org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:759)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  at  org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:739)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  at  org.apache.catalina.core.StandardHost.addChild(StandardHost.java:524)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  at  org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:919)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  at  org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:882)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  at  org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:491)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1137)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  at  org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:310)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  at  org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  at  org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1021)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  at org.apache.catalina.core.StandardHost.start(StandardHost.java:718)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  at  org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1013)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  at  org.apache.catalina.core.StandardEngine.start(StandardEngine.java:442)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  at  org.apache.catalina.core.StandardService.start(StandardService.java:450)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  at  org.apache.catalina.core.StandardServer.start(StandardServer.java:709)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  at org.apache.catalina.startup.Catalina.start(Catalina.java:551)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at  sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at  sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  at  sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  at java.lang.reflect.Method.invoke(Method.java:597)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at  org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:287)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at  org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:412)<br />2014-12-4  16:09:00 org.apache.coyote.http11.Http11NioProtocol start</div> <div>&nbsp;<br /><br /><div>[data@server7 tomcat-news]$ vi bin/catalina.sh&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div></div> <div>export LANG=zh_CN.GBK</div> <div>&nbsp;<br /><div>-Dfile.encoding=GBK</div>vi&nbsp; /etc/profile<br /><div>#export JAVA_HOME=/opt/java/jrockit-jdk<br />export JAVA_HOME=/opt/datam/java/jdk1.8.0_25</div><br />jrockit-jdk 存在这个问题，换成sun jdk<br /><br /><div>https://community.oracle.com/thread/2213951?tstart=0</div></div></div><img src ="http://www.blogjava.net/sdyjmc/aggbug/421044.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sdyjmc/" target="_blank">单飞</a> 2014-12-04 16:37 <a href="http://www.blogjava.net/sdyjmc/archive/2014/12/04/421044.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>android 使用ssh2协议登陆服务器客户端</title><link>http://www.blogjava.net/sdyjmc/archive/2013/11/20/406592.html</link><dc:creator>单飞</dc:creator><author>单飞</author><pubDate>Wed, 20 Nov 2013 09:52:00 GMT</pubDate><guid>http://www.blogjava.net/sdyjmc/archive/2013/11/20/406592.html</guid><wfw:comment>http://www.blogjava.net/sdyjmc/comments/406592.html</wfw:comment><comments>http://www.blogjava.net/sdyjmc/archive/2013/11/20/406592.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sdyjmc/comments/commentRss/406592.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sdyjmc/services/trackbacks/406592.html</trackback:ping><description><![CDATA[<div>JuiceSSH - SSH Client</div>支持ssh2 协议，支持使用key文件。<br /><br />把下面的网址：<br /><div>https://play.google.com/store/apps/details?id=com.sonelli.juicessh</div>拷贝到<br /><div><a href="http://apps.evozi.com/apk-downloader/">http://apps.evozi.com/apk-downloader/</a></div>就可以从google app 下载apk文件了，然后使用360手机助手安装到手机里面<img src ="http://www.blogjava.net/sdyjmc/aggbug/406592.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sdyjmc/" target="_blank">单飞</a> 2013-11-20 17:52 <a href="http://www.blogjava.net/sdyjmc/archive/2013/11/20/406592.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>监控Hornetq消息数目--monitor hornetq message count</title><link>http://www.blogjava.net/sdyjmc/archive/2013/01/25/394779.html</link><dc:creator>单飞</dc:creator><author>单飞</author><pubDate>Fri, 25 Jan 2013 09:34:00 GMT</pubDate><guid>http://www.blogjava.net/sdyjmc/archive/2013/01/25/394779.html</guid><wfw:comment>http://www.blogjava.net/sdyjmc/comments/394779.html</wfw:comment><comments>http://www.blogjava.net/sdyjmc/archive/2013/01/25/394779.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sdyjmc/comments/commentRss/394779.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sdyjmc/services/trackbacks/394779.html</trackback:ping><description><![CDATA[1. run.sh<br /><br /><div><div>export JVM_ARGS="$CLUSTER_PROPS&nbsp; -Xms512M -Xmx1024M  -Dhornetq.config.dir=$CONFIG_DIR  -Djava.util.logging.config.file=$CONFIG_DIR/loggin<br />g.properties  -Djava.library.path=. -Dcom.sun.management.jmxremote  -Dcom.sun.management.jmxremote.port=4000  -Dcom.sun.management.jmxremo<br />te.authenticate=false  -Dcom.sun.management.jmxremote.ssl=false  -Djava.rmi.server.hostname=hadoop119"<br />#export JVM_ARGS="-Xmx512M  -Djava.util.logging.config.file=$CONFIG_DIR/logging.properties  -Dhornetq.config.dir=$CONFIG_DIR -Djava.libra<br />ry.path=. -Xdebug  -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"<br /><br /><div><div>2.hornetq-configuration.xml </div> <div>&nbsp;</div> <div>[hadoop@server119 hornetq-2.2.14.Final]$ cd  config/stand-alone/non-clustered/<br />[hadoop@server119 non-clustered]$ vi  hornetq-configuration.xml </div> <div>&nbsp;</div> <div>&nbsp;&lt;message-counter-enabled&gt;true&lt;/message-counter-enabled&gt;</div></div></div></div>3.配置jmx<br /><br /><div><div>jnp=jnp://192.168.0.119:1099<br />jmx_url=service:jmx:rmi:///jndi/rmi://192.168.0.119:4000/jmxrmi</div></div><br /><br />3.<div>https://code.google.com/p/jms-monitor</div><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; "><br /><br /></span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;Task&nbsp;</span><span style="color: #0000FF; ">implements</span><span style="color: #000000; ">&nbsp;Runnable&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;Log&nbsp;log&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;LogFactory.getLog(Main.</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">);<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;run()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Context&nbsp;initialContext&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JMXConnector&nbsp;connector&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">;<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">try</span><span style="color: #000000; ">&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;initialContext&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;InitialContext(Service.getEnv());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;queueName&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">/queue/</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;Service.getProperties().getProperty(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">queue.name</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Queue&nbsp;queue&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(Queue)&nbsp;initialContext.lookup(queueName);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ObjectName&nbsp;on&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;ObjectNameBuilder.DEFAULT.getJMSQueueObjectName(queue.getQueueName());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;connector&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;JMXConnectorFactory.connect(</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;JMXServiceURL(Service.getProperties().getProperty(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">jmx_url</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)),&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;HashMap());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MBeanServerConnection&nbsp;mbsc&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;connector.getMBeanServerConnection();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JMSQueueControl&nbsp;queueControl&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;MBeanServerInvocationHandler.newProxyInstance(mbsc,&nbsp;on,&nbsp;JMSQueueControl.</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #0000FF; ">false</span><span style="color: #000000; ">);<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;counters&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;queueControl.listMessageCounter();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageCounterInfo&nbsp;messageCounter&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;MessageCounterInfo.fromJSON(counters);<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;count&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;messageCounter.getDepth();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(count&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;Integer.valueOf(Service.getProperties().getProperty(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">warning_msg_count</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log.info(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">jms&nbsp;queue&nbsp;length&nbsp;is&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;count&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">.&nbsp;Additional&nbsp;info:&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;Gson().toJson(messageCounter));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(count&nbsp;</span><span style="color: #000000; ">&gt;=</span><span style="color: #000000; ">&nbsp;Integer.valueOf(Service.getProperties().getProperty(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">warning_msg_count</span><span style="color: #000000; ">"</span><span style="color: #000000; ">))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;count&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;Integer.valueOf(Service.getProperties().getProperty(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">fatal_msg_count</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log.warn(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">jms&nbsp;queue&nbsp;length&nbsp;is&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;count&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">.&nbsp;Additional&nbsp;info:&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;Gson().toJson(messageCounter));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(count&nbsp;</span><span style="color: #000000; ">&gt;=</span><span style="color: #000000; ">&nbsp;Integer.valueOf(Service.getProperties().getProperty(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">fatal_msg_count</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log.fatal(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">jms&nbsp;queue&nbsp;length&nbsp;is&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;count&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">.&nbsp;Additional&nbsp;info:&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;Gson().toJson(messageCounter));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">catch</span><span style="color: #000000; ">&nbsp;(Exception&nbsp;ex)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log.error(ex.getMessage(),&nbsp;ex);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">finally</span><span style="color: #000000; ">&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">try</span><span style="color: #000000; ">&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;connector.close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;initialContext.close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">catch</span><span style="color: #000000;">&nbsp;(Exception&nbsp;e)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log.error(e.getMessage(),&nbsp;e);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /></span></div><br /><br />4.查看结果<br /><br /><div>25:01:2013 17:16:18.891&nbsp; INFO pool-1-thread-1 Main:run:50 - jms queue length is 0. Additional info: {"name":"DLQ","subscription":"null","durable":true,"count":0,"countDelta":0,"depth":0,"depthDelta":0,"lastAddTimestamp":"70-1-1 8:00:00","udpateTimestamp":"13-1-25 17:16:05"}<br />25:01:2013 17:16:19.891&nbsp; INFO pool-1-thread-1 Main:run:50 - jms queue length is 0. Additional info: {"name":"DLQ","subscription":"null","durable":true,"count":0,"countDelta":0,"depth":0,"depthDelta":0,"lastAddTimestamp":"70-1-1 8:00:00","udpateTimestamp":"13-1-25 17:16:15"}<br /></div><br /><img src ="http://www.blogjava.net/sdyjmc/aggbug/394779.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sdyjmc/" target="_blank">单飞</a> 2013-01-25 17:34 <a href="http://www.blogjava.net/sdyjmc/archive/2013/01/25/394779.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>velocity 字符串相加</title><link>http://www.blogjava.net/sdyjmc/archive/2012/12/12/392863.html</link><dc:creator>单飞</dc:creator><author>单飞</author><pubDate>Wed, 12 Dec 2012 06:44:00 GMT</pubDate><guid>http://www.blogjava.net/sdyjmc/archive/2012/12/12/392863.html</guid><wfw:comment>http://www.blogjava.net/sdyjmc/comments/392863.html</wfw:comment><comments>http://www.blogjava.net/sdyjmc/archive/2012/12/12/392863.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sdyjmc/comments/commentRss/392863.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sdyjmc/services/trackbacks/392863.html</trackback:ping><description><![CDATA[<div>获取页面请求基础地址：<br /><br />#set( $basePath = "$!{request.scheme}://$!{request.serverName}:$!{request.serverPort}$!{request.contextPath}/" )<br /></div><div>String Literals<br />当你使用#set directive，String literal 封闭在一对双引号内。象下面：<br />#set( $directoryRoot = "www" )<br />#set( $templateName = "index.vm" )<br />#set( $template = "$directoryRoot/$templateName" )<br />$template<br />上面这段代码的输出结果为：<br />www/index.vm<br />但是，当string literal 被封装在单引号内时，它将不被解析：<br />#set( $foo = "bar" )<br />$foo<br />#set( $blargh = '$foo' )<br />$blargh<br />输出为：<br />bar $foo<br />上面这个特性可以通过修改 velocity.properties 文件的 stringliterals.interpolate = false 的<br />值来改变上面的特性是否有效。</div><img src ="http://www.blogjava.net/sdyjmc/aggbug/392863.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sdyjmc/" target="_blank">单飞</a> 2012-12-12 14:44 <a href="http://www.blogjava.net/sdyjmc/archive/2012/12/12/392863.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【原创】系统宕机导致flare db 因为临时文件flare.xml 损坏不能启动故障排除记录</title><link>http://www.blogjava.net/sdyjmc/archive/2012/11/21/391686.html</link><dc:creator>单飞</dc:creator><author>单飞</author><pubDate>Wed, 21 Nov 2012 02:40:00 GMT</pubDate><guid>http://www.blogjava.net/sdyjmc/archive/2012/11/21/391686.html</guid><wfw:comment>http://www.blogjava.net/sdyjmc/comments/391686.html</wfw:comment><comments>http://www.blogjava.net/sdyjmc/archive/2012/11/21/391686.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sdyjmc/comments/commentRss/391686.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sdyjmc/services/trackbacks/391686.html</trackback:ping><description><![CDATA[<div>/db/flare/flare/bin/flared --daemonize --data-dir /db/flare/data/proxy/ --index-server-name 127.0.0.1 --index-server-port 12120 --server-name 127.0.0.1 --server-port 11211<br />/db/flare/flare/bin/flared --daemonize --data-dir /db/flare/data/master1/ --index-server-name 127.0.0.1 --index-server-port 12120 --server-name 127.0.0.1 --server-port 11212 &nbsp;<br />/db/flare/flare/bin/flared --daemonize -f /db/flare/flare/etc/flare-proxy.conf<br />&nbsp;<br />data-dir = /db/flare/data/proxy<br />index-server-name = localhost<br />index-server-port = 12120<br />log-facility = local1<br />server-name = localhost<br />server-port = 11211<br /><div>&nbsp;</div>1.查看flare日志：<br />[flare@server logs]# vi /etc/syslog.conf <br /><br /># falre logs<br />local0.*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /opt/logs/flare-index.log<br />local2.*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /opt/logs/flare-master.log<br />local1.*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /opt/logs/flare-proxy.log<br />&nbsp;<br />&nbsp;<br />[flare@server flare]$ cd /opt/logs/<br />[flare@server logs]$ ll<br />总计 15836<br />-rw------- 1 flare flare 11889779 09-10 10:16 flare-index.log<br />-rw------- 1 flare flare&nbsp;&nbsp;&nbsp; 23490 09-04 17:15 flare-master.log<br />-rw------- 1 flare flare&nbsp; 4270801 09-10 09:55 flare-proxy.log<br />&nbsp;<br />&nbsp;<br />分析日志查询为啥起不起来。<br /><br />[flare@server logs]# tail -f flare-proxy.log <br />&nbsp;<br />2.查看端口是否被占用 <br />[flare@server logs]# lsof -i:11212 <br />[flare@server logs]# lsof -i:11211<br />[flare@server logs]# lsof -i:11210<br /><br />3.查看tmp临时目录文件是否正常<br />vi /db/flare/tmp/flare.xml<br />发现改文件损坏，从备份程序拷贝<br />cp /opt/flare/tmp/flare.xml /db/flare/tmp/<br /><br /><br />启动成功<br /> </div><img src ="http://www.blogjava.net/sdyjmc/aggbug/391686.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sdyjmc/" target="_blank">单飞</a> 2012-11-21 10:40 <a href="http://www.blogjava.net/sdyjmc/archive/2012/11/21/391686.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Aspose.Words.jdk16.jar ccccccccccccccc</title><link>http://www.blogjava.net/sdyjmc/archive/2012/11/20/391637.html</link><dc:creator>单飞</dc:creator><author>单飞</author><pubDate>Tue, 20 Nov 2012 05:52:00 GMT</pubDate><guid>http://www.blogjava.net/sdyjmc/archive/2012/11/20/391637.html</guid><wfw:comment>http://www.blogjava.net/sdyjmc/comments/391637.html</wfw:comment><comments>http://www.blogjava.net/sdyjmc/archive/2012/11/20/391637.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sdyjmc/comments/commentRss/391637.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sdyjmc/services/trackbacks/391637.html</trackback:ping><description><![CDATA[cccccccccccccccccccccccccccccccccccccc<img src ="http://www.blogjava.net/sdyjmc/aggbug/391637.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sdyjmc/" target="_blank">单飞</a> 2012-11-20 13:52 <a href="http://www.blogjava.net/sdyjmc/archive/2012/11/20/391637.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>把字符串第一个字母大写</title><link>http://www.blogjava.net/sdyjmc/archive/2012/03/20/372291.html</link><dc:creator>单飞</dc:creator><author>单飞</author><pubDate>Tue, 20 Mar 2012 09:15:00 GMT</pubDate><guid>http://www.blogjava.net/sdyjmc/archive/2012/03/20/372291.html</guid><wfw:comment>http://www.blogjava.net/sdyjmc/comments/372291.html</wfw:comment><comments>http://www.blogjava.net/sdyjmc/archive/2012/03/20/372291.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/sdyjmc/comments/commentRss/372291.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sdyjmc/services/trackbacks/372291.html</trackback:ping><description><![CDATA[<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080;">1</span>&nbsp;<span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;String&nbsp;getMethodName(String&nbsp;fildeName){<br /></span><span style="color: #008080;">2</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">byte</span><span style="color: #000000;">[]&nbsp;items&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;fildeName.getBytes();<br /></span><span style="color: #008080;">3</span>&nbsp;<span style="color: #000000;">items[</span><span style="color: #000000;">0</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">byte</span><span style="color: #000000;">)((</span><span style="color: #0000ff;">char</span><span style="color: #000000;">)items[</span><span style="color: #000000;">0</span><span style="color: #000000;">]</span><span style="color: #000000;">-</span><span style="color: #000000;">'</span><span style="color: #000000;">a</span><span style="color: #000000;">'</span><span style="color: #000000;">+</span><span style="color: #000000;">'</span><span style="color: #000000;">A</span><span style="color: #000000;">'</span><span style="color: #000000;">);;<br /></span><span style="color: #008080;">4</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;String(items);<br /></span><span style="color: #008080;">5</span>&nbsp;<span style="color: #000000;">}<br /><br /><br />效率是最高的.<br /></span></div><img src ="http://www.blogjava.net/sdyjmc/aggbug/372291.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sdyjmc/" target="_blank">单飞</a> 2012-03-20 17:15 <a href="http://www.blogjava.net/sdyjmc/archive/2012/03/20/372291.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>封装jre安装程序</title><link>http://www.blogjava.net/sdyjmc/archive/2010/12/15/340765.html</link><dc:creator>单飞</dc:creator><author>单飞</author><pubDate>Wed, 15 Dec 2010 03:49:00 GMT</pubDate><guid>http://www.blogjava.net/sdyjmc/archive/2010/12/15/340765.html</guid><wfw:comment>http://www.blogjava.net/sdyjmc/comments/340765.html</wfw:comment><comments>http://www.blogjava.net/sdyjmc/archive/2010/12/15/340765.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sdyjmc/comments/commentRss/340765.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sdyjmc/services/trackbacks/340765.html</trackback:ping><description><![CDATA[因为jre1.6u22安装程序的策略文件没有<br />
<br />
&nbsp;&nbsp;&nbsp; permission java.util.PropertyPermission "file.encoding", "read"; <br />
所以封装了一下jre安装程序<br />
文件准备:<br />
D:\svn1.3\setup\jre-6u22-windows-i586.exe<br />
D:\svn1.3\setup\java.policy<br />
<br />
<br />
java.policy<br />
<br />
这个文件包含了permission java.util.PropertyPermission "file.encoding", "read" 修改后的结果。<br />
<br />
使用setupfactory制作安装脚本:<br />
<br />
<a href="/Files/sdyjmc/setupJRE.sf7.zip">http://www.blogjava.net/Files/sdyjmc/setupJRE.sf7.zip</a><br />
<br />
下载后，去掉.zip后缀使用setupfactory 7导入即可制作自己的jre安装程序。<br />
<img src ="http://www.blogjava.net/sdyjmc/aggbug/340765.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sdyjmc/" target="_blank">单飞</a> 2010-12-15 11:49 <a href="http://www.blogjava.net/sdyjmc/archive/2010/12/15/340765.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>applet访问本地资源，需要修改jre的java.policy</title><link>http://www.blogjava.net/sdyjmc/archive/2010/12/14/340674.html</link><dc:creator>单飞</dc:creator><author>单飞</author><pubDate>Tue, 14 Dec 2010 09:16:00 GMT</pubDate><guid>http://www.blogjava.net/sdyjmc/archive/2010/12/14/340674.html</guid><wfw:comment>http://www.blogjava.net/sdyjmc/comments/340674.html</wfw:comment><comments>http://www.blogjava.net/sdyjmc/archive/2010/12/14/340674.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sdyjmc/comments/commentRss/340674.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sdyjmc/services/trackbacks/340674.html</trackback:ping><description><![CDATA[Java Plug-in 1.6.0_22<br />
使用 JRE 版本 1.6.0_22-b04 Java HotSpot(TM) Client VM<br />
用户主目录 = C:\Documents and Settings\Administrator<br />
----------------------------------------------------<br />
c:&nbsp;&nbsp; 清除控制台窗口<br />
f:&nbsp;&nbsp; 终结在结束队列上的对象<br />
g:&nbsp;&nbsp; 垃圾收集<br />
h:&nbsp;&nbsp; 显示此帮助消息<br />
l:&nbsp;&nbsp; 转储类载入程序列表<br />
m:&nbsp;&nbsp; 打印内存使用<br />
o:&nbsp;&nbsp; 触发日志记录<br />
q:&nbsp;&nbsp; 隐藏控制台<br />
r:&nbsp;&nbsp; 重新载入策略配置<br />
s:&nbsp;&nbsp; 转储系统和部署属性<br />
t:&nbsp;&nbsp; 转储线程列表<br />
v:&nbsp;&nbsp; 转储线程堆栈<br />
x:&nbsp;&nbsp; 清除类载入程序高速缓存<br />
0-5: 设置跟踪级别为&lt;n&gt;<br />
----------------------------------------------------<br />
<br />
<br />
java.security.AccessControlException: access denied (java.util.PropertyPermission file.encoding read)<br />
&nbsp;&nbsp;&nbsp; at java.security.AccessControlContext.checkPermission(Unknown Source)<br />
&nbsp;&nbsp;&nbsp; at java.security.AccessController.checkPermission(Unknown Source)<br />
&nbsp;&nbsp;&nbsp; at java.lang.SecurityManager.checkPermission(Unknown Source)<br />
&nbsp;&nbsp;&nbsp; at java.lang.SecurityManager.checkPropertyAccess(Unknown Source)<br />
&nbsp;&nbsp;&nbsp; at java.lang.System.getProperty(Unknown Source)<br />
&nbsp;&nbsp;&nbsp; at org.apache.tools.zip.ZipEncodingHelper.isUTF8(ZipEncodingHelper.java:246)<br />
&nbsp;&nbsp;&nbsp; at org.apache.tools.zip.ZipEncodingHelper.getZipEncoding(ZipEncodingHelper.java:214)<br />
&nbsp;&nbsp;&nbsp; at org.apache.tools.zip.ZipOutputStream.&lt;init&gt;(ZipOutputStream.java:236)<br />
&nbsp;&nbsp;&nbsp; at com.smapp.service.exchange.web.upload.zip.ZipBean.&lt;init&gt;(ZipBean.java:39)<br />
&nbsp;&nbsp;&nbsp; at com.smapp.service.exchange.web.upload.MainPanel$3.&lt;init&gt;(MainPanel.java:443)<br />
&nbsp;&nbsp;&nbsp; at com.smapp.service.exchange.web.upload.MainPanel.zipFile(MainPanel.java:443)<br />
&nbsp;&nbsp;&nbsp; at com.smapp.service.exchange.web.upload.MainPanel.access$3(MainPanel.java:440)<br />
&nbsp;&nbsp;&nbsp; at com.smapp.service.exchange.web.upload.MainPanel$2.run(MainPanel.java:364)<br />
java.lang.NullPointerException<br />
&nbsp;&nbsp;&nbsp; at com.smapp.service.exchange.web.upload.zip.ZipBean.makeZipSize(ZipBean.java:87)<br />
&nbsp;&nbsp;&nbsp; at com.smapp.service.exchange.web.upload.zip.ZipBean.getMaxProcessValue(ZipBean.java:108)<br />
&nbsp;&nbsp;&nbsp; at com.smapp.service.exchange.web.upload.MainPanel.zipFile(MainPanel.java:450)<br />
&nbsp;&nbsp;&nbsp; at com.smapp.service.exchange.web.upload.MainPanel.access$3(MainPanel.java:440)<br />
&nbsp;&nbsp;&nbsp; at com.smapp.service.exchange.web.upload.MainPanel$2.run(MainPanel.java:364)<br />
2010-12-14 16:51:59 com.smapp.service.exchange.web.upload.zip.ZipBean getMaxProcessValue<br />
信息: 总体进度:0<br />
java.lang.NullPointerException<br />
&nbsp;&nbsp;&nbsp; at com.smapp.service.exchange.web.upload.zip.ZipBean.closeZip(ZipBean.java:57)<br />
&nbsp;&nbsp;&nbsp; at com.smapp.service.exchange.web.upload.MainPanel.zipFile(MainPanel.java:455)<br />
&nbsp;&nbsp;&nbsp; at com.smapp.service.exchange.web.upload.MainPanel.access$3(MainPanel.java:440)<br />
&nbsp;&nbsp;&nbsp; at com.smapp.service.exchange.web.upload.MainPanel$2.run(MainPanel.java:364)<br />
<br />
xp、win7系统下面会出现改问题，修改<br />
c:\Program Files\Java\jdk1.6.0_21\jre\lib\security\java.policy<br />
最后增加一行代码:<br />
permission java.util.PropertyPermission "file.encoding", "read";<br />
};<br />
<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/sdyjmc/aggbug/340674.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sdyjmc/" target="_blank">单飞</a> 2010-12-14 17:16 <a href="http://www.blogjava.net/sdyjmc/archive/2010/12/14/340674.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Web工程依赖多个工程，编译运行找不到类问题</title><link>http://www.blogjava.net/sdyjmc/archive/2010/12/09/340115.html</link><dc:creator>单飞</dc:creator><author>单飞</author><pubDate>Thu, 09 Dec 2010 02:21:00 GMT</pubDate><guid>http://www.blogjava.net/sdyjmc/archive/2010/12/09/340115.html</guid><wfw:comment>http://www.blogjava.net/sdyjmc/comments/340115.html</wfw:comment><comments>http://www.blogjava.net/sdyjmc/archive/2010/12/09/340115.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sdyjmc/comments/commentRss/340115.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sdyjmc/services/trackbacks/340115.html</trackback:ping><description><![CDATA[portal 工程依赖于dao、model、workflow、util工程，通过增加依赖工程能解决编译问题。<br />
但是使用tomcat调试的时候，会找不到其它工程的class。<br />
在工程名上右击，选 Properties，找到 Java Build Path，选第二个选项卡&#8220;Projects&#8221;，点&#8220;Add...&#8221;按钮， <br />
会弹出&#8220;Required Project Selection&#8221;框，里面会出现这个工作区中除了当前工程之外的其他工程，把需要链 <br />
接的工程勾选上点&#8220;OK&#8221;就可以了<br />
<br />
右击工程名,选择Properties,选择libraries Tab,点Add External Class Folder..., <br />
选择你lib工程的目标输出文件夹,添加进去应该就可以<br />
<br />
这样可以解决多个依赖工程自动输出class的问题。<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;classpathentry combineaccessrules="false" kind="src" path="/business"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;classpathentry combineaccessrules="false" kind="src" path="/dao"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;classpathentry combineaccessrules="false" kind="src" path="/datamodel"/&gt;<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/sdyjmc/aggbug/340115.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sdyjmc/" target="_blank">单飞</a> 2010-12-09 10:21 <a href="http://www.blogjava.net/sdyjmc/archive/2010/12/09/340115.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ext3上传文件为空</title><link>http://www.blogjava.net/sdyjmc/archive/2010/12/04/339783.html</link><dc:creator>单飞</dc:creator><author>单飞</author><pubDate>Sat, 04 Dec 2010 03:33:00 GMT</pubDate><guid>http://www.blogjava.net/sdyjmc/archive/2010/12/04/339783.html</guid><wfw:comment>http://www.blogjava.net/sdyjmc/comments/339783.html</wfw:comment><comments>http://www.blogjava.net/sdyjmc/archive/2010/12/04/339783.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sdyjmc/comments/commentRss/339783.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sdyjmc/services/trackbacks/339783.html</trackback:ping><description><![CDATA[// 创建一个FormPanel组件实例<br />
&nbsp;&nbsp;&nbsp; var loginForm = new Ext.FormPanel({<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id:'loginForm',// formPanel组件的ID<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; width:600,// 组件宽度<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; height:300,// 组件高度<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; frame:true,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fileUpload: true,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; enctype:'multipart/form-data',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //实现非AJAX提交表单一定要加下面的两行！<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;onSubmit: Ext.emptyFn, <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; method:'POST', <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; align:'center',// 组件居左布局，还有right和center两个值可以选择<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name: 'loginForm', //组件名称 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; labelAlign:"left",//让label居右<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; labelWidth:120,//定义label的宽度<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; items:[{ <br />
<br />
xtype: "textfield",<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inputType:'file',<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name: 'processFile',<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fieldLabel: '文件',<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; allowBlank:false, <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; anchor:'95%'<br />
<br />
<br />
public void deploy(HttpServletRequest request, HttpServletResponse response)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; throws Exception {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; request.setCharacterEncoding("utf-8");<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddhhmmss");&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; String tmpDir = getServletContext().getRealPath("/temp");// 初始化上传文件的临时寄放目录<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; String uploadPath = getServletContext().getRealPath("/upload");// 初始化上传文件后的保存<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (ServletFileUpload.isMultipartContent(request)) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;DiskFileItemFactory factory = new DiskFileItemFactory(); <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;//指定在内存中缓存数据大小,单位为byte,这里设为1Mb&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; factory.setSizeThreshold(1 * 1024 * 1024);&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; factory.setRepository(new File(tmpDir));&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ServletFileUpload sfu = new ServletFileUpload(factory);&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 指定单个上传文件的最大尺寸,单位:字节，这里设为5Mb&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sfu.setFileSizeMax(100 * 1024 * 1024);&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //指定一次上传多个文件的总尺寸,单位:字节，这里设为10Mb&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sfu.setSizeMax(100 * 1024 * 1024);&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sfu.setHeaderEncoding("UTF-8"); //设置编码，因为我的jsp页面的编码是utf-8的&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FileItemIterator fii = sfu.getItemIterator(request);// 解析request请求&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; uploadPath = uploadPath + "\\jbpm\\"; // 选定上传的目录此处为当前目录&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!new File(uploadPath).isDirectory()){&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new File(uploadPath).mkdirs(); //选定上传的目录此处为当前目录，没有则创建&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int index = 0;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (fii.hasNext()) {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FileItemStream fis = fii.next();// 从集合中获得一个文件流&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!fis.isFormField() &amp;&amp; fis.getName().length() &gt; 0) {// 过滤掉表单中非文件域&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String fileName = fis.getName();// 获得上传文件的文件名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BufferedInputStream in = new BufferedInputStream(fis.openStream());&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BufferedOutputStream out = new BufferedOutputStream(&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new FileOutputStream(new File(uploadPath + "\\" + fileName)));&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Streams.copy(in, out, true); // 开始把文件写到你指定的上传文件夹&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; index++;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } catch (Exception e) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; response.setContentType("text/html");<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; response.getWriter().print("{success:true}");<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
上传文件为空:因为：<br />
&nbsp;&nbsp;&nbsp; &lt;filter-mapping&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;!--拦截所有的URL请求--&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;filter-name&gt;struts2&lt;/filter-name&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;!--上传文件会不起作用--&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;!-- url-pattern&gt;/*&lt;/url-pattern --&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;*.action&lt;/url-pattern&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/filter-mapping&gt;<br />
<br />
原因就是因为在web.xml中配置了Struts的filter<br />
&lt;filter-mapping&gt;<br />
&nbsp;       &lt;filter-name&gt;struts2&lt;/filter-name&gt;<br />
&nbsp;       &lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br />
&lt;/filter-mapping&gt;<br />
<br />
改成<br />
<br />
&lt;filter-mapping&gt;<br />
&nbsp;       &lt;filter-name&gt;struts2&lt;/filter-name&gt;<br />
&nbsp;       &lt;url-pattern&gt;*.action&lt;/url-pattern&gt;<br />
&lt;/filter-mapping&gt;<br />
<br />
就可以了<br />
<br />
<br />
<img src ="http://www.blogjava.net/sdyjmc/aggbug/339783.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sdyjmc/" target="_blank">单飞</a> 2010-12-04 11:33 <a href="http://www.blogjava.net/sdyjmc/archive/2010/12/04/339783.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>求救:jbpm4.3部署到weblogic报错</title><link>http://www.blogjava.net/sdyjmc/archive/2010/11/24/338973.html</link><dc:creator>单飞</dc:creator><author>单飞</author><pubDate>Wed, 24 Nov 2010 12:56:00 GMT</pubDate><guid>http://www.blogjava.net/sdyjmc/archive/2010/11/24/338973.html</guid><wfw:comment>http://www.blogjava.net/sdyjmc/comments/338973.html</wfw:comment><comments>http://www.blogjava.net/sdyjmc/archive/2010/11/24/338973.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/sdyjmc/comments/commentRss/338973.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sdyjmc/services/trackbacks/338973.html</trackback:ping><description><![CDATA[h name 'processEngine' defined in ServletContext resource [/WEB-INF/classes/appl<br />
icationContext.xml]: Instantiation of bean failed; nested exception is org.sprin<br />
gframework.beans.factory.BeanDefinitionStoreException: Factory method [public or<br />
g.jbpm.api.ProcessEngine org.jbpm.pvm.internal.processengine.SpringHelper.create<br />
ProcessEngine()] threw exception; nested exception is org.springframework.beans.<br />
factory.BeanCreationException: Error creating bean with name 'sessionFactory' de<br />
fined in ServletContext resource [/WEB-INF/classes/applicationContext.xml]: Invo<br />
cation of init method failed; nested exception is org.hibernate.HibernateExcepti<br />
on: Errors in named queries: findTasks, findMessages, findTimers, findGroupsByUs<br />
erAndGroupType, findProcessInstanceIds, findJobsWithException, findProcessInstan<br />
ceById, findExecutionById, findProcessInstanceByIdIgnoreSuspended, findGroupsByU<br />
ser, findFirstDueJob, findExclusiveJobs, findFirstAcquirableJob<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.beans.factory.support.ConstructorResolver.instant<br />
iateUsingFactoryMethod(ConstructorResolver.java:572)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.beans.factory.support.AbstractAutowireCapableBean<br />
Factory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:97<br />
3)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.beans.factory.support.AbstractAutowireCapableBean<br />
Factory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:879)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.beans.factory.support.AbstractAutowireCapableBean<br />
Factory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.beans.factory.support.AbstractAutowireCapableBean<br />
Factory.createBean(AbstractAutowireCapableBeanFactory.java:456)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Truncated. see log file for complete stacktrace<br />
<br />
Caused By: org.springframework.beans.factory.BeanDefinitionStoreException: Facto<br />
ry method [public org.jbpm.api.ProcessEngine org.jbpm.pvm.internal.processengine<br />
.SpringHelper.createProcessEngine()] threw exception; nested exception is org.sp<br />
ringframework.beans.factory.BeanCreationException: Error creating bean with name<br />
&nbsp;'sessionFactory' defined in ServletContext resource [/WEB-INF/classes/applicati<br />
onContext.xml]: Invocation of init method failed; nested exception is org.hibern<br />
ate.HibernateException: Errors in named queries: findTasks, findMessages, findTi<br />
mers, findGroupsByUserAndGroupType, findProcessInstanceIds, findJobsWithExceptio<br />
n, findProcessInstanceById, findExecutionById, findProcessInstanceByIdIgnoreSusp<br />
ended, findGroupsByUser, findFirstDueJob, findExclusiveJobs, findFirstAcquirable<br />
Job<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.beans.factory.support.SimpleInstantiationStrategy<br />
.instantiate(SimpleInstantiationStrategy.java:154)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.beans.factory.support.ConstructorResolver.instant<br />
iateUsingFactoryMethod(ConstructorResolver.java:561)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.beans.factory.support.AbstractAutowireCapableBean<br />
Factory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:97<br />
3)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.beans.factory.support.AbstractAutowireCapableBean<br />
Factory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:879)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.beans.factory.support.AbstractAutowireCapableBean<br />
Factory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Truncated. see log file for complete stacktrace<br />
<br />
Caused By: org.springframework.beans.factory.BeanCreationException: Error creati<br />
ng bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/<br />
classes/applicationContext.xml]: Invocation of init method failed; nested except<br />
ion is org.hibernate.HibernateException: Errors in named queries: findTasks, fin<br />
dMessages, findTimers, findGroupsByUserAndGroupType, findProcessInstanceIds, fin<br />
dJobsWithException, findProcessInstanceById, findExecutionById, findProcessInsta<br />
nceByIdIgnoreSuspended, findGroupsByUser, findFirstDueJob, findExclusiveJobs, fi<br />
ndFirstAcquirableJob<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.beans.factory.support.AbstractAutowireCapableBean<br />
Factory.initializeBean(AbstractAutowireCapableBeanFactory.java:1412)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.beans.factory.support.AbstractAutowireCapableBean<br />
Factory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.beans.factory.support.AbstractAutowireCapableBean<br />
Factory.createBean(AbstractAutowireCapableBeanFactory.java:456)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.beans.factory.support.AbstractBeanFactory$1.getOb<br />
ject(AbstractBeanFactory.java:291)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.beans.factory.support.DefaultSingletonBeanRegistr<br />
y.getSingleton(DefaultSingletonBeanRegistry.java:222)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Truncated. see log file for complete stacktrace<br />
<br />
Caused By: org.hibernate.HibernateException: Errors in named queries: findTasks,<br />
&nbsp;findMessages, findTimers, findGroupsByUserAndGroupType, findProcessInstanceIds,<br />
&nbsp;findJobsWithException, findProcessInstanceById, findExecutionById, findProcessI<br />
nstanceByIdIgnoreSuspended, findGroupsByUser, findFirstDueJob, findExclusiveJobs<br />
, findFirstAcquirableJob<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.hibernate.impl.SessionFactoryImpl.&lt;init&gt;(SessionFactoryImpl.java:<br />
397)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.jav<br />
a:1327)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSession<br />
Factory(LocalSessionFactoryBean.java:855)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessi<br />
onFactory(LocalSessionFactoryBean.java:774)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPr<br />
opertiesSet(AbstractSessionFactoryBean.java:211)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Truncated. see log file for complete stacktrace<br />
&gt;<br />
&lt;2010-11-24 下午08时13分23秒 CST&gt; &lt;Error&gt; &lt;Deployer&gt; &lt;BEA-149265&gt; &lt;Failure occur<br />
red in the execution of deployment request with ID '1290600743834' for task '4'.<br />
&nbsp;Error is: 'weblogic.application.ModuleException: '<br />
weblogic.application.ModuleException:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.jav<br />
a:1514)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:486)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleSta<br />
teDriver.java:425)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at weblogic.application.utils.StateMachineDriver.nextState(StateMachineD<br />
river.java:41)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStat<br />
eDriver.java:119)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Truncated. see log file for complete stacktrace<br />
<br />
Caused By: org.hibernate.HibernateException: Errors in named queries: findTasks,<br />
&nbsp;findMessages, findTimers, findGroupsByUserAndGroupType, findProcessInstanceIds,<br />
&nbsp;findJobsWithException, findProcessInstanceById, findExecutionById, findProcessI<br />
nstanceByIdIgnoreSuspended, findGroupsByUser, findFirstDueJob, findExclusiveJobs<br />
, findFirstAcquirableJob<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.hibernate.impl.SessionFactoryImpl.&lt;init&gt;(SessionFactoryImpl.java:<br />
397)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.jav<br />
a:1327)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSession<br />
Factory(LocalSessionFactoryBean.java:855)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessi<br />
onFactory(LocalSessionFactoryBean.java:774)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPr<br />
opertiesSet(AbstractSessionFactoryBean.java:211)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Truncated. see log file for complete stacktrace<br />
&gt;<br />
&lt;2010-11-24 下午08时13分23秒 CST&gt; &lt;Error&gt; &lt;Deployer&gt; &lt;BEA-149202&gt; &lt;Encountered a<br />
n exception while attempting to commit the 1 task for the application 'oa'.&gt;<br />
&lt;2010-11-24 下午08时13分23秒 CST&gt; &lt;Warning&gt; &lt;Deployer&gt; &lt;BEA-149004&gt; &lt;Failures we<br />
re detected while initiating deploy task for application 'oa'.&gt;<br />
&lt;2010-11-24 下午08时13分23秒 CST&gt; &lt;Warning&gt; &lt;Deployer&gt; &lt;BEA-149078&gt; &lt;Stack trace<br />
&nbsp;for message 149004<br />
weblogic.application.ModuleException: :org.hibernate.HibernateException:Errors i<br />
n named queries: findTasks, findMessages, findTimers, findGroupsByUserAndGroupTy<br />
pe, findProcessInstanceIds, findJobsWithException, findProcessInstanceById, find<br />
ExecutionById, findProcessInstanceByIdIgnoreSuspended, findGroupsByUser, findFir<br />
stDueJob, findExclusiveJobs, findFirstAcquirableJob<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.hibernate.impl.SessionFactoryImpl.&lt;init&gt;(SessionFactoryImpl.java:<br />
397)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.jav<br />
a:1327)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSession<br />
Factory(LocalSessionFactoryBean.java:855)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessi<br />
onFactory(LocalSessionFactoryBean.java:774)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPr<br />
opertiesSet(AbstractSessionFactoryBean.java:211)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Truncated. see log file for complete stacktrace<br />
&gt;<br />
&lt;2010-11-24 下午08时13分23秒 CST&gt; &lt;Error&gt; &lt;Console&gt; &lt;BEA-240003&gt; &lt;Console encoun<br />
tered the following error weblogic.application.ModuleException: :org.hibernate.H<br />
ibernateException:Errors in named queries: findTasks, findMessages, findTimers,<br />
findGroupsByUserAndGroupType, findProcessInstanceIds, findJobsWithException, fin<br />
dProcessInstanceById, findExecutionById, findProcessInstanceByIdIgnoreSuspended,<br />
&nbsp;findGroupsByUser, findFirstDueJob, findExclusiveJobs, findFirstAcquirableJob<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.hibernate.impl.SessionFactoryImpl.&lt;init&gt;(SessionFactoryImpl.java:<br />
397)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.jav<br />
a:1327)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSession<br />
Factory(LocalSessionFactoryBean.java:855)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessi<br />
onFactory(LocalSessionFactoryBean.java:774)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPr<br />
opertiesSet(AbstractSessionFactoryBean.java:211)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.beans.factory.support.AbstractAutowireCapableBean<br />
Factory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1469)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.beans.factory.support.AbstractAutowireCapableBean<br />
Factory.initializeBean(AbstractAutowireCapableBeanFactory.java:1409)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.beans.factory.support.AbstractAutowireCapableBean<br />
Factory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.beans.factory.support.AbstractAutowireCapableBean<br />
Factory.createBean(AbstractAutowireCapableBeanFactory.java:456)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.beans.factory.support.AbstractBeanFactory$1.getOb<br />
ject(AbstractBeanFactory.java:291)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.beans.factory.support.DefaultSingletonBeanRegistr<br />
y.getSingleton(DefaultSingletonBeanRegistry.java:222)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBe<br />
an(AbstractBeanFactory.java:288)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.beans.factory.support.AbstractBeanFactory.getBean<br />
(AbstractBeanFactory.java:190)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.context.support.AbstractApplicationContext.getBea<br />
n(AbstractApplicationContext.java:1075)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.jbpm.pvm.internal.processengine.SpringProcessEngine.get(SpringPro<br />
cessEngine.java:116)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.jbpm.pvm.internal.processengine.SpringProcessEngine.create(Spring<br />
ProcessEngine.java:64)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.jbpm.pvm.internal.cfg.ConfigurationImpl.buildProcessEngine(Config<br />
urationImpl.java:90)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.jbpm.pvm.internal.processengine.SpringHelper.createProcessEngine(<br />
SpringHelper.java:50)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.<br />
java:39)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces<br />
sorImpl.java:25)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at java.lang.reflect.Method.invoke(Method.java:597)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.beans.factory.support.SimpleInstantiationStrategy<br />
.instantiate(SimpleInstantiationStrategy.java:142)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.beans.factory.support.ConstructorResolver.instant<br />
iateUsingFactoryMethod(ConstructorResolver.java:561)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.beans.factory.support.AbstractAutowireCapableBean<br />
Factory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:97<br />
3)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.beans.factory.support.AbstractAutowireCapableBean<br />
Factory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:879)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.beans.factory.support.AbstractAutowireCapableBean<br />
Factory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.beans.factory.support.AbstractAutowireCapableBean<br />
Factory.createBean(AbstractAutowireCapableBeanFactory.java:456)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.beans.factory.support.AbstractBeanFactory$1.getOb<br />
ject(AbstractBeanFactory.java:291)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.beans.factory.support.DefaultSingletonBeanRegistr<br />
y.getSingleton(DefaultSingletonBeanRegistry.java:222)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBe<br />
an(AbstractBeanFactory.java:288)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.beans.factory.support.AbstractBeanFactory.getBean<br />
(AbstractBeanFactory.java:190)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.beans.factory.support.DefaultListableBeanFactory.<br />
preInstantiateSingletons(DefaultListableBeanFactory.java:574)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.context.support.AbstractApplicationContext.finish<br />
BeanFactoryInitialization(AbstractApplicationContext.java:895)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.context.support.AbstractApplicationContext.refres<br />
h(AbstractApplicationContext.java:425)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.web.context.ContextLoader.createWebApplicationCon<br />
text(ContextLoader.java:276)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.web.context.ContextLoader.initWebApplicationConte<br />
xt(ContextLoader.java:197)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.springframework.web.context.ContextLoaderListener.contextInitiali<br />
zed(ContextLoaderListener.java:47)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at weblogic.servlet.internal.EventsManager$FireContextListenerAction.run<br />
(EventsManager.java:481)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at weblogic.security.acl.internal.AuthenticatedSubject.doAs(Authenticate<br />
dSubject.java:321)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:<br />
121)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at weblogic.servlet.internal.EventsManager.notifyContextCreatedEvent(Eve<br />
ntsManager.java:181)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAp<br />
pServletContext.java:1863)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at weblogic.servlet.internal.WebAppServletContext.start(WebAppServletCon<br />
text.java:3126)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.jav<br />
a:1512)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:486)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleSta<br />
teDriver.java:425)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at weblogic.application.utils.StateMachineDriver.nextState(StateMachineD<br />
river.java:41)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStat<br />
eDriver.java:119)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at weblogic.application.internal.flow.ScopedModuleDriver.start(ScopedMod<br />
uleDriver.java:200)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at weblogic.application.internal.flow.ModuleListenerInvoker.start(Module<br />
ListenerInvoker.java:247)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleSta<br />
teDriver.java:425)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at weblogic.application.utils.StateMachineDriver.nextState(StateMachineD<br />
river.java:41)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStat<br />
eDriver.java:119)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at weblogic.application.internal.flow.StartModulesFlow.activate(StartMod<br />
ulesFlow.java:27)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at weblogic.application.internal.BaseDeployment$2.next(BaseDeployment.ja<br />
va:1267)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at weblogic.application.utils.StateMachineDriver.nextState(StateMachineD<br />
river.java:41)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at weblogic.application.internal.BaseDeployment.activate(BaseDeployment.<br />
java:409)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at weblogic.application.internal.SingleModuleDeployment.activate(SingleM<br />
oduleDeployment.java:43)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at weblogic.application.internal.DeploymentStateChecker.activate(Deploym<br />
entStateChecker.java:161)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at weblogic.deploy.internal.targetserver.AppContainerInvoker.activate(Ap<br />
pContainerInvoker.java:79)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at weblogic.deploy.internal.targetserver.operations.AbstractOperation.ac<br />
tivate(AbstractOperation.java:569)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at weblogic.deploy.internal.targetserver.operations.ActivateOperation.ac<br />
tivateDeployment(ActivateOperation.java:150)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at weblogic.deploy.internal.targetserver.operations.ActivateOperation.do<br />
Commit(ActivateOperation.java:116)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at weblogic.deploy.internal.targetserver.operations.AbstractOperation.co<br />
mmit(AbstractOperation.java:323)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at weblogic.deploy.internal.targetserver.DeploymentManager.handleDeploym<br />
entCommit(DeploymentManager.java:844)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at weblogic.deploy.internal.targetserver.DeploymentManager.activateDeplo<br />
ymentList(DeploymentManager.java:1253)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at weblogic.deploy.internal.targetserver.DeploymentManager.handleCommit(<br />
DeploymentManager.java:440)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at weblogic.deploy.internal.targetserver.DeploymentServiceDispatcher.com<br />
mit(DeploymentServiceDispatcher.java:163)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallb<br />
ackDeliverer.doCommitCallback(DeploymentReceiverCallbackDeliverer.java:195)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallb<br />
ackDeliverer.access$100(DeploymentReceiverCallbackDeliverer.java:13)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallb<br />
ackDeliverer$2.run(DeploymentReceiverCallbackDeliverer.java:68)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTunin<br />
gWorkManagerImpl.java:528)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)<br />
&gt;<br />
&lt;2010-11-24 下午08时13分44秒 CST&gt; &lt;Warning&gt; &lt;netuix&gt; &lt;BEA-423420&gt; &lt;Redirect is e<br />
xecuted in begin or refresh action. Redirect url is /console/console.portal?_nfp<br />
b=true&amp;_pageLabel=WebAppApplicationOverviewPage&amp;WebAppApplicationOverviewPortlet<br />
handle=com.bea.console.handles.AppDeploymentHandle%28%22com.bea%3AName%3Doa%2CTy<br />
pe%3DAppDeployment%22%29.&gt;<br />
<br />
<br />
<img src ="http://www.blogjava.net/sdyjmc/aggbug/338973.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sdyjmc/" target="_blank">单飞</a> 2010-11-24 20:56 <a href="http://www.blogjava.net/sdyjmc/archive/2010/11/24/338973.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>分析引用的jar文件是否有用</title><link>http://www.blogjava.net/sdyjmc/archive/2010/08/30/330274.html</link><dc:creator>单飞</dc:creator><author>单飞</author><pubDate>Mon, 30 Aug 2010 06:02:00 GMT</pubDate><guid>http://www.blogjava.net/sdyjmc/archive/2010/08/30/330274.html</guid><wfw:comment>http://www.blogjava.net/sdyjmc/comments/330274.html</wfw:comment><comments>http://www.blogjava.net/sdyjmc/archive/2010/08/30/330274.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sdyjmc/comments/commentRss/330274.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sdyjmc/services/trackbacks/330274.html</trackback:ping><description><![CDATA[<div id="bodycol">
<h1>Programmer's Friend</h1>
<h1>Class Dependency Analyzer (CDA) V1.13.1</h1>
<br />
http://www.dependency-analyzer.org/<br />
<br />
</div>
<img src ="http://www.blogjava.net/sdyjmc/aggbug/330274.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sdyjmc/" target="_blank">单飞</a> 2010-08-30 14:02 <a href="http://www.blogjava.net/sdyjmc/archive/2010/08/30/330274.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转] 如何把JAVA工程生成一个.JAR文件，而不是一堆JAR（ECLIPSE生成JAR） </title><link>http://www.blogjava.net/sdyjmc/archive/2010/02/04/311945.html</link><dc:creator>单飞</dc:creator><author>单飞</author><pubDate>Thu, 04 Feb 2010 05:58:00 GMT</pubDate><guid>http://www.blogjava.net/sdyjmc/archive/2010/02/04/311945.html</guid><wfw:comment>http://www.blogjava.net/sdyjmc/comments/311945.html</wfw:comment><comments>http://www.blogjava.net/sdyjmc/archive/2010/02/04/311945.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sdyjmc/comments/commentRss/311945.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sdyjmc/services/trackbacks/311945.html</trackback:ping><description><![CDATA[http://blog.csdn.net/xiaxiaorui2003/archive/2009/07/29/4390401.aspx<br />
<br />
<p>我现在在编写一个JAVA工程，是提供给客户调用的API，但是我的API中大约需要依赖10个.JAR,</p>
<p>以前我都是使用ECLIPSE 的 EXPORT&nbsp; JAR file功能导出 JAR,这样的JAR可以使用，但是我的API种依赖的包客户还是需要导入，这样一共就需要导入11个包了，太麻烦了，现在就是想包括API和依赖的JAR打成一个JAR,这样子就方便多了，</p>
<p>现在找到了，使用ECLIPSE3.4的EXPORT Runnable JAR file功能导出的JAR就是包含了依赖的JAR，导入这一个JAR就可以了，具体操作如下，</p>
<p>1. 先找到你的工程中提供接口的类（要包含MAIN方法），</p>
<p>2. 在该类中右键选择 RUN as </p>
<p>3. 选择 Run configurations </p>
<p>4. 在main窗口中选择main class为本类</p>
<p>5. 点击RUN </p>
<p>6. 选择你的工程，右键选择 EXPORT</p>
<p>7. 在弹出的窗口中选择 runnable jar file </p>
<p>8. 在弹出的 runnable jar file&nbsp;export窗口中第一个launch configuration 中选择你刚才配置的类，</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 第二个窗口中选择你要导出的路径</p>
<p>9. 然后选择下一步就OK了</p>
<br />
<img src ="http://www.blogjava.net/sdyjmc/aggbug/311945.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sdyjmc/" target="_blank">单飞</a> 2010-02-04 13:58 <a href="http://www.blogjava.net/sdyjmc/archive/2010/02/04/311945.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]JAVA正则表达式高级用法(分组与捕获)</title><link>http://www.blogjava.net/sdyjmc/archive/2010/01/06/308391.html</link><dc:creator>单飞</dc:creator><author>单飞</author><pubDate>Wed, 06 Jan 2010 02:14:00 GMT</pubDate><guid>http://www.blogjava.net/sdyjmc/archive/2010/01/06/308391.html</guid><wfw:comment>http://www.blogjava.net/sdyjmc/comments/308391.html</wfw:comment><comments>http://www.blogjava.net/sdyjmc/archive/2010/01/06/308391.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sdyjmc/comments/commentRss/308391.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sdyjmc/services/trackbacks/308391.html</trackback:ping><description><![CDATA[http://extjs2.javaeye.com/blog/394128<br />
<br />
正则表达式在字符串处理中经常使用，关于正则简单的用法相信有一点程序基础的人都懂得一些，这里就不介绍简单基础了。这里主要讲解一下在JAVA中实现了的正则的高级用法-分组与捕获。
<br />
<br />
&nbsp;&nbsp;&nbsp; 对于要重复单个字符，非常简单，直接在字符后卖弄加上限定符即可，例如 a+ 表示匹配1个或一个以上的a，a?表示匹配0个或1个a。这些限定符如下所示：
<br />
<br />
&nbsp; X? X，一次或一次也没有
<br />
X* X，零次或多次
<br />
X+ X，一次或多次
<br />
X{n} X，恰好 n 次
<br />
X{n,} X，至少 n 次
<br />
X{n,m} X，至少 n 次，但是不超过 m 次
<br />
<br />
<br />
<br />
<br />
<br />
但是我们如果要对多个字符进行重复怎么办呢？此时我们就要用到分组，我们可以使用小括号"()"来指定要重复的子表达式，然后对这个子表达式进行重复，例如：(abc)? 表示0个或1个abc 这里一个括号的表达式就表示一个分组。
<br />
<br />
<br />
<br />
&nbsp;&nbsp; 分组可以分为两种形式，捕获组和非捕获组。
<br />
<br />
<br />
<br />
捕获组
<br />
<br />
捕获组可以通过从左到右计算其开括号来编号。例如，在表达式 ((A)(B(C))) 中，存在四个这样的组：
<br />
<br />
1&nbsp;&nbsp;&nbsp;&nbsp; ((A)(B(C)))
<br />
2&nbsp;&nbsp;&nbsp;&nbsp; "A
<br />
3&nbsp;&nbsp;&nbsp;&nbsp; (B(C))
<br />
4&nbsp;&nbsp;&nbsp;&nbsp; (C)
<br />
<br />
组零始终代表整个表达式
<br />
<br />
之所以这样命名捕获组是因为在匹配中，保存了与这些组匹配的输入序列的每个子序列。捕获的子序列稍后可以通过 Back 引用在表达式中使用，也可以在匹配操作完成后从匹配器检索。
<br />
<br />
<br />
<br />
Back 引用 是说在后面的表达式中我们可以使用组的编号来引用前面的表达式所捕获到的文本序列(是文本不是正则)。
<br />
<br />
<br />
<br />
例如 ([" ']).* "1&nbsp;&nbsp;
其中使用了分组，"1就是对引号这个分组的引用，它匹配包含在两个引号或者两个单引号中的所有字符串，如，"abc" 或 " ' " 或 ' "
'&nbsp; ，但是请注意，它并不会对" a'或者 'a"匹配。原因上面已经说明，Back引用只是引用文本而不是表达式。
<br />
<br />
<br />
<br />
非捕获组
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 以 (?) 开头的组是纯的非捕获 组，它不捕获文本，也不针对组合计进行计数。就是说，如果小括号中以?号开头，那么这个分组就不会捕获文本，当然也不会有组的编号，因此也不存在Back 引用。
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在Java中，支持的非捕获组，有如下几种：
<br />
<br />
&nbsp;
<br />
&nbsp;&nbsp;&nbsp;
<br />
&nbsp;&nbsp;
<br />
(?=X)&nbsp;&nbsp;&nbsp;&nbsp; X，通过零宽度的正 lookahead
<br />
(?!X)&nbsp;&nbsp;&nbsp;&nbsp; X，通过零宽度的负 lookahead
<br />
(?&lt;=X)&nbsp;&nbsp;&nbsp;&nbsp; X，通过零宽度的正 lookbehind
<br />
(?&lt;!X)&nbsp;&nbsp;&nbsp;&nbsp; X，通过零宽度的负 lookbehind
<br />
&nbsp;
<br />
<br />
<br />
<br />
<br />
这四个非捕获组用于匹配表达式X，但是不包含表达式的文本。
<br />
<br />
(?=X ) 零宽度正先行断言。仅当子表达式 X 在 此位置的右侧匹配时才继续匹配。例如，"w+(?="d) 与后跟数字的单词匹配，而不与该数字匹配。此构造不会回溯。
<br />
(?!X) 零宽度负先行断言。仅当子表达式 X 不在 此位置的右侧匹配时才继续匹配。例如，例如，"w+(?!"d) 与后不跟数字的单词匹配，而不与该数字匹配。
<br />
(?&lt;=X) 零宽度正后发断言。仅当子表达式 X 在 此位置的左侧匹配时才继续匹配。例如，(?&lt;=19)99 与跟在 19 后面的 99 的实例匹配。此构造不会回溯。
<br />
(?&lt;!X) 零宽度负后发断言。仅当子表达式 X 不在此位置的左侧匹配时才继续匹配。例如，(?&lt;!19)99 与不跟在 19 后面的 99 的实例匹配
<br />
<br />
<br />
<br />
<br />
<br />
<br />
举例：
<br />
<br />
<br />
<br />
上面都是理论性的介绍，这里就使用一些例子来说明一下问题：
<br />
<br />
&nbsp;&nbsp; 1、测试匹配性&nbsp;&nbsp; (?&lt;!4)56(?=9) 这里的含义就是匹配后面的文本56前面不能是4，后面必须是9组成。因此，可以匹配如下文本 5569&nbsp; ，与4569不匹配。
<br />
<br />
<br />
<br />
&nbsp; 2 、提取字符串&nbsp;&nbsp; 提取 da12bka3434bdca4343bdca234bm&nbsp;&nbsp; 提取包含在字符a和b之间的数字，但是这个a之前的字符不能是c,b后面的字符必须是d才能提取。
<br />
<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 例如这里就只有3434这个数字满足要求。那么我们怎么提取呢？
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 首先我们写出提取这个字符串的表达式： (?&lt;!c)a("d+)bd&nbsp; 这里就只有一个捕获组("d+)
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JAVA代码片段如下：
<br />
<br />
Pattern p = Pattern.compile("(?&lt;!c)a(""d+)bd");
<br />
Matcher m = p.matcher("da12bca3434bdca4343bdca234bm");
<br />
while(m.find()){
<br />
&nbsp;&nbsp; System.out.println(m.group(1)); //我们只要捕获组1的数字即可。结果 3434
<br />
&nbsp;&nbsp; System.out.println(m.group(0)); // 0组是整个表达式，看这里，并没有提炼出(?&lt;!c)的字符 。结果 a3434bd
<br />
}
<br />
&nbsp;&nbsp;&nbsp; 可以看到，非捕获组，最后是不会返回结果的，因为它本身并不捕获文本。
<br />
<br />
<br />
<br />
正则表达式功能其实非常强大，这里只是对高级用法的简单探讨。有兴趣的朋友和本人共同讨论。
<img src ="http://www.blogjava.net/sdyjmc/aggbug/308391.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sdyjmc/" target="_blank">单飞</a> 2010-01-06 10:14 <a href="http://www.blogjava.net/sdyjmc/archive/2010/01/06/308391.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]Java正则表达式入门</title><link>http://www.blogjava.net/sdyjmc/archive/2009/12/29/307231.html</link><dc:creator>单飞</dc:creator><author>单飞</author><pubDate>Tue, 29 Dec 2009 02:34:00 GMT</pubDate><guid>http://www.blogjava.net/sdyjmc/archive/2009/12/29/307231.html</guid><wfw:comment>http://www.blogjava.net/sdyjmc/comments/307231.html</wfw:comment><comments>http://www.blogjava.net/sdyjmc/archive/2009/12/29/307231.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sdyjmc/comments/commentRss/307231.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sdyjmc/services/trackbacks/307231.html</trackback:ping><description><![CDATA[&nbsp;众所周知，在程序开发中，难免会遇到需要匹配、查找、替换、判断字符串的情况发生，而这些情况有时又比较复杂，如果用纯编码方式解决，往往会浪费程序员的时间及精力。因此，学习及使用正则表达式，便成了解决这一矛盾的主要手段。<br />
&nbsp;大 家都知道，正则表达式是一种可以用于模式匹配和替换的规范，一个正则表达式就是由普通的字符（例如字符a到z）以及特殊字符（元字符）组成的文字模式，它 用以描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板，将某个字符模式与所搜索的字符串进行匹配。<br />
&nbsp; 自从jdk1.4推出java.util.regex包，就为我们提供了很好的JAVA正则表达式应用平台。<br />
&nbsp;<br />
&nbsp;因为正则表达式是一个很庞杂的体系，所以我仅例举些入门的概念，更多的请参阅相关书籍及自行摸索。 <br />
<br />
\\ 反斜杠<br />
\t 间隔 ('\u0009')<br />
\n 换行 ('\u000A')<br />
\r 回车 ('\u000D')<br />
\d 数字 等价于[0-9]<br />
\D 非数字 等价于[^0-9]<br />
\s 空白符号 [\t\n\x0B\f\r]<br />
\S 非空白符号 [^\t\n\x0B\f\r]<br />
\w 单独字符 [a-zA-Z_0-9]<br />
\W 非单独字符 [^a-zA-Z_0-9]<br />
\f 换页符<br />
\e Escape<br />
\b 一个单词的边界<br />
\B 一个非单词的边界<br />
\G 前一个匹配的结束<br />
<br />
^为限制开头<br />
^java &nbsp;&nbsp;&nbsp; 条件限制为以Java为开头字符<br />
$为限制结尾<br />
java$ &nbsp;&nbsp;&nbsp; 条件限制为以java为结尾字符<br />
.&nbsp; 条件限制除\n以外任意一个单独字符<br />
java.. &nbsp;&nbsp;&nbsp; 条件限制为java后除换行外任意两个字符<br />
<br />
<br />
加入特定限制条件「[]」<br />
[a-z] &nbsp;&nbsp;&nbsp; 条件限制在小写a to z范围中一个字符<br />
[A-Z] &nbsp;&nbsp;&nbsp; 条件限制在大写A to Z范围中一个字符<br />
[a-zA-Z] 条件限制在小写a to z或大写A to Z范围中一个字符<br />
[0-9] &nbsp;&nbsp;&nbsp; 条件限制在小写0 to 9范围中一个字符<br />
[0-9a-z] 条件限制在小写0 to 9或a to z范围中一个字符<br />
[0-9[a-z]] 条件限制在小写0 to 9或a to z范围中一个字符(交集)<br />
<br />
[]中加入^后加再次限制条件「[^]」<br />
[^a-z] &nbsp;&nbsp;&nbsp; 条件限制在非小写a to z范围中一个字符<br />
[^A-Z] &nbsp;&nbsp;&nbsp; 条件限制在非大写A to Z范围中一个字符<br />
[^a-zA-Z] 条件限制在非小写a to z或大写A to Z范围中一个字符<br />
[^0-9] &nbsp;&nbsp;&nbsp; 条件限制在非小写0 to 9范围中一个字符<br />
[^0-9a-z] 条件限制在非小写0 to 9或a to z范围中一个字符<br />
[^0-9[a-z]] 条件限制在非小写0 to 9或a to z范围中一个字符(交集)<br />
<br />
在限制条件为特定字符出现0次以上时，可以使用「*」<br />
J* &nbsp;&nbsp;&nbsp; 0个以上J<br />
.* &nbsp;&nbsp;&nbsp; 0个以上任意字符<br />
J.*D &nbsp;&nbsp;&nbsp; J与D之间0个以上任意字符<br />
<br />
在限制条件为特定字符出现1次以上时，可以使用「+」<br />
J+ &nbsp;&nbsp;&nbsp; 1个以上J<br />
.+ &nbsp;&nbsp;&nbsp; 1个以上任意字符<br />
J.+D &nbsp;&nbsp;&nbsp; J与D之间1个以上任意字符<br />
<br />
在限制条件为特定字符出现有0或1次以上时，可以使用「?」<br />
JA? &nbsp;&nbsp;&nbsp; J或者JA出现<br />
<br />
限制为连续出现指定次数字符「{a}」<br />
J{2} &nbsp;&nbsp;&nbsp; JJ<br />
J{3} &nbsp;&nbsp;&nbsp; JJJ<br />
文字a个以上，并且「{a,}」<br />
J{3,} &nbsp;&nbsp;&nbsp; JJJ,JJJJ,JJJJJ,???(3次以上J并存)<br />
文字个以上，b个以下「{a,b}」<br />
J{3,5} &nbsp;&nbsp;&nbsp; JJJ或JJJJ或JJJJJ<br />
两者取一「|」<br />
J|A &nbsp;&nbsp;&nbsp; J或A<br />
Java|Hello &nbsp;&nbsp;&nbsp; Java或Hello<br />
&nbsp;<br />
「()」中规定一个组合类型<br />
比如，我查询&lt;a href=\"index.html\"&gt;index&lt;/a&gt;中&lt;a href&gt;&lt;/a&gt;间的数据，可写作&lt;a.*href=\".*\"&gt;(.+?)&lt;/a&gt;<br />
<br />
在使用Pattern.compile函数时，可以加入控制正则表达式的匹配行为的参数：<br />
Pattern Pattern.compile(String regex, int flag)<br />
<br />
flag的取值范围如下：<br />
Pattern.CANON_EQ &nbsp;&nbsp;&nbsp; 当且仅当两个字符的"正规分解(canonical decomposition)"都完全相同的情况下，才认定匹配。比如用了这个标志之后，表达式"a\u030A"会匹配"?"。默认情况下，不考虑"规 范相等性(canonical equivalence)"。<br />
Pattern.CASE_INSENSITIVE(?i) &nbsp;&nbsp;&nbsp; 默认情况下，大小写不明感的匹配只适用于US-ASCII字符集。这个标志能让表达式忽略大小写进行匹配。要想对Unicode字符进行大小不明感的匹 配，只要将UNICODE_CASE与这个标志合起来就行了。<br />
Pattern.COMMENTS(?x) &nbsp;&nbsp;&nbsp; 在这种模式下，匹配时会忽略(正则表达式里的)空格字符(译者注：不是指表达式里的"\\s"，而是指表达式里的空格，tab，回车之类)。注释从#开始，一直到这行结束。可以通过嵌入式的标志来启用Unix行模式。<br />
Pattern.DOTALL(?s) &nbsp;&nbsp;&nbsp; 在这种模式下，表达式'.'可以匹配任意字符，包括表示一行的结束符。默认情况下，表达式'.'不匹配行的结束符。<br />
Pattern.MULTILINE<br />
(?m) &nbsp;&nbsp;&nbsp; 在这种模式下，'^'和'$'分别匹配一行的开始和结束。此外，'^'仍然匹配字符串的开始，'$'也匹配字符串的结束。默认情况下，这两个表达式仅仅匹配字符串的开始和结束。<br />
Pattern.UNICODE_CASE<br />
(?u) &nbsp;&nbsp;&nbsp; 在这个模式下，如果你还启用了CASE_INSENSITIVE标志，那么它会对Unicode字符进行大小写不明感的匹配。默认情况下，大小写不敏感的匹配只适用于US-ASCII字符集。<br />
Pattern.UNIX_LINES(?d) &nbsp;&nbsp;&nbsp; 在这个模式下，只有'\n'才被认作一行的中止，并且与'.'，'^'，以及'$'进行匹配。<br />
<br />
<br />
抛开空泛的概念，下面写出几个简单的Java正则用例：<br />
<br />
◆比如，在字符串包含验证时<br />
<br />
//查找以Java开头,任意结尾的字符串<br />
&nbsp; Pattern pattern = Pattern.compile("^Java.*");<br />
&nbsp; Matcher matcher = pattern.matcher("Java不是人");<br />
&nbsp; boolean b= matcher.matches();<br />
&nbsp; //当条件满足时，将返回true，否则返回false<br />
&nbsp; System.out.println(b);<br />
<br />
<br />
◆以多条件分割字符串时<br />
Pattern pattern = Pattern.compile("[, |]+");<br />
String[] strs = pattern.split("Java Hello World&nbsp; Java,Hello,,World|Sun");<br />
for (int i=0;i&lt;strs.length;i++) {<br />
&nbsp;&nbsp;&nbsp; System.out.println(strs[i]);<br />
} <br />
<br />
◆文字替换（首次出现字符）<br />
Pattern pattern = Pattern.compile("正则表达式");<br />
Matcher matcher = pattern.matcher("正则表达式 Hello World,正则表达式 Hello World");<br />
//替换第一个符合正则的数据<br />
System.out.println(matcher.replaceFirst("Java"));<br />
<br />
◆文字替换（全部）<br />
Pattern pattern = Pattern.compile("正则表达式");<br />
Matcher matcher = pattern.matcher("正则表达式 Hello World,正则表达式 Hello World");<br />
//替换第一个符合正则的数据<br />
System.out.println(matcher.replaceAll("Java"));<br />
<br />
<br />
◆文字替换（置换字符）<br />
Pattern pattern = Pattern.compile("正则表达式");<br />
Matcher matcher = pattern.matcher("正则表达式 Hello World,正则表达式 Hello World ");<br />
StringBuffer sbr = new StringBuffer();<br />
while (matcher.find()) {<br />
&nbsp;&nbsp;&nbsp; matcher.appendReplacement(sbr, "Java");<br />
}<br />
matcher.appendTail(sbr);<br />
System.out.println(sbr.toString());<br />
<br />
◆验证是否为邮箱地址<br />
<br />
String str="ceponline@yahoo.com.cn";<br />
Pattern pattern = Pattern.compile("[\\w\\.\\-]+@([\\w\\-]+\\.)+[\\w\\-]+",Pattern.CASE_INSENSITIVE);<br />
Matcher matcher = pattern.matcher(str);<br />
System.out.println(matcher.matches());<br />
<br />
◆去除html标记<br />
Pattern pattern = Pattern.compile("&lt;.+?&gt;", Pattern.DOTALL);<br />
Matcher matcher = pattern.matcher("&lt;a href=\"index.html\"&gt;主页&lt;/a&gt;");<br />
String string = matcher.replaceAll("");<br />
System.out.println(string);<br />
<br />
◆查找html中对应条件字符串<br />
Pattern pattern = Pattern.compile("href=\"(.+?)\"");<br />
Matcher matcher = pattern.matcher("&lt;a href=\"index.html\"&gt;主页&lt;/a&gt;");<br />
if(matcher.find())<br />
&nbsp; System.out.println(matcher.group(1));<br />
}<br />
<br />
◆截取http://地址<br />
//截取url<br />
Pattern pattern = Pattern.compile("(http://|https://){1}[\\w\\.\\-/:]+");<br />
Matcher matcher = pattern.matcher("dsdsds&lt;http://dsds//gfgffdfd&gt;fdf");<br />
StringBuffer buffer = new StringBuffer();<br />
while(matcher.find()){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; buffer.append(matcher.group());&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; buffer.append("\r\n");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
System.out.println(buffer.toString());<br />
}<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
◆替换指定{}中文字<br />
<br />
String str = "Java目前的发展史是由{0}年-{1}年";<br />
String[][] object={new String[]{"\\{0\\}","1995"},new String[]{"\\{1\\}","2007"}};<br />
System.out.println(replace(str,object));<br />
<br />
public static String replace(final String sourceString,Object[] object) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; String temp=sourceString;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for(int i=0;i&lt;object.length;i++){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String[] result=(String[])object[i];<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; Pattern&nbsp;&nbsp;&nbsp; pattern = Pattern.compile(result[0]);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; Matcher matcher = pattern.matcher(temp);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; temp=matcher.replaceAll(result[1]);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return temp;<br />
}<br />
<br />
<br />
◆以正则条件查询指定目录下文件<br />
<br />
&nbsp;//用于缓存文件列表<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; private ArrayList files = new ArrayList();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //用于承载文件路径<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; private String _path;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //用于承载未合并的正则公式<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; private String _regexp;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; class MyFileFilter implements FileFilter {<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; * 匹配文件名称<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; public boolean accept(File file) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Pattern pattern = Pattern.compile(_regexp);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Matcher match = pattern.matcher(file.getName());&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return match.matches();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } catch (Exception e) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return true;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;* 解析输入流<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;* @param inputs<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; FilesAnalyze (String path,String regexp){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; getFileName(path,regexp);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;* 分析文件名并加入files<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;* @param input<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; private void getFileName(String path,String regexp) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //目录<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _path=path;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _regexp=regexp;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; File directory = new File(_path);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; File[] filesFile = directory.listFiles(new MyFileFilter());<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; if (filesFile == null) return;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; for (int j = 0; j &lt; filesFile.length; j++) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; files.add(filesFile[j]);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; return;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; * 显示输出信息<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; * @param out<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public void print (PrintStream out) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Iterator elements = files.iterator();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; while (elements.hasNext()) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; File file=(File) elements.next();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; out.println(file.getPath());&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public static void output(String path,String regexp) {<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; FilesAnalyze fileGroup1 = new FilesAnalyze(path,regexp);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; fileGroup1.print(System.out);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public static void main (String[] args) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; output("C:\\","[A-z|.]*");<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
<br />
Java正则的功用还有很多，事实上只要是字符处理，就没有正则做不到的事情存在。（当然，正则解释时较耗时间就是了|||&#8230;&#8230;）<br />
<img src ="http://www.blogjava.net/sdyjmc/aggbug/307231.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sdyjmc/" target="_blank">单飞</a> 2009-12-29 10:34 <a href="http://www.blogjava.net/sdyjmc/archive/2009/12/29/307231.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>bitmap</title><link>http://www.blogjava.net/sdyjmc/archive/2009/11/27/303857.html</link><dc:creator>单飞</dc:creator><author>单飞</author><pubDate>Fri, 27 Nov 2009 02:07:00 GMT</pubDate><guid>http://www.blogjava.net/sdyjmc/archive/2009/11/27/303857.html</guid><wfw:comment>http://www.blogjava.net/sdyjmc/comments/303857.html</wfw:comment><comments>http://www.blogjava.net/sdyjmc/archive/2009/11/27/303857.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sdyjmc/comments/commentRss/303857.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sdyjmc/services/trackbacks/303857.html</trackback:ping><description><![CDATA[<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="ProgId" content="Word.Document" />
<meta name="Generator" content="Microsoft Word 11" />
<meta name="Originator" content="Microsoft Word 11" />
<link rel="File-List" href="file:///C:%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml" /><!--[if gte mso 9]><xml>
Normal
0
7.8 磅
0
2
false
false
false
MicrosoftInternetExplorer4
</xml><![endif]--><!--[if gte mso 9]><![endif]--><style>
<!--
/* Font Definitions */
@font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
{font-family:""@宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:"Times New Roman";}
/* Page Definitions */
@page
{}
@page Section1
{size:612.0pt 792.0pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.Section1
{page:Section1;}
-->
</style><!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{
mso-style-parent:"";
font-size:10.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";}
table.MsoTableGrid
{
border:solid windowtext 1.0pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.0pt;
font-family:"Times New Roman";}
</style>
<![endif]-->
<table style="border: medium none ; border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0">
    <tbody>
        <tr>
            <td colspan="9" style="padding: 0cm 5.4pt; width: 426.1pt;" valign="top" width="568">
            <p style="text-align: center;" align="center"><span>1byte
            = 8 bit</span></p>
            </td>
        </tr>
        <tr>
            <td colspan="9" style="padding: 0cm 5.4pt; width: 426.1pt;" valign="top" width="568">
            <p style="text-align: center;" align="center"><span style="font-family: 宋体;">一比特</span> bit</p>
            </td>
        </tr>
        <tr>
            <td colspan="4" style="padding: 0cm 5.4pt; width: 189.35pt;" valign="top" width="252">
            <p style="text-align: center;" align="center"><span style="font-family: 宋体;">高</span>4<span style="font-family: 宋体;">位</span></p>
            </td>
            <td style="padding: 0cm 5.4pt; width: 47.35pt;" valign="top" width="63">
            </td>
            <td colspan="4" style="padding: 0cm 5.4pt; width: 189.4pt;" valign="top" width="253">
            <p style="text-align: center;" align="center"><span style="font-family: 宋体;">低四位</span></p>
            </td>
        </tr>
        <tr>
            <td style="padding: 0cm 5.4pt; width: 47.3pt;" valign="top" width="63">
            </td>
            <td style="padding: 0cm 5.4pt; width: 47.35pt;" valign="top" width="63">
            <p>R</p>
            </td>
            <td style="padding: 0cm 5.4pt; width: 47.35pt;" valign="top" width="63">
            <p>G</p>
            </td>
            <td style="padding: 0cm 5.4pt; width: 47.35pt;" valign="top" width="63">
            <p>B</p>
            </td>
            <td style="padding: 0cm 5.4pt; width: 47.35pt;" valign="top" width="63">
            </td>
            <td style="padding: 0cm 5.4pt; width: 47.35pt;" valign="top" width="63">
            </td>
            <td style="padding: 0cm 5.4pt; width: 47.35pt;" valign="top" width="63">
            <p>R</p>
            </td>
            <td style="padding: 0cm 5.4pt; width: 47.35pt;" valign="top" width="63">
            <p>G</p>
            </td>
            <td style="padding: 0cm 5.4pt; width: 47.35pt;" valign="top" width="63">
            <p>B</p>
            </td>
        </tr>
        <tr>
            <td style="padding: 0cm 5.4pt; width: 47.3pt;" valign="top" width="63">
            </td>
            <td style="padding: 0cm 5.4pt; width: 47.35pt;" valign="top" width="63">
            </td>
            <td style="padding: 0cm 5.4pt; width: 47.35pt;" valign="top" width="63">
            </td>
            <td style="padding: 0cm 5.4pt; width: 47.35pt;" valign="top" width="63">
            </td>
            <td style="padding: 0cm 5.4pt; width: 47.35pt;" valign="top" width="63">
            </td>
            <td style="padding: 0cm 5.4pt; width: 47.35pt;" valign="top" width="63">
            </td>
            <td style="padding: 0cm 5.4pt; width: 47.35pt;" valign="top" width="63">
            </td>
            <td style="padding: 0cm 5.4pt; width: 47.35pt;" valign="top" width="63">
            </td>
            <td style="padding: 0cm 5.4pt; width: 47.35pt;" valign="top" width="63">
            </td>
        </tr>
    </tbody>
</table>
<img src ="http://www.blogjava.net/sdyjmc/aggbug/303857.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sdyjmc/" target="_blank">单飞</a> 2009-11-27 10:07 <a href="http://www.blogjava.net/sdyjmc/archive/2009/11/27/303857.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java写的代理服务器</title><link>http://www.blogjava.net/sdyjmc/archive/2009/11/25/303607.html</link><dc:creator>单飞</dc:creator><author>单飞</author><pubDate>Wed, 25 Nov 2009 06:09:00 GMT</pubDate><guid>http://www.blogjava.net/sdyjmc/archive/2009/11/25/303607.html</guid><wfw:comment>http://www.blogjava.net/sdyjmc/comments/303607.html</wfw:comment><comments>http://www.blogjava.net/sdyjmc/archive/2009/11/25/303607.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sdyjmc/comments/commentRss/303607.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sdyjmc/services/trackbacks/303607.html</trackback:ping><description><![CDATA[1.jhttp<br />
2.javanetlib<br />
<br />
在看源代码的时候,看到一个设计简单的线程池<br />
package cs519.proxy.tpool;<br />
<br />
import java.util.*;<br />
<br />
/**<br />
&nbsp;* Thread Pool Manager.<br />
&nbsp;* <br />
&nbsp;* Use a fixed number of threads and process requests.<br />
&nbsp;*/<br />
public class ThreadPool<br />
{<br />
&nbsp;&nbsp; &nbsp;/**<br />
&nbsp;&nbsp; &nbsp; * @param&nbsp;&nbsp; &nbsp;nThread<br />
&nbsp;&nbsp; &nbsp; *&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;number of threads to create.<br />
&nbsp;&nbsp; &nbsp; */<br />
&nbsp;&nbsp;&nbsp; public ThreadPool( int nThread ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for( int i=0; i&lt;nThread; i++ )<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new WorkerThread().start();<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp; /** list of tasks waiting for execution */<br />
&nbsp;&nbsp;&nbsp; private final List tasks = new LinkedList();<br />
&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp; /** list of lower-priority tasks waiting for execution */<br />
&nbsp;&nbsp;&nbsp; private final List backgroundTasks = new LinkedList();<br />
&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * Adds a new 'task' to the pool.<br />
&nbsp;&nbsp;&nbsp;&nbsp; * Assigned task will be eventually processed by one of the threads<br />
&nbsp;&nbsp;&nbsp;&nbsp; * in the pool.<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public synchronized void addTask( Runnable task ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tasks.add(task);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; notify();&nbsp;&nbsp; // notify any thread waiting for a task<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * Adds a new low-priority 'task' to the pool.<br />
&nbsp;&nbsp;&nbsp;&nbsp; * Assigned task will be eventually processed by one of the threads<br />
&nbsp;&nbsp;&nbsp;&nbsp; * in the pool.<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public synchronized void addBackgroundTask( Runnable task ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; backgroundTasks.add(task);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * Obtains a task from the queue.<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; private synchronized Runnable getTask() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(true) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!tasks.isEmpty())<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (Runnable)tasks.remove(0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!backgroundTasks.isEmpty())<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (Runnable)backgroundTasks.remove(0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wait(); // wait for a new task<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch( InterruptedException e ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.err.println("thread interrupted");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new InternalError();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp; /** destructs the pool. */<br />
&nbsp;&nbsp;&nbsp; public void dispose() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; suicideSignal = true;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; private boolean suicideSignal = false;<br />
&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp; private class WorkerThread extends Thread {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void run() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(!suicideSignal)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getTask().run();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
<br />
并且提供了缓存管理<br />
package cs519.proxy.cache;<br />
<br />
import java.io.*;<br />
import java.util.*;<br />
import java.text.ParseException;<br />
import cs519.proxy.http.*;<br />
<br />
public class CacheManagerImpl implements CacheManager<br />
{<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * Set to non-null to see debug traces.<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; private PrintStream debug = System.out;<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * The number of bytes in the cache.<br />
&nbsp;&nbsp;&nbsp;&nbsp; * This field is accessed by the Janitor.<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; long usedCacheSize = 0;<br />
&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp; private Object usedCacheSizeLock = new Object();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp; /** Atomically modify the value of usedCacheSize. */<br />
&nbsp;&nbsp;&nbsp; private void modifyUsedCacheSize( long offset ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; synchronized(usedCacheSizeLock) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; usedCacheSize += offset;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp; private final long cacheLimit;<br />
&nbsp;&nbsp;&nbsp; protected final TreeMap map=new TreeMap();<br />
&nbsp;&nbsp;&nbsp; protected final TreeSet fileSet=new TreeSet();<br />
&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp; /** The directory in which all cached objects are placed. */<br />
&nbsp;&nbsp;&nbsp; private final File dir = new File("cache");<br />
&nbsp;&nbsp;&nbsp; public final File getCacheDir() { return dir; }<br />
&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp; private final CachePolicy policy;<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * Constructor:<br />
&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp; Load cache file information into CacheFileInfo objects.<br />
&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp; Include: filename, lastModified time, file length in byte.<br />
&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp; Add these objects to a TreeSet object, make them ordered<br />
&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp; by lastModified time.<br />
&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp; get current used cache size (in Bytes)<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public CacheManagerImpl(long limit, CachePolicy _policy) throws IOException<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.policy = _policy;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.cacheLimit=limit;&nbsp; //in bytes<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!dir.exists())<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dir.mkdir();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String[] files=dir.list();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i=0;i&lt;files.length;i++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //System.out.println(files[i].getName());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; File f=new File(dir,files[i]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CacheFileInfo cfi = new CacheFileInfo(f);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fileSet.add(cfi);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; map.put( files[i], cfi );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; modifyUsedCacheSize(cfi.fsize);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // launch the janitor<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new Thread(new CacheJanitor(this)).start();<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp; /**<br />
&nbsp;&nbsp; * Put HttpResponse object into proxy cache.<br />
&nbsp;&nbsp; * Write HttpResponse to a cache file if it is "toBeCached":<br />
&nbsp;&nbsp; * 1. use request URL as a base of filename<br />
&nbsp;&nbsp; * 2. the structure of the cache file contains two parts<br />
&nbsp;&nbsp; *&nbsp;&nbsp; a. Request URL (String)<br />
&nbsp;&nbsp; *&nbsp;&nbsp; b. HttpResponse object<br />
&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public void put( HttpRequest request, HttpResponse response ) {<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long reservedSize;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(debug!=null)<br />
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; debug.println("trying to store:"+request.getPath());<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(policy.toBeCached(request,response))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reservedSize = response.getBodySize()+2000;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // TODO: check if this object fits into the memory<br />
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(...)<br />
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // allocate the space before we actually use it<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; modifyUsedCacheSize(reservedSize);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // allocate physical space if it's necessary<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!compactCache()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(debug!=null)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; debug.println("cache compacting failure:"+request.getPath());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // we can't store this object.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // cancel this reservation<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; modifyUsedCacheSize(-reservedSize);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(debug!=null)<br />
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; debug.println("storing "+request.getPath());<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; File f = getCacheFileName(request);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ObjectOutputStream fileOut=new ObjectOutputStream(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new FileOutputStream(f));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fileOut.writeObject(request.getPath());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fileOut.writeObject(response.getHeaderAsDate("Expires"));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch( java.text.ParseException e ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fileOut.writeObject(null);&nbsp; // write a dummy<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fileOut.writeObject(response);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fileOut.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long actualSize = f.length();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; synchronized(fileSet) { // use one lock for both objects<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CacheFileInfo cfi = new CacheFileInfo(f);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fileSet.add( cfi );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; map.put( cfi.fname, cfi );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; modifyUsedCacheSize(actualSize-reservedSize);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(debug!=null)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; debug.println("stored&nbsp; :"+request.getPath());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch( IOException e ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // TODO: possibly return the reservedSize.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reservedSize=-0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; modifyUsedCacheSize(reservedSize);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // TODO: remove any corrupted file<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * Get requested object from proxy cache.<br />
&nbsp;&nbsp;&nbsp;&nbsp; * if (URL in file)==(request URL), and object not expired, then<br />
&nbsp;&nbsp;&nbsp;&nbsp; * return object to callee. else return null<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public HttpResponse get( HttpRequest request )<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; File f = getCacheFileName(request);<br />
&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(f.exists()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ObjectInputStream oi=new ObjectInputStream(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new FileInputStream(f));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String fURL=(String)oi.readObject();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(fURL.equals(request.getPath())) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Date now = new Date();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // we won't use it, but we need to read this object<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // to get to the body<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Date expires = (Date)oi.readObject();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // parse the body<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpResponse resp=(HttpResponse)oi.readObject();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oi.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(debug!=null)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; debug.println("hit&nbsp;&nbsp;&nbsp;&nbsp; :"+request.getPath());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //check if the object expired<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Date d = resp.getHeaderAsDate("Expires");<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(d==null || d.after(now)) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // not expired. use this object.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // touch this file for LRU purpose, and<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // modify fileSet and map content<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Util.setLastModified(f,now.getTime());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // maintain the control data structure<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; synchronized(fileSet) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //remove this object first<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fileSet.remove(map.get(f.getName()));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; map.remove(f.getName());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //add this object with current attributes<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CacheFileInfo new_cfi=new CacheFileInfo(f);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fileSet.add(new_cfi);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; map.put(f.getName(),new_cfi);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return resp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch( ParseException e ) { ; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // we'll return null, so the caller will go ahead<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // and fetch a new one, then store that new object<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // into the cache.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // so we don't need to remove the old item now.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oi.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch( IOException e ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch( ClassNotFoundException e ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(debug!=null)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; debug.println("miss&nbsp;&nbsp;&nbsp; :"+request.getPath());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return null;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp; public boolean contains( HttpRequest request ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; File f = getCacheFileName(request);<br />
&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!f.exists()) return false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ObjectInputStream oi=new ObjectInputStream(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new FileInputStream(f));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String fURL=(String)oi.readObject();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolean r = fURL.equals(request.getPath());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oi.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return r;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch( Exception e ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp; &nbsp;<br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; private File getCacheFileName( HttpRequest msg ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return new File( dir, Integer.toHexString( msg.getPath().hashCode() ) );<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp; <br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * Compacts the cache so that the total size fell below the limit.<br />
&nbsp;&nbsp;&nbsp;&nbsp; * <br />
&nbsp;&nbsp;&nbsp;&nbsp; * @return<br />
&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; true if the operation is successful and our used size is<br />
&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; now lower then the limit.<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public boolean compactCache() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; synchronized(fileSet) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * Remove LRU cache file until get enough free space<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * LRU strategy<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CacheFileInfo cFile;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(cacheLimit&lt;usedCacheSize &amp;&amp; !fileSet.isEmpty()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cFile=(CacheFileInfo)fileSet.first();&nbsp;&nbsp; //the LRU cache file<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; removeCacheItem(cFile);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return cacheLimit&gt;=usedCacheSize;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * Deletes the object represented by a given CacheFileInfo.<br />
&nbsp;&nbsp;&nbsp;&nbsp; * <br />
&nbsp;&nbsp;&nbsp;&nbsp; * To remove something from the cache, you need to call this method<br />
&nbsp;&nbsp;&nbsp;&nbsp; * so that the cache manager can maintain the proper data structure.<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; protected void removeCacheItem( CacheFileInfo cfi ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; synchronized(fileSet) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fileSet.remove(cfi);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; map.remove(cfi.fname);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; File tmp = new File(dir,"_"+cfi.fname);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new File(dir,cfi.fname).renameTo(tmp);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(debug!=null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // open the file just to print the name of URL<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ObjectInputStream ois = new ObjectInputStream(new FileInputStream(tmp));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; debug.println("delete&nbsp; :"+ois.readObject());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ois.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch( Exception e ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // it's OK if we fail to print the debug message.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // so just ignore the error<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tmp.delete();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; modifyUsedCacheSize(-cfi.fsize);<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/sdyjmc/aggbug/303607.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sdyjmc/" target="_blank">单飞</a> 2009-11-25 14:09 <a href="http://www.blogjava.net/sdyjmc/archive/2009/11/25/303607.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>http 协议</title><link>http://www.blogjava.net/sdyjmc/archive/2009/11/05/301272.html</link><dc:creator>单飞</dc:creator><author>单飞</author><pubDate>Thu, 05 Nov 2009 06:45:00 GMT</pubDate><guid>http://www.blogjava.net/sdyjmc/archive/2009/11/05/301272.html</guid><wfw:comment>http://www.blogjava.net/sdyjmc/comments/301272.html</wfw:comment><comments>http://www.blogjava.net/sdyjmc/archive/2009/11/05/301272.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sdyjmc/comments/commentRss/301272.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sdyjmc/services/trackbacks/301272.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: rfc2616对于返回是chunked格式的字节流的处理Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->import&nbsp;java.io.IOException;import&nbsp;java.io.In...&nbsp;&nbsp;<a href='http://www.blogjava.net/sdyjmc/archive/2009/11/05/301272.html'>阅读全文</a><img src ="http://www.blogjava.net/sdyjmc/aggbug/301272.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sdyjmc/" target="_blank">单飞</a> 2009-11-05 14:45 <a href="http://www.blogjava.net/sdyjmc/archive/2009/11/05/301272.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java执行命令,等待介绍才返回</title><link>http://www.blogjava.net/sdyjmc/archive/2009/10/30/300391.html</link><dc:creator>单飞</dc:creator><author>单飞</author><pubDate>Fri, 30 Oct 2009 09:24:00 GMT</pubDate><guid>http://www.blogjava.net/sdyjmc/archive/2009/10/30/300391.html</guid><wfw:comment>http://www.blogjava.net/sdyjmc/comments/300391.html</wfw:comment><comments>http://www.blogjava.net/sdyjmc/archive/2009/10/30/300391.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sdyjmc/comments/commentRss/300391.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sdyjmc/services/trackbacks/300391.html</trackback:ping><description><![CDATA[<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">String&nbsp;cmd&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">ping&nbsp;127.0.0.1&nbsp;-t</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Runtime&nbsp;rt&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Runtime.getRuntime();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">""</span><span style="color: #000000;">+</span><span style="color: #000000;">cmd&nbsp;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Process&nbsp;process&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;rt.exec(cmd&nbsp;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InputStream&nbsp;stdin&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;process.getInputStream();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InputStreamReader&nbsp;isr&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;InputStreamReader(stdin);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BufferedReader&nbsp;br&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;BufferedReader(isr);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;line;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuffer&nbsp;buf&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;StringBuffer();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">&nbsp;((line&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;br.readLine())&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buf.append(line);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(line);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;exitVal&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;process.waitFor();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">Process&nbsp;exitValue:&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;exitVal);</span></div>
<img src ="http://www.blogjava.net/sdyjmc/aggbug/300391.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sdyjmc/" target="_blank">单飞</a> 2009-10-30 17:24 <a href="http://www.blogjava.net/sdyjmc/archive/2009/10/30/300391.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>FeeMarker入门函数 ?exists  ${key} ?default('') if assign</title><link>http://www.blogjava.net/sdyjmc/archive/2009/09/21/295854.html</link><dc:creator>单飞</dc:creator><author>单飞</author><pubDate>Mon, 21 Sep 2009 05:53:00 GMT</pubDate><guid>http://www.blogjava.net/sdyjmc/archive/2009/09/21/295854.html</guid><wfw:comment>http://www.blogjava.net/sdyjmc/comments/295854.html</wfw:comment><comments>http://www.blogjava.net/sdyjmc/archive/2009/09/21/295854.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sdyjmc/comments/commentRss/295854.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sdyjmc/services/trackbacks/295854.html</trackback:ping><description><![CDATA[&lt;#if num?exists&gt;<br />
&nbsp;&lt;#assign ndex = 1&gt;<br />
&lt;#else&gt;<br />
&nbsp;&lt;#assign index = 0&gt;<br />
&nbsp;&lt;/#if&gt;<br />
&lt;u&gt;${address?if_exists}&lt;/u&gt;<br />
&lt;n&gt;${n?default('')}&lt;/n&gt;<br />
 <img src ="http://www.blogjava.net/sdyjmc/aggbug/295854.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sdyjmc/" target="_blank">单飞</a> 2009-09-21 13:53 <a href="http://www.blogjava.net/sdyjmc/archive/2009/09/21/295854.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java proxy registry ie </title><link>http://www.blogjava.net/sdyjmc/archive/2009/07/08/285937.html</link><dc:creator>单飞</dc:creator><author>单飞</author><pubDate>Wed, 08 Jul 2009 05:27:00 GMT</pubDate><guid>http://www.blogjava.net/sdyjmc/archive/2009/07/08/285937.html</guid><wfw:comment>http://www.blogjava.net/sdyjmc/comments/285937.html</wfw:comment><comments>http://www.blogjava.net/sdyjmc/archive/2009/07/08/285937.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sdyjmc/comments/commentRss/285937.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sdyjmc/services/trackbacks/285937.html</trackback:ping><description><![CDATA[<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">http://www.trustice.com/java/jnireg/index.shtml </span> <a href="http://www.gjt.org/download/time/java/jnireg/registry-3.1.3.zip">registry-3.1.3.zip</a><br />
<span style="color: #0000ff;"><br />
public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;setProxy(String&nbsp;ip,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;port)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;topKeyName&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">HKCU</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;keyName&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">Software\\Microsoft\\Windows\\CurrentVersion\\Internet&nbsp;Settings</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RegistryKey&nbsp;topKey&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Registry.getTopLevelKey(topKeyName);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RegistryUtil.setDWordCommand(topKey,&nbsp;keyName,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">ProxyEnable</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">1</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RegistryUtil.setStringCommand(topKey,&nbsp;keyName,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">ProxyServer</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;ip&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">:</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;port);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">boolean</span><span style="color: #000000;">&nbsp;isProxy()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RegistryKey&nbsp;registryKey&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Registry.openSubkey(Registry.HKEY_CURRENT_USER,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">Software\\Microsoft\\Windows\\CurrentVersion\\Internet&nbsp;Settings</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;RegistryKey.ACCESS_READ);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RegistryValue&nbsp;registryValue&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;registryKey.getValue(</span><span style="color: #000000;">"</span><span style="color: #000000;">ProxyEnable</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">boolean</span><span style="color: #000000;">&nbsp;proxyEnable&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;((RegDWordValue)&nbsp;registryValue).getData()&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">IE&nbsp;是否启用了代理设置:&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;proxyEnable);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(proxyEnable)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;registryValue&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;registryKey.getValue(</span><span style="color: #000000;">"</span><span style="color: #000000;">ProxyServer</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">IE&nbsp;代理服务器是:&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;String(registryValue.getByteData()));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">true</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(NoSuchKeyException&nbsp;ne)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ne.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(RegistryException&nbsp;re)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;re.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">false</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<img src ="http://www.blogjava.net/sdyjmc/aggbug/285937.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sdyjmc/" target="_blank">单飞</a> 2009-07-08 13:27 <a href="http://www.blogjava.net/sdyjmc/archive/2009/07/08/285937.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>最近感兴趣的技术</title><link>http://www.blogjava.net/sdyjmc/archive/2009/03/21/261198.html</link><dc:creator>单飞</dc:creator><author>单飞</author><pubDate>Sat, 21 Mar 2009 06:13:00 GMT</pubDate><guid>http://www.blogjava.net/sdyjmc/archive/2009/03/21/261198.html</guid><wfw:comment>http://www.blogjava.net/sdyjmc/comments/261198.html</wfw:comment><comments>http://www.blogjava.net/sdyjmc/archive/2009/03/21/261198.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sdyjmc/comments/commentRss/261198.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sdyjmc/services/trackbacks/261198.html</trackback:ping><description><![CDATA[1.图像处理<br />
2.bp神经网络<br />
3.matlab<br />
4.模式识别<br />
<br />
<img src ="http://www.blogjava.net/sdyjmc/aggbug/261198.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sdyjmc/" target="_blank">单飞</a> 2009-03-21 14:13 <a href="http://www.blogjava.net/sdyjmc/archive/2009/03/21/261198.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Util</title><link>http://www.blogjava.net/sdyjmc/archive/2009/03/18/260484.html</link><dc:creator>单飞</dc:creator><author>单飞</author><pubDate>Wed, 18 Mar 2009 07:02:00 GMT</pubDate><guid>http://www.blogjava.net/sdyjmc/archive/2009/03/18/260484.html</guid><wfw:comment>http://www.blogjava.net/sdyjmc/comments/260484.html</wfw:comment><comments>http://www.blogjava.net/sdyjmc/archive/2009/03/18/260484.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sdyjmc/comments/commentRss/260484.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sdyjmc/services/trackbacks/260484.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;String&nbsp;convertRGB2HexString(RGB&nbsp;theRGB...&nbsp;&nbsp;<a href='http://www.blogjava.net/sdyjmc/archive/2009/03/18/260484.html'>阅读全文</a><img src ="http://www.blogjava.net/sdyjmc/aggbug/260484.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sdyjmc/" target="_blank">单飞</a> 2009-03-18 15:02 <a href="http://www.blogjava.net/sdyjmc/archive/2009/03/18/260484.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转】排序算法复习（Java实现）(一）： 插入，冒泡，选择，Shell,快速排序</title><link>http://www.blogjava.net/sdyjmc/archive/2009/03/09/258519.html</link><dc:creator>单飞</dc:creator><author>单飞</author><pubDate>Mon, 09 Mar 2009 00:44:00 GMT</pubDate><guid>http://www.blogjava.net/sdyjmc/archive/2009/03/09/258519.html</guid><wfw:comment>http://www.blogjava.net/sdyjmc/comments/258519.html</wfw:comment><comments>http://www.blogjava.net/sdyjmc/archive/2009/03/09/258519.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sdyjmc/comments/commentRss/258519.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sdyjmc/services/trackbacks/258519.html</trackback:ping><description><![CDATA[为了便于管理，先引入个基础类：<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 255);">package</span><span style="color: rgb(0, 0, 0);">&nbsp;algorithms;<br />
<br />
</span><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br />
&nbsp;*&nbsp;</span><span style="color: rgb(128, 128, 128);">@author</span><span style="color: rgb(0, 128, 0);">&nbsp;yovn<br />
&nbsp;*<br />
&nbsp;</span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">abstract</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;Sorter</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">E&nbsp;</span><span style="color: rgb(0, 0, 255);">extends</span><span style="color: rgb(0, 0, 0);">&nbsp;Comparable</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">E</span><span style="color: rgb(0, 0, 0);">&gt;&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">abstract</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;sort(E[]&nbsp;array,</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;from&nbsp;,</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;len);<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">final</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;sort(E[]&nbsp;array)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sort(array,</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">,array.length);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">protected</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">final</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;swap(E[]&nbsp;array,</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;from&nbsp;,</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;to)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;E&nbsp;tmp</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">array[from];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;array[from]</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">array[to];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;array[to]</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">tmp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
}</span></div>
一 插入排序<br />
该算法在数据规模小的时候十分高效，该算法每次插入第K+1到前K个有序数组中一个合适位置，K从0开始到N-1,从而完成排序：<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 255);">package</span><span style="color: rgb(0, 0, 0);">&nbsp;algorithms;<br />
</span><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br />
&nbsp;*&nbsp;</span><span style="color: rgb(128, 128, 128);">@author</span><span style="color: rgb(0, 128, 0);">&nbsp;yovn<br />
&nbsp;</span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;InsertSorter</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">E&nbsp;</span><span style="color: rgb(0, 0, 255);">extends</span><span style="color: rgb(0, 0, 0);">&nbsp;Comparable</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">E</span><span style="color: rgb(0, 0, 0);">&gt;&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">extends</span><span style="color: rgb(0, 0, 0);">&nbsp;Sorter</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">E</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">/*</span><span style="color: rgb(0, 128, 0);">&nbsp;(non-Javadoc)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@see&nbsp;algorithms.Sorter#sort(E[],&nbsp;int,&nbsp;int)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;sort(E[]&nbsp;array,&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;from,&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;len)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;E&nbsp;tmp</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;i</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">from</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">;i</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">from</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">len;i</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">array[i];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;j</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">(;j</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">from;j</span><span style="color: rgb(0, 0, 0);">--</span><span style="color: rgb(0, 0, 0);">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(tmp.compareTo(array[j</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">])</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;array[j]</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">array[j</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">break</span><span style="color: rgb(0, 0, 0);">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;array[j]</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">tmp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
<br />
}</span></div>
<br />
二 冒泡排序<br />
这可能是最简单的排序算法了，算法思想是每次从数组末端开始比较相邻两元素，把第i小的冒泡到数组的第i个位置。i从0一直到N-1从而完成排序。（当然也可以从数组开始端开始比较相邻两元素，把第i大的冒泡到数组的第N-i个位置。i从0一直到N-1从而完成排序。)<br />
<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 255);">package</span><span style="color: rgb(0, 0, 0);">&nbsp;algorithms;<br />
<br />
</span><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br />
&nbsp;*&nbsp;</span><span style="color: rgb(128, 128, 128);">@author</span><span style="color: rgb(0, 128, 0);">&nbsp;yovn<br />
&nbsp;*<br />
&nbsp;</span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;BubbleSorter</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">E&nbsp;</span><span style="color: rgb(0, 0, 255);">extends</span><span style="color: rgb(0, 0, 0);">&nbsp;Comparable</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">E</span><span style="color: rgb(0, 0, 0);">&gt;&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">extends</span><span style="color: rgb(0, 0, 0);">&nbsp;Sorter</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">E</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">boolean</span><span style="color: rgb(0, 0, 0);">&nbsp;DWON</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 255);">true</span><span style="color: rgb(0, 0, 0);">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">final</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;bubble_down(E[]&nbsp;array,&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;from,&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;len)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;i</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">from;i</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">from</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">len;i</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;j</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">from</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">len</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">;j</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">i;j</span><span style="color: rgb(0, 0, 0);">--</span><span style="color: rgb(0, 0, 0);">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(array[j].compareTo(array[j</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">])</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;swap(array,j</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">,j);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">final</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;bubble_up(E[]&nbsp;array,&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;from,&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;len)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;i</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">from</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">len</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">;i</span><span style="color: rgb(0, 0, 0);">&gt;=</span><span style="color: rgb(0, 0, 0);">from;i</span><span style="color: rgb(0, 0, 0);">--</span><span style="color: rgb(0, 0, 0);">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;j</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">from;j</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">i;j</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(array[j].compareTo(array[j</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">])</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;swap(array,j,j</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;sort(E[]&nbsp;array,&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;from,&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;len)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(DWON)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bubble_down(array,from,len);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bubble_up(array,from,len);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
}</span></div>
<br />
三，选择排序<br />
选择排序相对于冒泡来说，它不是每次发现逆序都交换，而是在找到全局第i小的时候记下该元素位置，最后跟第i个元素交换，从而保证数组最终的有序。<br />
相对与插入排序来说，选择排序每次选出的都是全局第i小的，不会调整前i个元素了。<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 255);">package</span><span style="color: rgb(0, 0, 0);">&nbsp;algorithms;<br />
</span><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br />
&nbsp;*&nbsp;</span><span style="color: rgb(128, 128, 128);">@author</span><span style="color: rgb(0, 128, 0);">&nbsp;yovn<br />
&nbsp;*<br />
&nbsp;</span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;SelectSorter</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">E&nbsp;</span><span style="color: rgb(0, 0, 255);">extends</span><span style="color: rgb(0, 0, 0);">&nbsp;Comparable</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">E</span><span style="color: rgb(0, 0, 0);">&gt;&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">extends</span><span style="color: rgb(0, 0, 0);">&nbsp;Sorter</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">E</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">/*</span><span style="color: rgb(0, 128, 0);">&nbsp;(non-Javadoc)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@see&nbsp;algorithms.Sorter#sort(E[],&nbsp;int,&nbsp;int)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;sort(E[]&nbsp;array,&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;from,&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;len)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;i</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">;i</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">len;i</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;smallest</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;j</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">i</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">from;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">(;j</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">from</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">len;j</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(array[j].compareTo(array[smallest])</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;smallest</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">j;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;swap(array,i,smallest);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;  <br />
}<br />
</span></div>
四 Shell排序<br />
Shell排序可以理解为插入排序的变种，它充分利用了插入排序的两个特点：<br />
1）当数据规模小的时候非常高效<br />
2）当给定数据已经有序时的时间代价为O(N)<br />
所以，Shell排序每次把数据分成若个小块，来使用插入排序，而且之后在这若个小块排好序的情况下把它们合成大一点的小块，继续使用插入排序，不停的合并小块，知道最后成一个块，并使用插入排序。<br />
<br />
这里每次分成若干小块是通过&#8220;增量&#8221; 来控制的，开始时增量交大，接近N/2,从而使得分割出来接近N/2个小块，逐渐的减小&#8220;增量&#8220;最终到减小到1。<br />
<br />
一直较好的增量序列是2^k-1,2^(k-1)-1,.....7,3,1,这样可使Shell排序时间复杂度达到O(N^1.5)<br />
所以我在实现Shell排序的时候采用该增量序列<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 255);">package</span><span style="color: rgb(0, 0, 0);">&nbsp;algorithms;<br />
<br />
</span><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br />
&nbsp;*&nbsp;</span><span style="color: rgb(128, 128, 128);">@author</span><span style="color: rgb(0, 128, 0);">&nbsp;yovn<br />
&nbsp;</span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;ShellSorter</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">E&nbsp;</span><span style="color: rgb(0, 0, 255);">extends</span><span style="color: rgb(0, 0, 0);">&nbsp;Comparable</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">E</span><span style="color: rgb(0, 0, 0);">&gt;&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">extends</span><span style="color: rgb(0, 0, 0);">&nbsp;Sorter</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">E</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">/*</span><span style="color: rgb(0, 128, 0);">&nbsp;(non-Javadoc)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Our&nbsp;delta&nbsp;value&nbsp;choose&nbsp;2^k-1,2^(k-1)-1,<img src="../../Images/dot.gif" alt="" /><img src="../../Images/dot.gif" alt="" />.7,3,1.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;complexity&nbsp;is&nbsp;O(n^1.5)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@see&nbsp;algorithms.Sorter#sort(E[],&nbsp;int,&nbsp;int)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;sort(E[]&nbsp;array,&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;from,&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;len)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">1.calculate&nbsp;&nbsp;the&nbsp;first&nbsp;delta&nbsp;value;</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;value</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">while</span><span style="color: rgb(0, 0, 0);">((value</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">len)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">(value</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;delta</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">value;delta</span><span style="color: rgb(0, 0, 0);">&gt;=</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">;delta</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">(delta</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;i</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">;i</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">delta;i</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;modify_insert_sort(array,from</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">i,len</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">i,delta);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">final</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;modify_insert_sort(E[]&nbsp;array,&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;from,&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;len,</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;delta)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(len</span><span style="color: rgb(0, 0, 0);">&lt;=</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;E&nbsp;tmp</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;i</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">from</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">delta;i</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">from</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">len;i</span><span style="color: rgb(0, 0, 0);">+=</span><span style="color: rgb(0, 0, 0);">delta)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">array[i];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;j</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">(;j</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">from;j</span><span style="color: rgb(0, 0, 0);">-=</span><span style="color: rgb(0, 0, 0);">delta)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(tmp.compareTo(array[j</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">delta])</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;array[j]</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">array[j</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">delta];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">break</span><span style="color: rgb(0, 0, 0);">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;array[j]</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">tmp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
<br />
五 快速排序<br />
快速排序是目前使用可能最广泛的排序算法了。<br />
一般分如下步骤：<br />
1）选择一个枢纽元素（有很对选法，我的实现里采用去中间元素的简单方法）<br />
2）使用该枢纽元素分割数组，使得比该元素小的元素在它的左边，比它大的在右边。并把枢纽元素放在合适的位置。<br />
3）根据枢纽元素最后确定的位置，把数组分成三部分，左边的，右边的，枢纽元素自己，对左边的，右边的分别递归调用快速排序算法即可。<br />
快速排序的核心在于分割算法，也可以说是最有技巧的部分。<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 255);">package</span><span style="color: rgb(0, 0, 0);">&nbsp;algorithms;<br />
<br />
</span><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br />
&nbsp;*&nbsp;</span><span style="color: rgb(128, 128, 128);">@author</span><span style="color: rgb(0, 128, 0);">&nbsp;yovn<br />
&nbsp;*<br />
&nbsp;</span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;QuickSorter</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">E&nbsp;</span><span style="color: rgb(0, 0, 255);">extends</span><span style="color: rgb(0, 0, 0);">&nbsp;Comparable</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">E</span><span style="color: rgb(0, 0, 0);">&gt;&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">extends</span><span style="color: rgb(0, 0, 0);">&nbsp;Sorter</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">E</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">/*</span><span style="color: rgb(0, 128, 0);">&nbsp;(non-Javadoc)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@see&nbsp;algorithms.Sorter#sort(E[],&nbsp;int,&nbsp;int)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;sort(E[]&nbsp;array,&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;from,&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;len)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q_sort(array,from,from</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">len</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">final</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;q_sort(E[]&nbsp;array,&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;from,&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;to)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(to</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">from</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;pivot</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">selectPivot(array,from,to);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pivot</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">partion(array,from,to,pivot);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q_sort(array,from,pivot</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q_sort(array,pivot</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">,to);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;partion(E[]&nbsp;array,&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;from,&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;to,&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;pivot)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;E&nbsp;tmp</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">array[pivot];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;array[pivot]</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">array[to];</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">now&nbsp;to's&nbsp;position&nbsp;is&nbsp;available</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">while</span><span style="color: rgb(0, 0, 0);">(from</span><span style="color: rgb(0, 0, 0);">!=</span><span style="color: rgb(0, 0, 0);">to)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">while</span><span style="color: rgb(0, 0, 0);">(from</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">to</span><span style="color: rgb(0, 0, 0);">&amp;&amp;</span><span style="color: rgb(0, 0, 0);">array[from].compareTo(tmp)</span><span style="color: rgb(0, 0, 0);">&lt;=</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">)from</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(from</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">to)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;array[to]</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">array[from];</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">now&nbsp;from's&nbsp;position&nbsp;is&nbsp;available</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;to</span><span style="color: rgb(0, 0, 0);">--</span><span style="color: rgb(0, 0, 0);">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">while</span><span style="color: rgb(0, 0, 0);">(from</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">to</span><span style="color: rgb(0, 0, 0);">&amp;&amp;</span><span style="color: rgb(0, 0, 0);">array[to].compareTo(tmp)</span><span style="color: rgb(0, 0, 0);">&gt;=</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">)to</span><span style="color: rgb(0, 0, 0);">--</span><span style="color: rgb(0, 0, 0);">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(from</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">to)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;array[from]</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">array[to];</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">now&nbsp;to's&nbsp;position&nbsp;is&nbsp;available&nbsp;now&nbsp;</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;array[from]</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">tmp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;from;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;selectPivot(E[]&nbsp;array,&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;from,&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;to)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;(from</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">to)</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
}</span></div>
<br />
还有归并排序，堆排序，桶式排序，基数排序，下次在归纳。
<img src ="http://www.blogjava.net/sdyjmc/aggbug/258519.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sdyjmc/" target="_blank">单飞</a> 2009-03-09 08:44 <a href="http://www.blogjava.net/sdyjmc/archive/2009/03/09/258519.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]用泛型实现通用类型数组的操作，eg:删除</title><link>http://www.blogjava.net/sdyjmc/archive/2008/09/23/230762.html</link><dc:creator>单飞</dc:creator><author>单飞</author><pubDate>Tue, 23 Sep 2008 13:44:00 GMT</pubDate><guid>http://www.blogjava.net/sdyjmc/archive/2008/09/23/230762.html</guid><wfw:comment>http://www.blogjava.net/sdyjmc/comments/230762.html</wfw:comment><comments>http://www.blogjava.net/sdyjmc/archive/2008/09/23/230762.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sdyjmc/comments/commentRss/230762.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sdyjmc/services/trackbacks/230762.html</trackback:ping><description><![CDATA[<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;用泛型实现通用数组的删除操作</span><span style="color: #008000;"><br />
</span><span style="color: #0000ff;">package</span><span style="color: #000000;">&nbsp;test;<br />
<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.lang.reflect.Array;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.util.ArrayList;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.util.List;<br />
<br />
</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;Test1&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">T</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;T[]&nbsp;deleteArray(T[]&nbsp;items,</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;index)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(items&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;">&nbsp;items.length&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;">&nbsp;index&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;">&nbsp;index&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;items.length&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;items;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T[]&nbsp;newItems&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(T[])&nbsp;Array.newInstance(items.getClass().getComponentType(),&nbsp;items.length&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(index&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;first</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.arraycopy(items,&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">,&nbsp;newItems,&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">,&nbsp;newItems.length);&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(index&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;items.length&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;end</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.arraycopy(items,&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">,&nbsp;newItems,&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">,&nbsp;newItems.length);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;middle</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.arraycopy(items,&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">,&nbsp;newItems,&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">,&nbsp;index);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.arraycopy(items,&nbsp;index</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">,&nbsp;newItems,&nbsp;index,&nbsp;items.length&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;index&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;newItems;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/**</span><span style="color: #008000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080;">@param</span><span style="color: #008000;">&nbsp;args<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;main(String[]&nbsp;args)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;first</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String[]&nbsp;first&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;String[]{</span><span style="color: #000000;">"</span><span style="color: #000000;">0</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">"</span><span style="color: #000000;">1</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">"</span><span style="color: #000000;">2</span><span style="color: #000000;">"</span><span style="color: #000000;">};<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String[]&nbsp;rt&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;deleteArray(first,</span><span style="color: #000000;">0</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printArray(rt);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;end</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer[]&nbsp;end&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Integer[]{</span><span style="color: #000000;">0</span><span style="color: #000000;">,</span><span style="color: #000000;">1</span><span style="color: #000000;">,</span><span style="color: #000000;">2</span><span style="color: #000000;">};<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer[]&nbsp;&nbsp;rt1&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;deleteArray(end,</span><span style="color: #000000;">2</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printIntegerArray(rt1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;printArray(String[]&nbsp;array){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">start&nbsp;====================</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(String&nbsp;s:array){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(s);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">end&nbsp;====================</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">String</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;a&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;ArrayList</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">String</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;printIntegerArray(Integer[]&nbsp;array){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">start&nbsp;====================</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(Integer&nbsp;s:array){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(s);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">end&nbsp;====================</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">String</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;a&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;ArrayList</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">String</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
}<br />
</span></div>
<img src ="http://www.blogjava.net/sdyjmc/aggbug/230762.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sdyjmc/" target="_blank">单飞</a> 2008-09-23 21:44 <a href="http://www.blogjava.net/sdyjmc/archive/2008/09/23/230762.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>communication link failure  Bad handshake</title><link>http://www.blogjava.net/sdyjmc/archive/2008/07/04/212525.html</link><dc:creator>单飞</dc:creator><author>单飞</author><pubDate>Fri, 04 Jul 2008 03:13:00 GMT</pubDate><guid>http://www.blogjava.net/sdyjmc/archive/2008/07/04/212525.html</guid><wfw:comment>http://www.blogjava.net/sdyjmc/comments/212525.html</wfw:comment><comments>http://www.blogjava.net/sdyjmc/archive/2008/07/04/212525.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sdyjmc/comments/commentRss/212525.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sdyjmc/services/trackbacks/212525.html</trackback:ping><description><![CDATA[用mysql-connector-java-3.1.2stable-bin.jar 连接mysql 5.0的时候会抛这个异常,改用mysql-connector-java-5.1.6stable-bin.jar后就没问题了.
<img src ="http://www.blogjava.net/sdyjmc/aggbug/212525.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sdyjmc/" target="_blank">单飞</a> 2008-07-04 11:13 <a href="http://www.blogjava.net/sdyjmc/archive/2008/07/04/212525.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ClassLoader.getResourceAsStream(name);路径问题</title><link>http://www.blogjava.net/sdyjmc/archive/2007/04/26/113766.html</link><dc:creator>单飞</dc:creator><author>单飞</author><pubDate>Thu, 26 Apr 2007 05:54:00 GMT</pubDate><guid>http://www.blogjava.net/sdyjmc/archive/2007/04/26/113766.html</guid><wfw:comment>http://www.blogjava.net/sdyjmc/comments/113766.html</wfw:comment><comments>http://www.blogjava.net/sdyjmc/archive/2007/04/26/113766.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sdyjmc/comments/commentRss/113766.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sdyjmc/services/trackbacks/113766.html</trackback:ping><description><![CDATA[InputStream in = getClass().getResourceAsStream('/'+"spring-beans.dtd"); 表示从classs目录下面的找文件,文件放在src下面就可以了.<br>InputStream in = getClass().getResourceAsStream("spring-beans.dtd"); 表示从当前classs下面的路径找文件<br>如果是在com.a.b.c.d.Test这个class就表示spring-beans.dtd要放在目录src\com\a\b\c\d下.<br>
<br>SAXBuilder builder = new SAXBuilder();<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; EntityResolver resolver = new EntityResolver() {<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public InputSource resolveEntity(String publicId,<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; String systemId) {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (publicId.equals("-//SPRING//DTD BEAN//EN")) {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; InputStream in = getClass().getResourceAsStream(<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; '/'+"spring-beans.dtd");<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return new InputSource(in);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } else {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return null;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; };<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; builder.setEntityResolver(resolver);<br><br>这样才能解决dtd的本地查找问题.<br><br><img src ="http://www.blogjava.net/sdyjmc/aggbug/113766.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sdyjmc/" target="_blank">单飞</a> 2007-04-26 13:54 <a href="http://www.blogjava.net/sdyjmc/archive/2007/04/26/113766.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>