﻿<?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-chunkyo-Java技术</title><link>http://www.blogjava.net/chunkyo/</link><description /><language>zh-cn</language><lastBuildDate>Wed, 06 May 2026 03:29:59 GMT</lastBuildDate><pubDate>Wed, 06 May 2026 03:29:59 GMT</pubDate><ttl>60</ttl><item><title>chm文件打不开的解决办法 </title><link>http://www.blogjava.net/chunkyo/archive/2011/07/19/354578.html</link><dc:creator>chunkyo</dc:creator><author>chunkyo</author><pubDate>Tue, 19 Jul 2011 01:13:00 GMT</pubDate><guid>http://www.blogjava.net/chunkyo/archive/2011/07/19/354578.html</guid><wfw:comment>http://www.blogjava.net/chunkyo/comments/354578.html</wfw:comment><comments>http://www.blogjava.net/chunkyo/archive/2011/07/19/354578.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chunkyo/comments/commentRss/354578.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chunkyo/services/trackbacks/354578.html</trackback:ping><description><![CDATA[<div>  chm是微软的帮助文档，许多程序的说明文档还有电子书都是用它制作的。<br /> 我们下载一个chm文档后可能经常会有打不开的情况，而在其它的一些电脑上却能正常打开，这说明不是文档本身的问题，而是系统设置的问题。 <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   其实这是为了安全而作的一种限制，我们知道很多不安全的东西大多是通过网页传播的，网页里面可能含有各种脚本，能执行很多功能,而chm文件本质上就是编 译过的网页。从网上直接下载的网页、chm文件和exe程序都会被系统标记为来源于网络的，是不安全的，一般打开的时候都会出现警告，把&#8220;打开此文件前总 是询问&#8221;前的钩去掉可以让它对该文件不再提示。然而有时候打开chm文件不会出现提示，直接显示&#8220;该页无法显示&#8221;或者&#8220;已取消到该网页的导 航&#8221;&#8220;internet explorer 不能链接到您请求的网页&#8221;之类的错误，这该怎么办呢？<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  在chm文件上点右键-&gt;属性-&gt;常规-&gt;解除锁定，这样就可以打开了。<br /> 但是上述方法并不总是有效的，也许有的版本的系统根本找不到&#8220;解除锁定&#8221;这个选项，这时可以通过修改注册表解决，将以下内容打开保存到为后缀为reg的文件打开即可<br /> REGEDIT4 <br /> [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\HTMLHelp]</p> <p>[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\HTMLHelp\1.x\HHRestrictions] <br /> "MaxAllowedZone"=dword:00000003 <br /> "UrlAllowList"=""</p> <p>[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\HTMLHelp\1.x\ItssRestrictions] <br /> "MaxAllowedZone"=dword:00000003 <br /> "UrlAllowList"=""<br /> &nbsp;&nbsp;&nbsp;&nbsp;  这是最有效的方法，对于各种系统均能用。<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  那么&#8220;MaxAllowedZone&#8221;的值为3是什么意思呢？<br /> AllowedZone是允许的区域，所有的区域包括以下几个：<br /> 本地计算机 internet 本地intranet 可信站点 受限站点</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  我们可以在internet选项里面找到有后四个区域，<br /> 值为0表示本地计算机，为1则表示前两个，为2为前三个，为3为前四个。<br /> 所以"MaxAllowedZone"=dword:00000003 的含义为允许在 本地计算机、internet、本地intranet、可信站点 上打开该文件。<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  REGEDIT4是注册表编辑器的版本，vista和windows 7里面为REGEDIT5,不过老的版本还是照样支持的。<br /> 如果chm文档所在文件夹有特殊符号也可能导致打不开的，比如新建一个文件夹，名字为&#8220;abc#&#8221;，把chm文件放进去就会打不开。</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  既然网络上的东西被认为是不安全的，那么为什么网上的网页里的脚本可以直接运行，下载到本地保存再打开会有警告呢？</p> <p>这是因为我们浏览网页的时候网页的权限是比较低的，不能访问本机上的数据等，而如果下载到本地再打开就是以本地管理员的身份运行的，可能对系统造成损害。但是其实这个限制说实话没什么用，ie经常有各种漏洞使木马可以借此运行，本地的网页一般是安全的。</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  有时候下载的电子书是chm版的如果想在手机或者mp4上看，可以将它转换成txt的。chm是从网页编译过来的，当然还编译回去，然后再转成txt的，这样的工具很多，不过真正好用了不多。<br /> 用HTML Help Workshop可以创建chm文件，使用方法很简单的。</p></div>来自：<div>http://apps.hi.baidu.com/share/detail/33806176</div><img src ="http://www.blogjava.net/chunkyo/aggbug/354578.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chunkyo/" target="_blank">chunkyo</a> 2011-07-19 09:13 <a href="http://www.blogjava.net/chunkyo/archive/2011/07/19/354578.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>生意人必须知道的B2B各大行业网站大全</title><link>http://www.blogjava.net/chunkyo/archive/2010/03/16/315543.html</link><dc:creator>chunkyo</dc:creator><author>chunkyo</author><pubDate>Mon, 15 Mar 2010 23:50:00 GMT</pubDate><guid>http://www.blogjava.net/chunkyo/archive/2010/03/16/315543.html</guid><wfw:comment>http://www.blogjava.net/chunkyo/comments/315543.html</wfw:comment><comments>http://www.blogjava.net/chunkyo/archive/2010/03/16/315543.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/chunkyo/comments/commentRss/315543.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chunkyo/services/trackbacks/315543.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: B2B网站运营的方式就是贸易撮合,众多的网站到处寻找最新的采购信息以帮助众多的会员企业销售出更多的产品，这对企业来说是非常好的，这对企业起到了“开源”的作用。&nbsp;&nbsp;<a href='http://www.blogjava.net/chunkyo/archive/2010/03/16/315543.html'>阅读全文</a><img src ="http://www.blogjava.net/chunkyo/aggbug/315543.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chunkyo/" target="_blank">chunkyo</a> 2010-03-16 07:50 <a href="http://www.blogjava.net/chunkyo/archive/2010/03/16/315543.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>修改grub使它默认进入字符界面，即runlevel为3</title><link>http://www.blogjava.net/chunkyo/archive/2009/08/08/290388.html</link><dc:creator>chunkyo</dc:creator><author>chunkyo</author><pubDate>Sat, 08 Aug 2009 14:14:00 GMT</pubDate><guid>http://www.blogjava.net/chunkyo/archive/2009/08/08/290388.html</guid><wfw:comment>http://www.blogjava.net/chunkyo/comments/290388.html</wfw:comment><comments>http://www.blogjava.net/chunkyo/archive/2009/08/08/290388.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chunkyo/comments/commentRss/290388.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chunkyo/services/trackbacks/290388.html</trackback:ping><description><![CDATA[把光标停在要启动的linux项上，按e<br />
把光标移到kernel那一行上，再按e<br />
在最后面加上一个3，敲回车确认<br />
按b启动。
<img src ="http://www.blogjava.net/chunkyo/aggbug/290388.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chunkyo/" target="_blank">chunkyo</a> 2009-08-08 22:14 <a href="http://www.blogjava.net/chunkyo/archive/2009/08/08/290388.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>推荐电影——火线保镖</title><link>http://www.blogjava.net/chunkyo/archive/2009/07/30/289175.html</link><dc:creator>chunkyo</dc:creator><author>chunkyo</author><pubDate>Thu, 30 Jul 2009 13:10:00 GMT</pubDate><guid>http://www.blogjava.net/chunkyo/archive/2009/07/30/289175.html</guid><wfw:comment>http://www.blogjava.net/chunkyo/comments/289175.html</wfw:comment><comments>http://www.blogjava.net/chunkyo/archive/2009/07/30/289175.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chunkyo/comments/commentRss/289175.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chunkyo/services/trackbacks/289175.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 动作场面绝对火爆经典，胡萝卜的杀伤力之强，令人耳目一新，剧情虽然比较老套<br />
<br />
&nbsp;，基本上都是美国式的个人英雄，不死之身，技术绝对是骨灰级别，但是全篇从开始到结尾，给人很强烈的<br />
<br />
视觉冲击，动作行云流水，不管是枪战，打斗还是车技，绝对算得上一流，再加上快速的节奏感，酷男美女，<br />
<br />
&nbsp;绝对称的上是经典的暴力美学动作片！赞一个！值得一看！<br />
<br />
<br />
<img src ="http://www.blogjava.net/chunkyo/aggbug/289175.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chunkyo/" target="_blank">chunkyo</a> 2009-07-30 21:10 <a href="http://www.blogjava.net/chunkyo/archive/2009/07/30/289175.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript/Js脚本处理html元素的自定义属性(兼容Firefox和IE)转载</title><link>http://www.blogjava.net/chunkyo/archive/2009/06/24/283870.html</link><dc:creator>chunkyo</dc:creator><author>chunkyo</author><pubDate>Wed, 24 Jun 2009 01:24:00 GMT</pubDate><guid>http://www.blogjava.net/chunkyo/archive/2009/06/24/283870.html</guid><wfw:comment>http://www.blogjava.net/chunkyo/comments/283870.html</wfw:comment><comments>http://www.blogjava.net/chunkyo/archive/2009/06/24/283870.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chunkyo/comments/commentRss/283870.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chunkyo/services/trackbacks/283870.html</trackback:ping><description><![CDATA[<p>HTML元素，属性已经十分丰富了。但是，在某些场合下，也会显得捉襟见肘，这时候<strong>自定义属性</strong>就发挥了十分关键的作用。</p>
<p>Html元素的自定义属性，使用起来，十分方便，例如：</p>
<p>&lt;input type=&#8221;button&#8221; value=&#8221;Click Me, Baby!&#8221; /&gt;</p>
<p><strong>假设我们现在需要限制，这个按钮，只能点击2次，然后就失效了。</strong></p>
<p>&nbsp;</p>
<p>通常的实现方式，是可以<em><strong>利用全局变量的形式</strong></em>来记录点击次数，但我们这里用<strong>自定义属性</strong>来实现这个功能，展示一下自定义属性的优势；我们对上面的button做一下改造：</p>
<p>&lt;input type=&#8221;button&#8221; value=&#8221;Click Me, Baby!&#8221; <font color="#0000ff">clickCount=&#8221;0&#8221;</font> /&gt;</p>
<p>可以看到，我为这个button 增加了一个自定义属性 <strong>clickCount</strong>， 并将初始值设为 0；下面我们来写实现功能的js代码：</p>
<p>1. 给 button 增加click事件的处理</p>
<p>&lt;input type=&#8221;button&#8221; value=&#8221;Click Me, Baby!&#8221; <font color="#0000ff">clickCount=&#8221;0&#8221;</font>&nbsp; onclick=&#8221;customAttributeDemo(this);" /&gt;</p>
<p>2. 我们来写 customAttributeDemo(obj) 这个函数</p>
<p>&nbsp;</p>
<p>对于IE来讲，使用自定义属性非常简单，因为IE自动将自定义属性解析到了DOM中，和标准属性没有任何区别，IE下的版本：</p>
<div class="wp_codebox">
<pre><span style="color: #0000ff;">function</span> customAttributeDemo(obj)<br />
{<br />
<span style="color: #0000ff;">if</span> (obj.clickCount === '0')<br />
{<br />
obj.clickCount = '1';<br />
}<br />
<span style="color: #0000ff;">else</span><br />
{<br />
obj.disabled = <span style="color: #0000ff;">true</span>;<br />
}<br />
}</pre>
</div>
<p>上面的代码在 FireFox 下将失效，因为FireFox对自定义属性的使用，限制更高，只能使用 attributes[] 集合来访问，FireFox 下的代码：</p>
<div class="wp_codebox">
<pre><span style="color: #0000ff;">function</span> customAttributeDemo(obj)<br />
{<br />
<span style="color: #0000ff;">if</span> (obj.attributes['clickCount'].nodeValue === '0')<br />
{<br />
obj.attributes['clickCount'].nodeValue = '1';<br />
}<br />
<span style="color: #0000ff;">else</span><br />
{<br />
obj.disabled = <span style="color: #0000ff;">true</span>;<br />
}<br />
}</pre>
</div>
<p>上面的代码，也适用于IE，所以，这个代码，就是具有兼容性的代码了，嘿嘿<img alt="" src="http://www.zu14.cn/coolemotion/emotions/hi_7.gif" /></p>
<p>&nbsp;</p>
<p>感谢小秦网友的交流，他给出了 getAttribute 和 setAttribute 的方法：</p>
<div class="wp_codebox">
<pre><span style="color: #0000ff;">function</span> customAttributeDemo(obj)<br />
{<br />
<span style="color: #0000ff;">if</span> (obj.getAttribute('clickCount') === '0')<br />
obj.setAttribute('clickCount', '1');<br />
<span style="color: #0000ff;">else</span><br />
obj.disabled = <span style="color: #0000ff;">true</span>;<br />
}</pre>
</div>
<br />
<script type="text/JavaScript">
alimama_pid="mm_11894160_1620769_5055716";
alimama_titlecolor="0000FF";
alimama_descolor ="000000";
alimama_bgcolor="FFFFFF";
alimama_bordercolor="E6E6E6";
alimama_linkcolor="008000";
alimama_bottomcolor="FFFFFF";
alimama_anglesize="0";
alimama_bgpic="0";
alimama_icon="0";
alimama_sizecode="14";
alimama_width=728;
alimama_height=90;
alimama_type=2;
</script>
<script src="http://a.alimama.cn/inf.js" type="text/javascript">
</script>
<img src="http://z.alimama.com/alimamal.php?i=mm_11894160_1620769_5055716&amp;w=728&amp;h=90&amp;re=1280x1024&amp;sz=14&amp;cg=f9371a9d9ae6b52980dcde58d814dbf1&amp;prm=82805140&amp;cas=prm&amp;cah=994&amp;caw=1280&amp;ccd=32&amp;ctz=8&amp;chl=1&amp;cja=1&amp;cpl=17&amp;cmm=61&amp;cf=9.0&amp;u=http%3A%2F%2Fwww.zu14.cn%2F2009%2F03%2F23%2Fjavascript-do-custom-html-attrib%2F&amp;r=&amp;sx=141&amp;sy=1711&amp;cbw=1263&amp;cbh=3755" name="alimamatmpf0.10532353963555852" id="alimamatmpf0.10532353963555852" style="border: 0px none ; margin: 0px; padding: 0px; width: 0px; height: 0px; vertical-align: baseline;" border="0"  alt="" />
<img src ="http://www.blogjava.net/chunkyo/aggbug/283870.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chunkyo/" target="_blank">chunkyo</a> 2009-06-24 09:24 <a href="http://www.blogjava.net/chunkyo/archive/2009/06/24/283870.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java Annotation详解</title><link>http://www.blogjava.net/chunkyo/archive/2009/06/19/283179.html</link><dc:creator>chunkyo</dc:creator><author>chunkyo</author><pubDate>Fri, 19 Jun 2009 02:30:00 GMT</pubDate><guid>http://www.blogjava.net/chunkyo/archive/2009/06/19/283179.html</guid><wfw:comment>http://www.blogjava.net/chunkyo/comments/283179.html</wfw:comment><comments>http://www.blogjava.net/chunkyo/archive/2009/06/19/283179.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chunkyo/comments/commentRss/283179.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chunkyo/services/trackbacks/283179.html</trackback:ping><description><![CDATA[<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><strong>元数据的作用</strong><span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left" align="left">如果要对于元数据的作用进行分类，目前还没有明确的定义，不过我们可以根据它所起的作用，大致可分为三类：<span></p>
<p style="margin: 0cm 0cm 0pt 42pt; text-indent: -21pt; text-align: left" align="left">l<span style="font-size: 7pt; color: black"><span style="font-family: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>编写文档：通过代码里标识的元数据生成文档。<span></p>
<p style="margin: 0cm 0cm 0pt 42pt; text-indent: -21pt; text-align: left" align="left">l<span style="font-size: 7pt; color: black"><span style="font-family: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>代码分析：通过代码里标识的元数据对代码进行分析。<span></p>
<p style="margin: 0cm 0cm 0pt 42pt; text-indent: -21pt; text-align: left" align="left">l<span style="font-size: 7pt; color: black"><span style="font-family: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>编译检查：通过代码里标识的元数据让编译器能实现基本的编译检查。<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Times New Roman">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><strong>基本内置注释</strong><span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp; <strong>@Override</strong>注释能实现编译时检查，你可以为你的方法添加该注释，以声明该方法是用于覆盖父类中的方法。如果该方法不是覆盖父类的方法，将会在编译时报错。例如我们为某类重写<span>toString()方法却写成了tostring()，并且我们为该方法添加了@Override注释； </p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp; <strong>@Deprecated</strong>的作用是对不应该在使用的方法添加注释，当编程人员使用这些方法时，将会在编译时显示提示信息，它与javadoc里的@deprecated标记有相同的功能，准确的说，它还不如<span>javadoc @deprecated，因为它不支持参数， </p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">注意：要了解详细信息，请使用 -Xlint:deprecation 重新编译。<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp; <strong>@SuppressWarnings</strong>与前两个注释有所不同，你需要添加一个参数才能正确使用，这些参数值都是已经定义好了的，我们选择性的使用就好了，参数如下：<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">deprecation&nbsp;&nbsp; <span>使用了过时的类或方法时的警告</p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">unchecked&nbsp;执行了未检查的转换时的警告，例如当使用集合时没有用泛型<span> (Generics) 来指定集合保存的类型</p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">fallthrough&nbsp;&nbsp; 当<span> Switch 程序块直接通往下一种情况而没有 Break 时的警告</p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">path&nbsp;&nbsp; <span>在类路径、源文件路径等中有不存在的路径时的警告</p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">serial当在可序列化的类上缺少<span> serialVersionUID 定义时的警告</p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">finally&nbsp;&nbsp;&nbsp; 任何<span> finally 子句不能正常完成时的警告</p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">all<span>关于以上所有情况的警告</p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">注意：要了解详细信息，请使用 -Xlint:unchecked 重新编译。<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><strong>&nbsp;</strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><strong>定制注释类型</strong><span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp; 好的，让我们创建一个自己的注释类型（annotation type）吧。它类似于新创建一个接口类文件，但为了区分，我们需要将它声明为@interface,如下例：<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">public @interface NewAnnotation {<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp;<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">}<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp;<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><strong>使用定制的注释类型</strong><span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp; 我们已经成功地创建好一个注释类型NewAnnotation，现在让我们来尝试使用它吧，如果你还记得本文的第一部分，那你应该知道他是一个标记注释，使用也很容易，如下例：<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">public class AnnotationTest {<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp;<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp; @NewAnnotation<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp; public static void main(String[] args) {<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp; <span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp; }<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">}<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp;<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><strong>添加变量</strong><span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp; J2SE 5.0里，我们了解到内置注释@SuppressWarnings()是可以使用参数的，那么自定义注释能不能定义参数个数和类型呢？答案是当然可以，但参数类型只允许为基本类型、String、Class、枚举类型等，并且参数不能为空。我们来扩展NewAnnotation，为之添加一个String类型的参数，示例代码如下：<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">public @interface NewAnnotation {<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp;<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp; String value();<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">}<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp; 使用该注释的代码如下：正如你所看到的，该注释的使用有两种写法，这也是在之前的文章里所提到过的。如果你忘了这是怎么回事，那就再去翻翻吧。<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">public class AnnotationTest {<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp;<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp; @NewAnnotation("Just a Test.")<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp; public static void main(String[] args) {<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sayHello();<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp; }<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp; <span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp; @NewAnnotation(value="Hello NUMEN.")<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp; public static void sayHello() {<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // do something<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp; }<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">}<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp;<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><strong>为变量赋默认值</strong><span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp; 我们对Java自定义注释的了解正在不断的增多，不过我们还需要更过，在该条目里我们将了解到如何为变量设置默认值，我们再对NewAnnotaion进行修改，看看它会变成什么样子，不仅参数多了几个，连类名也变了。但还是很容易理解的，我们先定义一个枚举类型，然后将参数设置为该枚举类型，并赋予默认值。<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">public @interface Greeting {<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp;<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp; public enum FontColor {RED, GREEN, BLUE};<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp;<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp; String name();<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp;<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp; String content();<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp; <span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp; FontColor fontColor() default FontColor.BLUE;<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">}<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp;<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><strong>限定注释使用范围</strong><span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp; 当我们的自定义注释不断的增多也比较复杂时，就会导致有些开发人员使用错误，主要表现在不该使用该注释的地方使用。为此，Java提供了一个ElementType枚举类型来控制每个注释的使用范围，比如说某些注释只能用于普通方法，而不能用于构造函数等。下面是Java定义的ElementType枚举：<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">package java.lang.annotation;<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp;<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">public enum ElementType {<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp; TYPE,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Class, interface, or enum (but not annotation)<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp; FIELD,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Field (including enumerated values)<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp;&nbsp;METHOD,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Method (does not include constructors)<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp; PARAMETER,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Method parameter<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp; CONSTRUCTOR,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Constructor<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp; LOCAL_VARIABLE,&nbsp;&nbsp; // Local variable or catch clause<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp; ANNOTATION_TYPE,&nbsp; // Annotation Types (meta-annotations)<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp; PACKAGE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Java package<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">}<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp; 下面我们来修改Greeting注释，为之添加限定范围的语句，这里我们称它为目标（Target）使用方法也很简单，如下：<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">@Target( { ElementType.METHOD, ElementType.CONSTRUCTOR })<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">public @interface Greeting {<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">}<span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left" align="left">正如上面代码所展示的，我们只允许Greeting注释标注在普通方法和构造函数上，使用在包申明、类名等时，会提示错误信息。<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp;<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><strong>注释保持性策略</strong><span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">public enum RetentionPolicy {<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp; SOURCE,// Annotation is discarded by the compiler<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp; CLASS,// Annotation is stored in the class file, but ignored by the VM<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp; RUNTIME// Annotation is stored in the class file and read by the VM<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">}<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp; RetentionPolicy的使用方法与ElementType类似，<span style="color: black">简单代码示例如下：</p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">@Retention(RetentionPolicy.RUNTIME)<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">@Target( { ElementType.METHOD, ElementType.CONSTRUCTOR })<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><strong>文档化功能</strong><span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp; Java提供的Documented元注释跟Javadoc的作用是差不多的，其实它存在的好处是开发人员可以定制Javadoc不支持的文档属性，并在开发中应用。它的使用跟前两个也是一样的，简单代码示例如下：<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">@Documented<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">@Retention(RetentionPolicy.RUNTIME)<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">@Target( { ElementType.METHOD, ElementType.CONSTRUCTOR })<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">public @interface Greeting {<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">}<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">&nbsp;<span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left">值得大家注意的是，如果你要使用@Documented元注释，你就得为该注释设置RetentionPolicy.RUNTIME保持性策略。<br />
<br />
后续补充中....</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<img src ="http://www.blogjava.net/chunkyo/aggbug/283179.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chunkyo/" target="_blank">chunkyo</a> 2009-06-19 10:30 <a href="http://www.blogjava.net/chunkyo/archive/2009/06/19/283179.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HTML父窗体和子窗体之间数据的传送</title><link>http://www.blogjava.net/chunkyo/archive/2009/05/20/271817.html</link><dc:creator>chunkyo</dc:creator><author>chunkyo</author><pubDate>Wed, 20 May 2009 14:49:00 GMT</pubDate><guid>http://www.blogjava.net/chunkyo/archive/2009/05/20/271817.html</guid><wfw:comment>http://www.blogjava.net/chunkyo/comments/271817.html</wfw:comment><comments>http://www.blogjava.net/chunkyo/archive/2009/05/20/271817.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chunkyo/comments/commentRss/271817.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chunkyo/services/trackbacks/271817.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;最近项目涉及到在弹出窗口编辑数据,然后返回到父窗口,并在父窗口打开也能把数据初始化到子窗口中的功能;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 下面是涉及到的关键代码,记录下来以后可以用;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HTML父窗体和子窗体之间数据的传送;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1. 父窗体father.html<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;script&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function openChild()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var o=; //获取父窗体的组件<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var win=window.open(child.html);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; win.father_obj=o;//传给子窗口的对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function getChildData(obj){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/script&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2. 子窗口child.html<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;script&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function getFatherData()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var data=window.father_obj;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function sendFatherData()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var obj=....;//获取子窗口对象&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; opener.&nbsp;getChildData(obj);//调用父窗口的函数进行传送;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/script&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; over....
<img src ="http://www.blogjava.net/chunkyo/aggbug/271817.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chunkyo/" target="_blank">chunkyo</a> 2009-05-20 22:49 <a href="http://www.blogjava.net/chunkyo/archive/2009/05/20/271817.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle存储过程学习</title><link>http://www.blogjava.net/chunkyo/archive/2009/05/18/271407.html</link><dc:creator>chunkyo</dc:creator><author>chunkyo</author><pubDate>Mon, 18 May 2009 14:14:00 GMT</pubDate><guid>http://www.blogjava.net/chunkyo/archive/2009/05/18/271407.html</guid><wfw:comment>http://www.blogjava.net/chunkyo/comments/271407.html</wfw:comment><comments>http://www.blogjava.net/chunkyo/archive/2009/05/18/271407.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chunkyo/comments/commentRss/271407.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chunkyo/services/trackbacks/271407.html</trackback:ping><description><![CDATA[<p style="text-indent: 2em">存储过程创建语法：</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; create or replace procedure 存储过程名（param1 in type，param2 out type） </p>
<p style="text-indent: 2em">as </p>
<p style="text-indent: 2em">变量1 类型（值范围）;</p>
<p style="text-indent: 2em">变量2 类型（值范围）;</p>
<p style="text-indent: 2em">Begin</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; Select count(*) into 变量1 from 表A where列名=param1；</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; If (判断条件) then</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Select 列名 into 变量2 from 表A where列名=param1；</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dbms_output。Put_line(&#8216;打印信息&#8217;);</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; Elsif (判断条件) then</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dbms_output。Put_line(&#8216;打印信息&#8217;);</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; Else</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Raise 异常名（NO_DATA_FOUND）;</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; End if;</p>
<p style="text-indent: 2em">Exception</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; When others then</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Rollback;</p>
<p style="text-indent: 2em">End;</p>
<p style="text-indent: 2em">&nbsp;</p>
<p style="text-indent: 2em">注意事项：</p>
<p style="text-indent: 2em">1，&nbsp; 存储过程参数不带取值范围，in表示传入，out表示输出</p>
<p style="text-indent: 2em">2，&nbsp; 变量带取值范围，后面接分号</p>
<p style="text-indent: 2em">3，&nbsp; 在判断语句前最好先用count（*）函数判断是否存在该条操作记录</p>
<p style="text-indent: 2em">4，&nbsp; 用select 。。。into。。。给变量赋值</p>
<p style="text-indent: 2em">5，&nbsp; 在代码中抛异常用 raise+异常名</p>
<p style="text-indent: 2em">&nbsp;</p>
<p style="text-indent: 2em">&nbsp;</p>
<p style="text-indent: 2em">以命名的异常</p>
<p style="text-indent: 2em">命名的系统异常 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 产生原因 </p>
<p style="text-indent: 2em">ACCESS_INTO_NULL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 未定义对象 </p>
<p style="text-indent: 2em">CASE_NOT_FOUND &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CASE 中若未包含相应的 WHEN ，并且没有设置 </p>
<p style="text-indent: 2em">ELSE 时 </p>
<p style="text-indent: 2em">COLLECTION_IS_NULL &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 集合元素未初始化 </p>
<p style="text-indent: 2em">CURSER_ALREADY_OPEN &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;游标已经打开 </p>
<p style="text-indent: 2em">DUP_VAL_ON_INDEX &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 唯一索引对应的列上有重复的值 </p>
<p style="text-indent: 2em">INVALID_CURSOR &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在不合法的游标上进行操作 </p>
<p style="text-indent: 2em">INVALID_NUMBER &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 内嵌的 SQL 语句不能将字符转换为数字 </p>
<p style="text-indent: 2em">NO_DATA_FOUND &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用 select into 未返回行，或应用索引表未初始化的&nbsp; </p>
<p style="text-indent: 2em">&nbsp;</p>
<p style="text-indent: 2em">TOO_MANY_ROWS &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 执行 select into 时，结果集超过一行 </p>
<p style="text-indent: 2em">ZERO_DIVIDE &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 除数为 0 </p>
<p style="text-indent: 2em">SUBSCRIPT_BEYOND_COUNT &nbsp; &nbsp; 元素下标超过嵌套表或 VARRAY 的最大值 </p>
<p style="text-indent: 2em">SUBSCRIPT_OUTSIDE_LIMIT &nbsp; &nbsp; &nbsp; 使用嵌套表或 VARRAY 时，将下标指定为负数 </p>
<p style="text-indent: 2em">VALUE_ERROR &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 赋值时，变量长度不足以容纳实际数据 </p>
<p style="text-indent: 2em">LOGIN_DENIED &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PL/SQL 应用程序连接到 oracle 数据库时，提供了不</p>
<p style="text-indent: 2em">正确的用户名或密码 </p>
<p style="text-indent: 2em">NOT_LOGGED_ON &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PL/SQL 应用程序在没有连接 oralce 数据库的情况下</p>
<p style="text-indent: 2em">访问数据 </p>
<p style="text-indent: 2em">PROGRAM_ERROR &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PL/SQL 内部问题，可能需要重装数据字典＆ pl./SQL </p>
<p style="text-indent: 2em">系统包 </p>
<p style="text-indent: 2em">ROWTYPE_MISMATCH &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 宿主游标变量与 PL/SQL 游标变量的返回类型不兼容 </p>
<p style="text-indent: 2em">SELF_IS_NULL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用对象类型时，在 null 对象上调用对象方法 </p>
<p style="text-indent: 2em">STORAGE_ERROR &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 运行 PL/SQL 时，超出内存空间 </p>
<p style="text-indent: 2em">SYS_INVALID_ID &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 无效的 ROWID 字符串 </p>
<p style="text-indent: 2em">TIMEOUT_ON_RESOURCE &nbsp; &nbsp; &nbsp; &nbsp; Oracle 在等待资源时超时&nbsp;</p>
<img src ="http://www.blogjava.net/chunkyo/aggbug/271407.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chunkyo/" target="_blank">chunkyo</a> 2009-05-18 22:14 <a href="http://www.blogjava.net/chunkyo/archive/2009/05/18/271407.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>网站测试中需要测试的三个方面</title><link>http://www.blogjava.net/chunkyo/archive/2009/05/12/270196.html</link><dc:creator>chunkyo</dc:creator><author>chunkyo</author><pubDate>Tue, 12 May 2009 06:28:00 GMT</pubDate><guid>http://www.blogjava.net/chunkyo/archive/2009/05/12/270196.html</guid><wfw:comment>http://www.blogjava.net/chunkyo/comments/270196.html</wfw:comment><comments>http://www.blogjava.net/chunkyo/archive/2009/05/12/270196.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chunkyo/comments/commentRss/270196.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chunkyo/services/trackbacks/270196.html</trackback:ping><description><![CDATA[<p><strong>1.功能测试</strong></p>
<p>对于网站的<a href="http://www.spasvo.com/">测试</a>而言，每一个独立的功能模块需要单独的测试用例的设计导出，主要依据为《需求规格说明书》及《详细设计说明书》，对于应用程序模块需要设计者提供基本路径测试法的测试用例。</p>
<p><strong>链接测试</strong></p>
<p>链接是Web应用系统的一个主要特征，它是在页面之间切换和指导用户去一些不知道地址的页面的主要手段。链接测试可分为三个方面：</p>
<p>1）测试所有链接是否按指示的那样确实链接到了该链接的页面；</p>
<p>2）测试所链接的页面是否存在；</p>
<p>3）保证Web应用系统上没有孤立的页面，所谓孤立页面是指没有链接指向该页面，只有知道正确的URL地址才能访问。</p>
<p>链接测试可以自动进行，现在已经有许多工具可以采用。链接测试必须在集成测试阶段完成，也就是说，在整个Web应用系统的所有页面开发完成之后进行链接测试。</p>
<p>Xenu------主要测试链接的正确性的工具</p>
<p>可惜的是对于动态生成的页面的测试会出现一些错误。</p>
<p><strong>表单测试</strong></p>
<p>当用户给Web应用系统管理员提交信息时，就需要使用表单操作，例如用户注册、登陆、信息提交等。在这种情况下，我们必须测试提交操作的完整性，以校验提交给服务器的信息的正确性。例如：用户填写的出生日期与职业是否恰当，填写的所属省份与所在城市是否匹配等。如果使用了默认值，还要检验默认值的正确性。如果表单只能接受指定的某些值，则也要进行测试。例如：只能接受某些字符，测试时可以跳过这些字符，看系统是否会报错。</p>
<p>要测试这些程序，需要验证服务器能正确保存这些数据，而且后台运行的程序能正确解释和使用这些信息。</p>
<p>B/S结构实现的功能可能主要的就在这里，提交数据，处理数据等如果有固定的操作流程可以考虑自动化测试工具的录制功能，编写可重复使用的脚本代码，可以在测试、回归测试时运行以便减轻测试人员工作量。</p>
<p>我们对UM子系统中各个功能模块中的各项功能进行逐一的测试，主要<a href="http://www.spasvo.com/html/ceshi/20080523-75.html">测试方法</a>为：边界值测试、等价类测试，以及异常类测试。测试中要保证每种类型都有2个以上的典型数值的输入，以确保测试输入的全面性。</p>
<p><strong>Cookies测试</strong></p>
<p>Cookies通常用来存储用户信息和用户在某应用系统的操作，当一个用户使用Cookies访问了某一个应用系统时，Web服务器将发送关于用户的信息，把该信息以Cookies的形式存储在客户端计算机上，这可用来创建动态和自定义页面或者存储登陆等信息。</p>
<p>如果Web应用系统使用了Cookies，就必须检查Cookies是否能正常工作而且对这些信息已经加密。测试的内容可包括Cookies是否起作用，是否按预定的时间进行保存，刷新对Cookies有什么影响等。</p>
<p><strong>设计语言测试</strong></p>
<p>Web设计语言版本的差异可以引起客户端或服务器端严重的问题，例如使用哪种版本的HTML等。当在分布式环境中开发时，开发人员都不在一起，这个问题就显得尤为重要。除了HTML的版本问题外，不同的脚本语言，例如Java、JavaScript、 ActiveX、VBScript或Perl等也要进行验证。</p>
<p><strong>数据库测试</strong></p>
<p>在Web应用技术中，数据库起着重要的作用，数据库为Web应用系统的管理、运行、查询和实现用户对数据存储的请求等提供空间。在Web应用中，最常用的数据库类型是关系型数据库，可以使用SQL对信息进行处理。</p>
<p>在使用了数据库的Web应用系统中，一般情况下，可能发生两种错误，分别是数据一致性错误和输出错误。数据一致性错误主要是由于用户提交的表单信息不正确而造成的，而输出错误主要是由于网络速度或程序设计问题等引起的，针对这两种情况，可分别进行测试。</p>
<p>功能测试用到的测试工具有：黑盒自动化测试工具AutoRunner；<a href="http://www.spasvo.com/testcenter/">测试管理工具TestCenter</a>。<br />
</p>
<p><strong>2 性能测试</strong></p>
<p>网站的性能测试对于网站的运行而言异常重要，但是目前对于网站的性能测试做的不够，我们在进行系统设计时也没有一个很好的基准可以参考，因而建立网站的性能测试的一整套的测试方案将是至关重要的。</p>
<p>网站的性能测试主要从三个方面进行：连接速度测试、负荷测试（Load）和压力测试（Stress）.连接速度测试指的是打开网页的响应速度测试。负荷测试指的是进行一些边界数据的测试，压力测试更像是恶意测试，压力测试倾向应该是致使整个系统崩溃。</p>
<p><strong>连接速度测试</strong></p>
<p>用户连接到Web应用系统的速度根据上网方式的变化而变化，他们或许是电话拨号，或是宽带上网。当下载一个程序时，用户可以等较长的时间，但如果仅仅访问一个页面就不会这样。如果Web系统响应时间太长（例如超过5秒钟），用户就会因没有耐心等待而离开。</p>
<p>另外，有些页面有超时的限制，如果响应速度太慢，用户可能还没来得及浏览内容，就需要重新登陆了。而且，连接速度太慢，还可能引起数据丢失，使用户得不到真实的页面。</p>
<p><strong>负载测试</strong></p>
<p>负载测试是为了测量Web系统在某一负载级别上的性能，以保证Web系统在需求范围内能正常工作。负载级别可以是某个时刻同时访问Web系统的用户数量，也可以是在线数据处理的数量。例如：Web应用系统能允许多少个用户同时在线？如果超过了这个数量，会出现什么现象？Web应用系统能否处理大量用户对同一个页面的请求？</p>
<p><strong>压力测试</strong></p>
<p>负载测试应该安排在Web系统发布以后，在实际的网络环境中进行测试。因为一个企业内部员工，特别是项目组人员总是有限的，而一个Web系统能同时处理的请求数量将远远超出这个限度，所以，只有放在Internet上，接受负载测试，其结果才是正确可信的。</p>
<p>进行压力测试是指实际破坏一个Web应用系统，测试系统的反映。压力测试是测试系统的限制和故障恢复能力，也就是测试Web应用系统会不会崩溃，在什么情况下会崩溃。黑客常常提供错误的数据负载，直到Web应用系统崩溃，接着当系统重新启动时获得存取权。</p>
<p>压力测试的区域包括表单、登陆和其他信息传输页面等。</p>
<p>采用的测试工具：</p>
<p>性能测试可以采用相应的工具进行<a href="http://www.spasvo.com/autorunner/">自动化测试</a>，我们目前采用如下工具</p>
<p>ab -----Apache 的测试工具</p>
<p>OpenSTA—开发系统测试架构</p>
<p><strong>3 接口测试</strong></p>
<p>在很多情况下，web 站点不是孤立。Web 站点可能会与外部服务器通讯，请求数据、验证数据或提交订单。</p>
<p><strong>服务器接口</strong></p>
<p>第一个需要测试的接口是浏览器与服务器的接口。测试人员提交事务，然后查看服务器记录，并验证在浏览器上看到的正好是服务器上发生的。测试人员还可以查询数据库，确认事务数据已正确保存。</p>
<p><strong>外部接口</strong></p>
<p>有些 web 系统有外部接口。例如，网上商店可能要实时验证信用卡数据以减少欺诈行为的发生。测试的时候，要使用 web 接口发送一些事务数据，分别对有效信用卡、无效信用卡和被盗信用卡进行验证。如果商店只使用 Visa 卡和 Mastercard 卡， 可以尝试使用 Discover 卡的数据。（简单的客户端脚本能够在提交事务之前对代码进行识别，例如 3 表示 American Express，4 表示 Visa，5 表示 Mastercard，6 代表Discover。）通常，测试人员需要确认软件能够处理外部服务器返回的所有可能的消息。</p>
<p><strong>错误处理</strong></p>
<p>最容易被测试人员忽略的地方是接口错误处理。通常我们试图确认系统能够处理所有错误，但却无法预期系统所有可能的错误。尝试在处理过程中中断事务，看看会发生什么情况？订单是否完成？尝试中断用户到服务器的网络连接。尝试中断 web 服务器到信用卡验证服务器的连接。在这些情况下，系统能否正确处理这些错误？是否已对信用卡进行收费？如果用户自己中断事务处理，在订单已保存而用户没有返回网站确认的时候，需要由客户代表致电用户进行订单确认。</p>
<img src ="http://www.blogjava.net/chunkyo/aggbug/270196.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chunkyo/" target="_blank">chunkyo</a> 2009-05-12 14:28 <a href="http://www.blogjava.net/chunkyo/archive/2009/05/12/270196.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Interface Segregation Principle (ISP) - OO设计的接口分隔原则---类设计原则</title><link>http://www.blogjava.net/chunkyo/archive/2009/03/28/262597.html</link><dc:creator>chunkyo</dc:creator><author>chunkyo</author><pubDate>Sat, 28 Mar 2009 06:17:00 GMT</pubDate><guid>http://www.blogjava.net/chunkyo/archive/2009/03/28/262597.html</guid><wfw:comment>http://www.blogjava.net/chunkyo/comments/262597.html</wfw:comment><comments>http://www.blogjava.net/chunkyo/archive/2009/03/28/262597.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chunkyo/comments/commentRss/262597.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chunkyo/services/trackbacks/262597.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Clients should not be forced to depend upon interfaces that they do not use.<br>不能强迫用户去依赖那些他们不使用的接口。换句话说，使用多个专门的接口比使用单一的总接口总要好。<br>它包含了2层意思：<br>- 接口的设计原则：接口的设计应该遵循最小接口原则，不要把用户不使用的方法塞进同一个接口里。<br>  如果一个接口的方法没有被使用到，则说明该接口过胖，应该将其分割成几个功能专一的接口。<br>- 接口的依赖（继承）原则：如果一个接口a依赖（继承）另一个接口b，则接口a相当于继承了接口b的方法，那么继承了接口b后的接口a也应该遵循上述原则：不应该包含用户不使用的方法。<br>  反之，则说明接口a被b给污染了，应该重新设计它们的关系。<br>&nbsp;&nbsp;<a href='http://www.blogjava.net/chunkyo/archive/2009/03/28/262597.html'>阅读全文</a><img src ="http://www.blogjava.net/chunkyo/aggbug/262597.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chunkyo/" target="_blank">chunkyo</a> 2009-03-28 14:17 <a href="http://www.blogjava.net/chunkyo/archive/2009/03/28/262597.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>