﻿<?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-void-随笔分类-Java</title><link>http://www.blogjava.net/void241/category/33133.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 02 Jun 2016 08:06:41 GMT</lastBuildDate><pubDate>Thu, 02 Jun 2016 08:06:41 GMT</pubDate><ttl>60</ttl><item><title>深入理解Java 8 Lambda（类库篇——Streams API，Collectors和并行）</title><link>http://www.blogjava.net/void241/archive/2016/06/02/430747.html</link><dc:creator>void</dc:creator><author>void</author><pubDate>Thu, 02 Jun 2016 07:32:00 GMT</pubDate><guid>http://www.blogjava.net/void241/archive/2016/06/02/430747.html</guid><wfw:comment>http://www.blogjava.net/void241/comments/430747.html</wfw:comment><comments>http://www.blogjava.net/void241/archive/2016/06/02/430747.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/void241/comments/commentRss/430747.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/void241/services/trackbacks/430747.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 原文链接：http://lucida.me/blog/java-8-lambdas-insideout-library-features/关于深入理解Java 8 Lambda（语言篇&#8212;&#8212;lambda，方法引用，目标类型和默认方法）深入理解Java 8 Lambda（类库篇&#8212;&#8212;Streams API，Collector和并行）深入理解Java 8 L...&nbsp;&nbsp;<a href='http://www.blogjava.net/void241/archive/2016/06/02/430747.html'>阅读全文</a><img src ="http://www.blogjava.net/void241/aggbug/430747.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/void241/" target="_blank">void</a> 2016-06-02 15:32 <a href="http://www.blogjava.net/void241/archive/2016/06/02/430747.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SpringMVC与struts2比较</title><link>http://www.blogjava.net/void241/archive/2014/09/24/418246.html</link><dc:creator>void</dc:creator><author>void</author><pubDate>Wed, 24 Sep 2014 15:16:00 GMT</pubDate><guid>http://www.blogjava.net/void241/archive/2014/09/24/418246.html</guid><wfw:comment>http://www.blogjava.net/void241/comments/418246.html</wfw:comment><comments>http://www.blogjava.net/void241/archive/2014/09/24/418246.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/void241/comments/commentRss/418246.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/void241/services/trackbacks/418246.html</trackback:ping><description><![CDATA[<pre accuse="aContent" style="white-space: normal; color: #494949; background-color: #f6f6f6;">1:<br />spring3开发效率高于struts<br />2:<br />spring3 mvc可以认为已经100%零配置<br />3:<br />struts2是类级别的拦截， 一个类对应一个request上下文，<br />springmvc是方法级别的拦截，一个方法对应一个request上下文，而方法同时又跟一个url对应<br />所以说从架构本身上 spring3 mvc就容易实现restful url&nbsp;<br />而struts2的架构实现起来要费劲<br />因为struts2 action的一个方法可以对应一个url<br />而其类属性却被所有方法共享，这也就无法用注解或其他方式标识其所属方法了&nbsp;<br />4:<br />spring3mvc的方法之间基本上独立的，独享request response数据<br />请求数据通过参数获取，处理结果通过ModelMap交回给框架<br />方法之间不共享变量<br />而struts2搞的就比较乱，虽然方法之间也是独立的，但其所有Action变量是共享的<br />这不会影响程序运行，却给我们编码 读程序时带来麻烦&nbsp;<br />5:<br />由于Struts2需要针对每个Request进行封装，把Request，Session等Servlet生命周期的变量封装成一个一个Map，供给每个Action使用，并保证线程安全。所以在原则上，是比较耗费内存的</pre><img src ="http://www.blogjava.net/void241/aggbug/418246.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/void241/" target="_blank">void</a> 2014-09-24 23:16 <a href="http://www.blogjava.net/void241/archive/2014/09/24/418246.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>eclipse 调试时看不到浅蓝色高亮条的解决</title><link>http://www.blogjava.net/void241/archive/2013/06/05/400211.html</link><dc:creator>void</dc:creator><author>void</author><pubDate>Wed, 05 Jun 2013 02:18:00 GMT</pubDate><guid>http://www.blogjava.net/void241/archive/2013/06/05/400211.html</guid><wfw:comment>http://www.blogjava.net/void241/comments/400211.html</wfw:comment><comments>http://www.blogjava.net/void241/archive/2013/06/05/400211.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/void241/comments/commentRss/400211.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/void241/services/trackbacks/400211.html</trackback:ping><description><![CDATA[<span style="color: #454545; font-family: Tahoma, Helvetica, Arial, STHeiti; background-color: #ffffff; ">使用的tomcat插件是sysdeo tomcat plugin,</span><br style="color: #454545; font-family: Tahoma, Helvetica, Arial, STHeiti; background-color: #ffffff; " /><span style="color: #454545; font-family: Tahoma, Helvetica, Arial, STHeiti; background-color: #ffffff; ">windows-&gt;Preference-&gt;tomcat-&gt;Source path,勾上显示框中要调试的项目,然后重启tomcat即可</span><img src ="http://www.blogjava.net/void241/aggbug/400211.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/void241/" target="_blank">void</a> 2013-06-05 10:18 <a href="http://www.blogjava.net/void241/archive/2013/06/05/400211.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>对jar包进行再次修改</title><link>http://www.blogjava.net/void241/archive/2012/06/14/380806.html</link><dc:creator>void</dc:creator><author>void</author><pubDate>Thu, 14 Jun 2012 10:52:00 GMT</pubDate><guid>http://www.blogjava.net/void241/archive/2012/06/14/380806.html</guid><wfw:comment>http://www.blogjava.net/void241/comments/380806.html</wfw:comment><comments>http://www.blogjava.net/void241/archive/2012/06/14/380806.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/void241/comments/commentRss/380806.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/void241/services/trackbacks/380806.html</trackback:ping><description><![CDATA[<div>引言<br />　　   在学习和开发JAVA项目中，我们经常会用到第三方提供的一些jar。使用这些第三方工具包，可以提高我们开发的效率，缩短开发的时间。有的第三方工具，提供详细的使用说明和源代码，有时有的却不提供源代码，使用说明也不是很详细，这对我们使用就非常不方便。<br />　　   有道是，知其然才知其所以然。有时候，我们必须读取jar里的打包的类。而有时还有可能要对它进行小量修改，使之适用于自己的特殊需求。<br />　　前期准备<br />　　   Java反编译工具：<br />　　       强烈推荐，小颖JAVA源代码反编译系列专家1.4终极版。<br />　　   压缩工具：<br />　　       Winrar<br />　　       <br />　　   （这些工具，都可以通过搜索在网络上找到）<br />　　开始<br />　　1． 将jar包解压<br />　　我们可以使用winrar工具将jar解压到指定目录<br />　　2． 反编译class<br />　　   使用 Java 反编译工具，将class文件反编译为java文件。（大多数反编译工具只提供单个class文件的反编译，这里推荐"小颖JAVA源代码反编译"工具，可以反编译一个目录下的所有class文件）<br />　　       <br />　　3． 构建项目<br />　　   我们将反编译后的java文件设为项目的源文件目录。<br />　　   将jar，及jar所需要的其它lib，作为libraries加入项目中，这样可以保证我们的java文件可以编译。<br />　　4． 对反编译的java进行修改<br />　　   通过反编译的java文件，可能还有错误，不能编译通过，在不影响作者原始意图的前提下，我们必须对它进行小量修改，保证可编译通过。<br />　　   保证java文件可以编译通过后，我们再在其基础上进行修改，使之符合自己的需求。<br />　　   <br />　　5． 编译修改的java<br />　　   编译修改后的java文件，注意的是，最好只编译修改的单个java文件。<br />　　   编译完成后，我们进行测试，保证修改无误。因为JVM会先找寻classes目录下的class文件，并率先加入，这样我们修改编译后的class文件，便是测试时使用的class文件。<br />　　   重复这个过程，直至java达到我们的目的。<br />　　6． Jar打包<br />　　   将修改生成后的class文件，替换我们将jar解压缩目录下的相应class文件，重新打包生成jar。<br />　　   我们可以使用jar命令进行打包，也可以使用winrar工具进行打包。使用winrar工具打包时，要注意选择压缩文件格式为zip，并将生成的压缩包文件的后缀名设置为jar。<br />　　   替换原来的jar。再进行最后一次测试。<br />　　总结<br />　　   由于Java的跨平台性，使得java的class文件可以进行反编译，我们可以对jar文件进行修改，使之适用于自己的需求。<br />　　   对jar文件进行修改，我们必须首先获得jar开发者的同意。<br />　　   对jar文件进行修改，首先必须对反编译的java文件比较熟悉。这就必须有良好的代码阅读能力，清楚作者的技术架构和开发设计思想。如果没有把握，最好能与jar开发者联系，提出你的需求。<br />　　   对于某些java开发者来说，并不希望将自己辛辛苦苦写的code公布于众，为了避免他人反编译，可以使用混淆器，但也只是增加代码阅读的困难性。如果不是作为商业运用，我们还是希望开发者能够提供源代码，互相学习探讨。</div><img src ="http://www.blogjava.net/void241/aggbug/380806.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/void241/" target="_blank">void</a> 2012-06-14 18:52 <a href="http://www.blogjava.net/void241/archive/2012/06/14/380806.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java各种符号，路径，版本获取方式</title><link>http://www.blogjava.net/void241/archive/2012/04/19/375272.html</link><dc:creator>void</dc:creator><author>void</author><pubDate>Thu, 19 Apr 2012 06:30:00 GMT</pubDate><guid>http://www.blogjava.net/void241/archive/2012/04/19/375272.html</guid><wfw:comment>http://www.blogjava.net/void241/comments/375272.html</wfw:comment><comments>http://www.blogjava.net/void241/archive/2012/04/19/375272.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/void241/comments/commentRss/375272.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/void241/services/trackbacks/375272.html</trackback:ping><description><![CDATA[<div><table border="1" cellpadding="0"><tbody><tr><td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid"><p align="left"><span style="font-size: 12pt; font-family: 宋体">java.version</span></p>             </td>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">Java </span><span style="font-size: 12pt; font-family: 宋体">运行时环境版本</span></p>             </td>         </tr>         <tr>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">java.vendor</span></p>             </td>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">Java </span><span style="font-size: 12pt; font-family: 宋体">运行时环境供应商</span></p>             </td>         </tr>         <tr>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">java.vendor.url</span></p>             </td>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">Java </span><span style="font-size: 12pt; font-family: 宋体">供应商的 URL</span></p>             </td>         </tr>         <tr>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">java.home</span></p>             </td>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">Java </span><span style="font-size: 12pt; font-family: 宋体">安装目录</span></p>             </td>         </tr>         <tr>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">java.vm.specification.version</span></p>             </td>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">Java </span><span style="font-size: 12pt; font-family: 宋体">虚拟机规范版本</span></p>             </td>         </tr>         <tr>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">java.vm.specification.vendor</span></p>             </td>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">Java </span><span style="font-size: 12pt; font-family: 宋体">虚拟机规范供应商</span></p>             </td>         </tr>         <tr>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">java.vm.specification.name</span></p>             </td>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">Java </span><span style="font-size: 12pt; font-family: 宋体">虚拟机规范名称</span></p>             </td>         </tr>         <tr>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">java.vm.version</span></p>             </td>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">Java </span><span style="font-size: 12pt; font-family: 宋体">虚拟机实现版本</span></p>             </td>         </tr>         <tr>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">java.vm.vendor</span></p>             </td>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">Java </span><span style="font-size: 12pt; font-family: 宋体">虚拟机实现供应商</span></p>             </td>         </tr>         <tr>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">java.vm.name</span></p>             </td>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">Java </span><span style="font-size: 12pt; font-family: 宋体">虚拟机实现名称</span></p>             </td>         </tr>         <tr>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">java.specification.version</span></p>             </td>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">Java </span><span style="font-size: 12pt; font-family: 宋体">运行时环境规范版本</span></p>             </td>         </tr>         <tr>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">java.specification.vendor</span></p>             </td>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">Java </span><span style="font-size: 12pt; font-family: 宋体">运行时环境规范供应商</span></p>             </td>         </tr>         <tr>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">java.specification.name</span></p>             </td>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">Java </span><span style="font-size: 12pt; font-family: 宋体">运行时环境规范名称</span></p>             </td>         </tr>         <tr>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">java.class.version</span></p>             </td>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">Java </span><span style="font-size: 12pt; font-family: 宋体">类格式版本号</span></p>             </td>         </tr>         <tr>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">java.class.path</span></p>             </td>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">Java </span><span style="font-size: 12pt; font-family: 宋体">类路径</span></p>             </td>         </tr>         <tr>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">java.library.path</span></p>             </td>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">加载库时搜索的路径列表</span></p>             </td>         </tr>         <tr>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">java.io.tmpdir</span></p>             </td>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">默认的临时文件路径</span></p>             </td>         </tr>         <tr>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">java.compiler</span></p>             </td>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">要使用的 JIT 编译器的名称</span></p>             </td>         </tr>         <tr>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">java.ext.dirs</span></p>             </td>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">一个或多个扩展目录的路径</span></p>             </td>         </tr>         <tr>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">os.name</span></p>             </td>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">操作系统的名称</span></p>             </td>         </tr>         <tr>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">os.arch</span></p>             </td>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">操作系统的架构</span></p>             </td>         </tr>         <tr>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">os.version</span></p>             </td>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">操作系统的版本</span></p>             </td>         </tr>         <tr>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">file.separator</span></p>             </td>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">文件分隔符（在 UNIX 系统中是&#8220;/&#8221;）</span></p>             </td>         </tr>         <tr>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">path.separator</span></p>             </td>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">路径分隔符（在 UNIX 系统中是&#8220;:&#8221;）</span></p>             </td>         </tr>         <tr>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">line.separator</span></p>             </td>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">行分隔符（在 UNIX 系统中是&#8220;/n&#8221;）</span></p>             </td>         </tr>         <tr>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">user.name</span></p>             </td>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">用户的账户名称</span></p>             </td>         </tr>         <tr>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">user.home</span></p>             </td>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">用户的主目录</span></p>             </td>         </tr>         <tr>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">user.dir</span></p>             </td>             <td style="border-right: windowtext 1pt solid; padding-right: 0.75pt; border-top: windowtext 1pt solid; padding-left: 0.75pt; padding-bottom: 0.75pt; border-left: windowtext 1pt solid; padding-top: 0.75pt; border-bottom: windowtext 1pt solid">             <p align="left"><span style="font-size: 12pt; font-family: 宋体">用户的当前工作目录</span></p></td></tr></tbody></table></div><img src ="http://www.blogjava.net/void241/aggbug/375272.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/void241/" target="_blank">void</a> 2012-04-19 14:30 <a href="http://www.blogjava.net/void241/archive/2012/04/19/375272.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>windows or linux 路径分隔符 </title><link>http://www.blogjava.net/void241/archive/2012/04/19/375266.html</link><dc:creator>void</dc:creator><author>void</author><pubDate>Thu, 19 Apr 2012 06:11:00 GMT</pubDate><guid>http://www.blogjava.net/void241/archive/2012/04/19/375266.html</guid><wfw:comment>http://www.blogjava.net/void241/comments/375266.html</wfw:comment><comments>http://www.blogjava.net/void241/archive/2012/04/19/375266.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/void241/comments/commentRss/375266.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/void241/services/trackbacks/375266.html</trackback:ping><description><![CDATA[<div>System.getProperty("file.separator");</div><img src ="http://www.blogjava.net/void241/aggbug/375266.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/void241/" target="_blank">void</a> 2012-04-19 14:11 <a href="http://www.blogjava.net/void241/archive/2012/04/19/375266.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java Map 循环比较排列</title><link>http://www.blogjava.net/void241/archive/2012/02/03/369343.html</link><dc:creator>void</dc:creator><author>void</author><pubDate>Fri, 03 Feb 2012 14:24:00 GMT</pubDate><guid>http://www.blogjava.net/void241/archive/2012/02/03/369343.html</guid><wfw:comment>http://www.blogjava.net/void241/comments/369343.html</wfw:comment><comments>http://www.blogjava.net/void241/archive/2012/02/03/369343.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/void241/comments/commentRss/369343.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/void241/services/trackbacks/369343.html</trackback:ping><description><![CDATA[<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; ">ArrayList</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">Entry</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">Integer,Integer</span><span style="color: #000000; ">&gt;&gt;</span><span style="color: #000000; ">&nbsp;infoIds&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; ">Entry</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">Integer,Integer</span><span style="color: #000000; ">&gt;&gt;</span><span style="color: #000000; ">(hashCount.entrySet());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Collections.sort(infoIds,&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;Comparator</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">Map.Entry</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">Integer,&nbsp;Integer</span><span style="color: #000000; ">&gt;&gt;</span><span style="color: #000000; ">()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;compare(Map.Entry</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">Integer,&nbsp;Integer</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;o1,&nbsp;Map.Entry</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">Integer,&nbsp;Integer</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;o2)&nbsp;{<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;(o2.getValue()&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;o1.getValue());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});</span></div><img src ="http://www.blogjava.net/void241/aggbug/369343.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/void241/" target="_blank">void</a> 2012-02-03 22:24 <a href="http://www.blogjava.net/void241/archive/2012/02/03/369343.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LinkedHashMap 和 HashMap的区别 </title><link>http://www.blogjava.net/void241/archive/2011/09/02/357853.html</link><dc:creator>void</dc:creator><author>void</author><pubDate>Fri, 02 Sep 2011 13:17:00 GMT</pubDate><guid>http://www.blogjava.net/void241/archive/2011/09/02/357853.html</guid><wfw:comment>http://www.blogjava.net/void241/comments/357853.html</wfw:comment><comments>http://www.blogjava.net/void241/archive/2011/09/02/357853.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/void241/comments/commentRss/357853.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/void241/services/trackbacks/357853.html</trackback:ping><description><![CDATA[<div>  顾名思义LinkedHashMap是比HashMap多了一个链表的结构。与HashMap相比LinkedHashMap维护的是一个具有双重链表的 HashMap，LinkedHashMap支持2中排序一种是插入排序，一种是使用排序，最近使用的会移至尾部例如 M1 M2 M3  M4，使用M3后为 M1 M2 M4  M3了，LinkedHashMap输出时其元素是有顺序的，而HashMap输出时是随机的，如果Map映射比较复杂而又要求高效率的话，最好使用 LinkedHashMap，但是多线程访问的话可能会造成不同步，所以要用Collections.synchronizedMap来包装一下，从而实 现同步。其实现一般为：<br /> &nbsp;&nbsp;&nbsp;  Map&lt;String String&gt; map = Collections.synchronizedMap(new LinkedHashMap(&lt;String String));             			</div><img src ="http://www.blogjava.net/void241/aggbug/357853.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/void241/" target="_blank">void</a> 2011-09-02 21:17 <a href="http://www.blogjava.net/void241/archive/2011/09/02/357853.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>取中文字符的拼音首字母</title><link>http://www.blogjava.net/void241/archive/2010/07/29/327458.html</link><dc:creator>void</dc:creator><author>void</author><pubDate>Thu, 29 Jul 2010 08:44:00 GMT</pubDate><guid>http://www.blogjava.net/void241/archive/2010/07/29/327458.html</guid><wfw:comment>http://www.blogjava.net/void241/comments/327458.html</wfw:comment><comments>http://www.blogjava.net/void241/archive/2010/07/29/327458.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/void241/comments/commentRss/327458.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/void241/services/trackbacks/327458.html</trackback:ping><description><![CDATA[/**<br />
* 取中文字符的拼音首字母<br />
* @author<br />
*/<br />
public class GB2Alpha {<br />
/**<br />
* 字母Z使用了两个标签，这里有２７个值,i, u, v都不做声母, 跟随前面的字母<br />
*/<br />
&nbsp; &nbsp; private char[] chartable =<br />
&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; '撒', '塌', '塌', '塌', '挖', '昔', '压', '匝', '座'<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; };<br />
<br />
&nbsp; &nbsp; private char[] alphatable =<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; };<br />
<br />
<br />
&nbsp; &nbsp; private int[] table = new int[27];<br />
<br />
&nbsp; &nbsp; /**<br />
&nbsp; &nbsp; * 初始化<br />
&nbsp; &nbsp; */<br />
&nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; for (int i = 0; i &lt; 27; ++i) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; table = gbValue(chartable);<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; public GB2Alpha() {<br />
<br />
&nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; /**<br />
&nbsp; &nbsp; * 主函数,输入字符,得到他的声母,英文字母返回对应的大写字母,其他非简体汉字返回 '0'<br />
&nbsp; &nbsp; */<br />
&nbsp; &nbsp; public char Char2Alpha(char ch) {<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (ch &gt;= 'a' &amp;&amp; ch &lt;= 'z')<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return (char) (ch - 'a' + 'A');<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (ch &gt;= 'A' &amp;&amp; ch &lt;= 'Z')<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return ch;<br />
<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; int gb = gbValue(ch);<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (gb &lt; table[0])<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return '0';<br />
<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; int i;<br />
&nbsp; &nbsp; &nbsp; &nbsp; for (i = 0; i &lt; 26; ++i) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (match(i, gb))<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (i &gt;= 26)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return '0';<br />
&nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return alphatable;<br />
&nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; /**<br />
&nbsp; &nbsp; * 根据一个包含汉字的字符串返回一个汉字拼音首字母的字符串<br />
&nbsp; &nbsp; * @param SourceStr<br />
&nbsp; &nbsp; * @return<br />
&nbsp; &nbsp; */<br />
&nbsp; &nbsp; public String String2Alpha(String SourceStr) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; String Result = "";<br />
&nbsp; &nbsp; &nbsp; &nbsp; int StrLength = SourceStr.length();<br />
&nbsp; &nbsp; &nbsp; &nbsp; int i;<br />
&nbsp; &nbsp; &nbsp; &nbsp; try {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (i = 0; i &lt; StrLength; i++) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Result += Char2Alpha(SourceStr.charAt(i));<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; } catch (Exception e) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Result = "";<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; return Result;<br />
&nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; private boolean match(int i, int gb) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (gb &lt; table)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return false;<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; int j = i + 1;<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; //字母Z使用了两个标签<br />
&nbsp; &nbsp; &nbsp; &nbsp; while (j &lt; 26 &amp;&amp; (table == table))<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ++j;<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (j == 26)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return gb &lt;= table;<br />
&nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return gb &lt; table;<br />
<br />
&nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; /**<br />
&nbsp; &nbsp; * 取出汉字的编码<br />
&nbsp; &nbsp; */<br />
&nbsp; &nbsp; private int gbValue(char ch) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; String str = new String();<br />
&nbsp; &nbsp; &nbsp; &nbsp; str += ch;<br />
&nbsp; &nbsp; &nbsp; &nbsp; try {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; byte[] bytes = str.getBytes("GB2312");<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (bytes.length &lt; 2)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return 0;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return (bytes[0] &lt;&lt; 8 &amp; 0xff00) + (bytes[1] &amp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0xff);<br />
&nbsp; &nbsp; &nbsp; &nbsp; } catch (Exception e) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return 0;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; }<br />
<br />
<br />
&nbsp; &nbsp; public static void main(String[] args) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; GB2Alpha obj1 = new GB2Alpha();<br />
&nbsp; &nbsp; &nbsp; &nbsp; System.out.println(obj1.String2Alpha("小华"));<br />
&nbsp; &nbsp; &nbsp; &nbsp; return;<br />
&nbsp; &nbsp; }<br />
}<img src ="http://www.blogjava.net/void241/aggbug/327458.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/void241/" target="_blank">void</a> 2010-07-29 16:44 <a href="http://www.blogjava.net/void241/archive/2010/07/29/327458.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java安全有效的实现两星期内自动登陆功能</title><link>http://www.blogjava.net/void241/archive/2009/06/26/284231.html</link><dc:creator>void</dc:creator><author>void</author><pubDate>Fri, 26 Jun 2009 02:22:00 GMT</pubDate><guid>http://www.blogjava.net/void241/archive/2009/06/26/284231.html</guid><wfw:comment>http://www.blogjava.net/void241/comments/284231.html</wfw:comment><comments>http://www.blogjava.net/void241/archive/2009/06/26/284231.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/void241/comments/commentRss/284231.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/void241/services/trackbacks/284231.html</trackback:ping><description><![CDATA[<p><font color="#333399">http://stonejava.javaeye.com/blog/255136</font></p>
<p><font color="#333399">http://www.javaeye.com/topic/130309</font></p>
<p><font color="#333399">http://i18n.javaeye.com/blog/130849</font></p>
<p><font color="#333399">=========================================<br />
</font></p>
<p><font color="#333399">现在很多网站都有为用户保存登陆信息（即保存Cookie）的功能，当用户下一次进入网站时，可以帮助用户自动登陆，使网站显得更加友好。笔者通过 研究ACEGI项目的自动登陆源码，编写了一个安全有效的实现两星期自动登陆功能的JAVA工具类，下面是具体的实现流程和实现代码。</font></p>
<p><font color="#333399">　　先说一下流程：</font></p>
<p><font color="#333399">　　1．保存用户信息阶段：</font></p>
<p><font color="#333399">　　当用户登陆网站时，在登陆页面填写完用户名和密码后，如果用户在提交时还选择了&#8220;两星期内自动登陆&#8221;复选框，那么在后台程序中验证用户名和密码 全都正确后，还要为用户保存这些信息，以便用户下一次可以直接进入网站；如果用户没有勾选&#8220;两星期内自动登陆&#8221;复选框，则不必为用户保存信息，那么用户在 下一次登陆网站时仍需要填写用户名和密码。</font></p>
<p><font color="#333399">　　在保存用户信息阶段，主要的工作是对用户的信息进行加密并保存到客户端。加密用户的信息是较为繁琐的，大致上可分为以下几个步聚：</font></p>
<p><font color="#333399">　　　① 得到用户名、经MD5加密后的用户密码、cookie有效时间(本文设置的是两星期，可根据自己需要修改)<br />
② 自定义的一个webKey，这个Key是我们为自己的网站定义的一个字符串常量，这个可根据自己需要随意设置<br />
③ 将上两步得到的四个值得新连接成一个新的字符串，再进行MD5加密，这样就得到了一个MD5明文字符串<br />
④ 将用户名、cookie有效时间、MD5明文字符串使用&#8220;：&#8221;间隔连接起来，再对这个连接后的新字符串进行Base64编码<br />
⑤ 设置一个cookieName,将cookieName和上一步产生的Base64编码写入到客户端。</font></p>
<p><font color="#333399">　　2．读取用户信息：</font></p>
<p><font color="#333399">　　其实弄明白了保存原理，读取及校验原理就很容易做了。读取和检验可以分为下面几个步骤：</font></p>
<p><font color="#333399">　　　① 根据设置的cookieName，得到cookieValue，如果值为空，就不帮用户进行自动登陆；否则执行读取方法<br />
② 将cookieValue进行Base64解码，将取得的字符串以split(&#8220;:&#8221;)进行拆分，得到一个String数组cookieValues（此操作与保存阶段的第4步正好相反），这一步将得到三个值：</font></p>
<p><font color="#333399">cookieValues[0] ---- 用户名<br />
cookieValues[1] ---- cookie有效时间<br />
cookieValues[2] ---- MD5明文字符串</font></p>
<p><font color="#333399">　　　③ 判断cookieValues的长度是否为3，如果不为3则进行错误处理。<br />
④ 如果长度等于3，取出第二个,即cookieValues[1]，此时将会得到有效时间（long型），将有效时间与服务器系统当前时间比较，如果小于当前时间，则说明cookie过期，进行错误处理。<br />
⑤ 如果cookie没有过期，就取cookieValues[0]，这样就可以得到用户名了，然后去数据库按用户名查找用户。<br />
⑥ 如果上一步返回为空，进行错误处理。如果不为空，那么将会得到一个已经封装好用户信息的User实例对象user<br />
⑦ 取出实例对象user的用户名、密码、cookie有效时间（即cookieValues[1]）、webKey，然后将四个值连接起来，然后进行MD5加密，这样做也会得到一个MD5明文字符串（此操作与保存阶段的第3步类似）<br />
⑧ 将上一步得到MD5明文与cookieValues[2]进行equals比较，如果是false，进行错误处理；如果是true，则将user对象添加到session中，帮助用户完成自动登陆 </font></p>
<p><font color="#333399">　　完整的代码，用途请参见注释 </font></p>
<p><font color="#333399">CookieUtil.java</font></p>
<p><font color="#333399">处理cookie的工具类,包括读取,保存,清除三个主要方法。</font></p>
<p><font color="#333399"></font></p>
<p><font color="#333399">package cn.itcast.util; </font></p>
<p><font color="#333399">import java.io.IOException; <br />
import java.io.PrintWriter; <br />
import java.io.UnsupportedEncodingException; <br />
import javax.servlet.FilterChain; <br />
import javax.servlet.ServletException; <br />
import javax.servlet.http.Cookie; <br />
import javax.servlet.http.HttpServletRequest; <br />
import javax.servlet.http.HttpServletResponse; <br />
import javax.servlet.http.HttpSession; <br />
import java.security.MessageDigest; <br />
import java.security.NoSuchAlgorithmException; <br />
import cn.itcast.bean.User; <br />
import cn.itcast.dao.UserDAO; <br />
import cn.itcast.factory.DaoImplFactory; <br />
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64; </font></p>
<p><font color="#333399"><br />
/*</font></p>
<p><font color="#333399">* 2007.09.21 by lyhapple</font></p>
<p><font color="#333399">* */<br />
public class CookieUtil {<br />
//保存cookie时的cookieName<br />
private final static String cookieDomainName = &#8220;cn.itcast&#8221;; <br />
//加密cookie时的网站自定码<br />
private final static String webKey = &#8220;itcast&#8221;; <br />
//设置cookie有效期是两个星期，根据需要自定义<br />
private final static long cookieMaxAge = 60 * 60 * 24 * 7 * 2; <br />
//保存Cookie到客户端--------------------------------------------------------------------------------------------------------<br />
//在CheckLogonServlet.java中被调用<br />
//传递进来的user对象中封装了在登陆时填写的用户名与密码<br />
public static void saveCookie(User user, HttpServletResponse response) {</font></p>
<p><font color="#333399">//cookie的有效期<br />
long validTime = System.currentTimeMillis() + (cookieMaxAge * 1000); <br />
//MD5加密用户详细信息<br />
String cookieValueWithMd5 =getMD5(user.getUserName() + ":" + user.getPassword()+ ":" + validTime + ":" + webKey); <br />
//将要被保存的完整的Cookie值<br />
String cookieValue = user.getUserName() + ":" + validTime + ":" + cookieValueWithMd5; <br />
//再一次对Cookie的值进行BASE64编码<br />
String cookieValueBase64 = new String(Base64.encode(cookieValue.getBytes())); <br />
//开始保存Cookie<br />
Cookie cookie = new Cookie(cookieDomainName, cookieValueBase64); </font></p>
<p><font color="#333399">//存两年(这个值应该大于或等于validTime)<br />
cookie.setMaxAge(60 * 60 * 24 * 365 * 2); <br />
//cookie有效路径是网站根目录<br />
cookie.setPath("/"); <br />
//向客户端写入<br />
response.addCookie(cookie); </font></p>
<p><font color="#333399">}</font></p>
<p><font color="#333399">//读取Cookie,自动完成登陆操作--------------------------------------------------------------------------------------------</font></p>
<p><font color="#333399">//在Filter程序中调用该方法,见AutoLogonFilter.java<br />
public static void readCookieAndLogon(HttpServletRequest request, HttpServletResponse response, <br />
FilterChain chain) throws IOException, ServletException,UnsupportedEncodingException{<br />
//根据cookieName取cookieValue<br />
Cookie cookies[] = request.getCookies(); <br />
String cookieValue = null; <br />
if(cookies!=null){<br />
for(int i=0; i＜cookies.length; i++){<br />
if (cookieDomainName.equals(cookies[i].getName())) {<br />
cookieValue = cookies[i].getValue(); <br />
break; <br />
}<br />
}<br />
}</font></p>
<p><font color="#333399"><br />
//如果cookieValue为空,返回,</font></p>
<p><font color="#333399">if(cookieValue==null){</font></p>
<p><font color="#333399">return; </font></p>
<p><font color="#333399">}</font></p>
<p><font color="#333399">//如果cookieValue不为空,才执行下面的代码</font></p>
<p><font color="#333399">//先得到的CookieValue进行Base64解码</font></p>
<p><font color="#333399">String cookieValueAfterDecode = new String (Base64.decode(cookieValue),"utf-8"); </font></p>
<p><font color="#333399">//对解码后的值进行分拆,得到一个数组,如果数组长度不为3,就是非法登陆<br />
String cookieValues[] = cookieValueAfterDecode.split(":"); <br />
if(cookieValues.length!=3){<br />
response.setContentType("text/html; charset=utf-8"); <br />
PrintWriter out = response.getWriter(); <br />
out.println("你正在用非正常方式进入本站..."); <br />
out.close(); <br />
return; <br />
}<br />
//判断是否在有效期内,过期就删除Cookie<br />
long validTimeInCookie = new Long(cookieValues[1]); <br />
if(validTimeInCookie ＜ System.currentTimeMillis()){<br />
//删除Cookie<br />
clearCookie(response); <br />
response.setContentType("text/html; charset=utf-8"); <br />
PrintWriter out = response.getWriter(); <br />
out.println("＜a href=&#8217;logon.jsp&#8217;&gt;你的Cookie已经失效,请重新登陆＜/a&gt;"); <br />
out.close(); <br />
return; <br />
}</font></p>
<p><font color="#333399">//取出cookie中的用户名,并到数据库中检查这个用户名,<br />
String username = cookieValues[0]; <br />
//根据用户名到数据库中检查用户是否存在<br />
UserDAO ud = DaoImplFactory.getInstance(); </font></p>
<p><font color="#333399">User user = ud.selectUserByUsername(username); </font></p>
<p><font color="#333399">//如果user返回不为空,就取出密码,使用用户名+密码+有效时间+ webSiteKey进行MD5加密<br />
if(user!=null){<br />
String md5ValueInCookie = cookieValues[2]; <br />
String md5ValueFromUser =getMD5(user.getUserName() + ":" + user.getPassword()+ ":" + validTimeInCookie + ":" + webKey); <br />
//将结果与Cookie中的MD5码相比较,如果相同,写入Session,自动登陆成功,并继续用户请求<br />
if(md5ValueFromUser.equals(md5ValueInCookie)){<br />
HttpSession session = request.getSession(true); <br />
session.setAttribute("user", user); <br />
chain.doFilter(request, response); <br />
}<br />
}else{<br />
//返回为空执行<br />
response.setContentType("text/html; charset=utf-8"); <br />
PrintWriter out = response.getWriter(); <br />
out.println("cookie验证错误！"); <br />
out.close(); <br />
return; <br />
}<br />
}<br />
//用户注销时,清除Cookie,在需要时可随时调用------------------------------------------------------------<br />
public static void clearCookie( HttpServletResponse response){<br />
Cookie cookie = new Cookie(cookieDomainName, null); <br />
cookie.setMaxAge(0); <br />
cookie.setPath("/"); <br />
response.addCookie(cookie); <br />
}<br />
//获取Cookie组合字符串的MD5码的字符串----------------------------------------------------------------------------<br />
public static String getMD5(String value) {<br />
String result = null; <br />
try{<br />
byte[] valueByte = value.getBytes(); <br />
MessageDigest md = MessageDigest.getInstance("MD5"); <br />
md.update(valueByte); <br />
result = toHex(md.digest()); <br />
} catch (NoSuchAlgorithmException e2){<br />
e1.printStackTrace(); <br />
}<br />
return result; <br />
}</font></p>
<p><font color="#333399">//将传递进来的字节数组转换成十六进制的字符串形式并返回</font></p>
<p><font color="#333399">private static String toHex(byte[] buffer){<br />
StringBuffer sb = new StringBuffer(buffer.length * 2); <br />
for (int i = 0; i ＜ buffer.length; i++){<br />
sb.append(Character.forDigit((buffer[i] &amp; 0xf0) &gt;&gt; 4, 16)); <br />
sb.append(Character.forDigit(buffer[i] &amp; 0x0f, 16)); <br />
}<br />
return sb.toString(); <br />
}<br />
}</font></p>
<p><font color="#333399">下面的是对CookieUtil工具类各方法的调用演示：</font></p>
<p><font color="#333399">User.java</font></p>
<p><font color="#333399">封装用户信息的JavaBean对象模型<br />
package com.itcast.bean; <br />
public class User {<br />
private int id; <br />
private String userName; <br />
private String password; <br />
public String getPassword() {</font></p>
<p><font color="#333399">return password; </font></p>
<p><font color="#333399">}<br />
public void setPassword(String password) {</font></p>
<p><font color="#333399">this.password = password; </font></p>
<p><font color="#333399">}</font></p>
<p><font color="#333399">public String getUserName() {</font></p>
<p><font color="#333399">return userName; </font></p>
<p><font color="#333399">}</font></p>
<p><font color="#333399">public void setUserName(String userName) {</font></p>
<p><font color="#333399">this.userName = userName; </font></p>
<p><font color="#333399">}</font></p>
<p><font color="#333399">public int getId() {</font></p>
<p><font color="#333399">return id; </font></p>
<p><font color="#333399">}</font></p>
<p><font color="#333399">public void setId(int id) {</font></p>
<p><font color="#333399">this.id = id; </font></p>
<p><font color="#333399">}</font></p>
<p><font color="#333399">}</font></p>
<p><font color="#333399">AutoLogonFilter.java</font></p>
<p><font color="#333399">过滤器程序,可在WEB-INF/web.xml中设置过滤规则,本文对过滤规则不作介绍，此程序主要作用是检查用户在上一次登陆时是否保存了Cookie，如果保存了，就处理Cookie信息，并帮助用户自动登陆</font></p>
<p><font color="#333399">本程序主要调用了CookieUtil.java中的读取与自动登陆方法，即readCookieAndLogon方法</font></p>
<p><font color="#333399">package cn.itcast.filter; </font></p>
<p><font color="#333399">import java.io.IOException; <br />
import javax.servlet.Filter; <br />
import javax.servlet.FilterChain; <br />
import javax.servlet.FilterConfig; <br />
import javax.servlet.ServletException; <br />
import javax.servlet.ServletRequest; <br />
import javax.servlet.ServletResponse; <br />
import javax.servlet.http.Cookie; <br />
import javax.servlet.http.HttpServletRequest; <br />
import javax.servlet.http.HttpServletResponse; <br />
import javax.servlet.http.HttpSession; <br />
import cn.itcast bean.User; <br />
import cn.itcast.util.CookieUtil; </font></p>
<p><font color="#333399">public class AutoLogonFilter implements Filter {</font></p>
<p><font color="#333399">public void destroy() {</font></p>
<p><font color="#333399">}</font></p>
<p><font color="#333399">//保存cookie时的cookieName,与CookieUtil.java中的设置相同</font></p>
<p><font color="#333399">private final static String cookieDomainName = &#8220;cn.itcast&#8221;; </font></p>
<p><font color="#333399"></font></p>
<p><font color="#333399">public void doFilter(ServletRequest req, ServletResponse resp,<br />
FilterChain chain) throws IOException, ServletException {<br />
HttpServletRequest request = (HttpServletRequest)req; <br />
HttpServletResponse response = (HttpServletResponse)resp; <br />
HttpSession session = request.getSession(true); <br />
User user = (User)session.getAttribute("user"); </font></p>
<p><font color="#333399"><br />
//如果封装的user不为空,说明已经登陆,则继续执行用户的请求.下面的就不处理了</font></p>
<p><font color="#333399">if(user!=null){<br />
chain.doFilter(request,response); <br />
return; <br />
}</font></p>
<p><font color="#333399">//user为空，说明用户还没有登陆,就尝试得到浏览器传送过来的Cookie<br />
Cookie cookies[] = request.getCookies(); <br />
String cookieValue = null; <br />
if(cookies!=null){<br />
for(int i=0; i＜cookies.length; i++){<br />
if (cookieDomainName.equals(cookies[i].getName())) {<br />
cookieValue = cookies[i].getValue(); <br />
break; <br />
}<br />
}<br />
}</font></p>
<p><font color="#333399"><br />
//如果cookieValue为空,也继续执行用户请求<br />
if(cookieValue==null){<br />
chain.doFilter(request,response); <br />
return; <br />
}</font></p>
<p><font color="#333399">//cookieValue不为空执行下面的方法,调用CookieUtil.java中的readCookieAndLogon方法<br />
try{<br />
CookieUtil.readCookieAndLogon(cookieValue, request, response, chain); <br />
}catch(Exception e){<br />
e.printStackTrace(); <br />
}<br />
}</font></p>
<p><font color="#333399">public void init(FilterConfig arg0) throws ServletException {<br />
}<br />
}</font></p>
<p><font color="#333399">CheckLogonServlet.java</font></p>
<p><font color="#333399">验证用户登陆信息的Servlet，此程序调用了CookieUtil.java中的saveCookie方法</font></p>
<p><font color="#333399">package cn.itcast.servlet; </font></p>
<p><font color="#333399">/*<br />
* update 2007.09.23 by lyhapple<br />
* 检查用户登陆<br />
* */</font></p>
<p><font color="#333399">import java.io.IOException; <br />
import javax.servlet.ServletException; <br />
import javax.servlet.http.HttpServlet; <br />
import javax.servlet.http.HttpServletRequest; <br />
import javax.servlet.http.HttpServletResponse; <br />
import javax.servlet.http.HttpSession; <br />
import cn.itcast.bean.User; <br />
import cn.itcast.dao.UserDAO; <br />
import cn.itcast.factory.DaoImplFactory; <br />
import cn.itcast.util.CookieUtil; </font></p>
<p><font color="#333399">public class CheckLogonServlet extends HttpServlet {</font></p>
<p><font color="#333399">public void doGet(HttpServletRequest request, HttpServletResponse response)<br />
throws ServletException, IOException {<br />
doPost(request, response); <br />
}</font></p>
<p><font color="#333399">public void doPost(HttpServletRequest request, HttpServletResponse response)<br />
throws ServletException, IOException {<br />
request.setCharacterEncoding("utf-8"); <br />
String username = request.getParameter("username").trim(); <br />
String password = CookieUtil.getMD5(request.getParameter("password")); <br />
String remeberMe = request.getParameter("remeberMe"); <br />
HttpSession session = request.getSession(false); </font></p>
<p><font color="#333399">// 将接收到的用户名传递到UserDao的checkUser方法中,检查用户<br />
// 返回一个User类型的对象<br />
UserDAO ud = DaoImplFactory.getInstance(); <br />
User user = ud.selectUserByUsername(username); <br />
if (user == null) {<br />
request.setAttribute("checkUserError","＜a href='register.jsp'&gt;＜font color=red&gt;用户名不存在,请先注册＜/font&gt;＜/a&gt;"); <br />
request.getRequestDispatcher("index.jsp").forward(request, response); <br />
return; <br />
}</font></p>
<p><font color="#333399">if(!password.equals(user.getPassword())){<br />
request.setAttribute("checkPasswordError","＜font color=red&gt;密码输入错误,请重新输入＜/font&gt;"); <br />
request.getRequestDispatcher("index.jsp").forward(request, response); <br />
return; <br />
}</font></p>
<font color="#333399"><br />
//保存Cookie,这里调用了CookieUtil.java中的saveCookie方法，将上面的user对象作为参数传递<br />
if ("on".equals(remeberMe)) {<br />
CookieUtil.saveCookie(user, response); <br />
}<br />
//在Session中保存用户信息，并转向用户的个人信息页面<br />
session.setAttribute("user", user); <br />
request.getRequestDispatcher("User/userInfo.jsp").forward(request,response); <br />
}<br />
}<br />
UserDAO.java与DaoImplFactory.java属于持久层相关的程序，这里就不贴出来了，读者可根据自己需要选择不同的持久层框架，在本程序中只要实现查询用户的功能就可以了</font>
<img src ="http://www.blogjava.net/void241/aggbug/284231.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/void241/" target="_blank">void</a> 2009-06-26 10:22 <a href="http://www.blogjava.net/void241/archive/2009/06/26/284231.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java 通过System.getProperties()获取系统参数</title><link>http://www.blogjava.net/void241/archive/2009/06/04/279971.html</link><dc:creator>void</dc:creator><author>void</author><pubDate>Thu, 04 Jun 2009 02:58:00 GMT</pubDate><guid>http://www.blogjava.net/void241/archive/2009/06/04/279971.html</guid><wfw:comment>http://www.blogjava.net/void241/comments/279971.html</wfw:comment><comments>http://www.blogjava.net/void241/archive/2009/06/04/279971.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/void241/comments/commentRss/279971.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/void241/services/trackbacks/279971.html</trackback:ping><description><![CDATA[Properties props=System.getProperties(); //系统属性<br />
&nbsp;&nbsp;&nbsp;System.out.println("Java的运行环境版本："+props.getProperty("java.version"));<br />
&nbsp;&nbsp;&nbsp;System.out.println("Java的运行环境供应商："+props.getProperty("java.vendor"));<br />
&nbsp;&nbsp;&nbsp;System.out.println("Java供应商的URL："+props.getProperty("java.vendor.url"));<br />
&nbsp;&nbsp;&nbsp;System.out.println("Java的安装路径："+props.getProperty("java.home"));<br />
&nbsp;&nbsp;&nbsp;System.out.println("Java的虚拟机规范版本："+props.getProperty("java.vm.specification.version"));<br />
&nbsp;&nbsp;&nbsp;System.out.println("Java的虚拟机规范供应商："+props.getProperty("java.vm.specification.vendor"));<br />
&nbsp;&nbsp;&nbsp;System.out.println("Java的虚拟机规范名称："+props.getProperty("java.vm.specification.name"));<br />
&nbsp;&nbsp;&nbsp;System.out.println("Java的虚拟机实现版本："+props.getProperty("java.vm.version"));<br />
&nbsp;&nbsp;&nbsp;System.out.println("Java的虚拟机实现供应商："+props.getProperty("java.vm.vendor"));<br />
&nbsp;&nbsp;&nbsp;System.out.println("Java的虚拟机实现名称："+props.getProperty("java.vm.name"));<br />
&nbsp;&nbsp;&nbsp;System.out.println("Java运行时环境规范版本："+props.getProperty("java.specification.version"));<br />
&nbsp;&nbsp;&nbsp;System.out.println("Java运行时环境规范供应商："+props.getProperty("java.specification.vender"));<br />
&nbsp;&nbsp;&nbsp;System.out.println("Java运行时环境规范名称："+props.getProperty("java.specification.name"));<br />
&nbsp;&nbsp;&nbsp;System.out.println("Java的类格式版本号："+props.getProperty("java.class.version"));<br />
&nbsp;&nbsp;&nbsp;System.out.println("Java的类路径："+props.getProperty("java.class.path"));<br />
&nbsp;&nbsp;&nbsp;System.out.println("加载库时搜索的路径列表："+props.getProperty("java.library.path"));<br />
&nbsp;&nbsp;&nbsp;System.out.println("默认的临时文件路径："+props.getProperty("java.io.tmpdir"));<br />
&nbsp;&nbsp;&nbsp;System.out.println("一个或多个扩展目录的路径："+props.getProperty("java.ext.dirs"));<br />
&nbsp;&nbsp;&nbsp;System.out.println("操作系统的名称："+props.getProperty("os.name"));<br />
&nbsp;&nbsp;&nbsp;System.out.println("操作系统的构架："+props.getProperty("os.arch"));<br />
&nbsp;&nbsp;&nbsp;System.out.println("操作系统的版本："+props.getProperty("os.version"));<br />
&nbsp;&nbsp;&nbsp;System.out.println("文件分隔符："+props.getProperty("file.separator"));&nbsp;&nbsp; //在 unix 系统中是＂／＂<br />
&nbsp;&nbsp;&nbsp;System.out.println("路径分隔符："+props.getProperty("path.separator"));&nbsp;&nbsp; //在 unix 系统中是＂:＂<br />
&nbsp;&nbsp;&nbsp;System.out.println("行分隔符："+props.getProperty("line.separator"));&nbsp;&nbsp; //在 unix 系统中是＂/n＂<br />
&nbsp;&nbsp;&nbsp;System.out.println("用户的账户名称："+props.getProperty("user.name"));<br />
&nbsp;&nbsp;&nbsp;System.out.println("用户的主目录："+props.getProperty("user.home"));<br />
&nbsp;&nbsp;&nbsp;System.out.println("用户的当前工作目录："+props.getProperty("user.dir"));
<img src ="http://www.blogjava.net/void241/aggbug/279971.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/void241/" target="_blank">void</a> 2009-06-04 10:58 <a href="http://www.blogjava.net/void241/archive/2009/06/04/279971.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>归纳一些网上取JAVA路径的方法</title><link>http://www.blogjava.net/void241/archive/2008/08/15/222309.html</link><dc:creator>void</dc:creator><author>void</author><pubDate>Fri, 15 Aug 2008 09:22:00 GMT</pubDate><guid>http://www.blogjava.net/void241/archive/2008/08/15/222309.html</guid><wfw:comment>http://www.blogjava.net/void241/comments/222309.html</wfw:comment><comments>http://www.blogjava.net/void241/archive/2008/08/15/222309.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/void241/comments/commentRss/222309.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/void241/services/trackbacks/222309.html</trackback:ping><description><![CDATA[归纳一些网上取JAVA路径的方法： <br />
注明：如果从ANT启动程序，this.getClass().getResource("")取出来的比较怪，直接用JAVA命令行调试就可成功。
<p>得到classpath和当前类的绝对路径的一些方法</p>
<p>获得CLASSPATH之外路径的方法：</p>
<p><span style="color: #008000">URL base = this.getClass().getResource("");</span> <br />
//先获得本类的所在位置，如/home/popeye/testjava/build/classes/net/ <br />
<span style="color: #008000">String path = new File(base.getFile()， "&#8230;&#8230;/&#8230;&#8230;/&#8230;&#8230;/"+name).getCanonicalPath();</span> <br />
//就可以得到/home/popeye/testjava/name</p>
<p>下面是一些得到classpath和当前类的绝对路径的一些方法。你可能需要使用其中的一些方法来得到你需要的资源的绝对路径。</p>
<p><span style="color: #ff6600">1.FileTest.class.getResource("")</span></p>
<p>得到的是当前类FileTest.class文件的URI目录。不包括自己！</p>
<p>如：<span style="color: #008000">file：/D：/java/eclipse32/workspace/jbpmtest3/bin/com/test/</span></p>
<p><span style="color: #ff6600">2.FileTest.class.getResource("/")</span></p>
<p>得到的是当前的classpath的绝对URI路径。</p>
<p>如：<span style="color: #008000">file：/D：/java/eclipse32/workspace/jbpmtest3/bin/</span></p>
<p><span style="color: #ff6600">3.Thread.currentThread().getContextClassLoader().getResource("")</span></p>
<p>得到的也是当前ClassPath的绝对URI路径。</p>
<p>如：<span style="color: #008000">file：/D：/java/eclipse32/workspace/jbpmtest3/bin/</span></p>
<p><span style="color: #ff6600">4.FileTest.class.getClassLoader().getResource("")</span></p>
<p>得到的也是当前ClassPath的绝对URI路径。</p>
<p>如：<span style="color: #008000">file：/D：/java/eclipse32/workspace/jbpmtest3/bin/</span></p>
<p><span style="color: #ff6600">5.ClassLoader.getSystemResource("")</span></p>
<p>得到的也是当前ClassPath的绝对URI路径。</p>
<p>如：<span style="color: #008000">file：/D：/java/eclipse32/workspace/jbpmtest3/bin/</span></p>
<p>我推荐使用Thread.currentThread().getContextClassLoader().getResource("")来得到当前的classpath的绝对路径的URI表示法。</p>
<p>在Web应用程序中，我们一般通过ServletContext.getRealPath("/")方法得到Web应用程序的根目录的绝对路径。这样，我们只需要提供相对于Web应用程序根目录的路径，就可以构建出定位资源的绝对路径。</p>
<p>注意点：</p>
<p>1.尽量不要使用相对于System.getProperty("user.dir")当前用户目录的相对路径。这是一颗<span style="color: #008000">定时炸弹</span>，随时可能要你的命。</p>
<p>2.尽量使用URI形式的绝对路径资源。它可以很容易的转变为URI，URL，File对象。</p>
<p>3.尽量使用相对classpath的相对路径。不要使用绝对路径。使用上面ClassLoaderUtil类的public static URL getExtendResource(String relativePath)方法已经能够使用相对于classpath的相对路径定位所有位置的资源。</p>
<p>4.绝对不要使用硬编码的绝对路径。因为，我们完全可以使用ClassLoader类的getResource("")方法得到当前classpath的绝对路径。</p>
<p>使用硬编码的绝对路径是完全没有必要的！它一定会让你死的很难看！程序将无法移植！</p>
<p>如果你一定要指定一个绝对路径，那么使用配置文件，也比硬编码要好得多！</p>
<p>当然，我还是推荐你使用程序得到classpath的绝对路径来拼资源的绝对路径.<br />
</p>
<img src ="http://www.blogjava.net/void241/aggbug/222309.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/void241/" target="_blank">void</a> 2008-08-15 17:22 <a href="http://www.blogjava.net/void241/archive/2008/08/15/222309.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java累积</title><link>http://www.blogjava.net/void241/archive/2008/07/19/215993.html</link><dc:creator>void</dc:creator><author>void</author><pubDate>Sat, 19 Jul 2008 04:09:00 GMT</pubDate><guid>http://www.blogjava.net/void241/archive/2008/07/19/215993.html</guid><wfw:comment>http://www.blogjava.net/void241/comments/215993.html</wfw:comment><comments>http://www.blogjava.net/void241/archive/2008/07/19/215993.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/void241/comments/commentRss/215993.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/void241/services/trackbacks/215993.html</trackback:ping><description><![CDATA[最常见的几种问题和解决方法
<p>1 字符串的== 判断，应该用 equals() 进行 <br />
2 ResultSet 使用前忘了 rs.next(); <br />
3 数据库连接没有放在 finally{} 里面关闭 <br />
4 没有判断每个方法的返回值，造成程序隐患</p>
<p><br />
调试Temp文件</p>
<p>tomcat/works<br />
eclipse\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work</p>
<img src ="http://www.blogjava.net/void241/aggbug/215993.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/void241/" target="_blank">void</a> 2008-07-19 12:09 <a href="http://www.blogjava.net/void241/archive/2008/07/19/215993.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>J2EE项目代码编写规范</title><link>http://www.blogjava.net/void241/archive/2008/07/19/215986.html</link><dc:creator>void</dc:creator><author>void</author><pubDate>Sat, 19 Jul 2008 03:46:00 GMT</pubDate><guid>http://www.blogjava.net/void241/archive/2008/07/19/215986.html</guid><wfw:comment>http://www.blogjava.net/void241/comments/215986.html</wfw:comment><comments>http://www.blogjava.net/void241/archive/2008/07/19/215986.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/void241/comments/commentRss/215986.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/void241/services/trackbacks/215986.html</trackback:ping><description><![CDATA[<p>代码编写规范目的：能够在编码过程中实现规范化，为以后的程序开发中养成良好的行为习惯。<br />
代码编写规范使用范围：J2EE项目开发。</p>
<p>包命名规范：<br />
目的：包的命名规范应当体现出项目资源良好的划分</p>
<p>servlet类所在包命名规范：公司名称.开发组名称.项目名称.web.servlet<br />
例如：com.accp.gs2t23.netstore.web.servlet</p>
<p>自定义标签类所在包命名规范：公司名称.开发组名称.项目名称.web.tags<br />
例如：com.accp.gs2t23.netstore.web.tags</p>
<p>过滤器类所在包命名规范：公司名称.开发组名称.项目名称.web.filter<br />
例如：com.accp.gs2t23.netstore.web.filter</p>
<p>Action类所在包命名规范：公司名称.开发组名称.项目名称.web.struts.action<br />
例如：com.accp.gs2t23.netstore.web.struts.action</p>
<p>ActionForm类所在包命名规范：公司名称.开发组名称.项目名称.web.struts.form<br />
例如：com.accp.gs2t23.netstore.web.struts.form</p>
<p>Javabean所在包命名规范：公司名称.开发组名称.项目名称.web.struts.service.impl<br />
例如：com.accp.gs2t23.netstore.web.service.impl</p>
<p>Javabean实现接口命名规范：公司名称.开发组名称.项目名称.web.service<br />
例如：com.accp.gs2t23.netstore.web.service</p>
<p>DAO类所在包命名规范：公司名称.开发组名称.项目名称.dao.impl<br />
例如：com.accp.gs2t23.netstore.dao.impl</p>
<p>DAO类所实现的接口在包中命名规范：公司名称.开发组名称.项目名称.dao<br />
例如：com.accp.gs2t23.netstore.dao</p>
<p>POJO类与hbm文件所在包命名规范：公司名称.开发组名称.项目名称.dao.hbm<br />
例如：com.accp.gs2t23.netstore.dao.hbm</p>
<p>全局公共类、接口类所在包命名规范：公司名称.开发组名称.项目名称.global<br />
例如：com.accp.gs2t23.netstore.global</p>
<p>全局工具类所在包命名规范：公司名称.开发组名称.项目名称.util<br />
例如：com.accp.gs2t23.netstore.util</p>
<p>类命名规范<br />
基本命名规范：</p>
<p>类、接口命名<br />
命名规范：以大写字母开头，如果有多个单词，每个单词头字母大写<br />
例如：StudentInfo</p>
<p>接口命名<br />
命名规范：以大写字母"I"开头，如果有多个单词，每个单词头字母大写<br />
例如：IStudentInfo</p>
<p>接口实现类命名：<br />
命名规范：将实现的接口名称的首字母"I"去掉，以"Impl作为结尾"，如果有多个单词，每个单词头字母大写。<br />
例如：StudentInfoImpl</p>
<p>J2EE+SSH框架命名规范</p>
<p>servlet类命名：<br />
命名规范：以Servlet单词结尾<br />
例如：LoginServlet</p>
<p>POJO命名：<br />
使用hibernate自动生成的类即可</p>
<p>DAO类命名：<br />
使用hibernate自动生成的类即可</p>
<p>Action类命名：<br />
命名规范：Action的命名以POJO名称来制定，POJO名称Action<br />
例如：<br />
一个POJO名称为Diary，其对应的action为DiaryAction</p>
<p>ActionForm类命名：<br />
命名规范：ActionForm的命名以POJO名称来制定，POJO名称Form<br />
例如：<br />
一个POJO名称为Diary，其对应的actioForm为DiaryForm</p>
<p>业务逻辑接口命名:<br />
命名规范：业务逻辑接口的命名以POJO名称来制定，IPOJO名称Service<br />
例如：<br />
一个POJO名称为Diary，其对应的业务逻辑接口为IDiaryService</p>
<p>业务逻辑实现类命名:<br />
命名规范：业务逻辑接口实现类的命名以POJO名称来制定<br />
例如：<br />
一个POJO名称为Diary，对应的业务逻辑接口实现类名为DiaryServiceImpl</p>
<p>类变量命名：<br />
命名规范：变量名首字母必须小写，如果该变量名有多个单词组成，后面的单 词首字母大写，单词与单词之间不要使用"_"做连接，变量名访问控制必须为私有， 可以对其增加setter与getter方法。<br />
例如：private int studentAge;<br />
public int getStudentAge()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
return studentAge;<br />
}</p>
<p>public void setStudentAge(int studentAge)<br />
{<br />
this.studentAge=studentAge;<br />
}</p>
<p>常量命名：<br />
命名规范：所有字母大写，如果有多个单词组成，单词与单词之间以&#8221; _&#8220;隔开。而&nbsp;&nbsp; 且该变量必须是公共、静态、final类型<br />
例如：public static final String USER_NAME=&#8221;userName&#8220;;</p>
<p>方法命名<br />
命名规范：首字母必须小写，如果该变量名有多个单词组成，后面的单词首字母&nbsp;&nbsp; 大写，单词与单词之间不要使用"_"做连接。单词不要使用名词。<br />
例如：public int checkLogin（String name,String pwd）{}</p>
<p>注释规范：注释规范是整个开发规范中最为重要的组成部分，必须严格执行。<br />
类的注释：<br />
作用：注释整个类，简单概述该类作用。<br />
书写规范：类的注释必须写在该类的声明语法之前。在注释中要描述该类的基&nbsp;&nbsp; 本作用，作者，日期，版本，公司名称，版权声明。<br />
格式：<br />
<font color="#009933">/* * <br />
* 类功能描述：（大致描述类的功能） <br />
* @author：编写者名称<br />
* <br />
* @version： 类文件的版本号 从1.0开始（自己确定版本号的增改 <br />
* &nbsp;&nbsp; 情况）， 修改情况（修改时间、作者、改动情况）<br />
*<br />
* @see 包名.参考类名 （列出父类，引入类，每个类占一行），如果有<br />
*&nbsp;&nbsp; 可省略 <br />
* 相关数据如：（便于理解本类的一些常量数据及某些数据的格式 <br />
* &nbsp;&nbsp; 或认为比较重要的数据，如果没有可省略） <br />
*/</font> <br />
类的声明语法<br />
例如：<br />
<font color="#009933">/**<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * &lt;p&gt;Title:管理员模块数据处理类 &lt;/p&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * &lt;p&gt;Description: 两个数相加&lt;/p&gt;<br />
* &lt;p&gt;Copyright: Copyright (c) 2007&lt;/p&gt;<br />
* &lt;p&gt;Company:华腾软件公司&lt;/p&gt;<br />
* <br />
* @author 童金虎<br />
* <br />
* @version $Revision: 1.7 $ $Date: 2007/07/08$ <br />
*/</font><br />
public class AdminDAO</p>
<p>变量、常量注释：<br />
作用：简单描述该变量的意义。<br />
书写规范：变量注释必须写在变量定义之前，简单描述其代表的意义。<br />
格式：<br />
/** <br />
* 变量功能描述：（大致描述变量的功能）<br />
*/<br />
例如：<br />
<font color="#339966">&nbsp;&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; *定义年龄变量<br />
&nbsp;&nbsp;&nbsp; */</font><br />
public int age;</p>
<p>方法注释：<br />
作用：对该方法功能简单描述，其参数、返回值意义的注解。<br />
书写规范：方法注释必须写在方法定义之前。该注释包括：方法其功能的简单&nbsp;&nbsp; 描述，方法的参数、返回值类型、返回值意义简单的描述。<br />
格式：<br />
<font color="#339966">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /** <br />
&nbsp;&nbsp; * 方法功能说明 <br />
&nbsp;&nbsp; * @param args (参数类型可以写在参数后，也可以省 <br />
&nbsp;&nbsp; * &nbsp;&nbsp; 略。每个参数占一行) <br />
&nbsp;&nbsp; * @return 输出参数（多种情况写在同一行） <br />
&nbsp;&nbsp; * @see 类#参考方法 （与此方法有调用关系的方法供参 <br />
&nbsp;&nbsp; * &nbsp;&nbsp; 考，不必每个方法都完整列出，要选择有意义的，每个 <br />
&nbsp;&nbsp; * &nbsp;&nbsp; 方法占一行） <br />
&nbsp;&nbsp; * @exception 异常处理类（方法中能够引发的异常，每 <br />
&nbsp;&nbsp; * &nbsp;&nbsp; 个异常占一行） <br />
*/</font> <br />
例如：<br />
<font color="#339966">/**<br />
* 修改管理员密码<br />
* @param adminId 管理员编号<br />
* @param oldPassword 旧密码<br />
* @param password 新密码<br />
* @return boolean 是否编辑成功<br />
* @throws UserException<br />
* @throws ServiceException<br />
*/</font><br />
public booleaneditAdminPassword(int adminId,String oldPassword,<br />
String password) throws UserException,ServiceException;<br />
<br />
Jsp页面命名：<br />
命名规范：jsp页面名称要以小写字母开头，如果有多个单词组成，后面的单词以&nbsp;&nbsp; 大写字母开头。名称要体现出该页面的意义，最好能够与模块名称联系在一起。<br />
例如：<br />
login.jsp --登录页面<br />
register.jsp&nbsp;&nbsp; --注册页面<br />
message.jsp --客户留言页面</p>
<p>J2EE项目工程文件夹组织规范：<br />
目的：规范学员web应用程序的资源组织形式，形成良好的文件组织习惯。文件的组织形式应当体现模块的划分。<br />
根据eclipse工具的特征，项目的目录结构为：</p>
<p>src<br />
&nbsp;&nbsp;&nbsp; ----存放java文件&nbsp;&nbsp;<br />
WebRoot<br />
|--images&nbsp;&nbsp;&nbsp;&nbsp; --存放web程序所需的公共图片<br />
|--css&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --存放web程序所需的公共样式表<br />
|--js&nbsp;&nbsp;&nbsp; --存放web程序所需的公共js文件<br />
|--commons&nbsp;&nbsp; --存放web程序所需的公共文件<br />
|--功能模块文件夹(存放与某个功能模块相关的资源)<br />
|--images --存放与该功能模块相关的图片<br />
|--css&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --存放与该模块相关的样式表文件<br />
|--js&nbsp;&nbsp;&nbsp; --存放与该模块相关的js文件<br />
|--jsp、html页面<br />
|--WEB-INF<br />
|--classes<br />
|--lib<br />
|--tld文件</p>
<p>J2EE项目提交规范<br />
项目完成时要将项目作为一个产品交付用户，良好的项目组织规范可以使用户可以方便的找寻项目中需要的资源，同时也是一个公司专业性的体现。项目提交时，要按照下列文件格式进行提交。</p>
<p>项目主文件夹：<br />
作用：存放项目其他资源文件。<br />
命名规范：时间_班级编号_第X小组。<br />
例如：070706_GS2T18_第四小组。</p>
<p>项目主文件夹下面包括以下文件夹和文件：<br />
|--src：保存.java文件。<br />
|--database：保存数据库的脚本文件或者数据库备份文件。<br />
|--source：保存eclipse工程中WebRoot目录下的所有文件。<br />
|--depend：保存编译该程序必须依赖的其他jar文件。<br />
|--javadoc：保存所有类生成的javadoc api文档。<br />
|--war：保存程序的归档文件<br />
|--xx.war：已经打包好的工程文件，可以直接运行。<br />
|--project：保存开发项目原工程代码及文件。<br />
|--产品说明书.doc：图文方式展现该产品使用方法。<br />
|--build.xml：ant脚本，用于生成运行的war文件。<br />
|--项目解说.ppt：进行项目讲解的ppt（ppt仅供在校模拟项目使用，不用于其他商&nbsp;&nbsp;&nbsp;&nbsp; 业用途）</p>
<p>注：一个完整的项目中，数据库必须有一定量的有效的测试数据来支持该程序的运行</p>
 <img src ="http://www.blogjava.net/void241/aggbug/215986.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/void241/" target="_blank">void</a> 2008-07-19 11:46 <a href="http://www.blogjava.net/void241/archive/2008/07/19/215986.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>