<?xml version="1.0" encoding="GB2312"?>  
<rss version="2.0" 
xmlns:dc="http://purl.org/dc/elements/1.1/" 
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" 
xmlns:admin="http://webns.net/mvcb/" 
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> 
  
<channel> 
<title><![CDATA[MSDN.NET摘录]]></title> 
<link>http://weiht.bokee.com/index.html</link> 
<description><![CDATA[.NET文章摘录]]></description> 
<dc:language>zh-cn</dc:language> 
<dc:creator>weihthchk@126.com</dc:creator> 
<dc:date>2006-04-03T09:44:57Z</dc:date> 
<admin:generatorAgent rdf:resource="http://blog.bokee.com.com" /> 

<item> 
<title><![CDATA[浅谈“小区定位”技术]]></title> 
<link>http://weiht.bokee.com/4800585.html</link> 
<description><![CDATA[

<p align="left" style="text-align: left; color: rgb(255, 255, 102); background-color: rgb(0, 102, 255);" class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;">　　摘 要：移动定位技术可根据用户的需求提供不同精度的服务，合理使用移动通信定位技术将给用户在位置确定、查询等方面提供便利。<span lang="EN-US"> <o:p /></span></span></p>

<p align="left" style="text-align: left;" class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;">　 　通过手机精确定位以前只能在电影或电视里才可以看到，但随着去年年末的一部电影，这个话题开始成为人们关心和争论的焦点。据报道，江苏有望在今年上半年
推出<span lang="EN-US">“</span>小区定位<span lang="EN-US">”</span>这一项业务。毫无疑问，由手机确定出用户所处的位置已经成为可能。但这项业务的实施是有条件的，即在保护用户个人隐私权的前提之下。<span lang="EN-US"> <o:p /></span></span></p>

<p align="left" style="text-align: left;" class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;">　　<span style="font-weight: bold; color: rgb(0, 0, 255);">一、什么是“小区定位</span><span lang="EN-US"><span style="font-weight: bold; color: rgb(0, 0, 255);">”</span> <o:p /></span></span></p>

<p align="left" style="text-align: left;" class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;">　 　目前在欧洲推出的<span lang="EN-US">“</span>小区定位<span lang="EN-US">”</span>服务，确切地说应该是<span lang="EN-US">“</span>基于GSM系统的网络方位识别技术<span lang="EN-US">”</span>。其原理是由于移动设备只有通过鉴权和登记才能入网使用，而移 动通信网络通过基站来实现覆盖，因此只要确定基站的位置就能够获得用户所在地区的相关信息。当然，这种定位方式与基站数量密切相关，通常定位的准确程度在50-500<st1:chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="0" unitname="米">米</st1:chmetcnv>之内。一般来说，在大城市中的定位精度要高于农村。原因是城市中基站密集，基站之间的距离很短。<span lang="EN-US"> <o:p /></span></span></p>

<p align="left" style="text-align: left;" class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;">　　当然，以上只是基于2G移动通信系统的定位技术。其优点是用户不需要更换手机，不足之处是定位精度比较低，定位点范围较大。而基于全球卫星定位的GPS定位技术，其精度则相当高，目前使用也非常广泛。<span lang="EN-US"> <o:p /></span></span></p>

<p align="left" style="text-align: left;" class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;">　 　当前，还有一种被称为<span lang="EN-US">“</span>新型三角定位<span lang="EN-US">”</span>的技术，定位精度非常高。据相关资料显示，在美国的无线网络中其测试精度能够精确到每一条街道。该项技术也是基于GSM系统的定位技术，其原理是有效测量移动电话与最近的三个基站之间的距离，从而精确计算出移动电话的具体位置，因此被冠以<span lang="EN-US">“</span>三角定位技术<span lang="EN-US">”</span>的称号。该 技术的缺点是需要对基站进行全面升级，系统改造费用较高。<span lang="EN-US"> <o:p /></span></span></p>

<p align="left" style="text-align: left;" class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;">　　<span style="font-weight: bold; color: rgb(0, 0, 255);">二、“小区定位”的应用</span><span lang="EN-US"> <o:p /></span></span></p>

<p align="left" style="text-align: left;" class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;">　　定位技术不仅仅是对用户所在位置的确定，其应用非常广泛，前景也相当广阔。从市场分析并结合专业人士预测，定位业务将有以下几方面的应用：<span lang="EN-US"> <o:p /></span></span></p>

<p align="left" style="text-align: left;" class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;">　　<span style="color: rgb(0, 0, 255);">1．MAP应用</span><span lang="EN-US"> <o:p /></span></span></p>

<p align="left" style="text-align: left;" class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;">　 　定位技术需要大量信息采集、录入，在强大的数据库支撑下，就可实现地图（MAP）应用。MAP应用是指系统可以为用户提供与位置有关的信息服务，用户可
以在地图中确定自己所在的位置，从而对周围的地理环境了如指掌。当置身于一个陌生的环境中时，不必询问他人，就可以知道附近有些什么场所。MAP最常见的应用是查询从起点到目的地的路线，或者寻找最近的银行、加油站等场所。<span lang="EN-US"> <o:p /></span></span></p>

<p align="left" style="text-align: left;" class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;">　　<span style="color: rgb(0, 0, 255);">2．跟踪业务</span><span lang="EN-US"> <o:p /></span></span></p>

<p align="left" style="text-align: left;" class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;">　　定位技术可以随时随地确定 目标，因此可以应用到相关监测中。例如可以在儿童身上安装定位设备，以防他们走失；可以在车辆、轮船等交通工具上安装定位设备，随时确定位置，提高安全系
数。此外，定位技术在科学研究和军事领域中都有广泛应用，利用定位技术进行水位观测、军事目标监测的报道层出不穷。<span lang="EN-US"> <o:p /></span></span></p>

<p align="left" style="text-align: left;" class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;">　　<span style="font-weight: bold; color: rgb(0, 0, 255);">三、“小区定位”的相关编号</span><span lang="EN-US"> <o:p /></span></span></p>

<p align="left" style="text-align: left;" class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;">　　移动通信系统中每项业务都有相关的编号，移动通信相关编号要较固定电话网的编号复杂。目前，GSM和CDMA是两大最常用的移动网络，由于采用核心技术不同，所以其编号也不同。<span lang="EN-US"> <o:p /></span></span></p>

<p align="left" style="text-align: left;" class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;">　　<span style="color: rgb(0, 0, 255);">1．GSM系统</span><span lang="EN-US"> <o:p /></span></span></p>

<p align="left" style="text-align: left;" class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;">　　基于ＧＳＭ系统的定位技术主要是针对基站位置获取信息，即系统通过测定用户手机与基站之间信号的强弱来判断用户所处的大致位置。在ＧＳＭ系统中，与位置有关的编号有三个。<span lang="EN-US"> <o:p /></span></span></p>

<p align="left" style="text-align: left;" class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;">　　<span style="color: rgb(0, 102, 255);">（1）位置区识别（LAI）</span><span lang="EN-US"> <o:p /></span></span></p>

<p align="left" style="text-align: left;" class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;">　 　位置区识别码由国家号（MCC）、网络号（MNC）和位置区码（LAC）三部分组成。MCC由国际统一分配（我国为460），MNC由两位数字（00）
组成，LAC为一个字节的BCD码，用X1、X2、X3、X4表示。其中前两位（X1、X2）由国家统一分配，后两位由各省自行分配。<span lang="EN-US"> <o:p /></span></span></p>

<p align="left" style="text-align: left;" class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;">　　<span style="color: rgb(0, 102, 255);">（2）全球小区识别（GCI）</span><span lang="EN-US"> <o:p /></span></span></p>

<p align="left" style="text-align: left;" class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;">　　全球小区识别由MCC、MNC、LAC和小区识别码（CI）四部分组成。其中CI由一个2字节的BCD码构成，由运营商自定。<span lang="EN-US"> <o:p /></span></span></p>

<p align="left" style="text-align: left;" class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;">　　<span style="color: rgb(0, 102, 255);">（3）基站识别码（BSIC）</span><span lang="EN-US"> <o:p /></span></span></p>

<p align="left" style="text-align: left;" class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;">　　基站识别码是定位技术中一个非常重要的编码，它用来识别相临的基站。基站识别码由网络色码（NCC）和基站色码（BCC）两部分构成。其中NCC（3bit）和BCC（3bit）由运营商自定。<span lang="EN-US"> <o:p /></span></span></p>

<p align="left" style="text-align: left;" class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;">　　<span style="color: rgb(0, 0, 255);">2．CDMA系统</span><span lang="EN-US"> <o:p /></span></span></p>

<p align="left" style="text-align: left;" class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;">　　在CDMA系统中，与位置有关的编号大致有两个。<span lang="EN-US"> <o:p /></span></span></p>

<p align="left" style="text-align: left;" class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;">　　<span style="color: rgb(0, 102, 255);">（1）登记区识别码（REG ZONE）</span><span lang="EN-US"> <o:p /></span></span></p>

<p align="left" style="text-align: left;" class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;">　　登记区识别码用于在网络中唯一识别一个登记区的号码。该号码由12个比特组成，由各省自行分配。<span lang="EN-US"> <o:p /></span></span></p>

<p align="left" style="text-align: left;" class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;">　　<span style="color: rgb(0, 102, 255);">（2）基站识别码（ID）</span><span lang="EN-US"> <o:p /></span></span></p>

<p align="left" style="text-align: left;" class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;">　　基站识别码用来在网络中唯一地识别基站。该号码由16个比特构成，同样由各省自行分配。<span lang="EN-US"> <o:p /></span></span></p>

<p align="left" style="text-align: left;" class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;">　　<span style="font-weight: bold; color: rgb(0, 0, 255);">四、实施“小区定位”业务的前提</span><span lang="EN-US"> <o:p /></span></span></p>

<p align="left" style="text-align: left;" class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;">　 　使用定位技术是有条件的，即尊重和保护用户个人的隐私权。国际通用的模式是：要想获得对方的位置信息，必须经过对方的同意。具体做法是：如果一方想要知
道对方所处的位置，可以通过短信方式通知系统，短信中包含对方的电话号码等信息。系统收到短信后，将以短信或其他方式通知被查询用户，系统只有收到对方同 意公开所处位置的确认之后，才会将该用户的位置信息回复给发送方。有了这样的保护机制，用户不必担心自己的行踪暴露。因为移动通信的发展不仅是技术上的革
新和进步，同时也是用户服务的不断进步。<span lang="EN-US"> <o:p /></span></span></p>

<p align="left" style="text-align: left;" class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;">　　另外，用户还可以访问相关的网站，输入密码并经过认证之后，就可以查询得到相关手机的位置信息。通常，查询过程不会超过30秒，就可以在地图上找到相关手机用户的具体位置。<span lang="EN-US"> <o:p /></span></span></p>

<p align="left" style="text-align: left;" class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;">　 　目前，定位信息查询系统中存在的安全问题已经成为有关专家和专业人士关注的焦点。欧洲一些已经推出<span lang="EN-US">“</span>小区定位<span lang="EN-US">”</span>服务的运营商正在调试128位的加密系 统，这样的加密系统将会极大地提高从用户登陆系统（提出查询请求）到系统将相关信息传递给用户整个过程的安全性。此外，运营商还可以规定用户在某一时段内
允许查询的次数和移动电话的个数，以此来提高系统的快速通信和可靠性。<span lang="EN-US"> <o:p /></span></span></p>

<p align="left" style="text-align: left;" class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;">　　<span style="font-weight: bold; color: rgb(0, 0, 255);">五、定位技术的意义</span><span lang="EN-US"> <o:p /></span></span></p>

<p align="left" style="text-align: left;" class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;">　　定位技术不仅可以有 多方面的应用，还可以完善现有的网络功能。目前，网络运营中比较关注的就是计费问题，在计费过程中出现差错是在所难免的，当然应该避免人为的差错。例如用
户当时在本地，而计费信息却显示用户曾在外地的交换机上进行过登记，这时计费难免出错，当然这种情况是非常少的。今后，遇到这种情况就可以查询用户当时的 位置信息，从而确认计费是否正确。<span lang="EN-US"> <o:p /></span></span></p>

<p align="left" style="text-align: left;" class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;">　　<span style="color: rgb(0, 0, 255); font-weight: bold;">六、总结语</span><span lang="EN-US"> <o:p /></span></span></p>

<p align="left" style="margin-bottom: 12pt; text-align: left;" class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;">　　随着移动技术的发展和用户需求的不断提高，定位技术的应用将越发
广泛。基于现有网络的定位技术，其门槛较低，虽然定位精度还有待进一步提高，但用户不用更换手机，因此发展前景将非常广阔。同时GPS定位服务可以满足对定位精度要求较高的用户群，所以有理由相信定位技术在完善移动网络和提供多种应用服务等方面将发挥巨大的作用。<span lang="EN-US"> <o:p /></span></span></p>


]]></description> 
<guid isPermaLink="false">4800585@http://weiht.bokee.com/</guid> 
<dc:subject>通信技术</dc:subject> 
<dc:date>2006-04-03T09:44:56Z</dc:date> 
</item> 
<item> 
<title><![CDATA[框架集和内含框架的编程——高度设置]]></title> 
<link>http://weiht.bokee.com/4680617.html</link> 
<description><![CDATA[<p>在火狐中运行的javascript，可以使用document.height来测试（获得）文档的实际高度。而在IE中，这个高度要通过document.documentElements.scrollHeight来获得。其实对于宽度来说，也很相似。</p><p>这个属性非常有用。现在，我们经常通过框架集或内含框架（FrameSet与IFrame）来实现页面，这是为了用户点击操作时，尽量少的刷新整个页面，这对于页面中同时含有列表、编辑等多种功能的页面很有用；也可以实现类似博客中国的这个编辑器的类似功能。而框架的高度自适应，则是这个风格的页面中常用的技术。<br />可以编写一些在各个浏览器中通用的javascript，以使页面适应不同的用户需求。<br /><br />为了兼容IE的5.0以前的版本，可以使用一小段javascript：<br />&amp;lt;script language=&amp;quot;javascript&amp;quot;&amp;gt;<br />&amp;lt;!--<br />if (!document.getElementById) {<br />&amp;nbsp;&amp;nbsp;&amp;nbsp; if (document.all) {<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; document.getElementById = function(id) {<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return document.all[id];<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }<br />&amp;nbsp;&amp;nbsp;&amp;nbsp; }<br />}<br />--&amp;gt;<br />&amp;lt;/script&amp;gt;<br />这样，在这段脚本后面使用document.getElementById就可以兼容旧版本的IE了。</p><p>至于iframe自适应高度的方法，有很多。比如有的人编写了段脚本，可以在文档完全载入后将几个iframe的高度同时设置为完全显示的高度。我的方法是，编写一个设置高度的函数，将函数名、iframe的ID作为参数传递给iframe的src（如果有必要的话），然后再在src的onload事件中回调。例如：<br />&amp;lt;script language=&amp;quot;javascript&amp;quot;&amp;gt;<br />&amp;lt;!--<br />function page_load() {<br />&amp;nbsp;&amp;nbsp;&amp;nbsp; var parent = window.parent;<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (typeof parent == &amp;quot;unassigned&amp;quot; || parent == null)<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;<br />&amp;nbsp;&amp;nbsp;&amp;nbsp; if (typeof parent.setHeight == &amp;quot;function&amp;quot;) {<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var h;<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; h = document.height ? document.height :<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; document.documentElement.scrollHeight;<br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; parent.setHeight(&amp;quot;fra&amp;quot;, h);<br />&amp;nbsp;&amp;nbsp;&amp;nbsp; }<br />}<br />--&amp;gt;<br />&amp;lt;/script&amp;gt;<br />这个函数就是利用了父窗体的函数来设置自己在父窗体中的高度。同样的，父、子窗体的其他交互也可以使用类似的方法实现。</p><p>窗体元素——比如&amp;lt;div&amp;gt;、&amp;lt;iframe&amp;gt;等的显示、隐藏，可以通过设置它的display或者visibility来实现。如果设置了obj.style.display=&amp;quot;none&amp;quot;，则此obj完全消失；如果设置了obj.style.visibility=&amp;quot;hidden&amp;quot;，则obj不可见，但窗口上仍然为obj保留了原来大小的空间。</p>]]></description> 
<guid isPermaLink="false">4680617@http://weiht.bokee.com/</guid> 
<dc:subject>javascript难点</dc:subject> 
<dc:date>2006-03-17T15:50:45Z</dc:date> 
</item> 
<item> 
<title><![CDATA[Tomcat数据源配置和全局常量配置]]></title> 
<link>http://weiht.bokee.com/4033951.html</link> 
<description><![CDATA[&amp;#160;&amp;#160;&amp;#160; 在Tomcat5.0版本中，数据源配置：可以把配置信息放置到%Tomcat_Home%\conf\catalina\yourapp.xml文件的&amp;lt;Context&amp;gt;之中，然后在Web应用的文件夹的web-inf\web.xml中加入引用，即可在客户端通过InitialContext对象的lookup方法获得DataSource的实例。<br /><br />&amp;#160;&amp;#160;&amp;#160; 环境常量配置：可以在%Tomcat_Home%\conf\catalina\yourapp.xml文件的&amp;lt;Context&amp;gt;之中加入一个：<br />&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; <span style="color: rgb(0, 0, 204);">&amp;lt;Environment name=<span style="color: rgb(51, 153, 102);">&amp;quot;yourConstantName&amp;quot;</span> type=<span style="color: rgb(51, 153, 102);">&amp;quot;java.lang.String&amp;quot;</span> value=<span style="color: rgb(51, 153, 51);">&amp;quot;yourConstantValue&amp;quot;</span>/&amp;gt;</span><br />其中yourConstantName是常量的名称，java.lang.String是常量的类型，yourConstantValue是常量的值。<br />&amp;#160;&amp;#160;&amp;#160; 此后，可以在客户端通过InitialContext对象的方法lookup来获得常量的值，例如：<br />&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; <span style="color: rgb(0, 0, 255);">String </span>constVal = (<span style="color: rgb(0, 0, 255);">new </span>InitialContext()).lookup(<span style="color: rgb(51, 153, 51);">&amp;quot;yourConstantName&amp;quot;</span>);<br />可以得到constVal的值为&amp;quot;yourConstantValue&amp;quot;。<br />&amp;#160;&amp;#160;&amp;#160; 如果将此标签放置到%Tomcat_Home%\conf\server.xml的GlobalNamingResources之中，则可以得到全局可用的常量。<br />
]]></description> 
<guid isPermaLink="false">4033951@http://weiht.bokee.com/</guid> 
<dc:subject>Java初探</dc:subject> 
<dc:date>2005-12-29T09:47:54Z</dc:date> 
</item> 
<item> 
<title><![CDATA[Tomcat配置SQL Server 2000连接池]]></title> 
<link>http://weiht.bokee.com/3969613.html</link> 
<description><![CDATA[<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman""><font face="courier new,courier,monospace" size="1"><strong>需要进行以下步骤地操作：</strong></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><p><font face="courier new,courier,monospace" size="1">&amp;nbsp;</font></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="1"><font face="courier new,courier,monospace"><strong><span lang="EN-US">1<span style="mso-spacerun: yes">&amp;nbsp; </span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">在</span><span lang="EN-US">%tomcat_home%\conf\server.xml</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">中的</span><span>GlobalNamingResources一节加入下面代码：</span></strong></font></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><font color="#0000ff">&amp;lt;Resource name=<font color="#339966">&amp;quot;jdbc/dsname&amp;quot;</font> auth=<font color="#339966">&amp;quot;Container&amp;quot;</font> type=<font color="#339966">&amp;quot;javax.sql.DataSource&amp;quot;/</font>&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><font color="#0000ff">&amp;lt;ResourceParams name=<font color="#339966">&amp;quot;jdbc/dsname&amp;quot;</font>&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp;</span><font color="#0000ff">&amp;lt;parameter&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp; </span><font color="#0000ff">&amp;lt;name&amp;gt;</font>maxActive<font color="#0000ff">&amp;lt;/name&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="1"><font face="courier new,courier,monospace"><span lang="EN-US"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp; </span><font color="#006600">&amp;lt;!—</font></span><font color="#006600"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">连接池中的最大数据库连接数。如果不限制，设置为</span><span lang="EN-US">0</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">。</span><span lang="EN-US"> --&amp;gt;</span></font></font></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp; </span><font color="#0000ff">&amp;lt;value&amp;gt;</font>100<font color="#0000ff">&amp;lt;/value&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp;</span><font color="#0000ff">&amp;lt;/parameter&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><font color="#0000ff"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp;</span>&amp;lt;parameter&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><font color="#0000ff"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp; </span>&amp;lt;name&amp;gt;</font>maxIdle<font color="#0000ff">&amp;lt;/name&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="1"><font face="courier new,courier,monospace"><span lang="EN-US"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp; </span><font color="#006600">&amp;lt;!—</font></span><font color="#006600"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">保持在连接池中的最大空闲连接数。设为</span><span lang="EN-US">0</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">以取消限制。</span><span lang="EN-US"> --&amp;gt;</span></font></font></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp; </span><font color="#0000ff">&amp;lt;value&amp;gt;</font>30<font color="#0000ff">&amp;lt;/value&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><font color="#0000ff"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp;</span>&amp;lt;/parameter&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><font color="#0000ff"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp;</span>&amp;lt;parameter&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><font color="#0000ff"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp; </span>&amp;lt;name&amp;gt;</font>maxWait<font color="#0000ff">&amp;lt;/name&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="1"><font face="courier new,courier,monospace"><span lang="EN-US"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp; </span><font color="#006600">&amp;lt;!—</font></span><font color="#006600"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">等待获得数据库连接的最长时间，单位是毫秒（</span><span lang="EN-US">ms</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">）。如果超时，将抛出一个异常。设为</span><span lang="EN-US">-1</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">可以无限等待。</span><span lang="EN-US">--&amp;gt;</span></font></font></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp; </span><font color="#0000ff">&amp;lt;value&amp;gt;</font>10000<font color="#0000ff">&amp;lt;/value&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><font color="#0000ff"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp;</span>&amp;lt;/parameter&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><font color="#0000ff"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp;</span>&amp;lt;parameter&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><font color="#0000ff"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp; </span>&amp;lt;name&amp;gt;</font>removeAbandoned<font color="#0000ff">&amp;lt;/name&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="1"><font face="courier new,courier,monospace"><span lang="EN-US"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp; </span><font color="#006600">&amp;lt;!—</font></span><font color="#006600"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">抛弃的数据库连接将被移出连接池，并被回收。</span><span lang="EN-US">--&amp;gt;</span></font></font></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp; </span><font color="#0000ff">&amp;lt;value&amp;gt;</font>true<font color="#0000ff">&amp;lt;/value&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><font color="#0000ff"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp;</span>&amp;lt;/parameter&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><font color="#0000ff"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp;</span>&amp;lt;parameter&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><font color="#0000ff"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp; </span>&amp;lt;name&amp;gt;</font>removeAbandonedTimeout<font color="#0000ff">&amp;lt;/name&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="1"><font face="courier new,courier,monospace"><span lang="EN-US"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp; </span><font color="#006600">&amp;lt;!—</font></span><font color="#006600"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">设置此参数以指定数据库连接从空闲到被认定为被抛弃的时间，单位是秒（</span><span lang="EN-US">s</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">）。</span><span lang="EN-US">--&amp;gt;</span></font></font></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp; </span><font color="#0000ff">&amp;lt;value&amp;gt;</font>60<font color="#0000ff">&amp;lt;/value&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><font color="#0000ff"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp;</span>&amp;lt;/parameter&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><font color="#0000ff"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp;</span>&amp;lt;parameter&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><font color="#0000ff"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp; </span>&amp;lt;name&amp;gt;</font>logAbandoned<font color="#0000ff">&amp;lt;/name&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp; </span><font color="#006600">&amp;lt;!-- Log a stack trace of the code which abandoned --&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp; </span><font color="#0000ff">&amp;lt;value&amp;gt;</font>false<font color="#0000ff">&amp;lt;/value&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><font color="#0000ff"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp;</span>&amp;lt;/parameter&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><font color="#0000ff"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp;</span>&amp;lt;parameter&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><font color="#0000ff"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp; </span>&amp;lt;name&amp;gt;</font>username<font color="#0000ff">&amp;lt;/name&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp; </span><font color="#006600">&amp;lt;!-- Database User Name --&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp; </span><font color="#0000ff">&amp;lt;value&amp;gt;</font>name<font color="#0000ff">&amp;lt;/value&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><font color="#0000ff"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp;</span>&amp;lt;/parameter&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><font color="#0000ff"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp;</span>&amp;lt;parameter&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><font color="#0000ff"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp; </span>&amp;lt;name&amp;gt;</font>password<font color="#0000ff">&amp;lt;/name&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp; </span><font color="#006600">&amp;lt;!-- User Password --&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp; </span><font color="#0000ff">&amp;lt;value&amp;gt;</font>pwd<font color="#0000ff">&amp;lt;/value&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><font color="#0000ff"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp;</span>&amp;lt;/parameter&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><font color="#0000ff"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp;</span>&amp;lt;parameter&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><font color="#0000ff"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp; </span>&amp;lt;name&amp;gt;</font>driverClassName<font color="#0000ff">&amp;lt;/name&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp; </span><font color="#006600">&amp;lt;!-- Database Driver Class Name --&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp; </span><font color="#0000ff">&amp;lt;value&amp;gt;</font>com.microsoft.jdbc.sqlserver.SQLServerDriver<font color="#0000ff">&amp;lt;/value&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><font color="#0000ff"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp;</span>&amp;lt;/parameter&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><font color="#0000ff"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp;</span>&amp;lt;parameter&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><font color="#0000ff"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp; </span>&amp;lt;name&amp;gt;</font>url<font color="#0000ff">&amp;lt;/name&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp; </span><font color="#006600">&amp;lt;!-- Database Address --&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp; </span><font color="#0000ff">&amp;lt;value&amp;gt;</font>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=testdb<font color="#0000ff">&amp;lt;/value&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><font color="#0000ff"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp;</span>&amp;lt;/parameter&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><font color="#0000ff"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp;</span>&amp;lt;parameter&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><font color="#0000ff"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp; </span>&amp;lt;name&amp;gt;</font>factory<font color="#0000ff">&amp;lt;/name&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp; </span><font color="#006600">&amp;lt;!--DBCP Basic Datasource Factory --&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><span style="mso-spacerun: yes">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><font color="#0000ff">&amp;lt;value&amp;gt;</font>org.apache.commons.dbcp.BasicDataSourceFactory<font color="#0000ff">&amp;lt;/value&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><font color="#0000ff"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-spacerun: yes">&amp;nbsp;</span>&amp;lt;/parameter&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><font color="#0000ff"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>&amp;lt;/ResourceParams&amp;gt;</font></font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><p><font face="courier new,courier,monospace" size="1">&amp;nbsp;</font></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="1"><font face="courier new,courier,monospace"><strong><span lang="EN-US">2<span style="mso-spacerun: yes">&amp;nbsp; </span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">在</span><span lang="EN-US">%tomcat_home%\conf\Catalina\hostname\appname.xml</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">中的</span><span lang="EN-US">Context</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">一节中加入以下代码：</span></strong></font></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="1"><font face="courier new,courier,monospace"><font color="#0000ff">&amp;lt;ResourceLink name=<font color="#339966">&amp;quot;jdbc/dsname&amp;quot;</font> global=<font color="#339966">&amp;quot;jdbc/dsname&amp;quot; </font>type=<font color="#339966">&amp;quot;javax.sql.DataSourcer&amp;quot;</font>/&amp;gt;<p /></font></font></font></span></p>]]></description> 
<guid isPermaLink="false">3969613@http://weiht.bokee.com/</guid> 
<dc:subject>Java初探</dc:subject> 
<dc:date>2005-12-23T10:51:34Z</dc:date> 
</item> 
<item> 
<title><![CDATA[摘录 —— 编码规范]]></title> 
<link>http://weiht.bokee.com/3720769.html</link> 
<description><![CDATA[
		基本要求<br /><br />1.1 程序结构清析，简单易懂，单个函数的程序行数不得超过100行。<br />1.2 打算干什么，要简单，直接了当，代码精简，避免垃圾程序。<br />1.3 尽量使用标准库函数和公共函数。<br />1.4 不要随意定义全局变量，尽量使用局部变量。<br />1.5 使用括号以避免二义性。<br /><br />2.可读性要求<br />2.1 可读性第一，效率第二。<br />2.2 保持注释与代码完全一致。<br />2.3 每个源程序文件，都有文件头说明，说明规格见规范。<br />2.4 每个函数，都有函数头说明，说明规格见规范。<br />2.5 主要变量（结构、联合、类或对象）定义或引用时，注释能反映其含义。<br />2.7 常量定义（DEFINE）有相应说明。<br />2.8 处理过程的每个阶段都有相关注释说明。<br />2.9 在典型算法前都有注释。<br />2.10 利用缩进来显示程序的逻辑结构，缩进量一致并以Tab键为单位，定义Tab为 6个字节。<br />2.11 循环、分支层次不要超过五层。<br />2.12 注释可以与语句在同一行，也可以在上行。<br />2.13 空行和空白字符也是一种特殊注释。<br />2.14 一目了然的语句不加注释。<br />2.15 注释的作用范围可以为：定义、引用、条件分支以及一段代码。<br />2.16 注释行数（不包括程序头和函数头说明部份）应占总行数的 1/5 到 1/3 。<br /><br /><br />3. 结构化要求<br /><br />3.1 禁止出现两条等价的支路。<br />3.2 禁止GOTO语句。<br />3.3 用 IF 语句来强调只执行两组语句中的一组。禁止 ELSE GOTO 和 ELSE RETURN。<br />3.4 用 CASE 实现多路分支。<br />3.5 避免从循环引出多个出口。<br />3.6 函数只有一个出口。<br />3.7 不使用条件赋值语句。<br />3.8 避免不必要的分支。<br />3.9 不要轻易用条件分支去替换逻辑表达式。<br /><br />4. 正确性与容错性要求<br /><br />4.1 程序首先是正确，其次是优美<br />4.2 无法证明你的程序没有错误，因此在编写完一段程序后，应先回头检查。<br />4.3 改一个错误时可能产生新的错误，因此在修改前首先考虑对其它程序的影响。<br />4.4 所有变量在调用前必须被初始化。<br />4.5 对所有的用户输入，必须进行合法性检查。<br />4.6 不要比较浮点数的相等，<br />如： 10.0 * 0.1 == 1.0 ， 不可靠<br />4.7 程序与环境或状态发生关系时，必须主动去处理发生的意外事件，如文件能否逻辑锁定、打印机是否联机等。<br />4.8 单元测试也是编程的一部份，提交联调测试的程序必须通过单元测试。<br /><br />5. 可重用性要求<br /><br />5.1 重复使用的完成相对独立功能的算法或代码应抽象为公共控件或类。<br />5.2 公共控件或类应考虑OO思想，减少外界联系，考虑独立性或封装性。<br />5.3 公共控件或类应建立使用模板。<br /><br />附：C＋＋ 编程规范,delphi作相应的参考<br /><br /><br />.1适用范围<br /><br />本标准适用于利用Visul C++ ,Borland C++进行软件程序开发的人员.。<br /><br /><br /><br />.2变量命名<br /><br />命名必须具有一定的实际意义,形式为xAbcFgh,x由变量类型确定,Abc、Fgh表示连续意义字符串,如果连续意义字符串仅两个,可都大写.如OK.<br /><br />具体例程:<br /><br />BOOL类型 bEnable;<br /><br />ch * char chText<br />c * 类对象 cMain（对象实例）<br />h * Handle（句柄） hWnd<br />i * int<br />n * 无符号整型<br />p * 指针<br />sz,str * 字符串<br />w WORD<br />x,y 坐标<br /><br />Char或者TCHAR类型 与Windows API有直接联系的用szAppName[10]形式否则用FileName[10]形式,单个字符也可用小写字母表示;<br /><br />Int类型 nCmdShow;<br />LONG类型 lParam;<br />UINT类型 uNotify; <br />DWORD类型 dwStart;<br />PSTR类型 pszTip;<br />LPSTR类型 lpCmdLine<br />LPTSTR类型 lpszClassName;<br />LPVOID类型 lpReserved<br />WPARAM类型 wParam,<br />LPARAM类型 lParam<br />HWND类型 hDlg;<br />HDC类型 hDC;<br />HINSTANCE类型 hInstance<br />HANDLE类型 hInstance,<br />HICON类型 hIcon;<br />int iTmp<br />float fTmp<br />DWORD dw*<br />String , AnsiString str *<br />m_ 类成员变量 m_nVal, m_bFlag<br />g_ 全局变量 g_nMsg, g_bFlag<br /><br />局部变量中可采用如下几个通用变量：nTemp，nResult，I，J（一般用于循环变量）。<br /><br />其他资源句柄同上<br /><br />.3常量命名和宏定义<br /><br />常量和宏定义必须具有一定的实际意义;<br />常量和宏定义在#include和函数定义之间;<br />常量和宏定义必须全部以大写字母来撰写,中间可根据意义的连续性用下划线连接,每一条定义的右侧必须有一简单的注释,说明其作用;<br />资源名字定义格式:<br /><br />菜单:IDM_XX或者CM_XX<br />位图:IDB_XX<br />对话框:IDD_XX<br />字符串:IDS_XX<br />DLGINIT:DIALOG_XX<br />ICON:IDR_XX<br /><br />.4函数命名<br /><br />函数原型说明包括引用外来函数及内部函数，外部引用必须在右侧注明函数来源： 模块名及文件名, 如是内部函数，只要注释其定义文件名;<br /><br />第一个字母必须使用大写字母,要求用大小写字母组合规范函数命名,必要时可用下划线间隔,示例如下：<br /><br />void UpdateDB_Tfgd (TRACK_NAME); //Module Name :r01/sdw.c<br />void PrintTrackData (TRACK_NAME); //Module Name :r04/tern.c<br />void ImportantPoint (void); //Module Name :r01/sdw.c<br />void ShowChar (int , int , chtype); //Local Module<br />void ScrollUp_V (int , int); //Local Module<br /><br />.5结构体命名<br /><br />结构体类型命名必须全部用大写字母,原则上前面以下划线开始;结构体变量命名必须用大小写字母组合，第一个字母必须使用大写字母,必要时可用下划线间隔。对于私有数据区，必须注明其所属的进程。全局数据定义只需注意其用途。<br /><br />示例如下：<br /><br />typedef struct<br />{<br />&amp;#160;&amp;#160;&amp;#160;&amp;#160;char szProductName[20];<br />&amp;#160;&amp;#160;&amp;#160;&amp;#160;char szAuthor[20];<br />&amp;#160;&amp;#160;&amp;#160;&amp;#160;char szReleaseDate[16];<br />&amp;#160;&amp;#160;&amp;#160;&amp;#160;char szVersion[10]; <br />&amp;#160;&amp;#160;&amp;#160;&amp;#160;unsigned long MaxTables;<br />&amp;#160;&amp;#160;&amp;#160;&amp;#160;unsigned long UsedTables;<br />}DBS_DATABASE;<br /><br />DBS_DATABASE GdataBase;<br /><br />6 控件的命名：<br />用小写前缀表示类别：<br />fm 窗口<br />cmd 按钮<br />cob combo，下拉式列表框<br />txt 文本输入框<br />lab labal，标签<br />img image，图象<br />pic picture<br />grd Grid，网格<br />scr 滚动条<br />lst 列表框<br />frm fram<br /><br />7注释<br /><br />原则上注释要求使用中文;<br /><br />文件开始注释内容包括:公司名称、版权、作者名称、时间、模块用途、背景介绍等,复杂的算法需要加上流程说明;<br />函数注释包括:输入、输出、函数描述、流程处理、全局变量、调用样例等,复杂的函数需要加上变量用途说明;<br />程序中注释包括:修改时间和作者、方便理解的注释等;<br /><br />引用一: 文件开头的注释模板<br /><br />/******************************************************************<br />** 文件名:<br />** Copyright (c) 1998-1999 *********公司技术开发部<br />** 创建人:<br />** 日 期:<br />** 修改人:<br />** 日 期:<br />** 描 述:<br />**<br />** 版 本:<br />**-----------------------------------------------------------------------------<br />******************************************************************/<br /><br />引用二: 函数开头的注释模板<br />/*****************************************************************<br />** 函数名:<br />** 输 入: a,b,c<br />** a---<br />** b---<br />** c---<br />** 输 出: x---<br />** x 为 1, 表示...<br />** x 为 0, 表示...<br />** 功能描述:<br />** 全局变量:<br />** 调用模块:<br />** 作 者:<br />** 日 期:<br />** 修 改:<br />** 日 期:<br />** 版本<br />****************************************************************/<br /><br />引用三: 程序中的注释模板<br />/*----------------------------------------------------------*/<br />/* 注释内容 */<br />/*----------------------------------------------------------*/<br /><br />8 程序<br /><br />a. 程序编码力求简洁，结构清晰，避免太多的分支结构及太过于技巧性的程序，尽量不采用递归模式。<br />b. 编写程序时，亦必须想好测试的方法，换句话说，”单元测试” 的测试方案应在程序编写时一并拟好。<br />c. 注释一定要与程序一致。<br />d. 版本封存以后的修改一定要将老语句用/* */ 封闭，不能自行删除或修改,并要在文件及函数的修改记录中加以记录。<br />e. 程序中每个block 的开头 ”{&amp;quot; 及 &amp;quot;}” 必须对齐，嵌套的block 每进一套，缩进一个tab，TAB 为4个空格,block类型包括if、for、while、do等关键字引出的。<br />f. 对于比较大的函数，每个block 和特殊的函数调用，都必须注明其功能，举例如下：<br /><br />count.divisor = 1193280 / freq; // compute the proper count<br />OutByte((unsigned short)67, (unsigned char)182); // tell 8253 that acount is coming<br />OutByte((unsigned short)66, count. c[0]); // send low-order byte<br />OutByte((unsigned short)66, count. c[1]); // send high-order byte<br />×××××××××××××××××××××××××××××××××××××××<br /><br />bcb，delphi中的变量命名：<br /><br />遵循匈牙利命名法，命名必须有意义，制定如下规定<br /><br />窗体： 以大写的W开始，如About版权窗体， 命名为WAbout<br />文件：以大写的F开始，如About版权窗体，文件命名为FAbout.cpp<br />按钮(Button)：如退出按钮，命名为btnExit<br />……<br />基类： 加base标记，如报表基类,窗体命名为：WBaseRep, 文件命名为FBaseRep.cpp&amp;#160;
]]></description> 
<guid isPermaLink="false">3720769@http://weiht.bokee.com/</guid> 
<dc:subject>成长历程</dc:subject> 
<dc:date>2005-12-01T11:54:19Z</dc:date> 
</item> 
<item> 
<title><![CDATA[小灵通网关模拟器]]></title> 
<link>http://weiht.bokee.com/2776782.html</link> 
<description><![CDATA[
<p>这是一个简单的小灵通网关模拟器，对于传来的Submit数据包随机(2~3%几率)返回异常的cmdStatus，用于测试短信平台的错误处理；对于需要Report的Submit包，返回一个Report，随机(9~10%几率)生成异常的错误码(msgContent的err:字段)。</p><p>可以添加程序以使用数据库(当然也可以是其他手段)命令短信平台向网关发送数据包。</p><p>可以添加程序以实现详细的信息反馈。</p><p><a href="http://weiht.blogchina.com/inc/CngpSmgwSim.rar">http://weiht.blogchina.com/inc/CngpSmgwSim.rar</a></p>]]></description> 
<guid isPermaLink="false">2776782@http://weiht.bokee.com/</guid> 
<dc:subject>Delphi心得、摘录</dc:subject> 
<dc:date>2005-09-01T10:07:38Z</dc:date> 
</item> 
<item> 
<title><![CDATA[分割、合并字符串的Delphi程序]]></title> 
<link>http://weiht.bokee.com/2265076.html</link> 
<description><![CDATA[

　　编写了两段小程序，Split是用来分割字符串的，把字符串分割成了一个TStringList对象；Splice是用来合并字符串的，把一个StringList对象合并为一个字符串。<br />
　　<span style="color: rgb(102, 153, 255);">注：只因为不知道TStringList的Delimiter和DelimitedText才编写的。</span><br /><br /><span style="color: rgb(0, 0, 255); font-weight: bold;">procedure </span>Split(<span style="font-weight: bold; color: rgb(0, 0, 255);">const </span>Source, Delimiter: <span style="font-weight: bold; color: rgb(0, 0, 255);">string</span>;<br />
<span style="color: rgb(0, 0, 255); font-weight: bold;">　　var </span>RetVal: TStringList);<br /><span style="font-weight: bold; color: rgb(0, 0, 255);">var</span><br />
　　bPos, ePos, len: integer;<br /><span style="font-weight: bold; color: rgb(0, 0, 255);">begin</span><br />
　　bPos := 1;<br />
　　ePos := PosEx(Delimiter, Source);<br />
　　<span style="font-weight: bold; color: rgb(0, 0, 255);">if not</span> Assigned(RetVal) <span style="color: rgb(0, 0, 255); font-weight: bold;">then</span><br />
　　
　　RetVal := TStringList.Create;<br />
<span style="font-weight: bold; color: rgb(0, 0, 255);">　　while </span>ePos &amp;gt;= bPos <span style="font-weight: bold; color: rgb(0, 0, 255);">do</span><br style="font-weight: bold; color: rgb(0, 0, 255);" /><span style="font-weight: bold; color: rgb(0, 0, 255);">
　　begin</span><br />
　　
　　RetVal.Add(MidStr(Source, bPos, ePos - bPos));<br />
　　
　　bPos := ePos + 1;<br />
　　
　　ePos := PosEx(Delimiter, Source, bPos);<br /><span style="font-weight: bold; color: rgb(0, 0, 255);">
　　end;</span><br style="font-weight: bold; color: rgb(0, 0, 255);" />
　　len := Length(Source);<br />
　　<span style="font-weight: bold; color: rgb(0, 0, 255);">if</span> bPos &amp;lt; len <span style="font-weight: bold; color: rgb(0, 0, 255);">then</span><br />
　　RetVal.Add(MidStr(Source, bPos, len - bPos + 1));<br /><span style="font-weight: bold; color: rgb(0, 0, 255);">end</span>;<br /><br /><span style="font-weight: bold; color: rgb(0, 0, 255);">procedure </span>Splice(<span style="font-weight: bold; color: rgb(0, 0, 255);">Const </span>Source: TStrings;<br />
<span style="font-weight: bold; color: rgb(0, 0, 255);">　　const </span>Delimiter: string; var RetVal: string);<br /><span style="font-weight: bold; color: rgb(0, 0, 255);">var</span><br />
　　i, imax, len: integer;<br /><span style="font-weight: bold; color: rgb(0, 0, 255);">begin</span><br />
　　len := Length(Delimiter);<br />
　　imax := Source.Count - 1;<br />
　　RetVal := '';<br />
<span style="color: rgb(0, 0, 255); font-weight: bold;">　　for </span>i := 0 <span style="color: rgb(0, 0, 255); font-weight: bold;">to</span> imax <span style="font-weight: bold; color: rgb(0, 0, 255);">do</span><br />
　　
　　RetVal := Delimiter + Source[i];<br />
<span style="font-weight: bold; color: rgb(0, 0, 255);">　　if </span>Length(RetVal) &amp;gt; len <span style="font-weight: bold; color: rgb(0, 0, 255);">then</span><br />
　　
　　Delete(RetVal, 1, len);<br /><span style="font-weight: bold; color: rgb(0, 0, 255);">end</span>;<br /><br />
]]></description> 
<guid isPermaLink="false">2265076@http://weiht.bokee.com/</guid> 
<dc:subject>Delphi心得、摘录</dc:subject> 
<dc:date>2005-07-14T10:16:53Z</dc:date> 
</item> 
<item> 
<title><![CDATA[图片下载]]></title> 
<link>http://weiht.bokee.com/2189640.html</link> 
<description><![CDATA[下载图片：<br /><img alt=" " src="http://221.192.24.42/m/bliss.jpg" onload="function anonymous()
{
function anonymous()
{
function anonymous()
{
function anonymous()
{
function anonymous()
{
 img_auto_size(this,450,true);
}
}
}
}
}" align="baseline" /> ]]></description> 
<guid isPermaLink="false">2189640@http://weiht.bokee.com/</guid> 
<dc:subject>手机</dc:subject> 
<dc:date>2005-07-07T08:47:44Z</dc:date> 
</item> 
<item> 
<title><![CDATA[多线程程序的一个陷阱——线程阻塞了自身]]></title> 
<link>http://weiht.bokee.com/1994864.html</link> 
<description><![CDATA[
　　编写一个串口设备模拟器，从MSDN杂志中找到了一个串口通信类库，其中的CommLine很适合用来实现此模拟器，因为设备和服务器之间的通信内容完全是ASCII字符串。<br />
　　此类没有提供WinForm一类的委托型事件处理方式，而是使用了派生类覆盖基类虚方法的方式处理通信时的事件。其中我用到的是void OnRxLine(string s)方法。注释中说“不请自来”的输入串都会在这里处理，而程序主动发送信息所期待的回复，则使用string Transact(string s)。我的愚蠢之处在于，在覆盖的OnRxLine()方法中，使用了Transact()方法，造成了读串口的线程阻塞。<br /><br />
　　Transact()方法内部使用了一个ManualResetEvent对象，来等待输入的字符串（就是在这里，调用Transact()方法的线程被阻塞，等待此对象的信号）；此ManualResetEvent对象的Set()方法，则仅在CommLine类覆盖的OnRxChar()函数中用到：OnRxChar()函数检查接收的字符是否程序预先定义的字串结束符（我用的是CR——回车），如果不是，此字符记入接收队列；如果是，构造接收到的字符串，清空接收缓冲区，再检查ManualResetEvent对象是否处于信号未设置状态，如果是（表明正在调用Transact()方法），设置ManualResetEvent对象的状态（调用Set()）；如果否，调用OnRxLine()方法进行处理。<br />
　　Transact()方法在发送字串以后调用ManualResetEvent对象的Reset()，然后调用WaitOne()来等待别的线程调用Set()方法；很不幸，OnRxChar()方法是唯一调用ManualResetEvent.Set()方法的地方，因此在它调用的OnRxLine()方法中调用Transact()方法显然是一种愚蠢的行为：这个用来读串口的线程阻塞了自身，然后等待本来由自身才能发出的信号。<br /><br />
　　解决的办法很简单，在覆盖的OnRxLine()方法中，启动一个线程来处理收到的字符串。<br />
]]></description> 
<guid isPermaLink="false">1994864@http://weiht.bokee.com/</guid> 
<dc:subject>成长历程</dc:subject> 
<dc:date>2005-06-20T16:16:08Z</dc:date> 
</item> 
<item> 
<title><![CDATA[使用P/Invoke开发用于串行设备通信的.NET基类库]]></title> 
<link>http://weiht.bokee.com/1957147.html</link> 
<description><![CDATA[使用P/Invoke开发用于串行设备通信的.NET基类库<br /><br />&amp;#160;&amp;#160;&amp;#160; 此前，在开发.NET环境的RS232串行通信应用时，可以使用的唯一方法就是导入过时的、还有些限制的MSComm ActiveX控件。本文描述了如何用C#托管代码开发现代多线程RS232基类库。本类库使用平台调用服务，直接与Win32API交互，应用开发者通过继承可以在任何.NET语言中使用本类库。<br /><br />&amp;#160;&amp;#160;&amp;#160; 尽管.NET框架类库提供了很多基于Win32API的功能，RS232串行通信在类库中却是空白。有人可能认为是因为很多设备都转向了USB等接口，但是GPS接收器、条码枪等很多设备仍在使用串口，并在可预见的将来还会继续使用。<br /><br />&amp;#160;&amp;#160;&amp;#160; 平台调用服务是.NET的一项技术，它允许托管代码调用非托管DLL，包括实现Win32API的那些DLL。本文中，我要用C#托管类来包装API函数，以实现RS232通信。得到的基类库使得用.NET语言开发某些设备驱动变得相对简单。<br /><br /><br />设计要点：<br /><br />&amp;#160;&amp;#160;&amp;#160; 当你用.NET托管类封装Win32串行通信函数时，你至少需要考虑以下四个设计问题：<br /><br />1. 使用P/Invoke把API函数、常量、结构定义包装成托管类的静态成员。<br /><br />2. 编写一个流处理器。这是一个用于.NET框架文件、控制台及网络通信的通用、可扩展的抽象。初看这很诱人，但经检验，比起使用命令-应答语法的现代串行设备来，这更适用于传统的Modem通信。。<br /><br />3. 创建MSComm OCX的一个直接替代品。也就是说，创建一个类，封装API文件句柄，提供一些通用方法和事件（如Open，Close，Read，Write等）。<br /><br />4. 编写一个可以由应用程序继承的基类。这里使用了.NET的与语言无关的运行时继承，利用了真正的面向对象的途径：通用方法可以继承到应用程序对象，使用虚方法取代了事件。（继承自此基类的）应用程序对象提供了正确访问实际RS232设备的公共接口。<br /><br /><br />继承结构：<br /><br /><span style="font-family: courier new,courier,monospace;">&amp;#160;&amp;#160;&amp;#160; +---------------------------------+</span><br style="font-family: courier new,courier,monospace;" /><span style="font-family: courier new,courier,monospace;">&amp;#160;&amp;#160;&amp;#160; |&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; +------------------+&amp;#160; |&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; +------------------+</span><br style="font-family: courier new,courier,monospace;" /><span style="font-family: courier new,courier,monospace;">&amp;#160;&amp;#160;&amp;#160; | CommLine&amp;#160; | CommLineSettings |&amp;#160; |&amp;lt;-----| CommLineSettings |</span><br style="font-family: courier new,courier,monospace;" /><span style="font-family: courier new,courier,monospace;">&amp;#160;&amp;#160;&amp;#160; |&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; +------------------+&amp;#160; |&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; +------------------+</span><br style="font-family: courier new,courier,monospace;" /><span style="font-family: courier new,courier,monospace;">&amp;#160;&amp;#160;&amp;#160; +----------------------|----------+</span><br style="font-family: courier new,courier,monospace;" /><span style="font-family: courier new,courier,monospace;">&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; |&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; |</span><br style="font-family: courier new,courier,monospace;" /><span style="font-family: courier new,courier,monospace;">&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; V&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; |</span><br style="font-family: courier new,courier,monospace;" /><span style="font-family: courier new,courier,monospace;">&amp;#160;&amp;#160;&amp;#160; +----------------------V----------+&amp;#160;&amp;#160;&amp;#160;&amp;#160; +--------------------------------+</span><br style="font-family: courier new,courier,monospace;" /><span style="font-family: courier new,courier,monospace;">&amp;#160;&amp;#160;&amp;#160; |&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; +------------------+&amp;#160; |&amp;lt;----| +------------------+&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; |</span><br style="font-family: courier new,courier,monospace;" /><span style="font-family: courier new,courier,monospace;">&amp;#160;&amp;#160;&amp;#160; | CommBase&amp;#160; | CommBaseSettings |&amp;lt;---------| CommBaseSettings |&amp;#160;&amp;#160; JHTerm&amp;#160; |</span><br style="font-family: courier new,courier,monospace;" /><span style="font-family: courier new,courier,monospace;">&amp;#160;&amp;#160;&amp;#160; |&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; +------------------+&amp;#160; |&amp;#160;&amp;#160;&amp;#160;&amp;#160; | +------------------+&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; |</span><br style="font-family: courier new,courier,monospace;" /><span style="font-family: courier new,courier,monospace;">&amp;#160;&amp;#160;&amp;#160; +---------------------------------+&amp;#160;&amp;#160;&amp;#160;&amp;#160; +--------------------------------+</span><br /><br />&amp;#160;&amp;#160;&amp;#160; 库中的第一个类CommBase并没有假定你使用什么数据格式，它提供了以下功能：打开、关闭通信端口，发送、接收字节数据，与控制输入输出命令互动。<br /><br />&amp;#160;&amp;#160;&amp;#160; 库中的第二个类CommLine继承自CommBase,并做出如下假定：发送、接收的字节，其编码是ASCII；保留的ASCII控制字符标，用于记出数据行的结束（此假设允许传输、接收字符串）。当然，这个模型也可以扩展，比如说编写一个Unicode替代版本的CommLine。<br /><br /><br />使用基类：<br /><br />&amp;#160;&amp;#160;&amp;#160; 附带的两个例程BaseTerm和LineTerm是通用意义上的终端模拟器，允许对任何类型的串行设备（包括modem）进行实验。
]]></description> 
<guid isPermaLink="false">1957147@http://weiht.bokee.com/</guid> 
<dc:subject>.NET基础</dc:subject> 
<dc:date>2005-06-17T17:01:50Z</dc:date> 
</item> 

</channel> 
</rss> 