﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-源于实践 指导实践</title><link>http://www.blogjava.net/mac521/</link><description /><language>zh-cn</language><lastBuildDate>Tue, 28 Apr 2026 18:55:51 GMT</lastBuildDate><pubDate>Tue, 28 Apr 2026 18:55:51 GMT</pubDate><ttl>60</ttl><item><title>SrpingSecurity设置access-denied-page在IE下总是产生403错误</title><link>http://www.blogjava.net/mac521/archive/2011/05/26/351116.html</link><dc:creator>牛浪de流</dc:creator><author>牛浪de流</author><pubDate>Thu, 26 May 2011 09:31:00 GMT</pubDate><guid>http://www.blogjava.net/mac521/archive/2011/05/26/351116.html</guid><wfw:comment>http://www.blogjava.net/mac521/comments/351116.html</wfw:comment><comments>http://www.blogjava.net/mac521/archive/2011/05/26/351116.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/mac521/comments/commentRss/351116.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mac521/services/trackbacks/351116.html</trackback:ping><description><![CDATA[<div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&lt;http auto-config="true" access-denied-page="/accessDenied.jsp"&gt;...&lt;/http&gt;，如果请求的URL没有权限，页面会跳转到accessDenied.jsp，可是在IE里面测试总是产生403错误。一直怀疑是security框架没有跳转accessDenied.jsp，后来偶然在国外网站上看来有人遇到类似的问题，最后解决方法是IE对自定义403的页面有个页面大小限制，必须超过512字节，如果<span style="color: #555555; font-family: Verdana, 'BitStream vera Sans', Helvetica, sans-serif; line-height: 23px; white-space: pre-wrap; ">没有超过IE会认为你自定义的403页面不够权威，Internet Explorer会使用其自带的403页面代替。[Quote]</span><span style="color: #333333; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 13px; line-height: 18px; ">There is it a problem only Internet Explorer. In all remaining browsers all works perfectly.</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span style="color: #333333; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 13px; line-height: 18px; white-space: normal; ">IE has support so-called user friendly messages which it is possible to disconnect in adjustments.<br style="display: inline; border-top-color: #dde4eb; border-right-color: #dde4eb; border-bottom-color: #dde4eb; border-left-color: #dde4eb; " />As it can be manipulated on the server&nbsp; if&nbsp;<br style="display: inline; border-top-color: #dde4eb; border-right-color: #dde4eb; border-bottom-color: #dde4eb; border-left-color: #dde4eb; " />to send messages more than 512 byte.</span></div></div><img src ="http://www.blogjava.net/mac521/aggbug/351116.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mac521/" target="_blank">牛浪de流</a> 2011-05-26 17:31 <a href="http://www.blogjava.net/mac521/archive/2011/05/26/351116.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ubuntu 7.10安装JDK</title><link>http://www.blogjava.net/mac521/archive/2008/04/23/195103.html</link><dc:creator>牛浪de流</dc:creator><author>牛浪de流</author><pubDate>Wed, 23 Apr 2008 07:04:00 GMT</pubDate><guid>http://www.blogjava.net/mac521/archive/2008/04/23/195103.html</guid><wfw:comment>http://www.blogjava.net/mac521/comments/195103.html</wfw:comment><comments>http://www.blogjava.net/mac521/archive/2008/04/23/195103.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/mac521/comments/commentRss/195103.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mac521/services/trackbacks/195103.html</trackback:ping><description><![CDATA[<p>这段时间一直在弄ubuntu安装JDK，可是总也装不上，在google上翻来覆去也没搞定，今天突然被我搞定了。<img src="/CuteSoft_Client/CuteEditor/images/emsmiled.gif" align="absMiddle" border="0"  alt="" /><br />
总结一下问题，希望能够有所帮助：<br />
1.JDK下载：sun提供linux下的JDK有两种：一种类似windows自解压文件(jdk-6u6-linux-i586.bin)，另一种需要以rpm方式安装(jdk-6u5-linux-i586-rpm.bin)。我使用的是前一种，操作简单。<br />
2.下载tomcat、eclipse<br />
3.进入shell、找到下载JDK的存放路径，输入"./jdk-6u6-linux-i586.bin"，过程中会提示是否同意，输入"yes"，等安装完毕会自动创建一个文件夹，我这里是jdk1.6.0_06，安装的文件都放在这个目录下，cd jdk1.6.0_06进去看一下。然后修改/etc/environment，输入sudo vi /etc/environment，首先修改PATH，在前面增加"/home/用户名/jdk/jdk1.6.0_06/bin:.:"，后面的"."表示当前目录。然后再文件后面增加两行：<br />
JAVA_HOME="/home/用户名/jdk/jdk1.6.0_06"<br />
CLASSPATH="/home/用户名/jdk/jdk1.6.0_06/lib:."<br />
export JAVA_HOME<br />
export CLASSPATH<br />
保存退出<br />
重启Linux(Linux里面可以使用重新加载的方法来加载修改过的文件，有兴趣可以试试)<br />
进入Linux，输入java -verison，是不是出现了熟悉的信息<img src="/CuteSoft_Client/CuteEditor/images/emsmile.gif" align="absMiddle" border="0"  alt="" /><br />
这时可能出现的信息和你安装的JDK版本不一致，我也是被这个问题整了好久。其实在你安装ubuntu过程中，可能已经装了一个JRE了，此时你可以通过命令"which java"，查找已安装的JRE，它会显示一个文件。使用"ls -l"查看这个文件属性，会发现它是一个Link文件，然后一直"ls -l"直到找到它的真实身份，我发现它是一个package：gij1.4.2.使用sudo apt-get remove --purge gij1.4.2，删除已安装的JRE，过程会出现一个提示，输入"yes"然后contitue。完成之后，重启Linux，输入java -version查看是否安装正确。<br />
tomcat安装就简单很多了，输入tar apache-tomcat-6.0.16.tar.gz就解压了(在xwindows下直接解压就可以了)，进入apache-tomcat-6.0.16/bin，启动startup.sh，如果使用terminal启动，会发现启动信息比windows下少很多，这不会影响使用，打开firefox，输入<a href="http://127.0.0.1:8080">http://127.0.0.1:8080</a>，看到是不是出现一只猫咪了，如果是那就成功了。<br />
eclipse就更简单了，解压双击就ok了。</p>
<img src ="http://www.blogjava.net/mac521/aggbug/195103.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mac521/" target="_blank">牛浪de流</a> 2008-04-23 15:04 <a href="http://www.blogjava.net/mac521/archive/2008/04/23/195103.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>变更管理的问题</title><link>http://www.blogjava.net/mac521/archive/2008/04/23/194962.html</link><dc:creator>牛浪de流</dc:creator><author>牛浪de流</author><pubDate>Wed, 23 Apr 2008 02:34:00 GMT</pubDate><guid>http://www.blogjava.net/mac521/archive/2008/04/23/194962.html</guid><wfw:comment>http://www.blogjava.net/mac521/comments/194962.html</wfw:comment><comments>http://www.blogjava.net/mac521/archive/2008/04/23/194962.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mac521/comments/commentRss/194962.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mac521/services/trackbacks/194962.html</trackback:ping><description><![CDATA[今天在网上看到一篇文章:http://www.ibm.com/developerworks/cn/rational/edge/08/mar08/smith/。文章里面写到的一些问题，正是我所遇到的：<br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.缺乏统一的、全面的、综合的变更管理处理过程。这样变更之后可能听到这样的抱怨&#8220;我真不知道您做了什么&#8221;，如果有个一统一的、全面的、通用的变更管理方案放在一个工具中执行，你们将会消除这种混乱<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.缺乏对构建顺序的理解、缺乏对代码模块的提供者和消费者之间的合同的定义和强制、以及构建所具有的完全的整体性，正是一下诸多问题发生的根源：无法重新启动构建过程、无法完成部分可靠的构建、无法进行有效地测试、无法对变更(补丁和升级)进行影响分析，等等。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.缺乏对根本的系统对象的依赖关系的理解<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4.在整个开发周期中都普遍缺乏可追溯性，没有一种方法可供用来追踪处理过程和需求覆盖。关于测试的变更管理处理过程是手工的和记录不良的。这些变更管理和组件相关的缺点，意味着没有一种方法能够进行变更级别的影响分析。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;对于产品型的项目，变更是不可避免的，如果变更是失败的，那这个项目就会越做越难。微软的xp系统是有那么多人开发的，如果对xp的更新处理是失败的，那就不会有SP1、SP2和即将推出的SP3了。</p>
<img src ="http://www.blogjava.net/mac521/aggbug/194962.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mac521/" target="_blank">牛浪de流</a> 2008-04-23 10:34 <a href="http://www.blogjava.net/mac521/archive/2008/04/23/194962.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>总结一下异常使用</title><link>http://www.blogjava.net/mac521/archive/2008/04/14/192701.html</link><dc:creator>牛浪de流</dc:creator><author>牛浪de流</author><pubDate>Mon, 14 Apr 2008 03:14:00 GMT</pubDate><guid>http://www.blogjava.net/mac521/archive/2008/04/14/192701.html</guid><wfw:comment>http://www.blogjava.net/mac521/comments/192701.html</wfw:comment><comments>http://www.blogjava.net/mac521/archive/2008/04/14/192701.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/mac521/comments/commentRss/192701.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mac521/services/trackbacks/192701.html</trackback:ping><description><![CDATA[&nbsp;
<p class="MsoNormal"><span lang="EN-US">Exception</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">分为：</span><span lang="EN-US">Error</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span><span lang="EN-US">Exception(checkedException</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang="EN-US">uncheckedException)</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。在使用异常的时候可以先列出以下问题</span></p>
<table class="MsoTableGrid" style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none; border-collapse: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes">
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 142pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt" valign="top" width="189">
            <p class="MsoNormal"><span lang="EN-US">Exception</span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" valign="top" width="189">
            <p class="MsoNormal"><span lang="EN-US">Source</span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" valign="top" width="189">
            <p class="MsoNormal"><span lang="EN-US">Scope</span></p>
            </td>
        </tr>
        <tr style="mso-yfti-irow: 1; mso-yfti-lastrow: yes">
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 142pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="189">
            <p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">自定义异常名称</span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="189">
            <p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">会产生自定义异常的方法或事件</span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="189">
            <p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">调用</span><span lang="EN-US">Source</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的方法或对象</span></p>
            </td>
        </tr>
    </tbody>
</table>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我认为</span><span lang="EN-US">uncheckedException</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">比</span><span lang="EN-US">checkedException</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">要好，因为这样可以减少代码中</span><span lang="EN-US">try/catch</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">语句，利用异常处理框架</span><span lang="EN-US">(</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">或</span><span lang="EN-US">filter)</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来统一处理产生的异常。那</span><span lang="EN-US">uncheckedException</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">与</span><span lang="EN-US">checkedException</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">该如何划分呢？</span><span lang="EN-US">checkedException</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">用来处理可以预知的情况，例如已有针对返回值的不同情况，用</span><span lang="EN-US">If/else</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">判断。此时可以用</span><span lang="EN-US">checkedException</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">提醒调用者对不同的情况做处理，要比调用者自己查源代码然后做出相应的判断要好。</span><span lang="EN-US">uncheckedException</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">用于抛出的异常，一般情况下是不可预知的，会导致系统错误的。例如一个自定义的方法用来格式化日期，它需要一个日期型的字符串，可是偏偏系统传了一个空的字段串，这种事很少发生的，所以不能抛出一个</span><span lang="EN-US">checkedException</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，不然会造成到处都是</span><span lang="EN-US">try/catch</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">语句。此时</span><span lang="EN-US">uncheckedException</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">就可以用了，在方法上加上</span><span lang="EN-US">@throws uncheckedException</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，调用者在不能确定自己传入的参数是否合法时，看到方法</span><span lang="EN-US">throw</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">异常，就需要</span><span lang="EN-US">try/catch</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一下了。</span><span lang="EN-US">(@throws</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">用来说明的是</span><span lang="EN-US">uncheckedException)</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在项目开发过程中，用</span><span lang="EN-US">XDoclet+Exception</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来约束调用者，效果会更好一些。</span></p>
<img src ="http://www.blogjava.net/mac521/aggbug/192701.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mac521/" target="_blank">牛浪de流</a> 2008-04-14 11:14 <a href="http://www.blogjava.net/mac521/archive/2008/04/14/192701.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>eclipse不能编译</title><link>http://www.blogjava.net/mac521/archive/2008/04/14/192667.html</link><dc:creator>牛浪de流</dc:creator><author>牛浪de流</author><pubDate>Mon, 14 Apr 2008 02:14:00 GMT</pubDate><guid>http://www.blogjava.net/mac521/archive/2008/04/14/192667.html</guid><wfw:comment>http://www.blogjava.net/mac521/comments/192667.html</wfw:comment><comments>http://www.blogjava.net/mac521/archive/2008/04/14/192667.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mac521/comments/commentRss/192667.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mac521/services/trackbacks/192667.html</trackback:ping><description><![CDATA[<p>在project点击右键"properties"--&gt;"Java Build Path"--&gt;"Source"，注意在右边的窗口上是否出现了叹号或&#215;号的提示。展开"Source folders on build </p>
<p>path:"下面有三项: 'Included'需要编译的(默认为All)；'Excluded'不需要编译的(默认为None)；'Native library location'本地库。下面还有设置编译后</p>
<p>文件存放地址。勾上"Allow output folders for source folders"将显示的定义每个src编译后文件存放地址，不勾上则每个src的编译文件都存放到同一个地</p>
<p>址。</p>
<img src ="http://www.blogjava.net/mac521/aggbug/192667.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mac521/" target="_blank">牛浪de流</a> 2008-04-14 10:14 <a href="http://www.blogjava.net/mac521/archive/2008/04/14/192667.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SerialVersionID问题</title><link>http://www.blogjava.net/mac521/archive/2008/04/10/191763.html</link><dc:creator>牛浪de流</dc:creator><author>牛浪de流</author><pubDate>Thu, 10 Apr 2008 02:08:00 GMT</pubDate><guid>http://www.blogjava.net/mac521/archive/2008/04/10/191763.html</guid><wfw:comment>http://www.blogjava.net/mac521/comments/191763.html</wfw:comment><comments>http://www.blogjava.net/mac521/archive/2008/04/10/191763.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mac521/comments/commentRss/191763.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mac521/services/trackbacks/191763.html</trackback:ping><description><![CDATA[(一些对象的状态需要保存到磁盘或数据库中时，需要实现Serializable接口)<br />
结论：在实现Serializable接口时，IDE一般会提醒你设置一个SerialVersionID，这样做的好处是方便在不同编译器之间代码的移植。编译器在读取Serial对象时，会比较source与target的SerialVersionID是否一致，如果一致会产生InvalidClassException。<br />
在Eclipse中忽略该情况操作方法：Window--&gt;Preferences--&gt;Java--&gt;Compiler--&gt;Errors/Warnings--&gt;Potential programming problems<br />
问题：SerialVersionID是否在不同的类中有不同的值？<br />
回答：不需要。因为SerialVersionID本身是static final，是全局的，而且一般都是针对当前类，所以一般都是private。编译器在DeSerializable的时候，对象都是当前类，不需要不同类设置不同值。<br />
问题：不显示声明SerialVersionID是错的吗？<br />
回答：不是。编译器有自己的生成SerialVersionID的规则，但是不同编译器的规则又是不一致的，这样就会造成已Serial对象SerialVersionID与当前编译器DeSerial出来的SerialVersionID不一致，产生Exception。尽可能将所有可以序列化类都显示声明SerialVersionID。
<img src ="http://www.blogjava.net/mac521/aggbug/191763.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mac521/" target="_blank">牛浪de流</a> 2008-04-10 10:08 <a href="http://www.blogjava.net/mac521/archive/2008/04/10/191763.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[Original]Java文件事务(commons-transaction)</title><link>http://www.blogjava.net/mac521/archive/2008/01/17/175839.html</link><dc:creator>牛浪de流</dc:creator><author>牛浪de流</author><pubDate>Thu, 17 Jan 2008 01:46:00 GMT</pubDate><guid>http://www.blogjava.net/mac521/archive/2008/01/17/175839.html</guid><wfw:comment>http://www.blogjava.net/mac521/comments/175839.html</wfw:comment><comments>http://www.blogjava.net/mac521/archive/2008/01/17/175839.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/mac521/comments/commentRss/175839.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mac521/services/trackbacks/175839.html</trackback:ping><description><![CDATA[<p>今天上网看到apache的commons包中提供了一个Transaction，可以控制文件的事务。做了测试，看是否可以成功。</p>
<p>Commons-Transaction: http://commons.apache.org/transaction/<br />
下面是测试的代码TestTransaction.java:<br />
Log log = LogFactory.getLog(TestTransaction.class);<br />
&nbsp;&nbsp;//这个是commons-transaction包中的类<br />
&nbsp;&nbsp;LoggerFacade logger = new CommonsLoggingLogger(log);;<br />
&nbsp;&nbsp;//存储的路径<br />
&nbsp;&nbsp;String toDir = "d:/";<br />
&nbsp;&nbsp;//临时路径<br />
&nbsp;&nbsp;String tempDir = "e:/";<br />
&nbsp;&nbsp;//构造函数的第三个参数：false，标识是否encoding文档的url，这个一般不需要设置为true<br />
&nbsp;&nbsp;FileResourceManager frm = new FileResourceManager(toDir, tempDir, false, logger);<br />
&nbsp;&nbsp;//这标识frm的状态为start<br />
&nbsp;&nbsp;frm.start();<br />
&nbsp;&nbsp;//下面需要frm的状态为start<br />
&nbsp;&nbsp;String txId = frm.generatedUniqueTxId();<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;//开启Transaction<br />
&nbsp;&nbsp;&nbsp;frm.startTransaction(txId);<br />
&nbsp;&nbsp;&nbsp;frm.deleteResource(txId, "RFID.rtf");<br />
//&nbsp;&nbsp;&nbsp;throw new Exception("sdf");<br />
&nbsp;&nbsp;} catch (Exception e) {<br />
&nbsp;&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;//回滚事务<br />
&nbsp;&nbsp;&nbsp;&nbsp;frm.rollbackTransaction(txId);<br />
&nbsp;&nbsp;&nbsp;} catch (ResourceManagerException e1) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;// TODO Auto-generated catch block<br />
&nbsp;&nbsp;&nbsp;&nbsp;e1.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;//提交事务<br />
&nbsp;&nbsp;frm.commitTransaction(txId);<br />
在这个application运行过程中，会在tempDir产生一个临时目录(是由一些阿拉伯数字和字母组成的)，里面有两个文件夹：change和delete，还有一个日志transaction.log，而要操作的目录就会在delete目录中。事务的过程也是这样的：先将file存放的tempDir，然后监控transaction的状态，如果commit，它就会将file写到destination中，然后删除tempDir。不过，既然apache已经有了这个，就可以直接拿来用了<img alt="" src="/CuteSoft_Client/CuteEditor/images/emsmile.gif" align="absMiddle" border="0" />.commons-transaction，还支持jta的事务，希望将来会更加强大. </p>
<img src ="http://www.blogjava.net/mac521/aggbug/175839.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mac521/" target="_blank">牛浪de流</a> 2008-01-17 09:46 <a href="http://www.blogjava.net/mac521/archive/2008/01/17/175839.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[Translation]JSON与struts2</title><link>http://www.blogjava.net/mac521/archive/2008/01/11/174653.html</link><dc:creator>牛浪de流</dc:creator><author>牛浪de流</author><pubDate>Fri, 11 Jan 2008 08:29:00 GMT</pubDate><guid>http://www.blogjava.net/mac521/archive/2008/01/11/174653.html</guid><wfw:comment>http://www.blogjava.net/mac521/comments/174653.html</wfw:comment><comments>http://www.blogjava.net/mac521/archive/2008/01/11/174653.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/mac521/comments/commentRss/174653.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mac521/services/trackbacks/174653.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;下载地址: http://code.google.com/p/jsonplugin/downloads/list&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Apache提供的一个插件包，可以把Action中的数据以JSON做个封装然后返回。它会将整个action...&nbsp;&nbsp;<a href='http://www.blogjava.net/mac521/archive/2008/01/11/174653.html'>阅读全文</a><img src ="http://www.blogjava.net/mac521/aggbug/174653.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mac521/" target="_blank">牛浪de流</a> 2008-01-11 16:29 <a href="http://www.blogjava.net/mac521/archive/2008/01/11/174653.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[Original]Hibernate持久与游离</title><link>http://www.blogjava.net/mac521/archive/2008/01/09/173983.html</link><dc:creator>牛浪de流</dc:creator><author>牛浪de流</author><pubDate>Wed, 09 Jan 2008 05:28:00 GMT</pubDate><guid>http://www.blogjava.net/mac521/archive/2008/01/09/173983.html</guid><wfw:comment>http://www.blogjava.net/mac521/comments/173983.html</wfw:comment><comments>http://www.blogjava.net/mac521/archive/2008/01/09/173983.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mac521/comments/commentRss/173983.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mac521/services/trackbacks/173983.html</trackback:ping><description><![CDATA[<p style="font-family: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在Hbibernate中有自己的一套机制：FlushMode，它控制着持久化对象与数据库的关系。FlushMode有四种状态：NERVER、AUTO、COMMIT和ALWAYS。默认值为AUTO。Spring中使用Hibernate时，会将FlushMode初始化为AUTO，不过在使用OpenSessionInViewFilter(Spring有自己的一个transcation，不过它只是作用在service层，如果想使持久化对象保留到view层，那么启用这个过滤器之后就可以了)过滤器之后，Spring会将FlushMode设置为NERVER(表示持久化对象不在于数据库中数据实时关联)。不知道大家在工程中是否用到了spring提供的事务，在用到spring提供的HibernateTranscationManager管理事务时。当调用的方法位于该管理器之下时，spring会临时的将FlushMode修改为AUTO状态，这样如果你在view层有一个持久化对象，并且修改了这个持久化对象的状态，spring会自动将这个持久化对象的状态更新到数据库中去。这样可能会带来困惑：明明没有更新数据库，怎么数据库中的值发生改变了呢？其实这也是持久层的意义所在：持久是将数据保存在持久层中的对象上，并使对象与数据是一致的，如果持久化对象状态发生改变，成为了游离态，类似用jdbc取出Object之后close了connection，这样对象与数据库就脱离了，也就是游离。欢迎大家来拍砖^_^</p>
     <img src ="http://www.blogjava.net/mac521/aggbug/173983.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mac521/" target="_blank">牛浪de流</a> 2008-01-09 13:28 <a href="http://www.blogjava.net/mac521/archive/2008/01/09/173983.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]SQL Server和Oracle的常用函数对比</title><link>http://www.blogjava.net/mac521/archive/2008/01/02/172094.html</link><dc:creator>牛浪de流</dc:creator><author>牛浪de流</author><pubDate>Wed, 02 Jan 2008 02:26:00 GMT</pubDate><guid>http://www.blogjava.net/mac521/archive/2008/01/02/172094.html</guid><wfw:comment>http://www.blogjava.net/mac521/comments/172094.html</wfw:comment><comments>http://www.blogjava.net/mac521/archive/2008/01/02/172094.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mac521/comments/commentRss/172094.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mac521/services/trackbacks/172094.html</trackback:ping><description><![CDATA[<p>---------数学函数</p>
<p>1.绝对值<br />
S:select abs(-1) value<br />
O:select abs(-1) value from dual</p>
<p>2.取整(大)<br />
S:select ceiling(-1.001) value<br />
O:select ceil(-1.001) value from dual</p>
<p>3.取整（小）<br />
S:select floor(-1.001) value<br />
O:select floor(-1.001) value from dual</p>
<p>4.取整（截取）<br />
S:select cast(-1.002 as int) value<br />
O:select trunc(-1.002) value from dual</p>
<p>5.四舍五入<br />
S:select round(1.23456,4) value 1.23460<br />
O:select round(1.23456,4) value from dual 1.2346</p>
<p>6.e为底的幂<br />
S:select Exp(1) value 2.7182818284590451<br />
O:select Exp(1) value from dual 2.71828182</p>
<p>7.取e为底的对数<br />
S:select log(2.7182818284590451) value 1<br />
O:select ln(2.7182818284590451) value from dual; 1</p>
<p>8.取10为底对数<br />
S:select log10(10) value 1<br />
O:select log(10,10) value from dual; 1</p>
<p>9.取平方<br />
S:select SQUARE(4) value 16<br />
O:select power(4,2) value from dual 16</p>
<p>10.取平方根<br />
S:select SQRT(4) value 2<br />
O:select SQRT(4) value from dual 2</p>
<p>11.求任意数为底的幂<br />
S:select power(3,4) value 81<br />
O:select power(3,4) value from dual 81</p>
<p>12.取随机数<br />
S:select rand() value<br />
O:select sys.dbms_random.value(0,1) value from dual;</p>
<p>13.取符号<br />
S:select sign(-8) value -1<br />
O:select sign(-8) value from dual -1</p>
<p>----------三角函数相关</p>
<p>14.圆周率<br />
S:SELECT PI() value 3.1415926535897931<br />
O:不知道</p>
<p>15.sin,cos,tan 参数都以弧度为单位<br />
例如：select sin(PI()/2) value 得到1（SQLServer）</p>
<p>16.Asin,Acos,Atan,Atan2 返回弧度</p>
<p>17.弧度角度互换(SQLServer，Oracle不知道)<br />
DEGREES：弧度-〉角度<br />
RADIANS：角度-〉弧度</p>
<p>---------数值间比较</p>
<p>18. 求集合最大值<br />
S:select max(value) value from<br />
(select 1 value<br />
union<br />
select -2 value<br />
union<br />
select 4 value<br />
union<br />
select 3 value)a</p>
<p>O:select greatest(1,-2,4,3) value from dual</p>
<p>19. 求集合最小值<br />
S:select min(value) value from<br />
(select 1 value<br />
union<br />
select -2 value<br />
union<br />
select 4 value<br />
union<br />
select 3 value)a</p>
<p>O:select least(1,-2,4,3) value from dual</p>
<p>20.如何处理null值(F2中的null以10代替)<br />
S:select F1,IsNull(F2,10) value from Tbl<br />
O:select F1,nvl(F2,10) value from Tbl</p>
<p>--------字符串函数</p>
<p>21.求字符序号<br />
S:select ascii('a') value<br />
O:select ascii('a') value from dual</p>
<p>22.从序号求字符<br />
S:select char(97) value<br />
O:select chr(97) value from dual</p>
<p>23.连接<br />
S:select '11'+'22'+'33' value<br />
O:select CONCAT('11','22')||33 value from dual</p>
<p>23.子串位置 --返回3<br />
S:select CHARINDEX('s','sdsq',2) value<br />
O:select INSTR('sdsq','s',2) value from dual</p>
<p>23.模糊子串的位置 --返回2,参数去掉中间%则返回7<br />
// 本文转自 C++Builder 研究 - <a href="http://www.ccrun.com/article.asp?i=996&amp;d=dwn1rn">http://www.ccrun.com/article.asp?i=996&amp;d=dwn1rn</a><br />
S:select patindex('%d%q%','sdsfasdqe') value<br />
O:oracle没发现，但是instr可以通过第四个参数控制出现次数<br />
select INSTR('sdsfasdqe','sd',1,2) value from dual 返回6</p>
<p>24.求子串<br />
S:select substring('abcd',2,2) value<br />
O:select substr('abcd',2,2) value from dual</p>
<p>25.子串代替 返回aijklmnef<br />
S:SELECT STUFF('abcdef', 2, 3, 'ijklmn') value<br />
O:SELECT Replace('abcdef', 'bcd', 'ijklmn') value from dual</p>
<p>26.子串全部替换<br />
S:Replace<br />
O:select Translate('fasdbfasegas','fa','我' ) value from dual</p>
<p>27.长度<br />
S:len,datalength<br />
O:length</p>
<p>28.大小写转换 lower,upper</p>
<p>29.单词首字母大写<br />
S:没发现<br />
O:select INITCAP('abcd dsaf df') value from dual</p>
<p>30.左补空格（LPAD的第一个参数为空格则同space函数）<br />
S:select space(10)+'abcd' value<br />
O:select LPAD('abcd',14) value from dual</p>
<p>31.右补空格（RPAD的第一个参数为空格则同space函数）<br />
S:select 'abcd'+space(10) value<br />
O:select RPAD('abcd',14) value from dual</p>
<p>32.删除空格<br />
S:ltrim,rtrim<br />
O:ltrim,rtrim,trim</p>
<p>33. 重复字符串<br />
S:select REPLICATE('abcd',2) value<br />
O:没发现</p>
<p>34.发音相似性比较(这两个单词返回值一样，发音相同)<br />
S:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe')<br />
O:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe') from dual<br />
SQLServer中用SELECT DIFFERENCE('Smithers', 'Smythers') 比较soundex的差<br />
返回0-4，4为同音，1最高</p>
<p>--------------日期函数</p>
<p>35.系统时间<br />
S:select getdate() value<br />
O:select sysdate value from dual</p>
<p>36.前后几日<br />
直接与整数相加减</p>
<p>37.求日期<br />
S:select convert(char(10),getdate(),20) value<br />
O:select trunc(sysdate) value from dual<br />
select to_char(sysdate,'yyyy-mm-dd') value from dual</p>
<p>38.求时间<br />
S:select convert(char(8),getdate(),108) value<br />
O:select to_char(sysdate,'hh24:mm:ss') value from dual</p>
<p>39.取日期时间的其他部分<br />
S:DATEPART 和 DATENAME 函数 （第一个参数决定）<br />
O:to_char函数 第二个参数决定</p>
<p>参数---------------------------------下表需要补充<br />
year yy, yyyy<br />
quarter qq, q (季度)<br />
month mm, m (m O无效)<br />
dayofyear dy, y (O表星期)<br />
day dd, d (d O无效)<br />
week wk, ww (wk O无效)<br />
weekday dw (O不清楚)<br />
Hour hh,hh12,hh24 (hh12,hh24 S无效)<br />
minute mi, n (n O无效)<br />
second ss, s (s O无效)<br />
millisecond ms (O无效)<br />
----------------------------------------------</p>
<p>40.当月最后一天<br />
S:不知道<br />
O:select LAST_DAY(sysdate) value from dual</p>
<p>41.本星期的某一天（比如星期日）<br />
S:不知道<br />
O:SELECT Next_day(sysdate,7) vaule FROM DUAL;</p>
<p>42.字符串转时间<br />
S:可以直接转或者select cast('2004-09-08'as datetime) value<br />
O:SELECT To_date('2004-01-05 22:09:38','yyyy-mm-dd hh24-mi-ss') vaule FROM DUAL;</p>
<p>43.求两日期某一部分的差（比如秒）<br />
S:select datediff(ss,getdate(),getdate()+12.3) value<br />
O:直接用两个日期相减（比如d1-d2=12.3）<br />
SELECT (d1-d2)*24*60*60 vaule FROM DUAL;</p>
<p>44.根据差值求新的日期（比如分钟）<br />
S:select dateadd(mi,8,getdate()) value<br />
O:SELECT sysdate+8/60/24 vaule FROM DUAL;</p>
<p>45.求不同时区时间<br />
S:不知道<br />
O:SELECT New_time(sysdate,'ydt','gmt' ) vaule FROM DUAL;</p>
<p>-----时区参数,北京在东8区应该是Ydt-------<br />
AST ADT 大西洋标准时间<br />
BST BDT 白令海标准时间<br />
CST CDT 中部标准时间<br />
EST EDT 东部标准时间<br />
GMT 格林尼治标准时间<br />
HST HDT 阿拉斯加—夏威夷标准时间<br />
MST MDT 山区标准时间<br />
NST 纽芬兰标准时间<br />
PST PDT 太平洋标准时间<br />
YST YDT YUKON标准时间</p>
<p>Oracle支持的字符函数和它们的Microsoft SQL Server等价函数:</p>
<p>函数 Oracle Microsoft SQL　Server<br />
把字符转换为ASCII ASCII ASCII<br />
字串连接 CONCAT (expression + expression)<br />
把ASCII转换为字符 CHR CHAR<br />
返回字符串中的开始字符（左起） INSTR CHARINDEX<br />
把字符转换为小写 LOWER LOWER<br />
把字符转换为大写 UPPER UPPER<br />
填充字符串的左边 LPAD N/A<br />
清除开始的空白 LTRIM LTRIM<br />
清除尾部的空白 RTRIM RTRIM<br />
字符串中的起始模式（pattern） INSTR PATINDEX<br />
多次重复字符串 RPAD REPLICATE<br />
字符串的语音表示 SOUNDEX SOUNDEX<br />
重复空格的字串 RPAD SPACE<br />
从数字数据转换为字符数据 TO_CHAR STR<br />
子串 SUBSTR SUBSTRING<br />
替换字符 REPLACE STUFF<br />
将字串中的每个词首字母大写 INITCAP N/A<br />
翻译字符串 TRANSLATE N/A<br />
字符串长度 LENGTH DATELENGTH or LEN<br />
列表中最大的字符串 GREATEST N/A<br />
列表中最小的字符串 LEAST N/A<br />
如果为NULL则转换字串 NVL ISNULL</p>
<p>日期函数</p>
<p>函数 Oracle Microsoft SQL　Server<br />
日期相加 (date column +/- value) or<br />
ADD_MONTHS DATEADD<br />
两个日期的差 (date column +/- value) or<br />
MONTHS_BETWEEN DATEDIFF<br />
当前日期和时间 SYSDATE GETDATE()<br />
一个月的最后一天 LAST_DAY N/A<br />
时区转换 NEW_TIME N/A<br />
日期后的第一个周日 NEXT_DAY N/A<br />
代表日期的字符串 TO_CHAR DATENAME<br />
代表日期的整数 TO_NUMBER<br />
(TO_CHAR)) DATEPART<br />
日期舍入 ROUND CONVERT<br />
日期截断 TRUNC CONVERT<br />
字符串转换为日期 TO_DATE CONVERT<br />
如果为NULL则转换日期 NVL ISNULL</p>
<p>转换函数</p>
<p>函数 Oracle Microsoft SQL　Server<br />
数字转换为字符 TO_CHAR CONVERT<br />
字符转换为数字 TO_NUMBER CONVERT<br />
日期转换为字符 TO_CHAR CONVERT<br />
字符转换为日期 TO_DATE CONVERT<br />
16进制转换为2进制 HEX_TO_RAW CONVERT<br />
2进制转换为16进制 RAW_TO_HEX CONVERT</p>
<p>其它行级别的函数</p>
<p>函数 Oracle Microsoft SQL　Server<br />
返回第一个非空表达式 DECODE COALESCE<br />
当前序列值 CURRVAL N/A<br />
下一个序列值 NEXTVAL N/A<br />
如果exp1 = exp2, 返回null DECODE NULLIF<br />
用户登录账号ID数字 UID SUSER_ID<br />
用户登录名 USER SUSER_NAME<br />
用户数据库ID数字 UID USER_ID<br />
用户数据库名 USER USER_NAME<br />
当前用户 CURRENT_USER CURRENT_USER<br />
用户环境(audit trail) USERENV N/A<br />
在CONNECT BY子句中的级别 LEVEL N/A</p>
<p>合计函数</p>
<p>函数 Oracle Microsoft SQL　Server<br />
Average AVG AVG<br />
Count COUNT COUNT<br />
Maximum MAX MAX<br />
Minimum MIN MIN<br />
Standard deviation STDDEV STDEV or STDEVP<br />
Summation SUM SUM<br />
Variance VARIANCE VAR or VARP</p>
<p>Oracle还有一个有用的函数EXTRACT,提取并且返回日期时间或时间间隔表达式中特定的时间域:<br />
EXTRACT(YEAR FROM 日期)</p>
<img src ="http://www.blogjava.net/mac521/aggbug/172094.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mac521/" target="_blank">牛浪de流</a> 2008-01-02 10:26 <a href="http://www.blogjava.net/mac521/archive/2008/01/02/172094.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>