<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>纵坐标的幻 - Hifar's Blog - 文摘和收藏</title>
    <link>http://www.hifar.com/blog/</link>
    <description>THINKING, CREATING</description>
    <language>en-us</language>
    <copyright>Hifar</copyright>
    <lastBuildDate>Fri, 12 Feb 2010 13:52:42 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 0.0.0.0</generator>
    <managingEditor>hifar@gynow.com</managingEditor>
    <webMaster>hifar@gynow.com</webMaster>
    <item>
      <trackback:ping>http://www.hifar.com/blog/Trackback.aspx?guid=bca34dd6-6b4d-481e-baa8-d0af017a79ad</trackback:ping>
      <pingback:server>http://www.hifar.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.hifar.com/blog/PermaLink,guid,bca34dd6-6b4d-481e-baa8-d0af017a79ad.aspx</pingback:target>
      <dc:creator>Jimmy Gao</dc:creator>
      <title>短距通信(NFC) 和其它近距无线通信技术的比较</title>
      <guid isPermaLink="false">http://www.hifar.com/blog/PermaLink,guid,bca34dd6-6b4d-481e-baa8-d0af017a79ad.aspx</guid>
      <link>http://www.hifar.com/blog/2010/02/12/%e7%9f%ad%e8%b7%9d%e9%80%9a%e4%bf%a1NFC%e5%92%8c%e5%85%b6%e5%ae%83%e8%bf%91%e8%b7%9d%e6%97%a0%e7%ba%bf%e9%80%9a%e4%bf%a1%e6%8a%80%e6%9c%af%e7%9a%84%e6%af%94%e8%be%83.aspx</link>
      <pubDate>Fri, 12 Feb 2010 13:52:42 GMT</pubDate>
      <description>&lt;div class=Content_body&gt;&lt;strong&gt;近距离无线通信技术&lt;/strong&gt;&amp;nbsp; 
&lt;br&gt;
&lt;br&gt;
目前使用较广泛的近距无线通信技术是蓝牙(Bluetooth)，无线局域网802.11(Wi-Fi)和红外数据传输(IrDA)。同时还有一些具有发展潜力的近距无线技术标准，它们分别是：ZigBee、超宽频(Ultra&amp;nbsp;WideBand)、短距通信(NFC)、WiMedia、GPS、DECT、无线1394和专用无线系统等。它们都有其立足的特点，或基于传输速度、距离、耗电量的特殊要求；或着眼于功能的扩充性；或符合某些单一应用的特别要求；或建立竞争技术的差异化等。但是没有一种技术可以完美到足以满足所有的需求。&amp;nbsp; 
&lt;br&gt;
&amp;nbsp; 
&lt;br&gt;
&lt;strong&gt;蓝牙技术&lt;/strong&gt;&amp;nbsp; 
&lt;br&gt;
bluetooth)技术是近几年出现的，广受业界关注的近距无线连接技术。它是一种无线数据与语音通信的开放性全球规范，它以低成本的短距离无线连接为基础，可为固定的或移动的终端设备提供廉价的接入服务。&amp;nbsp; 
&lt;br&gt;
&amp;nbsp; 
&lt;br&gt;
蓝牙技术是一种无线数据与语音通信的开放性全球规范，其实质内容是为固定设备或移动设备之间的通信环境建立通用的近距无线接口，将通信技术与计算机技术进一步结合起来，使各种设备在没有电线或电缆相互连接的情况下，能在近距离范围内实现相互通信或操作。其传输频段为全球公众通用的2.4GHz&amp;nbsp;ISM频段，提供1Mbps的传输速率和10m的传输距离。&amp;nbsp; 
&lt;br&gt;
&amp;nbsp; 
&lt;br&gt;
蓝牙技术诞生于1994年，Ericsson当时决定开发一种低功耗、低成本的无线接口，以建立手机及其附件间的通信。该技术还陆续获得PC行业业界巨头的支持。1998年，蓝牙技术协议由Ericsson、IBM、Intel、NOKIA、Toshiba等5家公司达成一致。&amp;nbsp; 
&lt;br&gt;
&amp;nbsp; 
&lt;br&gt;
蓝牙协议的标准版本为802.15.1，由蓝牙小组（SIG）负责开发。802.15.1的最初标准基于蓝牙1.1实现，后者已构建到现行很多蓝牙设备中。新版802.15.1a基本等同于蓝牙1.2标准，具备一定的QoS特性，并完整保持后向兼容性。&amp;nbsp; 
&lt;br&gt;
&amp;nbsp; 
&lt;br&gt;
但蓝牙技术遭遇了最大的障碍是过于昂贵。突出表现在芯片大小和价格难以下调、抗干扰能力不强、传输距离太短、信息安全问题等等。这就使得许多用户不愿意花大价钱来购买这种无线设备。因此，业内专家认为，蓝牙的市场前景取决于蓝牙价格和基于蓝牙的应用是否能达到一定的规模。&amp;nbsp; 
&lt;br&gt;
&amp;nbsp; 
&lt;br&gt;
&lt;strong&gt;Wi-Fi技术&lt;/strong&gt;&amp;nbsp; 
&lt;br&gt;
Wi-Fi(Wireless&amp;nbsp;Fidelity,无线高保真)也是一种无线通信协议，正式名称是IEEE802.11b，与蓝牙一样，同属于短距离无线通信技术。Wi-Fi速率最高可达11Mb/s。虽然在数据安全性方面比蓝牙技术要差一些，但在电波的覆盖范围方面却略胜一筹，可达100&amp;nbsp;m左右。&amp;nbsp; 
&lt;br&gt;
&amp;nbsp; 
&lt;br&gt;
Wi-Fi是以太网的一种无线扩展，理论上只要用户位于一个接入点四周的一定区域内，就能以最高约11Mb/s的速度接入Web。但实际上，如果有多个用户同时通过一个点接入，带宽被多个用户分享，Wi-Fi的连接速度一般将只有几百kb/s的信号不受墙壁阻隔，但在建筑物内的有效传输距离小于户外。&amp;nbsp; 
&lt;br&gt;
&amp;nbsp; 
&lt;br&gt;
WLAN未来最具潜力的应用将主要在SOHO、家庭无线网络以及不便安装电缆的建筑物或场所。目前这一技术的用户主要来自机场、酒店、商场等公共热点场所。Wi-Fi技术可将Wi-Fi与基于XML或Java的Web服务融合起来，可以大幅度减少企业的成本。例如企业选择在每一层楼或每一个部门配备802.11b的接入点，而不是采用电缆线把整幢建筑物连接起来。这样一来，可以节省大量铺设电缆所需花费的资金。&amp;nbsp; 
&lt;br&gt;
&amp;nbsp; 
&lt;br&gt;
最初的IEEE802.11规范是在1997年提出的，称为802.11b，主要目的是提供WLAN接入，也是目前WLAN的主要技术标准，它的工作频率也是2.4GHz，与无绳电话、蓝牙等许多不需频率使用许可证的无线设备共享同一频段。随着Wi-Fi协议新版本如802.11a和802.11g的先后推出，Wi-Fi的应用将越来越广泛。速度更快的802.11g使用与802.11b相同的正交频分多路复用调制技术。它工作在2.4GHz频段，速率达54Mb/s。根据最近国际消费电子产品的发展趋势判断，802.11g将有可能被大多数无线网络产品制造商选择作为产品标准。&amp;nbsp; 
&lt;br&gt;
&amp;nbsp; 
&lt;br&gt;
微软推出的桌面操作系统WindowsXP和嵌入式操作系统WindowsCE，都包含了对Wi-Fi的支持。其中，WindowsCE同时还包含对Wi-Fi的竞争对手蓝牙等其它无线通信技术的支持。由于投资802.11b的费用降低，许多厂商介入这一领域。Intel推出了集成WLAN技术的笔记本电脑芯片组，不用外接无线网卡，就可实现无线上网。&amp;nbsp; 
&lt;br&gt;
&amp;nbsp; 
&lt;br&gt;
&lt;strong&gt; IrDA技术&lt;/strong&gt;&amp;nbsp; 
&lt;br&gt;
红外线数据协会IrDA（Infrared&amp;nbsp;Data&amp;nbsp;Association）成立于1993年。起初，采用IrDA标准的无线设备仅能在1m范围内以115.2&amp;nbsp;kb/s速率传输数据，很快发展到4Mb/s以及16Mb/s的速率。&amp;nbsp; 
&lt;br&gt;
&amp;nbsp; 
&lt;br&gt;
IrDA是一种利用红外线进行点对点通信的技术，是第一个实现无线个人局域网（PAN）的技术。目前它的软硬件技术都很成熟，在小型移动设备，如PDA、手机上广泛使用。事实上，当今每一个出厂的PDA及许多手机、笔记本电脑、打印机等产品都支持IrDA。&amp;nbsp; 
&lt;br&gt;
&amp;nbsp; 
&lt;br&gt;
IrDA的主要优点是无需申请频率的使用权，因而红外通信成本低廉。并且还具有移动通信所需的体积小、功耗低、连接方便、简单易用的特点。此外，红外线发射角度较小，传输上安全性高。&amp;nbsp; 
&lt;br&gt;
&amp;nbsp; 
&lt;br&gt;
IrDA的不足在于它是一种视距传输，两个相互通信的设备之间必须对准，中间不能被其它物体阻隔，因而该技术只能用于2台（非多台）设备之间的连接。而蓝牙就没有此限制，且不受墙壁的阻隔。IrDA目前的研究方向是如何解决视距传输问题及提高数据传输率。&amp;nbsp; 
&lt;br&gt;
&amp;nbsp; 
&lt;br&gt;
&lt;strong&gt; NFC技术&lt;/strong&gt;&amp;nbsp; 
&lt;br&gt;
NFC（Near&amp;nbsp;Field&amp;nbsp;Communication，近距离无线传输）是由Philips、NOKIA和Sony主推的一种类似于RFID(非接触式射频识别)的短距离无线通信技术标准。和RFID不同，NFC采用了双向的识别和连接。在20cm距离内工作于13.56MHz频率范围。&amp;nbsp; 
&lt;br&gt;
&amp;nbsp; 
&lt;br&gt;
NFC最初仅仅是遥控识别和网络技术的合并，但现在已发展成无线连接技术。它能快速自动地建立无线网络，为蜂窝设备、蓝牙设备、Wi-Fi设备提供一个“虚拟连接”，使电子设备可以在短距离范围进行通讯。NFC的短距离交互大大简化了整个认证识别过程，使电子设备间互相访问更直接、更安全和更清楚，不用再听到各种电子杂音。&amp;nbsp; 
&lt;br&gt;
&amp;nbsp; 
&lt;br&gt;
NFC通过在单一设备上组合所有的身份识别应用和服务，帮助解决记忆多个密码的麻烦，同时也保证了数据的安全保护。有了NFC，多个设备如数码相机、PDA、机顶盒、电脑、手机等之间的无线互连，彼此交换数据或服务都将有可能实现。&amp;nbsp; 
&lt;br&gt;
&amp;nbsp; 
&lt;br&gt;
此外NFC还可以将其它类型无线通讯(如Wi-Fi和蓝牙)“加速”，实现更快和更远距离的数据传输。每个电子设备都有自己的专用应用菜单，而NFC可以创建快速安全的连接，而无需在众多接口的菜单中进行选择。与知名的蓝牙等短距离无线通讯标准不同的是，NFC的作用距离进一步缩短且不像蓝牙那样需要有对应的加密设备。&amp;nbsp; 
&lt;br&gt;
&amp;nbsp; 
&lt;br&gt;
同样，构建Wi-Fi家族无线网络需要多台具有无线网卡的电脑、打印机和其它设备。除此之外，还得有一定技术的专业人员才能胜任这一工作。而NFC被置入接入点之后，只要将其中两个靠近就可以实现交流，比配置Wi-Fi连结容易得多。&amp;nbsp; 
&lt;br&gt;
&amp;nbsp; 
&lt;br&gt;
NFC有三种应用类型：&amp;nbsp; 
&lt;br&gt;
&amp;nbsp; 
&lt;br&gt;
◆&amp;nbsp;设备连接。除了无线局域网，NFC也可以简化蓝牙连接。比如，手提电脑用户如果想在机场上网，他只需要走近一个Wi-Fi热点即可实现。&amp;nbsp; 
&lt;br&gt;
&amp;nbsp; 
&lt;br&gt;
◆&amp;nbsp;实时预定。比如，海报或展览信息背后贴有特定芯片，利用含NFC协议的手机或PDA，便能取得详细信息，或是立即联机使用信用卡进行票卷购买。而且，这些芯片无需独立的能源。&amp;nbsp; 
&lt;br&gt;
&amp;nbsp; 
&lt;br&gt;
◆&amp;nbsp;移动商务。飞利浦Mifare技术支持了世界上几个大型交通系统及在银行业为客户提供Visa卡等各种服务。索尼的FeliCa非接触智能卡技术产品在中国香港及深圳、新加坡、日本的市场占有率非常高，主要应用在交通及金融机构。&amp;nbsp; 
&lt;br&gt;
&amp;nbsp; 
&lt;br&gt;
总而言之，这项新技术正在改写无线网络连接的游戏规则，但NFC的目标并非是完全取代蓝牙、Wi-Fi等其他无线技术，而是在不同的场合、不同的领域起到相互补充的作用。所以如今后来居上的NFC发展态势相当迅速！&amp;nbsp; 
&lt;br&gt;
&amp;nbsp; 
&lt;br&gt;
&lt;strong&gt;ZigBee技术&lt;/strong&gt;&amp;nbsp; 
&lt;br&gt;
ZigBee主要应用在短距离范围之内并且数据传输速率不高的各种电子设备之间。ZigBee名字来源于蜂群使用的赖以生存和发展的通信方式，蜜蜂通过跳ZigZag形状的舞蹈来分享新发现的食物源的位置、距离和方向等信息。&amp;nbsp; 
&lt;br&gt;
&amp;nbsp; 
&lt;br&gt;
ZigBee联盟成立于2001年8月。2002年下半年，Invensys、Mitsubishi、Motorola以及Philips半导体公司四大巨头共同宣布加盟ZigBee联盟，以研发名为ZigBee的下一代无线通信标准。到目前为止，该联盟大约已有27家成员企业。所有这些公司都参加了负责开发ZigBee物理和媒体控制层技术标准的IEEE&amp;nbsp;802.15.4工作组。&amp;nbsp; 
&lt;br&gt;
&amp;nbsp; 
&lt;br&gt;
ZigBee联盟负责制定网络层以上协议。目前，标准制订工作已完成。ZigBee协议比蓝牙、高速率个人区域网或802.11x无线局域网更简单实用。&amp;nbsp; 
&lt;br&gt;
&amp;nbsp; 
&lt;br&gt;
ZigBee可以说是蓝牙的同族兄弟，它使用2.4&amp;nbsp;GHz波段，采用跳频技术。与蓝牙相比，ZigBee更简单、速率更慢、功率及费用也更低。它的基本速率是250kb/s，当降低到28kb/s时，传输范围可扩大到134m，并获得更高的可靠性。另外，它可与254个节点联网。可以比蓝牙更好地支持游戏、消费电子、仪器和家庭自动化应用。人们期望能在工业监控、传感器网络、家庭监控、安全系统和玩具等领域拓展ZigBee的应用。&amp;nbsp; 
&lt;br&gt;
&amp;nbsp; 
&lt;br&gt;
ZigBee技术特点主要包括以下几个部分：&amp;nbsp; 
&lt;br&gt;
&amp;nbsp; 
&lt;br&gt;
◆&amp;nbsp;数据传输速率低。只有10kb/s～250kb/s，专注于低传输应用。&amp;nbsp; 
&lt;br&gt;
&amp;nbsp; 
&lt;br&gt;
◆&amp;nbsp;功耗低。在低耗电待机模式下，两节普通5号干电池可使用6个月以上。这也是ZigBee的支持者所一直引以为豪的独特优势。&amp;nbsp; 
&lt;br&gt;
&amp;nbsp; 
&lt;br&gt;
◆&amp;nbsp;成本低。因为ZigBee数据传输速率低，协议简单，所以大大降低了成本;&amp;nbsp;积极投入ZigBee开发的Motorola以及Philips，均已在2003年正式推出芯片，飞利浦预估，应用于主机端的芯片成本和其它终端产品的成本比蓝牙更具价格竞争力。&amp;nbsp; 
&lt;br&gt;
&amp;nbsp; 
&lt;br&gt;
◆&amp;nbsp;网络容量大。每个ZigBee网络最多可支持255个设备，也就是说每个ZigBee设备可以与另外254台设备相连接。&amp;nbsp; 
&lt;br&gt;
&amp;nbsp; 
&lt;br&gt;
◆&amp;nbsp;有效范围小。有效覆盖范围10～75m之间，具体依据实际发射功率的大小和各种不同的应用模式而定，基本上能够覆盖普通的家庭或办公室环境。&amp;nbsp; 
&lt;br&gt;
&amp;nbsp; 
&lt;br&gt;
◆&amp;nbsp;工作频段灵活。使用的频段分别为2.4GHz、868MHz（欧洲）及915MHz（美国），均为免执照频段。&amp;nbsp; 
&lt;br&gt;
&amp;nbsp; 
&lt;br&gt;
根据ZigBee联盟目前的设想，ZigBee的目标市场主要有PC外设（鼠标、键盘、游戏操控杆）、消费类电子设备（TV、VCR、CD、VCD、DVD等设备上的遥控装置）、家庭内智能控制（照明、煤气计量控制及报警等）、玩具（电子宠物）、医护（监视器和传感器）、工控（监视器、传感器和自动控制设备）等非常广阔的领域。&amp;nbsp; 
&lt;br&gt;
&lt;strong&gt; &amp;nbsp; 
&lt;br&gt;
UWB技术&amp;nbsp; 
&lt;br&gt;
&lt;/strong&gt; 超宽带技术UWB（Ultra&amp;nbsp;Wideband）是一种无线载波通信技术，它不采用正弦载波，而是利用纳秒级的非正弦波窄脉冲传输数据，因此其所占的频谱范围很宽。&amp;nbsp; 
&lt;br&gt;
&amp;nbsp; 
&lt;br&gt;
UWB可在非常宽的带宽上传输信号，美国FCC对UWB的规定为：在3.1～10.6GHz频段中占用500MHz以上的带宽。由于UWB可以利用低功耗、低复杂度发射/接收机实现高速数据传输，在近年来得到了迅速发展。它在非常宽的频谱范围内采用低功率脉冲传送数据而不会对常规窄带无线通信系统造成大的干扰，并可充分利用频谱资源。基于UWB技术而构建的高速率数据收发机有着广泛的用途。&amp;nbsp; 
&lt;br&gt;
&amp;nbsp; 
&lt;br&gt;
UWB技术具有系统复杂度低，发射信号功率谱密度低，对信道衰落不敏感，低截获能力，定位精度高等优点，尤其适用于室内等密集多径场所的高速无线接入，非常适于建立一个高效的无线局域网或无线个域网(WPAN)。&amp;nbsp; 
&lt;br&gt;
&amp;nbsp; 
&lt;br&gt;
UWB主要应用在小范围、高分辨率、能够穿透墙壁、地面和身体的雷达和图像系统中。除此之外，这种新技术适用于对速率要求非常高（大于100&amp;nbsp;Mb/s）的LANs或PANs。&amp;nbsp; 
&lt;br&gt;
&amp;nbsp; 
&lt;br&gt;
UWB最具特色的应用将是视频消费娱乐方面的无线个人局域网（PANs）。现有的无线通信方式，802.11b和蓝牙的速率太慢，不适合传输视频数据；54&amp;nbsp;Mb/s速率的802.11a标准可以处理视频数据，但费用昂贵。而UWB有可能在10&amp;nbsp;m范围内，支持高达110&amp;nbsp;Mb/s的数据传输率，不需要压缩数据，可以快速、简单、经济地完成视频数据处理。&amp;nbsp; 
&lt;br&gt;
&amp;nbsp; 
&lt;br&gt;
具有一定相容性和高速、低成本、低功耗的优点使得UWB较适合家庭无线消费市场的需求：UWB尤其适合近距离内高速传送大量多媒体数据以及可以穿透障碍物的突出优点，让很多商业公司将其看作是一种很有前途的无线通信技术，应用于诸如将视频信号从机顶盒无线传送到数字电视等家庭场合。当然，UWB未来的前途还要取决于各种无线方案的技术发展、成本、用户使用习惯和市场成熟度等多方面的因素。&amp;nbsp;&lt;br&gt;
&lt;/div&gt;
&lt;div class=Content_body&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div class=Content_body&gt;&lt;strong&gt;以下是对比表格:&lt;br&gt;
&lt;/strong&gt;&amp;nbsp;
&lt;/div&gt;
&lt;table style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; MARGIN: auto auto auto 14.4pt; WIDTH: 504.4pt; BORDER-COLLAPSE: collapse; BORDER-TOP: medium none; BORDER-RIGHT: medium none; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" class=MsoTableGrid border=1 cellspacing=0 cellpadding=0 width=673&gt;
&lt;tbody&gt;
&lt;tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes"&gt;
&lt;td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: windowtext 1pt solid; PADDING-BOTTOM: 0cm; PADDING-LEFT: 5.4pt; WIDTH: 71pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #e6e6e6; BORDER-TOP: windowtext 1pt solid; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt" valign=top width=95&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal&gt;
&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;
&lt;o:p&gt;
&lt;font color=#000000&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; PADDING-LEFT: 5.4pt; WIDTH: 100pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #e6e6e6; BORDER-TOP: windowtext 1pt solid; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" valign=top width=133&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal&gt;
&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;&lt;font color=#000000&gt;Zigbee&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; PADDING-LEFT: 5.4pt; WIDTH: 71pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #e6e6e6; BORDER-TOP: windowtext 1pt solid; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" valign=top width=95&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal&gt;
&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;&lt;font color=#000000&gt;Bluetooth&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; PADDING-LEFT: 5.4pt; WIDTH: 82pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #e6e6e6; BORDER-TOP: windowtext 1pt solid; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" valign=top width=109&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal&gt;
&lt;font color=#000000&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;UWB &lt;/span&gt;&lt;/b&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt; mso-ascii-font-family: Arial; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Arial"&gt;超宽带&lt;/span&gt;&lt;/b&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; PADDING-LEFT: 5.4pt; WIDTH: 71.05pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #e6e6e6; BORDER-TOP: windowtext 1pt solid; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" valign=top width=95&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal&gt;
&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;&lt;font color=#000000&gt;Wi-Fi&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; PADDING-LEFT: 5.4pt; WIDTH: 109.35pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #e6e6e6; BORDER-TOP: windowtext 1pt solid; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" valign=top width=146&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal&gt;
&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;&lt;font color=#000000&gt;NFC&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow: 1"&gt;
&lt;td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: windowtext 1pt solid; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 71pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign=top width=95&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal&gt;
&lt;font color=#000000&gt;&lt;span style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt; mso-ascii-font-family: Arial; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Arial"&gt;价格&lt;/span&gt;&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;(&lt;/span&gt;&lt;span style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt; mso-ascii-font-family: Arial; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Arial"&gt;芯片组&lt;/span&gt;&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 100pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign=top width=133&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal&gt;
&lt;font color=#000000&gt;&lt;span style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt; mso-ascii-font-family: Arial; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Arial"&gt;约&lt;/span&gt;&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;4&lt;/span&gt;&lt;span style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt; mso-ascii-font-family: Arial; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Arial"&gt;美元&lt;/span&gt;&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 71pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign=top width=95&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal&gt;
&lt;font color=#000000&gt;&lt;span style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt; mso-ascii-font-family: Arial; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Arial"&gt;约&lt;/span&gt;&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;5&lt;/span&gt;&lt;span style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt; mso-ascii-font-family: Arial; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Arial"&gt;美元&lt;/span&gt;&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 82pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign=top width=109&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal&gt;
&lt;font color=#000000&gt;&lt;span style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt; mso-ascii-font-family: Arial; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Arial"&gt;大于&lt;/span&gt;&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;20&lt;/span&gt;&lt;span style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt; mso-ascii-font-family: Arial; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Arial"&gt;美元&lt;/span&gt;&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 71.05pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign=top width=95&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal&gt;
&lt;font color=#000000&gt;&lt;span style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt; mso-ascii-font-family: Arial; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Arial"&gt;约&lt;/span&gt;&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;25&lt;/span&gt;&lt;span style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt; mso-ascii-font-family: Arial; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Arial"&gt;美元&lt;/span&gt;&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 109.35pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign=top width=146&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal&gt;
&lt;font color=#000000&gt;&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;2.5-4&lt;/span&gt;&lt;span style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt; mso-ascii-font-family: Arial; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Arial"&gt;美元&lt;/span&gt;&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow: 2"&gt;
&lt;td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: windowtext 1pt solid; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 71pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign=top width=95&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal&gt;
&lt;font color=#000000&gt;&lt;span style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt; mso-ascii-font-family: Arial; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Arial"&gt;安全性&lt;/span&gt;&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 100pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign=top width=133&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal&gt;
&lt;font color=#000000&gt;&lt;span style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt; mso-ascii-font-family: Arial; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Arial"&gt;中&lt;/span&gt;&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 71pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign=top width=95&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal&gt;
&lt;font color=#000000&gt;&lt;span style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt; mso-ascii-font-family: Arial; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Arial"&gt;高&lt;/span&gt;&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 82pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign=top width=109&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal&gt;
&lt;font color=#000000&gt;&lt;span style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt; mso-ascii-font-family: Arial; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Arial"&gt;高&lt;/span&gt;&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 71.05pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign=top width=95&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal&gt;
&lt;font color=#000000&gt;&lt;span style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt; mso-ascii-font-family: Arial; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Arial"&gt;低&lt;/span&gt;&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 109.35pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign=top width=146&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal&gt;
&lt;font color=#000000&gt;&lt;span style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt; mso-ascii-font-family: Arial; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Arial"&gt;极高&lt;/span&gt;&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow: 3"&gt;
&lt;td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: windowtext 1pt solid; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 71pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign=top width=95&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal&gt;
&lt;font color=#000000&gt;&lt;span style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt; mso-ascii-font-family: Arial; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Arial"&gt;传输速度&lt;/span&gt;&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 100pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign=top width=133&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal&gt;
&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;&lt;font color=#000000&gt;10Kbps
– 250Kbps&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 71pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign=top width=95&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal&gt;
&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;&lt;font color=#000000&gt;1Mbps&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 82pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign=top width=109&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal&gt;
&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;&lt;font color=#000000&gt;53.3
– 480Mbps&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 71.05pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign=top width=95&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal&gt;
&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;&lt;font color=#000000&gt;54Mbps&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 109.35pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign=top width=146&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal&gt;
&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;&lt;font color=#000000&gt;424Kbps&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow: 4"&gt;
&lt;td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: windowtext 1pt solid; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 71pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign=top width=95&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal&gt;
&lt;font color=#000000&gt;&lt;span style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt; mso-ascii-font-family: Arial; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Arial"&gt;通讯距离&lt;/span&gt;&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 100pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign=top width=133&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal&gt;
&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;&lt;font color=#000000&gt;10m
- 75m&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 71pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign=top width=95&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal&gt;
&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;&lt;font color=#000000&gt;0-10m&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 82pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign=top width=109&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal&gt;
&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;&lt;font color=#000000&gt;0-10m&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 71.05pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign=top width=95&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal&gt;
&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;&lt;font color=#000000&gt;0-100m&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 109.35pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign=top width=146&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal&gt;
&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;&lt;font color=#000000&gt;0-20cm&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow: 5"&gt;
&lt;td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: windowtext 1pt solid; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 71pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign=top width=95&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal&gt;
&lt;font color=#000000&gt;&lt;span style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt; mso-ascii-font-family: Arial; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Arial"&gt;频段&lt;/span&gt;&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 100pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign=top width=133&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal&gt;
&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;&lt;font color=#000000&gt;&lt;?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /&gt;2.5GHz
868 MHz (&lt;st1:place w:st="on"&gt;Europe&lt;/st1:place&gt;
)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal&gt;
&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;&lt;font color=#000000&gt;915MHz
(US)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 71pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign=top width=95&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal&gt;
&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;&lt;font color=#000000&gt;2.4GHz&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 82pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign=top width=109&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal&gt;
&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;&lt;font color=#000000&gt;3.1GHz
– 10.GHz&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 71.05pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign=top width=95&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal&gt;
&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;&lt;font color=#000000&gt;2.4GHz&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 109.35pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign=top width=146&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal&gt;
&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;&lt;font color=#000000&gt;13.56MHz&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow: 6; mso-yfti-lastrow: yes"&gt;
&lt;td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: windowtext 1pt solid; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 71pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign=top width=95&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal&gt;
&lt;font color=#000000&gt;&lt;span style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt; mso-ascii-font-family: Arial; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Arial"&gt;国际标准&lt;/span&gt;&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 100pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign=top width=133&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal&gt;
&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;&lt;font color=#000000&gt;IEEE
802.15.4&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 71pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign=top width=95&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal&gt;
&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;&lt;font color=#000000&gt;IEEE
802.15.1x&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 82pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign=top width=109&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal&gt;
&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;&lt;font color=#000000&gt;TBD&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 71.05pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign=top width=95&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal&gt;
&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;&lt;font color=#000000&gt;IEEE
802.11b&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal&gt;
&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;&lt;font color=#000000&gt;IEEE
802.11g&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 109.35pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign=top width=146&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal&gt;
&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;&lt;font color=#000000&gt;ISO/IEC
18092 (ECMA 340)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal&gt;
&lt;span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" lang=EN-US&gt;&lt;font color=#000000&gt;ISO/IEC
21481 (ECMA 352)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;img width="0" height="0" src="http://www.hifar.com/blog/aggbug.ashx?id=bca34dd6-6b4d-481e-baa8-d0af017a79ad" /&gt;</description>
      <category>文摘和收藏</category>
      <category>硬件技术</category>
    </item>
    <item>
      <trackback:ping>http://www.hifar.com/blog/Trackback.aspx?guid=1226a29c-6127-4a82-8fd7-f92c5e1db3e8</trackback:ping>
      <pingback:server>http://www.hifar.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.hifar.com/blog/PermaLink,guid,1226a29c-6127-4a82-8fd7-f92c5e1db3e8.aspx</pingback:target>
      <dc:creator>Jimmy Gao</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
经过近十年的技术发展，非接触卡已彻底取代磁卡，成为智能建筑卡系统卡片的主流。过去，卡系统中常用的是125KHZ的低频卡， 这些低频卡的ID号存储介质是EEPROM，具有电擦写功能，可反复多次写入，因此ID号极易应该在高安全性场所禁止使用，目前逐步退出市场。<br /></p>
        <p>
标准非接触IC卡工作频率为13.56MHZ高频，比通常125KHZ的低频卡快100倍，传输速率快，可读写，安全性高。代表 的产品有Mifare卡，最大距离为，门禁读卡器由于外观尺寸限制，通常只有2-3cm的读写距离。<br /><br />
ISO/IEC 15693标准非接触IC卡，工作频率也是13.56MHZ高频，集成了以前非接触卡的技术，并在保证安全性、可读写、多分区的 前提下，在读卡距离有了突破。最大距离为100cm，价格与ISO/IEC
14443的卡片相当。ISO/IEC 18000标准非接触IC卡，是近几年的 新产品，工作在超高频UHF的部分无源非接触IC卡，读卡最大距离达10m.
</p>
        <p>
 
</p>
        <p>
          <table border="0" cellspacing="1" cellpadding="0" width="516" bgcolor="#999999">
            <tbody>
              <tr>
                <td bgcolor="#60dad7" height="30" width="121" colspan="2">
                  <p align="left">
                    <strong>
                      <font color="#000000">频率 </font>
                    </strong>
                  </p>
                </td>
                <td bgcolor="#60dad7" width="95">
                  <p align="center">
                    <strong>
                      <font color="#000000">读写状态 </font>
                    </strong>
                  </p>
                </td>
                <td bgcolor="#60dad7" width="108">
                  <p align="center">
                    <strong>
                      <font color="#000000">最大读写距离 </font>
                    </strong>
                  </p>
                </td>
                <td bgcolor="#60dad7" width="192" colspan="2">
                  <p align="center">
                    <strong>
                      <font color="#000000">国际标准</font>
                    </strong>
                  </p>
                </td>
              </tr>
              <tr>
                <td bgcolor="#ffffff" rowspan="2" width="60">
                  <p align="center">
                    <strong>低频</strong>
                    <strong>
                    </strong>
                  </p>
                </td>
                <td bgcolor="#ffffff" width="61">
                  <p align="center">
125K
</p>
                </td>
                <td bgcolor="#ffffff" width="95">
                  <p align="center">
RO
</p>
                </td>
                <td bgcolor="#ffffff" width="108">
                  <p align="center">
60cm(2m)
</p>
                </td>
                <td bgcolor="#ffffff" valign="top" width="192" colspan="2">
                  <p align="center">
-----
</p>
                </td>
              </tr>
              <tr>
                <td bgcolor="#ffffff" width="61">
                  <p align="center">
134K
</p>
                </td>
                <td bgcolor="#ffffff" width="95">
                  <p align="center">
RO R / W
</p>
                </td>
                <td bgcolor="#ffffff" width="108">
                  <p align="center">
60cm(2m)
</p>
                </td>
                <td bgcolor="#ffffff" valign="top" width="192" colspan="2">
                  <p align="center">
-----
</p>
                </td>
              </tr>
              <tr>
                <td bgcolor="#ffffff" rowspan="3" width="60">
                  <p align="center">
                    <strong>高频</strong>
                    <strong>
                    </strong>
                  </p>
                </td>
                <td bgcolor="#ffffff" rowspan="3" width="61">
                  <p align="center">
13.56M 
</p>
                </td>
                <td bgcolor="#ffffff" rowspan="3" width="95">
                  <p align="center">
R / W
</p>
                </td>
                <td bgcolor="#ffffff" rowspan="2" width="108">
                  <p align="center">
10cm 
</p>
                </td>
                <td bgcolor="#ffffff" rowspan="2" width="96">
                  <p align="center">
ISO/IEC 14443
</p>
                </td>
                <td bgcolor="#ffffff" width="96">
                  <p align="center">
TYPE A
</p>
                </td>
              </tr>
              <tr>
                <td bgcolor="#ffffff" width="96">
                  <p align="center">
TYPE B
</p>
                </td>
              </tr>
              <tr>
                <td bgcolor="#ffffff" width="108">
                  <p align="center">
100cm 
</p>
                </td>
                <td bgcolor="#ffffff" width="192" colspan="2">
                  <p align="center">
ISO/IEC 15693
</p>
                </td>
              </tr>
              <tr>
                <td bgcolor="#ffffff" rowspan="2" width="60">
                  <p align="center">
                    <strong>超高频</strong>
                    <strong>
                    </strong>
                  </p>
                </td>
                <td bgcolor="#ffffff" width="61">
                  <p align="center">
433M 
</p>
                </td>
                <td bgcolor="#ffffff" rowspan="3" width="395" colspan="4">
                  <p align="center">
ISO/IEC 18000，EPC(制定中)<strong></strong></p>
                </td>
              </tr>
              <tr>
                <td bgcolor="#ffffff" width="61">
                  <p align="center">
915M 
</p>
                </td>
              </tr>
              <tr>
                <td bgcolor="#ffffff" width="60">
                  <p align="center">
                    <strong>微波</strong>
                  </p>
                </td>
                <td bgcolor="#ffffff" width="61">
                  <p align="center">
2.5G 
</p>
                </td>
              </tr>
            </tbody>
          </table>
        </p>
        <p>
 
</p>
        <img width="0" height="0" src="http://www.hifar.com/blog/aggbug.ashx?id=1226a29c-6127-4a82-8fd7-f92c5e1db3e8" />
      </body>
      <title>非接触IC卡种类及相关标准 (转载)</title>
      <guid isPermaLink="false">http://www.hifar.com/blog/PermaLink,guid,1226a29c-6127-4a82-8fd7-f92c5e1db3e8.aspx</guid>
      <link>http://www.hifar.com/blog/2010/02/12/%e9%9d%9e%e6%8e%a5%e8%a7%a6IC%e5%8d%a1%e7%a7%8d%e7%b1%bb%e5%8f%8a%e7%9b%b8%e5%85%b3%e6%a0%87%e5%87%86%e8%bd%ac%e8%bd%bd.aspx</link>
      <pubDate>Fri, 12 Feb 2010 13:20:16 GMT</pubDate>
      <description>&lt;p&gt;
经过近十年的技术发展，非接触卡已彻底取代磁卡，成为智能建筑卡系统卡片的主流。过去，卡系统中常用的是125KHZ的低频卡， 这些低频卡的ID号存储介质是EEPROM，具有电擦写功能，可反复多次写入，因此ID号极易应该在高安全性场所禁止使用，目前逐步退出市场。&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
标准非接触IC卡工作频率为13.56MHZ高频，比通常125KHZ的低频卡快100倍，传输速率快，可读写，安全性高。代表 的产品有Mifare卡，最大距离为，门禁读卡器由于外观尺寸限制，通常只有2-3cm的读写距离。&lt;br&gt;
&lt;br&gt;
ISO/IEC 15693标准非接触IC卡，工作频率也是13.56MHZ高频，集成了以前非接触卡的技术，并在保证安全性、可读写、多分区的 前提下，在读卡距离有了突破。最大距离为100cm，价格与ISO/IEC
14443的卡片相当。ISO/IEC 18000标准非接触IC卡，是近几年的 新产品，工作在超高频UHF的部分无源非接触IC卡，读卡最大距离达10m.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;table border=0 cellspacing=1 cellpadding=0 width=516 bgcolor=#999999&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td bgcolor=#60dad7 height=30 width=121 colspan=2&gt;
&lt;p align=left&gt;
&lt;strong&gt;&lt;font color=#000000&gt;频率 &lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td bgcolor=#60dad7 width=95&gt;
&lt;p align=center&gt;
&lt;strong&gt;&lt;font color=#000000&gt;读写状态 &lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td bgcolor=#60dad7 width=108&gt;
&lt;p align=center&gt;
&lt;strong&gt;&lt;font color=#000000&gt;最大读写距离 &lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td bgcolor=#60dad7 width=192 colspan=2&gt;
&lt;p align=center&gt;
&lt;strong&gt;&lt;font color=#000000&gt;国际标准&lt;/font&gt; &lt;/strong&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td bgcolor=#ffffff rowspan=2 width=60&gt;
&lt;p align=center&gt;
&lt;strong&gt;低频&lt;/strong&gt;&lt;strong&gt; &lt;/strong&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td bgcolor=#ffffff width=61&gt;
&lt;p align=center&gt;
125K
&lt;/p&gt;
&lt;/td&gt;
&lt;td bgcolor=#ffffff width=95&gt;
&lt;p align=center&gt;
RO
&lt;/p&gt;
&lt;/td&gt;
&lt;td bgcolor=#ffffff width=108&gt;
&lt;p align=center&gt;
60cm(2m)
&lt;/p&gt;
&lt;/td&gt;
&lt;td bgcolor=#ffffff valign=top width=192 colspan=2&gt;
&lt;p align=center&gt;
-----
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td bgcolor=#ffffff width=61&gt;
&lt;p align=center&gt;
134K
&lt;/p&gt;
&lt;/td&gt;
&lt;td bgcolor=#ffffff width=95&gt;
&lt;p align=center&gt;
RO R / W
&lt;/p&gt;
&lt;/td&gt;
&lt;td bgcolor=#ffffff width=108&gt;
&lt;p align=center&gt;
60cm(2m)
&lt;/p&gt;
&lt;/td&gt;
&lt;td bgcolor=#ffffff valign=top width=192 colspan=2&gt;
&lt;p align=center&gt;
-----
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td bgcolor=#ffffff rowspan=3 width=60&gt;
&lt;p align=center&gt;
&lt;strong&gt;高频&lt;/strong&gt;&lt;strong&gt; &lt;/strong&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td bgcolor=#ffffff rowspan=3 width=61&gt;
&lt;p align=center&gt;
13.56M 
&lt;/p&gt;
&lt;/td&gt;
&lt;td bgcolor=#ffffff rowspan=3 width=95&gt;
&lt;p align=center&gt;
R / W
&lt;/p&gt;
&lt;/td&gt;
&lt;td bgcolor=#ffffff rowspan=2 width=108&gt;
&lt;p align=center&gt;
10cm 
&lt;/p&gt;
&lt;/td&gt;
&lt;td bgcolor=#ffffff rowspan=2 width=96&gt;
&lt;p align=center&gt;
ISO/IEC 14443
&lt;/p&gt;
&lt;/td&gt;
&lt;td bgcolor=#ffffff width=96&gt;
&lt;p align=center&gt;
TYPE A
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td bgcolor=#ffffff width=96&gt;
&lt;p align=center&gt;
TYPE B
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td bgcolor=#ffffff width=108&gt;
&lt;p align=center&gt;
100cm 
&lt;/p&gt;
&lt;/td&gt;
&lt;td bgcolor=#ffffff width=192 colspan=2&gt;
&lt;p align=center&gt;
ISO/IEC 15693
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td bgcolor=#ffffff rowspan=2 width=60&gt;
&lt;p align=center&gt;
&lt;strong&gt;超高频&lt;/strong&gt;&lt;strong&gt; &lt;/strong&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td bgcolor=#ffffff width=61&gt;
&lt;p align=center&gt;
433M 
&lt;/p&gt;
&lt;/td&gt;
&lt;td bgcolor=#ffffff rowspan=3 width=395 colspan=4&gt;
&lt;p align=center&gt;
ISO/IEC 18000，EPC(制定中)&lt;strong&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td bgcolor=#ffffff width=61&gt;
&lt;p align=center&gt;
915M 
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td bgcolor=#ffffff width=60&gt;
&lt;p align=center&gt;
&lt;strong&gt;微波&lt;/strong&gt; 
&lt;/p&gt;
&lt;/td&gt;
&lt;td bgcolor=#ffffff width=61&gt;
&lt;p align=center&gt;
2.5G 
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.hifar.com/blog/aggbug.ashx?id=1226a29c-6127-4a82-8fd7-f92c5e1db3e8" /&gt;</description>
      <category>文摘和收藏</category>
      <category>硬件技术</category>
    </item>
    <item>
      <trackback:ping>http://www.hifar.com/blog/Trackback.aspx?guid=a629f827-aac4-48a0-a85c-0c5e4f92eea9</trackback:ping>
      <pingback:server>http://www.hifar.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.hifar.com/blog/PermaLink,guid,a629f827-aac4-48a0-a85c-0c5e4f92eea9.aspx</pingback:target>
      <dc:creator>Jimmy Gao</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <span id="ArticleContent1_ArticleContent1_lblContent">
          </span>
        </p>
        <div>tomcat5.5.x 配置记录。
</div>
        <div> 
</div>
        <div>1.下载：
</div>
        <div>
          <a href="http://www.eu.apache.org/dist/jakarta/tomcat-5/">
            <font color="#000080">http://www.eu.apache.org/dist/jakarta/tomcat-5/</font>
          </a>
        </div>
        <div>
          <a href="http://www.apache.org/dist/jakarta/tomcat-5/v5.5.x/bin/jakarta-tomcat-5.5.x-admin.zip">
            <font color="#000080">http://www.apache.org/dist/jakarta/tomcat-5/v5.5.x/bin/jakarta-tomcat-5.5.x-admin.zip</font>
          </a>
          <br />
          <a href="http://www.apache.org/dist/jakarta/tomcat-5/v5.5.x/bin/jakarta-tomcat-5.5.x-compat.zip">
            <font color="#000080">http://www.apache.org/dist/jakarta/tomcat-5/v5.5.x/bin/jakarta-tomcat-5.5.x-compat.zip</font>
          </a>
          <br />
          <a href="http://www.apache.org/dist/jakarta/tomcat-5/v5.5.x/bin/jakarta-tomcat-5.5.x.zip">
            <font color="#000080">http://www.apache.org/dist/jakarta/tomcat-5/v5.5.x/bin/jakarta-tomcat-5.5.x.zip</font>
          </a>
        </div>
        <div>
          <a href="http://www.apache.org/dist/jakarta/tomcat-5/v5.5.x/bin/jakarta-tomcat-5.5.x-deployer.zip">
            <font color="#000080">http://www.apache.org/dist/jakarta/tomcat-5/v5.5.x/bin/jakarta-tomcat-5.5.x-deployer.zip</font>
          </a>
        </div>
        <div>把<u><font color="#0000ff">jakarta-tomcat-5.5.x.zip</font></u></div>
        <div>和<u><font color="#0000ff">jakarta-tomcat-5.5.x-compat.zip</font></u></div>
        <div>和<u><font color="#800080">jakarta-tomcat-5.5.x-admin.zip</font></u><br />
(Tomcat 默认是没有内置admin模块了
</div>
        <div>Tomcat's administration web application is no longer installed by default. Download
and install the "admin" package to use it. )
</div>
        <div>都解压到同一个目录下面。比如：D:\jakarta-tomcat-5.5.x\
</div>
        <div>(如果使用jdk1.4，才需要<u><font color="#0000ff">compat.zip</font></u>用jdk1.5就可以免了这个。) 
</div>
        <div> 
</div>
        <div>2.修改jakarta-tomcat-5.5.x\conf\tomcat-users.xml.<br />
添加管理员账号lizongbo，密码为lizongbopass.<br />
新xml如下：<br />
&lt;?xml version='1.0' encoding='utf-8'?&gt;<br />
&lt;tomcat-users&gt;<br />
  &lt;role rolename="tomcat"/&gt;<br />
  &lt;role rolename="role1"/&gt;<br />
  &lt;role rolename="manager"/&gt;<br />
  &lt;role rolename="admin"/&gt;<br />
  &lt;user username="tomcat" password="tomcat" roles="tomcat"/&gt;<br />
  &lt;user username="role1" password="tomcat" roles="role1"/&gt;<br />
  &lt;user username="both" password="tomcat" roles="tomcat,role1"/&gt;<br />
  &lt;user username="lizongbo" password="lizongbopass" roles="admin,manager"/&gt;<br />
&lt;/tomcat-users&gt;
</div>
        <div> 
</div>
        <div>3.修改jakarta-tomcat-5.5.x\conf\server.xml来解决编码问题。<br />
(给Connector 添加URIEncoding参数，参考<a href="http://blog.csdn.net/darkxie/archive/2004/10/25/TOMCATAPP.aspx"><font color="#000080">http://blog.csdn.net/darkxie/archive/2004/10/25/TOMCATAPP.aspx</font></a>)
</div>
        <div>(可以设置成GB18030)<br />
    &lt;Connector port="8080"<br />
              
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"<br />
              
enableLookups="false" redirectPort="8443" acceptCount="200"<br />
              
connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK"<br />
              
compression="on" compressionMinSize="2048" 
<br />
      noCompressionUserAgents="gozilla, traviata" 
<br />
      compressableMimeType="text/html,text/xml"/&gt;
</div>
        <div> 
</div>
        <div>    &lt;Connector port="8009" 
<br />
              
enableLookups="false" redirectPort="8443" protocol="AJP/1.3" URIEncoding="GBK"/&gt;
</div>
        <div> 
</div>
        <div>
          <br />
4.启用支持gzip压缩.<br />
(<a href="http://www.linuxaid.com.cn/forum/showdoc.jsp?l=1&amp;i=81169"><font color="#000080">http://www.linuxaid.com.cn/forum/showdoc.jsp?l=1&amp;i=81169</font></a>)<br />
添加下列属性<br />
 compression="on" 
<br />
      compressionMinSize="2048" 
<br />
      noCompressionUserAgents="gozilla, traviata" 
<br />
      compressableMimeType="text/html,text/xml"
</div>
        <div> 
</div>
        <div>5.设置虚拟主机。
</div>
        <div>在jakarta-tomcat-5.5.x\下建立文件夹vhost\www.mydomain.com。
</div>
        <div>然后修改jakarta-tomcat-5.5.x\conf\server.xml
</div>
        <div> 
</div>
        <div>&lt;Engine defaultHost="localhost" name="Catalina"&gt;<br />
      &lt;Host appBase="vhost/www.mydomain.com" name="<a href="http://www.mydomain.com/"><font color="#000080">www.mydomain.com</font></a>"&gt;<br />
      &lt;/Host&gt;<br />
      &lt;Host appBase="webapps" name="localhost"&gt;<br />
      &lt;/Host&gt;<br />
      &lt;Realm className="org.apache.catalina.realm.UserDatabaseRealm"/&gt;<br />
    &lt;/Engine&gt;
</div>
        <div> 
</div>
        <div>6.添加数据库驱动,更新mail.jar和actiovation.jar
</div>
        <div>复制mysql-connector-java-3.0.16-ga-bin.jar,pg74.215.jdbc3.jar到 jakarta-tomcat-5.5.x\common\lib\
</div>
        <div>还有javamail 1.3.2的mail.jar，jaf-1_0_2的 activation.jar
</div>
        <div>msSQl 2000 JDBC sp3，msbase.jar,msutil,jar,mssqlserver.jar
</div>
        <div> 
</div>
        <div> 
</div>
        <div>7.配置SSL
</div>
        <div>参考 <a href="http://jakarta.apache.org/tomcat/tomcat-5.5-doc/ssl-howto.html"><font color="#000080">http://jakarta.apache.org/tomcat/tomcat-5.5-doc/ssl-howto.html</font></a></div>
        <div>D:\j2sdk1.4.2_06\bin&gt;%JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg
RSA<br />
输入keystore密码：  lizongbossl<br />
您的名字与姓氏是什么？<br />
  [tomcat5.5.x]：  tomcat5.5.x<br />
您的组织单位名称是什么？<br />
  [jakarta]：  jakarta<br />
您的组织名称是什么？<br />
  [apache]：  apache<br />
您所在的城市或区域名称是什么？<br />
  [hzcity]：  hzcity<br />
您所在的州或省份名称是什么？<br />
  [gdp]：  gdp<br />
该单位的两字母国家代码是什么<br />
  [CN]：  CN<br />
CN=tomcat5.5.x, OU=jakarta, O=apache, L=hzcity, ST=gdp, C=CN 正确吗？<br />
  [否]：  y
</div>
        <div> 
</div>
        <div>输入&lt;tomcat&gt;的主密码<br />
        （如果和 keystore 密码相同，按回车）：<br /></div>
        <div>(必须密码一致，因此直接回车)
</div>
        <div>然后再把userhome(例如：C:\Documents and Settings\lizongbo\)下的.keystore复制到
</div>
        <div>tomcat的conf\目录下。
</div>
        <div> (例如：D:\jakarta-tomcat-5.5.x\conf\.keystore )
</div>
        <div>配置jakarta-tomcat-5.5.x\conf\server.xml
</div>
        <div>加上
</div>
        <div>    &lt;Connector port="8443" 
<br />
              
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"<br />
              
enableLookups="false" disableUploadTimeout="true"<br />
              
acceptCount="100" scheme="https" secure="true"<br />
              
clientAuth="false" sslProtocol="TLS" 
<br />
           keystoreFile="conf/.keystore" 
<br />
           keystorePass="lizongbossl"&gt;
&lt;!--与先前设置的密码一致--&gt;<br />
    &lt;/Connector&gt;
</div>
        <div>8.禁止文件目录列表，
</div>
        <div>修改jakarta-tomcat-5.5.x\conf\web.xml，把listing设置为false
</div>
        <div> 
</div>
        <div>    &lt;servlet&gt;<br />
        &lt;servlet-name&gt;default&lt;/servlet-name&gt;<br />
        &lt;servlet-class&gt;org.apache.catalina.servlets.DefaultServlet&lt;/servlet-class&gt;<br />
        &lt;init-param&gt;<br />
            &lt;param-name&gt;debug&lt;/param-name&gt;<br />
            &lt;param-value&gt;0&lt;/param-value&gt;<br />
        &lt;/init-param&gt;<br />
        &lt;init-param&gt;<br />
            &lt;param-name&gt;listings&lt;/param-name&gt;<br />
            &lt;param-value&gt;true&lt;/param-value&gt;<br />
        &lt;/init-param&gt;<br />
        &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;<br />
    &lt;/servlet&gt;
</div>
        <div> 
</div>
        <div> 9.指定了自己的javaEncoding
</div>
        <div>(参考 <a href="http://gceclub.sun.com.cn/staticcontent/html/sunone/app7/app7-dg-webapp/ch6/ch6-4.html"><font color="#000080">http://gceclub.sun.com.cn/staticcontent/html/sunone/app7/app7-dg-webapp/ch6/ch6-4.html</font></a> )
</div>
        <div>
          <br />
    &lt;servlet&gt;<br />
        &lt;servlet-name&gt;jsp&lt;/servlet-name&gt;<br />
        &lt;servlet-class&gt;org.apache.jasper.servlet.JspServlet&lt;/servlet-class&gt;<br />
        &lt;init-param&gt;<br />
            &lt;param-name&gt;fork&lt;/param-name&gt;<br />
            &lt;param-value&gt;false&lt;/param-value&gt;<br />
        &lt;/init-param&gt;<br />
               
&lt;init-param&gt;<br />
            &lt;param-name&gt;javaEncoding&lt;/param-name&gt;<br />
            &lt;param-value&gt;GB18030&lt;/param-value&gt;<br />
        &lt;/init-param&gt;<br />
        &lt;init-param&gt;<br />
            &lt;param-name&gt;xpoweredBy&lt;/param-name&gt;<br />
            &lt;param-value&gt;true&lt;/param-value&gt;<br />
        &lt;/init-param&gt;<br />
        &lt;load-on-startup&gt;3&lt;/load-on-startup&gt;<br />
    &lt;/servlet&gt;
</div>
        <div> 10.添加rar,iso等的mime-type映射 
</div>
        <div>避免在浏览器里直接打开。
</div>
        <div>&lt;mime-mapping&gt;<br />
&lt;extension&gt;mht&lt;/extension&gt;<br />
&lt;mime-type&gt;text/x-mht&lt;/mime-type&gt;<br />
&lt;/mime-mapping&gt;
</div>
        <div>&lt;mime-mapping&gt;<br />
        &lt;extension&gt;rar&lt;/extension&gt;<br />
        &lt;mime-type&gt;application/octet-stream&lt;/mime-type&gt;<br />
    &lt;/mime-mapping&gt;<br />
    &lt;mime-mapping&gt;<br />
        &lt;extension&gt;iso&lt;/extension&gt;<br />
        &lt;mime-type&gt;application/octet-stream&lt;/mime-type&gt;<br />
    &lt;/mime-mapping&gt;<br />
    &lt;mime-mapping&gt;<br />
        &lt;extension&gt;ape&lt;/extension&gt;<br />
        &lt;mime-type&gt;application/octet-stream&lt;/mime-type&gt;<br />
    &lt;/mime-mapping&gt;<br />
    &lt;mime-mapping&gt;<br />
        &lt;extension&gt;rmvb&lt;/extension&gt;<br />
        &lt;mime-type&gt;application/octet-stream&lt;/mime-type&gt;<br />
    &lt;/mime-mapping&gt;
</div>
        <div>    &lt;mime-mapping&gt;<br />
        &lt;extension&gt;ico&lt;/extension&gt;<br />
        &lt;mime-type&gt;image/x-icon&lt;/mime-type&gt;<br />
    &lt;/mime-mapping&gt;
</div>
        <div>10.1对html静态页面设置编码
</div>
        <div>
          <font color="#0000ff">&lt;!--  修改下面两行以支持静态超文本的自动编码 <br />
  --&gt;</font> <br />
 <font color="#0000ff">&lt;mime-mapping&gt;</font><br />
  <font color="#0000ff">&lt;extension&gt;</font>htm<font color="#0000ff">&lt;/extension&gt;</font> <br />
  <font color="#0000ff">&lt;mime-type&gt;</font>text/html;charset=gb<font color="#ff0000">2312</font><font color="#0000ff">&lt;/mime-type&gt;</font> <br />
  <font color="#0000ff">&lt;/mime-mapping&gt;</font><br />
 <font color="#0000ff">&lt;mime-mapping&gt;</font><br />
  <font color="#0000ff">&lt;extension&gt;</font>html<font color="#0000ff">&lt;/extension&gt;</font> <br />
  <font color="#0000ff">&lt;mime-type&gt;</font>text/html;charset=gb<font color="#ff0000">2312</font><font color="#0000ff">&lt;/mime-type&gt;</font> <br />
  <font color="#0000ff">&lt;/mime-mapping&gt;</font><br />
  <font color="#0000ff">&lt;/web-app&gt;</font></div>
        <div> 
</div>
        <div>11.添加welcome-file-list，并调整顺序。
</div>
        <div> &lt;welcome-file-list&gt;    
<br />
        &lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;<br />
        &lt;welcome-file&gt;index.html&lt;/welcome-file&gt;<br />
        &lt;welcome-file&gt;index.htm&lt;/welcome-file&gt;<br />
        &lt;welcome-file&gt;default.html&lt;/welcome-file&gt;<br />
        &lt;welcome-file&gt;default.htm&lt;/welcome-file&gt;<br />
        &lt;welcome-file&gt;default.jsp&lt;/welcome-file&gt;<br />
    &lt;/welcome-file-list&gt;<br /></div>
        <img width="0" height="0" src="http://www.hifar.com/blog/aggbug.ashx?id=a629f827-aac4-48a0-a85c-0c5e4f92eea9" />
      </body>
      <title>tomcat5.5.x 配置记录</title>
      <guid isPermaLink="false">http://www.hifar.com/blog/PermaLink,guid,a629f827-aac4-48a0-a85c-0c5e4f92eea9.aspx</guid>
      <link>http://www.hifar.com/blog/2005/02/18/tomcat55x%e9%85%8d%e7%bd%ae%e8%ae%b0%e5%bd%95.aspx</link>
      <pubDate>Fri, 18 Feb 2005 07:00:25 GMT</pubDate>
      <description>&lt;p&gt;
&lt;span id=ArticleContent1_ArticleContent1_lblContent&gt; 
&lt;/p&gt;
&lt;div&gt;tomcat5.5.x 配置记录。
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;1.下载：
&lt;/div&gt;
&lt;div&gt;&lt;a href="http://www.eu.apache.org/dist/jakarta/tomcat-5/"&gt;&lt;font color=#000080&gt;http://www.eu.apache.org/dist/jakarta/tomcat-5/&lt;/font&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div&gt;&lt;a href="http://www.apache.org/dist/jakarta/tomcat-5/v5.5.x/bin/jakarta-tomcat-5.5.x-admin.zip"&gt;&lt;font color=#000080&gt;http://www.apache.org/dist/jakarta/tomcat-5/v5.5.x/bin/jakarta-tomcat-5.5.x-admin.zip&lt;/font&gt;&lt;/a&gt;
&lt;br&gt;
&lt;a href="http://www.apache.org/dist/jakarta/tomcat-5/v5.5.x/bin/jakarta-tomcat-5.5.x-compat.zip"&gt;&lt;font color=#000080&gt;http://www.apache.org/dist/jakarta/tomcat-5/v5.5.x/bin/jakarta-tomcat-5.5.x-compat.zip&lt;/font&gt;&lt;/a&gt;
&lt;br&gt;
&lt;a href="http://www.apache.org/dist/jakarta/tomcat-5/v5.5.x/bin/jakarta-tomcat-5.5.x.zip"&gt;&lt;font color=#000080&gt;http://www.apache.org/dist/jakarta/tomcat-5/v5.5.x/bin/jakarta-tomcat-5.5.x.zip&lt;/font&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div&gt;&lt;a href="http://www.apache.org/dist/jakarta/tomcat-5/v5.5.x/bin/jakarta-tomcat-5.5.x-deployer.zip"&gt;&lt;font color=#000080&gt;http://www.apache.org/dist/jakarta/tomcat-5/v5.5.x/bin/jakarta-tomcat-5.5.x-deployer.zip&lt;/font&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div&gt;把&lt;u&gt;&lt;font color=#0000ff&gt;jakarta-tomcat-5.5.x.zip&lt;/font&gt;&lt;/u&gt;
&lt;/div&gt;
&lt;div&gt;和&lt;u&gt;&lt;font color=#0000ff&gt;jakarta-tomcat-5.5.x-compat.zip&lt;/font&gt;&lt;/u&gt;
&lt;/div&gt;
&lt;div&gt;和&lt;u&gt;&lt;font color=#800080&gt;jakarta-tomcat-5.5.x-admin.zip&lt;/font&gt;&lt;/u&gt;
&lt;br&gt;
(Tomcat 默认是没有内置admin模块了
&lt;/div&gt;
&lt;div&gt;Tomcat's administration web application is no longer installed by default. Download
and install the "admin" package to use it. )
&lt;/div&gt;
&lt;div&gt;都解压到同一个目录下面。比如：D:\jakarta-tomcat-5.5.x\
&lt;/div&gt;
&lt;div&gt;(如果使用jdk1.4，才需要&lt;u&gt;&lt;font color=#0000ff&gt;compat.zip&lt;/font&gt;&lt;/u&gt;用jdk1.5就可以免了这个。) 
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;2.修改jakarta-tomcat-5.5.x\conf\tomcat-users.xml.&lt;br&gt;
添加管理员账号lizongbo，密码为lizongbopass.&lt;br&gt;
新xml如下：&lt;br&gt;
&amp;lt;?xml version='1.0' encoding='utf-8'?&amp;gt;&lt;br&gt;
&amp;lt;tomcat-users&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;role rolename="tomcat"/&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;role rolename="role1"/&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;role rolename="manager"/&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;role rolename="admin"/&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;user username="tomcat" password="tomcat" roles="tomcat"/&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;user username="role1" password="tomcat" roles="role1"/&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;user username="both" password="tomcat" roles="tomcat,role1"/&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;user username="lizongbo" password="lizongbopass" roles="admin,manager"/&amp;gt;&lt;br&gt;
&amp;lt;/tomcat-users&amp;gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;3.修改jakarta-tomcat-5.5.x\conf\server.xml来解决编码问题。&lt;br&gt;
(给Connector&amp;nbsp;添加URIEncoding参数，参考&lt;a href="http://blog.csdn.net/darkxie/archive/2004/10/25/TOMCATAPP.aspx"&gt;&lt;font color=#000080&gt;http://blog.csdn.net/darkxie/archive/2004/10/25/TOMCATAPP.aspx&lt;/font&gt;&lt;/a&gt;)
&lt;/div&gt;
&lt;div&gt;(可以设置成GB18030)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Connector port="8080"&lt;br&gt;
&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;&amp;nbsp;
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"&lt;br&gt;
&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;&amp;nbsp;
enableLookups="false" redirectPort="8443" acceptCount="200"&lt;br&gt;
&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;&amp;nbsp;
connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK"&lt;br&gt;
&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;&amp;nbsp;
compression="on" compressionMinSize="2048" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; noCompressionUserAgents="gozilla, traviata" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; compressableMimeType="text/html,text/xml"/&amp;gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Connector port="8009" 
&lt;br&gt;
&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;&amp;nbsp;
enableLookups="false" redirectPort="8443" protocol="AJP/1.3" URIEncoding="GBK"/&amp;gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;
&lt;br&gt;
4.启用支持gzip压缩.&lt;br&gt;
(&lt;a href="http://www.linuxaid.com.cn/forum/showdoc.jsp?l=1&amp;amp;i=81169"&gt;&lt;font color=#000080&gt;http://www.linuxaid.com.cn/forum/showdoc.jsp?l=1&amp;amp;i=81169&lt;/font&gt;&lt;/a&gt;)&lt;br&gt;
添加下列属性&lt;br&gt;
&amp;nbsp;compression="on" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; compressionMinSize="2048" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; noCompressionUserAgents="gozilla, traviata" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; compressableMimeType="text/html,text/xml"
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;5.设置虚拟主机。
&lt;/div&gt;
&lt;div&gt;在jakarta-tomcat-5.5.x\下建立文件夹vhost\www.mydomain.com。
&lt;/div&gt;
&lt;div&gt;然后修改jakarta-tomcat-5.5.x\conf\server.xml
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;&amp;lt;Engine defaultHost="localhost" name="Catalina"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Host appBase="vhost/www.mydomain.com" name="&lt;a href="http://www.mydomain.com/"&gt;&lt;font color=#000080&gt;www.mydomain.com&lt;/font&gt;&lt;/a&gt;"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Host&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Host appBase="webapps" name="localhost"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Host&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Realm className="org.apache.catalina.realm.UserDatabaseRealm"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Engine&amp;gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;6.添加数据库驱动,更新mail.jar和actiovation.jar
&lt;/div&gt;
&lt;div&gt;复制mysql-connector-java-3.0.16-ga-bin.jar,pg74.215.jdbc3.jar到 jakarta-tomcat-5.5.x\common\lib\
&lt;/div&gt;
&lt;div&gt;还有javamail 1.3.2的mail.jar，jaf-1_0_2的 activation.jar
&lt;/div&gt;
&lt;div&gt;msSQl 2000 JDBC sp3，msbase.jar,msutil,jar,mssqlserver.jar
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;7.配置SSL
&lt;/div&gt;
&lt;div&gt;参考 &lt;a href="http://jakarta.apache.org/tomcat/tomcat-5.5-doc/ssl-howto.html"&gt;&lt;font color=#000080&gt;http://jakarta.apache.org/tomcat/tomcat-5.5-doc/ssl-howto.html&lt;/font&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div&gt;D:\j2sdk1.4.2_06\bin&amp;gt;%JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg
RSA&lt;br&gt;
输入keystore密码：&amp;nbsp; lizongbossl&lt;br&gt;
您的名字与姓氏是什么？&lt;br&gt;
&amp;nbsp; [tomcat5.5.x]：&amp;nbsp; tomcat5.5.x&lt;br&gt;
您的组织单位名称是什么？&lt;br&gt;
&amp;nbsp; [jakarta]：&amp;nbsp; jakarta&lt;br&gt;
您的组织名称是什么？&lt;br&gt;
&amp;nbsp; [apache]：&amp;nbsp; apache&lt;br&gt;
您所在的城市或区域名称是什么？&lt;br&gt;
&amp;nbsp; [hzcity]：&amp;nbsp; hzcity&lt;br&gt;
您所在的州或省份名称是什么？&lt;br&gt;
&amp;nbsp; [gdp]：&amp;nbsp; gdp&lt;br&gt;
该单位的两字母国家代码是什么&lt;br&gt;
&amp;nbsp; [CN]：&amp;nbsp; CN&lt;br&gt;
CN=tomcat5.5.x, OU=jakarta, O=apache, L=hzcity, ST=gdp, C=CN 正确吗？&lt;br&gt;
&amp;nbsp; [否]：&amp;nbsp; y
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;输入&amp;lt;tomcat&amp;gt;的主密码&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; （如果和 keystore 密码相同，按回车）：&lt;br&gt;
&lt;/div&gt;
&lt;div&gt;(必须密码一致，因此直接回车)
&lt;/div&gt;
&lt;div&gt;然后再把userhome(例如：C:\Documents and Settings\lizongbo\)下的.keystore复制到
&lt;/div&gt;
&lt;div&gt;tomcat的conf\目录下。
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;(例如：D:\jakarta-tomcat-5.5.x\conf\.keystore )
&lt;/div&gt;
&lt;div&gt;配置jakarta-tomcat-5.5.x\conf\server.xml
&lt;/div&gt;
&lt;div&gt;加上
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Connector port="8443" 
&lt;br&gt;
&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;&amp;nbsp;
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"&lt;br&gt;
&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;&amp;nbsp;
enableLookups="false" disableUploadTimeout="true"&lt;br&gt;
&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;&amp;nbsp;
acceptCount="100" scheme="https" secure="true"&lt;br&gt;
&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;&amp;nbsp;
clientAuth="false" sslProtocol="TLS" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; keystoreFile="conf/.keystore" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; keystorePass="lizongbossl"&amp;gt;
&amp;lt;!--与先前设置的密码一致--&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Connector&amp;gt;
&lt;/div&gt;
&lt;div&gt;8.禁止文件目录列表，
&lt;/div&gt;
&lt;div&gt;修改jakarta-tomcat-5.5.x\conf\web.xml，把listing设置为false
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;servlet&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;servlet-name&amp;gt;default&amp;lt;/servlet-name&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;servlet-class&amp;gt;org.apache.catalina.servlets.DefaultServlet&amp;lt;/servlet-class&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;init-param&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param-name&amp;gt;debug&amp;lt;/param-name&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param-value&amp;gt;0&amp;lt;/param-value&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/init-param&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;init-param&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param-name&amp;gt;listings&amp;lt;/param-name&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param-value&amp;gt;true&amp;lt;/param-value&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/init-param&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;load-on-startup&amp;gt;1&amp;lt;/load-on-startup&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/servlet&amp;gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;9.指定了自己的javaEncoding
&lt;/div&gt;
&lt;div&gt;(参考 &lt;a href="http://gceclub.sun.com.cn/staticcontent/html/sunone/app7/app7-dg-webapp/ch6/ch6-4.html"&gt;&lt;font color=#000080&gt;http://gceclub.sun.com.cn/staticcontent/html/sunone/app7/app7-dg-webapp/ch6/ch6-4.html&lt;/font&gt;&lt;/a&gt;&amp;nbsp;)
&lt;/div&gt;
&lt;div&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;servlet&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;servlet-name&amp;gt;jsp&amp;lt;/servlet-name&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;servlet-class&amp;gt;org.apache.jasper.servlet.JspServlet&amp;lt;/servlet-class&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;init-param&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param-name&amp;gt;fork&amp;lt;/param-name&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param-value&amp;gt;false&amp;lt;/param-value&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/init-param&amp;gt;&lt;br&gt;
&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;&amp;nbsp;&amp;nbsp;
&amp;lt;init-param&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param-name&amp;gt;javaEncoding&amp;lt;/param-name&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param-value&amp;gt;GB18030&amp;lt;/param-value&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/init-param&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;init-param&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param-name&amp;gt;xpoweredBy&amp;lt;/param-name&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param-value&amp;gt;true&amp;lt;/param-value&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/init-param&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;load-on-startup&amp;gt;3&amp;lt;/load-on-startup&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/servlet&amp;gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;10.添加rar,iso等的mime-type映射 
&lt;/div&gt;
&lt;div&gt;避免在浏览器里直接打开。
&lt;/div&gt;
&lt;div&gt;&amp;lt;mime-mapping&amp;gt;&lt;br&gt;
&amp;lt;extension&amp;gt;mht&amp;lt;/extension&amp;gt;&lt;br&gt;
&amp;lt;mime-type&amp;gt;text/x-mht&amp;lt;/mime-type&amp;gt;&lt;br&gt;
&amp;lt;/mime-mapping&amp;gt;
&lt;/div&gt;
&lt;div&gt;&amp;lt;mime-mapping&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;extension&amp;gt;rar&amp;lt;/extension&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;mime-type&amp;gt;application/octet-stream&amp;lt;/mime-type&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/mime-mapping&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;mime-mapping&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;extension&amp;gt;iso&amp;lt;/extension&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;mime-type&amp;gt;application/octet-stream&amp;lt;/mime-type&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/mime-mapping&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;mime-mapping&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;extension&amp;gt;ape&amp;lt;/extension&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;mime-type&amp;gt;application/octet-stream&amp;lt;/mime-type&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/mime-mapping&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;mime-mapping&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;extension&amp;gt;rmvb&amp;lt;/extension&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;mime-type&amp;gt;application/octet-stream&amp;lt;/mime-type&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/mime-mapping&amp;gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;mime-mapping&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;extension&amp;gt;ico&amp;lt;/extension&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;mime-type&amp;gt;image/x-icon&amp;lt;/mime-type&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/mime-mapping&amp;gt;
&lt;/div&gt;
&lt;div&gt;10.1对html静态页面设置编码
&lt;/div&gt;
&lt;div&gt;&lt;font color=#0000ff&gt;&amp;lt;!--&amp;nbsp;&amp;nbsp;修改下面两行以支持静态超文本的自动编码&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;--&amp;gt;&lt;/font&gt;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&lt;font color=#0000ff&gt;&amp;lt;mime-mapping&amp;gt;&lt;/font&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&amp;lt;extension&amp;gt;&lt;/font&gt;htm&lt;font color=#0000ff&gt;&amp;lt;/extension&amp;gt;&lt;/font&gt;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&amp;lt;mime-type&amp;gt;&lt;/font&gt;text/html;charset=gb&lt;font color=#ff0000&gt;2312&lt;/font&gt;&lt;font color=#0000ff&gt;&amp;lt;/mime-type&amp;gt;&lt;/font&gt;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&amp;lt;/mime-mapping&amp;gt;&lt;/font&gt;
&lt;br&gt;
&amp;nbsp;&lt;font color=#0000ff&gt;&amp;lt;mime-mapping&amp;gt;&lt;/font&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&amp;lt;extension&amp;gt;&lt;/font&gt;html&lt;font color=#0000ff&gt;&amp;lt;/extension&amp;gt;&lt;/font&gt;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&amp;lt;mime-type&amp;gt;&lt;/font&gt;text/html;charset=gb&lt;font color=#ff0000&gt;2312&lt;/font&gt;&lt;font color=#0000ff&gt;&amp;lt;/mime-type&amp;gt;&lt;/font&gt;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&amp;lt;/mime-mapping&amp;gt;&lt;/font&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&amp;lt;/web-app&amp;gt;&lt;/font&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;11.添加welcome-file-list，并调整顺序。
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;lt;welcome-file-list&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;welcome-file&amp;gt;index.jsp&amp;lt;/welcome-file&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;welcome-file&amp;gt;index.html&amp;lt;/welcome-file&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;welcome-file&amp;gt;index.htm&amp;lt;/welcome-file&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;welcome-file&amp;gt;default.html&amp;lt;/welcome-file&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;welcome-file&amp;gt;default.htm&amp;lt;/welcome-file&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;welcome-file&amp;gt;default.jsp&amp;lt;/welcome-file&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/welcome-file-list&amp;gt;&lt;br&gt;
&lt;/div&gt;
&gt;&lt;img width="0" height="0" src="http://www.hifar.com/blog/aggbug.ashx?id=a629f827-aac4-48a0-a85c-0c5e4f92eea9" /&gt;</description>
      <category>Java 技术</category>
      <category>文摘和收藏</category>
    </item>
    <item>
      <trackback:ping>http://www.hifar.com/blog/Trackback.aspx?guid=a195b680-e8d1-41e3-9f13-fc3999cc3fd9</trackback:ping>
      <pingback:server>http://www.hifar.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.hifar.com/blog/PermaLink,guid,a195b680-e8d1-41e3-9f13-fc3999cc3fd9.aspx</pingback:target>
      <dc:creator>Jimmy Gao</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <span id="ArticleContent1_ArticleContent1_lblContent">1. oncontextmenu="window.event.returnValue=false" 将彻底屏蔽鼠标右键<br />
&lt;table border oncontextmenu=return(false)&gt;&lt;td&gt;no&lt;/table&gt; 可用于Table<br /><br />
2. &lt;body onselectstart="return false"&gt; 取消选取、防止复制<br /><br />
3. onpaste="return false" 不准粘贴<br /><br />
4. oncopy="return false;" oncut="return false;" 防止复制<br /><br />
5. &lt;link rel="Shortcut Icon" href="favicon.ico"&gt; IE地址栏前换成自己的图标<br /><br />
6. &lt;link rel="Bookmark" href="favicon.ico"&gt; 可以在收藏夹中显示出你的图标<br /><br />
7. &lt;input style="ime-mode:disabled"&gt; 关闭输入法<br /><br />
8. 永远都会带着框架<br />
&lt;script language="JavaScript"&gt;&lt;!--<br />
if (window == top)top.location.href = "frames.htm"; //frames.htm为框架网页<br />
// --&gt;&lt;/script&gt;<br /><br />
9. 防止被人frame<br />
&lt;SCRIPT LANGUAGE=JAVASCRIPT&gt;&lt;!-- <br />
if (top.location != self.location)top.location=self.location;<br />
// --&gt;&lt;/SCRIPT&gt;<br /><br />
10. 网页将不能被另存为<br />
&lt;noscript&gt;&lt;iframe src=*.html&gt;&lt;/iframe&gt;&lt;/noscript&gt; <br /><br />
11. &lt;input type=button value=查看网页源代码 <br />
onclick="window.location = "view-source:"+ "http://www.pconline.com.cn""&gt;<br /><br />
12.删除时确认<br />
&lt;a href="javascript:if(confirm("确实要删除吗?"))location="boos.asp?&amp;areyou=删除&amp;page=1""&gt;删除&lt;/a&gt; <br /><br />
13. 取得控件的绝对位置<br />
//Javascript<br />
&lt;script language="Javascript"&gt;<br />
function getIE(e){<br />
var t=e.offsetTop;<br />
var l=e.offsetLeft;<br />
while(e=e.offsetParent){<br />
t+=e.offsetTop;<br />
l+=e.offsetLeft;<br />
}<br />
alert("top="+t+"/nleft="+l);<br />
}<br />
&lt;/script&gt;<br /><br />
//VBScript<br />
&lt;script language="VBScript"&gt;&lt;!--<br />
function getIE()<br />
dim t,l,a,b<br />
set a=document.all.img1<br />
t=document.all.img1.offsetTop<br />
l=document.all.img1.offsetLeft<br />
while a.tagName&lt;&gt;"BODY"<br />
set a = a.offsetParent<br />
t=t+a.offsetTop<br />
l=l+a.offsetLeft<br />
wend<br />
msgbox "top="&amp;t&amp;chr(13)&amp;"left="&amp;l,64,"得到控件的位置"<br />
end function<br />
--&gt;&lt;/script&gt;<br /><br />
14. 光标是停在文本框文字的最后<br />
&lt;script language="javascript"&gt;<br />
function cc()<br />
{<br />
var e = event.srcElement;<br />
var r =e.createTextRange();<br />
r.moveStart("character",e.value.length);<br />
r.collapse(true);<br />
r.select();<br />
}<br />
&lt;/script&gt;<br />
&lt;input type=text name=text1 value="123" onfocus="cc()"&gt;<br /><br />
15. 判断上一页的来源<br />
javascript:<br />
document.referrer<br /><br />
16. 最小化、最大化、关闭窗口<br />
&lt;object id=hh1 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11"&gt; <br />
&lt;param name="Command" value="Minimize"&gt;&lt;/object&gt;<br />
&lt;object id=hh2 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11"&gt; <br />
&lt;param name="Command" value="Maximize"&gt;&lt;/object&gt;<br />
&lt;OBJECT id=hh3 classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"&gt;<br />
&lt;PARAM NAME="Command" VALUE="Close"&gt;&lt;/OBJECT&gt;<br />
&lt;input type=button value=最小化 onclick=hh1.Click()&gt;<br />
&lt;input type=button value=最大化 onclick=hh2.Click()&gt;<br />
&lt;input type=button value=关闭 onclick=hh3.Click()&gt;<br />
本例适用于IE<br /><br />
17.屏蔽功能键Shift,Alt,Ctrl<br />
&lt;script&gt;<br />
function look(){ <br />
if(event.shiftKey) <br />
alert("禁止按Shift键!"); //可以换成ALT CTRL<br />
} <br />
document.onkeydown=look; <br />
&lt;/script&gt;<br /><br />
18. 网页不会被缓存<br />
&lt;META HTTP-EQUIV="pragma" CONTENT="no-cache"&gt;<br />
&lt;META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate"&gt;<br />
&lt;META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT"&gt;<br />
或者&lt;META HTTP-EQUIV="expires" CONTENT="0"&gt;<br /><br />
19.怎样让表单没有凹凸感？<br />
&lt;input type=text style="border:1 solid #000000"&gt; <br />
或<br />
&lt;input type=text style="border-left:none; border-right:none; border-top:none; border-bottom: <br /><br />
1 solid #000000"&gt;&lt;/textarea&gt;<br /><br />
20.&lt;div&gt;&lt;span&gt;&amp;&lt;layer&gt;的区别？ <br />
&lt;div&gt;(division)用来定义大段的页面元素，会产生转行 <br />
&lt;span&gt;用来定义同一行内的元素，跟&lt;div&gt;的唯一区别是不产生转行 <br />
&lt;layer&gt;是ns的标记，ie不支持，相当于&lt;div&gt;<br /><br />
21.让弹出窗口总是在最上面:<br />
&lt;body onblur="this.focus();"&gt;<br /><br />
22.不要滚动条? <br />
让竖条没有: <br />
&lt;body style="overflow:scroll;overflow-y:hidden"&gt; <br />
&lt;/body&gt; <br />
让横条没有: <br />
&lt;body style="overflow:scroll;overflow-x:hidden"&gt; <br />
&lt;/body&gt; <br />
两个都去掉？更简单了 <br />
&lt;body scroll="no"&gt; <br />
&lt;/body&gt; <br /><br />
23.怎样去掉图片链接点击后，图片周围的虚线？<br />
&lt;a href="#" onFocus="this.blur()"&gt;&lt;img src="logo.jpg" border=0&gt;&lt;/a&gt;<br /><br />
24.电子邮件处理提交表单<br />
&lt;form name="form1" method="post" action="mailto:****@***.com" enctype="text/plain"&gt; <br />
&lt;input type=submit&gt;<br />
&lt;/form&gt;<br /><br />
25.在打开的子窗口刷新父窗口的代码里如何写？<br />
window.opener.location.reload()<br /><br />
26.如何设定打开页面的大小<br />
&lt;body onload="top.resizeTo(300,200);"&gt;<br />
打开页面的位置&lt;body onload="top.moveBy(300,200);"&gt;<br /><br />
27.在页面中如何加入不是满铺的背景图片,拉动页面时背景图不动 <br />
&lt;STYLE&gt; <br />
body <br />
{background-image:url(logo.gif); background-repeat:no-repeat; <br />
background-position:center;background-attachment: fixed} <br />
&lt;/STYLE&gt; <br /><br />
28. 检查一段字符串是否全由数字组成<br />
&lt;script language="Javascript"&gt;&lt;!--<br />
function checkNum(str){return str.match(//D/)==null}<br />
alert(checkNum("1232142141"))<br />
alert(checkNum("123214214a1"))<br />
// --&gt;&lt;/script&gt;<br /><br />
29. 获得一个窗口的大小<br />
document.body.clientWidth; document.body.clientHeight<br /><br />
30. 怎么判断是否是字符<br />
if (/[^/x00-/xff]/g.test(s)) alert("含有汉字");<br />
else alert("全是字符");<br /><br />
31.TEXTAREA自适应文字行数的多少<br />
&lt;textarea rows=1 name=s1 cols=27 onpropertychange="this.style.posHeight=this.scrollHeight"&gt;<br />
&lt;/textarea&gt;<br />
32. 日期减去天数等于第二个日期<br />
&lt;script language=Javascript&gt;<br />
function cc(dd,dadd)<br />
{<br />
//可以加上错误处理<br />
var a = new Date(dd)<br />
a = a.valueOf()<br />
a = a - dadd * 24 * 60 * 60 * 1000<br />
a = new Date(a)<br />
alert(a.getFullYear() + "年" + (a.getMonth() + 1) + "月" + a.getDate() + "日")<br />
}<br />
cc("12/23/2002",2)<br />
&lt;/script&gt;<br /><br />
33. 选择了哪一个Radio<br />
&lt;HTML&gt;&lt;script language="vbscript"&gt;<br />
function checkme()<br />
for each ob in radio1<br />
if ob.checked then window.alert ob.value<br />
next<br />
end function<br />
&lt;/script&gt;&lt;BODY&gt;<br />
&lt;INPUT name="radio1" type="radio" value="style" checked&gt;Style<br />
&lt;INPUT name="radio1" type="radio" value="barcode"&gt;Barcode<br />
&lt;INPUT type="button" value="check" onclick="checkme()"&gt;<br />
&lt;/BODY&gt;&lt;/HTML&gt;<br /><br />
34.脚本永不出错<br />
&lt;SCRIPT LANGUAGE="JavaScript"&gt; <br />
&lt;!-- Hide <br />
function killErrors() { <br />
return true; <br />
} <br />
window.onerror = killErrors; <br />
// --&gt; <br />
&lt;/SCRIPT&gt;<br /><br />
35.ENTER键可以让光标移到下一个输入框<br />
&lt;input onkeydown="if(event.keyCode==13)event.keyCode=9"&gt;<br /><br />
36. 检测某个网站的链接速度：<br />
把如下代码加入&lt;body&gt;区域中:<br />
&lt;script language=Javascript&gt;<br />
tim=1<br />
setInterval("tim++",100)<br />
b=1<br />
var autourl=new Array()<br />
autourl[1]="www.njcatv.net"<br />
autourl[2]="javacool.3322.net"<br />
autourl[3]="www.sina.com.cn"<br />
autourl[4]="www.nuaa.edu.cn"<br />
autourl[5]="www.cctv.com"<br />
function butt(){<br />
document.write("&lt;form name=autof&gt;")<br />
for(var i=1;i&lt;autourl.length;i++)<br />
document.write("&lt;input type=text name=txt"+i+" size=10 value=测试中……&gt; =》&lt;input type=text <br />
name=url"+i+" size=40&gt; =》&lt;input type=button value=GO <br /><br />
onclick=window.open(this.form.url"+i+".value)&gt;&lt;br&gt;")<br />
document.write("&lt;input type=submit value=刷新&gt;&lt;/form&gt;")<br />
}<br />
butt()<br />
function auto(url){<br />
document.forms[0]["url"+b].value=url<br />
if(tim&gt;200)<br />
{document.forms[0]["txt"+b].value="链接超时"}<br />
else<br />
{document.forms[0]["txt"+b].value="时间"+tim/10+"秒"}<br />
b++<br />
}<br />
function run(){for(var i=1;i&lt;autourl.length;i++)document.write("&lt;img src=http://"+autourl+"/"+Math.random()+" width=1 height=1 <br /><br />
onerror=auto("http://"+autourl+"")&gt;")}<br />
run()&lt;/script&gt;<br /><br />
37. 各种样式的光标<br />
auto ：标准光标<br />
default ：标准箭头<br />
hand ：手形光标<br />
wait ：等待光标<br />
text ：I形光标<br />
vertical-text ：水平I形光标<br />
no-drop ：不可拖动光标<br />
not-allowed ：无效光标<br />
help ：?帮助光标<br />
all-scroll ：三角方向标<br />
move ：移动标<br />
crosshair ：十字标<br />
e-resize<br />
n-resize<br />
nw-resize<br />
w-resize<br />
s-resize<br />
se-resize<br />
sw-resize<br /><br />
38.页面进入和退出的特效<br />
进入页面&lt;meta http-equiv="Page-Enter" content="revealTrans(duration=x, transition=y)"&gt;<br />
推出页面&lt;meta http-equiv="Page-Exit" content="revealTrans(duration=x, transition=y)"&gt; <br />
这个是页面被载入和调出时的一些特效。duration表示特效的持续时间，以秒为单位。transition表示使用哪种特效，取值为1-23:<br />
0 矩形缩小 <br />
1 矩形扩大 <br />
2 圆形缩小<br />
3 圆形扩大 <br />
4 下到上刷新 <br />
5 上到下刷新<br />
6 左到右刷新 <br />
7 右到左刷新 <br />
8 竖百叶窗<br />
9 横百叶窗 <br />
10 错位横百叶窗 <br />
11 错位竖百叶窗<br />
12 点扩散 <br />
13 左右到中间刷新 <br />
14 中间到左右刷新<br />
15 中间到上下<br />
16 上下到中间 <br />
17 右下到左上<br />
18 右上到左下 <br />
19 左上到右下 <br />
20 左下到右上<br />
21 横条 <br />
22 竖条 <br />
23 以上22种随机选择一种<br /><br />
39.在规定时间内跳转<br />
&lt;META http-equiv=V="REFRESH" content="5;URL=http://www.51js.com"&gt; <br /><br />
40.网页是否被检索<br />
&lt;meta name="ROBOTS" content="属性值"&gt;<br />
其中属性值有以下一些:<br />
属性值为"all": 文件将被检索，且页上链接可被查询；<br />
属性值为"none": 文件不被检索，而且不查询页上的链接；<br />
属性值为"index": 文件将被检索；<br />
属性值为"follow": 查询页上的链接；<br />
属性值为"noindex": 文件不检索，但可被查询链接；<br />
属性值为"nofollow": 文件不被检索，但可查询页上的链接。<br /></span>
        </p>
        <img width="0" height="0" src="http://www.hifar.com/blog/aggbug.ashx?id=a195b680-e8d1-41e3-9f13-fc3999cc3fd9" />
      </body>
      <title>javascript 技巧</title>
      <guid isPermaLink="false">http://www.hifar.com/blog/PermaLink,guid,a195b680-e8d1-41e3-9f13-fc3999cc3fd9.aspx</guid>
      <link>http://www.hifar.com/blog/2005/01/11/javascript%e6%8a%80%e5%b7%a7.aspx</link>
      <pubDate>Tue, 11 Jan 2005 11:41:26 GMT</pubDate>
      <description>&lt;p&gt;
&lt;span id=ArticleContent1_ArticleContent1_lblContent&gt;1.&amp;nbsp;oncontextmenu="window.event.returnValue=false"&amp;nbsp;将彻底屏蔽鼠标右键&lt;br&gt;
&amp;lt;table&amp;nbsp;border&amp;nbsp;oncontextmenu=return(false)&amp;gt;&amp;lt;td&amp;gt;no&amp;lt;/table&amp;gt;&amp;nbsp;可用于Table&lt;br&gt;
&lt;br&gt;
2.&amp;nbsp;&amp;lt;body&amp;nbsp;onselectstart="return&amp;nbsp;false"&amp;gt;&amp;nbsp;取消选取、防止复制&lt;br&gt;
&lt;br&gt;
3.&amp;nbsp;onpaste="return&amp;nbsp;false"&amp;nbsp;不准粘贴&lt;br&gt;
&lt;br&gt;
4.&amp;nbsp;oncopy="return&amp;nbsp;false;"&amp;nbsp;oncut="return&amp;nbsp;false;"&amp;nbsp;防止复制&lt;br&gt;
&lt;br&gt;
5.&amp;nbsp;&amp;lt;link&amp;nbsp;rel="Shortcut&amp;nbsp;Icon"&amp;nbsp;href="favicon.ico"&amp;gt;&amp;nbsp;IE地址栏前换成自己的图标&lt;br&gt;
&lt;br&gt;
6.&amp;nbsp;&amp;lt;link&amp;nbsp;rel="Bookmark"&amp;nbsp;href="favicon.ico"&amp;gt;&amp;nbsp;可以在收藏夹中显示出你的图标&lt;br&gt;
&lt;br&gt;
7.&amp;nbsp;&amp;lt;input&amp;nbsp;style="ime-mode:disabled"&amp;gt;&amp;nbsp;关闭输入法&lt;br&gt;
&lt;br&gt;
8.&amp;nbsp;永远都会带着框架&lt;br&gt;
&amp;lt;script&amp;nbsp;language="JavaScript"&amp;gt;&amp;lt;!--&lt;br&gt;
if&amp;nbsp;(window&amp;nbsp;==&amp;nbsp;top)top.location.href&amp;nbsp;=&amp;nbsp;"frames.htm";&amp;nbsp;//frames.htm为框架网页&lt;br&gt;
//&amp;nbsp;--&amp;gt;&amp;lt;/script&amp;gt;&lt;br&gt;
&lt;br&gt;
9.&amp;nbsp;防止被人frame&lt;br&gt;
&amp;lt;SCRIPT&amp;nbsp;LANGUAGE=JAVASCRIPT&amp;gt;&amp;lt;!--&amp;nbsp;&lt;br&gt;
if&amp;nbsp;(top.location&amp;nbsp;!=&amp;nbsp;self.location)top.location=self.location;&lt;br&gt;
//&amp;nbsp;--&amp;gt;&amp;lt;/SCRIPT&amp;gt;&lt;br&gt;
&lt;br&gt;
10.&amp;nbsp;网页将不能被另存为&lt;br&gt;
&amp;lt;noscript&amp;gt;&amp;lt;iframe&amp;nbsp;src=*.html&amp;gt;&amp;lt;/iframe&amp;gt;&amp;lt;/noscript&amp;gt;&amp;nbsp;&lt;br&gt;
&lt;br&gt;
11.&amp;nbsp;&amp;lt;input&amp;nbsp;type=button&amp;nbsp;value=查看网页源代码&amp;nbsp;&lt;br&gt;
onclick="window.location&amp;nbsp;=&amp;nbsp;"view-source:"+&amp;nbsp;"http://www.pconline.com.cn""&amp;gt;&lt;br&gt;
&lt;br&gt;
12.删除时确认&lt;br&gt;
&amp;lt;a&amp;nbsp;href="javascript:if(confirm("确实要删除吗?"))location="boos.asp?&amp;amp;areyou=删除&amp;amp;page=1""&amp;gt;删除&amp;lt;/a&amp;gt;&amp;nbsp;&lt;br&gt;
&lt;br&gt;
13.&amp;nbsp;取得控件的绝对位置&lt;br&gt;
//Javascript&lt;br&gt;
&amp;lt;script&amp;nbsp;language="Javascript"&amp;gt;&lt;br&gt;
function&amp;nbsp;getIE(e){&lt;br&gt;
var&amp;nbsp;t=e.offsetTop;&lt;br&gt;
var&amp;nbsp;l=e.offsetLeft;&lt;br&gt;
while(e=e.offsetParent){&lt;br&gt;
t+=e.offsetTop;&lt;br&gt;
l+=e.offsetLeft;&lt;br&gt;
}&lt;br&gt;
alert("top="+t+"/nleft="+l);&lt;br&gt;
}&lt;br&gt;
&amp;lt;/script&amp;gt;&lt;br&gt;
&lt;br&gt;
//VBScript&lt;br&gt;
&amp;lt;script&amp;nbsp;language="VBScript"&amp;gt;&amp;lt;!--&lt;br&gt;
function&amp;nbsp;getIE()&lt;br&gt;
dim&amp;nbsp;t,l,a,b&lt;br&gt;
set&amp;nbsp;a=document.all.img1&lt;br&gt;
t=document.all.img1.offsetTop&lt;br&gt;
l=document.all.img1.offsetLeft&lt;br&gt;
while&amp;nbsp;a.tagName&amp;lt;&amp;gt;"BODY"&lt;br&gt;
set&amp;nbsp;a&amp;nbsp;=&amp;nbsp;a.offsetParent&lt;br&gt;
t=t+a.offsetTop&lt;br&gt;
l=l+a.offsetLeft&lt;br&gt;
wend&lt;br&gt;
msgbox&amp;nbsp;"top="&amp;amp;t&amp;amp;chr(13)&amp;amp;"left="&amp;amp;l,64,"得到控件的位置"&lt;br&gt;
end&amp;nbsp;function&lt;br&gt;
--&amp;gt;&amp;lt;/script&amp;gt;&lt;br&gt;
&lt;br&gt;
14.&amp;nbsp;光标是停在文本框文字的最后&lt;br&gt;
&amp;lt;script&amp;nbsp;language="javascript"&amp;gt;&lt;br&gt;
function&amp;nbsp;cc()&lt;br&gt;
{&lt;br&gt;
var&amp;nbsp;e&amp;nbsp;=&amp;nbsp;event.srcElement;&lt;br&gt;
var&amp;nbsp;r&amp;nbsp;=e.createTextRange();&lt;br&gt;
r.moveStart("character",e.value.length);&lt;br&gt;
r.collapse(true);&lt;br&gt;
r.select();&lt;br&gt;
}&lt;br&gt;
&amp;lt;/script&amp;gt;&lt;br&gt;
&amp;lt;input&amp;nbsp;type=text&amp;nbsp;name=text1&amp;nbsp;value="123"&amp;nbsp;onfocus="cc()"&amp;gt;&lt;br&gt;
&lt;br&gt;
15.&amp;nbsp;判断上一页的来源&lt;br&gt;
javascript:&lt;br&gt;
document.referrer&lt;br&gt;
&lt;br&gt;
16.&amp;nbsp;最小化、最大化、关闭窗口&lt;br&gt;
&amp;lt;object&amp;nbsp;id=hh1&amp;nbsp;classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11"&amp;gt;&amp;nbsp;&lt;br&gt;
&amp;lt;param&amp;nbsp;name="Command"&amp;nbsp;value="Minimize"&amp;gt;&amp;lt;/object&amp;gt;&lt;br&gt;
&amp;lt;object&amp;nbsp;id=hh2&amp;nbsp;classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11"&amp;gt;&amp;nbsp;&lt;br&gt;
&amp;lt;param&amp;nbsp;name="Command"&amp;nbsp;value="Maximize"&amp;gt;&amp;lt;/object&amp;gt;&lt;br&gt;
&amp;lt;OBJECT&amp;nbsp;id=hh3&amp;nbsp;classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"&amp;gt;&lt;br&gt;
&amp;lt;PARAM&amp;nbsp;NAME="Command"&amp;nbsp;VALUE="Close"&amp;gt;&amp;lt;/OBJECT&amp;gt;&lt;br&gt;
&amp;lt;input&amp;nbsp;type=button&amp;nbsp;value=最小化&amp;nbsp;onclick=hh1.Click()&amp;gt;&lt;br&gt;
&amp;lt;input&amp;nbsp;type=button&amp;nbsp;value=最大化&amp;nbsp;onclick=hh2.Click()&amp;gt;&lt;br&gt;
&amp;lt;input&amp;nbsp;type=button&amp;nbsp;value=关闭&amp;nbsp;onclick=hh3.Click()&amp;gt;&lt;br&gt;
本例适用于IE&lt;br&gt;
&lt;br&gt;
17.屏蔽功能键Shift,Alt,Ctrl&lt;br&gt;
&amp;lt;script&amp;gt;&lt;br&gt;
function&amp;nbsp;look(){&amp;nbsp;&lt;br&gt;
if(event.shiftKey)&amp;nbsp;&lt;br&gt;
alert("禁止按Shift键!");&amp;nbsp;//可以换成ALT CTRL&lt;br&gt;
}&amp;nbsp;&lt;br&gt;
document.onkeydown=look;&amp;nbsp;&lt;br&gt;
&amp;lt;/script&amp;gt;&lt;br&gt;
&lt;br&gt;
18.&amp;nbsp;网页不会被缓存&lt;br&gt;
&amp;lt;META&amp;nbsp;HTTP-EQUIV="pragma"&amp;nbsp;CONTENT="no-cache"&amp;gt;&lt;br&gt;
&amp;lt;META&amp;nbsp;HTTP-EQUIV="Cache-Control"&amp;nbsp;CONTENT="no-cache,&amp;nbsp;must-revalidate"&amp;gt;&lt;br&gt;
&amp;lt;META&amp;nbsp;HTTP-EQUIV="expires"&amp;nbsp;CONTENT="Wed,&amp;nbsp;26&amp;nbsp;Feb&amp;nbsp;1997&amp;nbsp;08:21:57&amp;nbsp;GMT"&amp;gt;&lt;br&gt;
或者&amp;lt;META&amp;nbsp;HTTP-EQUIV="expires"&amp;nbsp;CONTENT="0"&amp;gt;&lt;br&gt;
&lt;br&gt;
19.怎样让表单没有凹凸感？&lt;br&gt;
&amp;lt;input&amp;nbsp;type=text&amp;nbsp;style="border:1&amp;nbsp;solid&amp;nbsp;#000000"&amp;gt;&amp;nbsp;&lt;br&gt;
或&lt;br&gt;
&amp;lt;input&amp;nbsp;type=text&amp;nbsp;style="border-left:none;&amp;nbsp;border-right:none;&amp;nbsp;border-top:none;&amp;nbsp;border-bottom:&amp;nbsp;&lt;br&gt;
&lt;br&gt;
1&amp;nbsp;solid&amp;nbsp;#000000"&amp;gt;&amp;lt;/textarea&amp;gt;&lt;br&gt;
&lt;br&gt;
20.&amp;lt;div&amp;gt;&amp;lt;span&amp;gt;&amp;amp;&amp;lt;layer&amp;gt;的区别？&amp;nbsp;&lt;br&gt;
&amp;lt;div&amp;gt;(division)用来定义大段的页面元素，会产生转行&amp;nbsp;&lt;br&gt;
&amp;lt;span&amp;gt;用来定义同一行内的元素，跟&amp;lt;div&amp;gt;的唯一区别是不产生转行&amp;nbsp;&lt;br&gt;
&amp;lt;layer&amp;gt;是ns的标记，ie不支持，相当于&amp;lt;div&amp;gt;&lt;br&gt;
&lt;br&gt;
21.让弹出窗口总是在最上面:&lt;br&gt;
&amp;lt;body&amp;nbsp;onblur="this.focus();"&amp;gt;&lt;br&gt;
&lt;br&gt;
22.不要滚动条?&amp;nbsp;&lt;br&gt;
让竖条没有:&amp;nbsp;&lt;br&gt;
&amp;lt;body&amp;nbsp;style="overflow:scroll;overflow-y:hidden"&amp;gt;&amp;nbsp;&lt;br&gt;
&amp;lt;/body&amp;gt;&amp;nbsp;&lt;br&gt;
让横条没有:&amp;nbsp;&lt;br&gt;
&amp;lt;body&amp;nbsp;style="overflow:scroll;overflow-x:hidden"&amp;gt;&amp;nbsp;&lt;br&gt;
&amp;lt;/body&amp;gt;&amp;nbsp;&lt;br&gt;
两个都去掉？更简单了&amp;nbsp;&lt;br&gt;
&amp;lt;body&amp;nbsp;scroll="no"&amp;gt;&amp;nbsp;&lt;br&gt;
&amp;lt;/body&amp;gt;&amp;nbsp;&lt;br&gt;
&lt;br&gt;
23.怎样去掉图片链接点击后，图片周围的虚线？&lt;br&gt;
&amp;lt;a&amp;nbsp;href="#"&amp;nbsp;onFocus="this.blur()"&amp;gt;&amp;lt;img&amp;nbsp;src="logo.jpg"&amp;nbsp;border=0&amp;gt;&amp;lt;/a&amp;gt;&lt;br&gt;
&lt;br&gt;
24.电子邮件处理提交表单&lt;br&gt;
&amp;lt;form&amp;nbsp;name="form1"&amp;nbsp;method="post"&amp;nbsp;action="mailto:****@***.com"&amp;nbsp;enctype="text/plain"&amp;gt;&amp;nbsp;&lt;br&gt;
&amp;lt;input&amp;nbsp;type=submit&amp;gt;&lt;br&gt;
&amp;lt;/form&amp;gt;&lt;br&gt;
&lt;br&gt;
25.在打开的子窗口刷新父窗口的代码里如何写？&lt;br&gt;
window.opener.location.reload()&lt;br&gt;
&lt;br&gt;
26.如何设定打开页面的大小&lt;br&gt;
&amp;lt;body&amp;nbsp;onload="top.resizeTo(300,200);"&amp;gt;&lt;br&gt;
打开页面的位置&amp;lt;body&amp;nbsp;onload="top.moveBy(300,200);"&amp;gt;&lt;br&gt;
&lt;br&gt;
27.在页面中如何加入不是满铺的背景图片,拉动页面时背景图不动&amp;nbsp;&lt;br&gt;
&amp;lt;STYLE&amp;gt;&amp;nbsp;&lt;br&gt;
body&amp;nbsp;&lt;br&gt;
{background-image:url(logo.gif);&amp;nbsp;background-repeat:no-repeat;&amp;nbsp;&lt;br&gt;
background-position:center;background-attachment:&amp;nbsp;fixed}&amp;nbsp;&lt;br&gt;
&amp;lt;/STYLE&amp;gt;&amp;nbsp;&lt;br&gt;
&lt;br&gt;
28.&amp;nbsp;检查一段字符串是否全由数字组成&lt;br&gt;
&amp;lt;script&amp;nbsp;language="Javascript"&amp;gt;&amp;lt;!--&lt;br&gt;
function&amp;nbsp;checkNum(str){return&amp;nbsp;str.match(//D/)==null}&lt;br&gt;
alert(checkNum("1232142141"))&lt;br&gt;
alert(checkNum("123214214a1"))&lt;br&gt;
//&amp;nbsp;--&amp;gt;&amp;lt;/script&amp;gt;&lt;br&gt;
&lt;br&gt;
29.&amp;nbsp;获得一个窗口的大小&lt;br&gt;
document.body.clientWidth;&amp;nbsp;document.body.clientHeight&lt;br&gt;
&lt;br&gt;
30.&amp;nbsp;怎么判断是否是字符&lt;br&gt;
if&amp;nbsp;(/[^/x00-/xff]/g.test(s))&amp;nbsp;alert("含有汉字");&lt;br&gt;
else&amp;nbsp;alert("全是字符");&lt;br&gt;
&lt;br&gt;
31.TEXTAREA自适应文字行数的多少&lt;br&gt;
&amp;lt;textarea&amp;nbsp;rows=1&amp;nbsp;name=s1&amp;nbsp;cols=27&amp;nbsp;onpropertychange="this.style.posHeight=this.scrollHeight"&amp;gt;&lt;br&gt;
&amp;lt;/textarea&amp;gt;&lt;br&gt;
32.&amp;nbsp;日期减去天数等于第二个日期&lt;br&gt;
&amp;lt;script&amp;nbsp;language=Javascript&amp;gt;&lt;br&gt;
function&amp;nbsp;cc(dd,dadd)&lt;br&gt;
{&lt;br&gt;
//可以加上错误处理&lt;br&gt;
var&amp;nbsp;a&amp;nbsp;=&amp;nbsp;new&amp;nbsp;Date(dd)&lt;br&gt;
a&amp;nbsp;=&amp;nbsp;a.valueOf()&lt;br&gt;
a&amp;nbsp;=&amp;nbsp;a&amp;nbsp;-&amp;nbsp;dadd&amp;nbsp;*&amp;nbsp;24&amp;nbsp;*&amp;nbsp;60&amp;nbsp;*&amp;nbsp;60&amp;nbsp;*&amp;nbsp;1000&lt;br&gt;
a&amp;nbsp;=&amp;nbsp;new&amp;nbsp;Date(a)&lt;br&gt;
alert(a.getFullYear()&amp;nbsp;+&amp;nbsp;"年"&amp;nbsp;+&amp;nbsp;(a.getMonth()&amp;nbsp;+&amp;nbsp;1)&amp;nbsp;+&amp;nbsp;"月"&amp;nbsp;+&amp;nbsp;a.getDate()&amp;nbsp;+&amp;nbsp;"日")&lt;br&gt;
}&lt;br&gt;
cc("12/23/2002",2)&lt;br&gt;
&amp;lt;/script&amp;gt;&lt;br&gt;
&lt;br&gt;
33.&amp;nbsp;选择了哪一个Radio&lt;br&gt;
&amp;lt;HTML&amp;gt;&amp;lt;script&amp;nbsp;language="vbscript"&amp;gt;&lt;br&gt;
function&amp;nbsp;checkme()&lt;br&gt;
for&amp;nbsp;each&amp;nbsp;ob&amp;nbsp;in&amp;nbsp;radio1&lt;br&gt;
if&amp;nbsp;ob.checked&amp;nbsp;then&amp;nbsp;window.alert&amp;nbsp;ob.value&lt;br&gt;
next&lt;br&gt;
end&amp;nbsp;function&lt;br&gt;
&amp;lt;/script&amp;gt;&amp;lt;BODY&amp;gt;&lt;br&gt;
&amp;lt;INPUT&amp;nbsp;name="radio1"&amp;nbsp;type="radio"&amp;nbsp;value="style"&amp;nbsp;checked&amp;gt;Style&lt;br&gt;
&amp;lt;INPUT&amp;nbsp;name="radio1"&amp;nbsp;type="radio"&amp;nbsp;value="barcode"&amp;gt;Barcode&lt;br&gt;
&amp;lt;INPUT&amp;nbsp;type="button"&amp;nbsp;value="check"&amp;nbsp;onclick="checkme()"&amp;gt;&lt;br&gt;
&amp;lt;/BODY&amp;gt;&amp;lt;/HTML&amp;gt;&lt;br&gt;
&lt;br&gt;
34.脚本永不出错&lt;br&gt;
&amp;lt;SCRIPT&amp;nbsp;LANGUAGE="JavaScript"&amp;gt;&amp;nbsp;&lt;br&gt;
&amp;lt;!--&amp;nbsp;Hide&amp;nbsp;&lt;br&gt;
function&amp;nbsp;killErrors()&amp;nbsp;{&amp;nbsp;&lt;br&gt;
return&amp;nbsp;true;&amp;nbsp;&lt;br&gt;
}&amp;nbsp;&lt;br&gt;
window.onerror&amp;nbsp;=&amp;nbsp;killErrors;&amp;nbsp;&lt;br&gt;
//&amp;nbsp;--&amp;gt;&amp;nbsp;&lt;br&gt;
&amp;lt;/SCRIPT&amp;gt;&lt;br&gt;
&lt;br&gt;
35.ENTER键可以让光标移到下一个输入框&lt;br&gt;
&amp;lt;input&amp;nbsp;onkeydown="if(event.keyCode==13)event.keyCode=9"&amp;gt;&lt;br&gt;
&lt;br&gt;
36.&amp;nbsp;检测某个网站的链接速度：&lt;br&gt;
把如下代码加入&amp;lt;body&amp;gt;区域中:&lt;br&gt;
&amp;lt;script&amp;nbsp;language=Javascript&amp;gt;&lt;br&gt;
tim=1&lt;br&gt;
setInterval("tim++",100)&lt;br&gt;
b=1&lt;br&gt;
var&amp;nbsp;autourl=new&amp;nbsp;Array()&lt;br&gt;
autourl[1]="www.njcatv.net"&lt;br&gt;
autourl[2]="javacool.3322.net"&lt;br&gt;
autourl[3]="www.sina.com.cn"&lt;br&gt;
autourl[4]="www.nuaa.edu.cn"&lt;br&gt;
autourl[5]="www.cctv.com"&lt;br&gt;
function&amp;nbsp;butt(){&lt;br&gt;
document.write("&amp;lt;form&amp;nbsp;name=autof&amp;gt;")&lt;br&gt;
for(var&amp;nbsp;i=1;i&amp;lt;autourl.length;i++)&lt;br&gt;
document.write("&amp;lt;input&amp;nbsp;type=text&amp;nbsp;name=txt"+i+"&amp;nbsp;size=10&amp;nbsp;value=测试中&amp;#8230;&amp;#8230;&amp;gt;&amp;nbsp;=》&amp;lt;input&amp;nbsp;type=text&amp;nbsp;&lt;br&gt;
name=url"+i+"&amp;nbsp;size=40&amp;gt;&amp;nbsp;=》&amp;lt;input&amp;nbsp;type=button&amp;nbsp;value=GO&amp;nbsp;&lt;br&gt;
&lt;br&gt;
onclick=window.open(this.form.url"+i+".value)&amp;gt;&amp;lt;br&amp;gt;")&lt;br&gt;
document.write("&amp;lt;input&amp;nbsp;type=submit&amp;nbsp;value=刷新&amp;gt;&amp;lt;/form&amp;gt;")&lt;br&gt;
}&lt;br&gt;
butt()&lt;br&gt;
function&amp;nbsp;auto(url){&lt;br&gt;
document.forms[0]["url"+b].value=url&lt;br&gt;
if(tim&amp;gt;200)&lt;br&gt;
{document.forms[0]["txt"+b].value="链接超时"}&lt;br&gt;
else&lt;br&gt;
{document.forms[0]["txt"+b].value="时间"+tim/10+"秒"}&lt;br&gt;
b++&lt;br&gt;
}&lt;br&gt;
function&amp;nbsp;run(){for(var&amp;nbsp;i=1;i&amp;lt;autourl.length;i++)document.write("&amp;lt;img&amp;nbsp;src=http://"+autourl+"/"+Math.random()+"&amp;nbsp;width=1&amp;nbsp;height=1&amp;nbsp;&lt;br&gt;
&lt;br&gt;
onerror=auto("http://"+autourl+"")&amp;gt;")}&lt;br&gt;
run()&amp;lt;/script&amp;gt;&lt;br&gt;
&lt;br&gt;
37.&amp;nbsp;各种样式的光标&lt;br&gt;
auto&amp;nbsp;：标准光标&lt;br&gt;
default&amp;nbsp;：标准箭头&lt;br&gt;
hand&amp;nbsp;：手形光标&lt;br&gt;
wait&amp;nbsp;：等待光标&lt;br&gt;
text&amp;nbsp;：I形光标&lt;br&gt;
vertical-text&amp;nbsp;：水平I形光标&lt;br&gt;
no-drop&amp;nbsp;：不可拖动光标&lt;br&gt;
not-allowed&amp;nbsp;：无效光标&lt;br&gt;
help&amp;nbsp;：?帮助光标&lt;br&gt;
all-scroll&amp;nbsp;：三角方向标&lt;br&gt;
move&amp;nbsp;：移动标&lt;br&gt;
crosshair&amp;nbsp;：十字标&lt;br&gt;
e-resize&lt;br&gt;
n-resize&lt;br&gt;
nw-resize&lt;br&gt;
w-resize&lt;br&gt;
s-resize&lt;br&gt;
se-resize&lt;br&gt;
sw-resize&lt;br&gt;
&lt;br&gt;
38.页面进入和退出的特效&lt;br&gt;
进入页面&amp;lt;meta&amp;nbsp;http-equiv="Page-Enter"&amp;nbsp;content="revealTrans(duration=x,&amp;nbsp;transition=y)"&amp;gt;&lt;br&gt;
推出页面&amp;lt;meta&amp;nbsp;http-equiv="Page-Exit"&amp;nbsp;content="revealTrans(duration=x,&amp;nbsp;transition=y)"&amp;gt;&amp;nbsp;&lt;br&gt;
这个是页面被载入和调出时的一些特效。duration表示特效的持续时间，以秒为单位。transition表示使用哪种特效，取值为1-23:&lt;br&gt;
0&amp;nbsp;矩形缩小&amp;nbsp;&lt;br&gt;
1&amp;nbsp;矩形扩大&amp;nbsp;&lt;br&gt;
2&amp;nbsp;圆形缩小&lt;br&gt;
3&amp;nbsp;圆形扩大&amp;nbsp;&lt;br&gt;
4&amp;nbsp;下到上刷新&amp;nbsp;&lt;br&gt;
5&amp;nbsp;上到下刷新&lt;br&gt;
6&amp;nbsp;左到右刷新&amp;nbsp;&lt;br&gt;
7&amp;nbsp;右到左刷新&amp;nbsp;&lt;br&gt;
8&amp;nbsp;竖百叶窗&lt;br&gt;
9&amp;nbsp;横百叶窗&amp;nbsp;&lt;br&gt;
10&amp;nbsp;错位横百叶窗&amp;nbsp;&lt;br&gt;
11&amp;nbsp;错位竖百叶窗&lt;br&gt;
12&amp;nbsp;点扩散&amp;nbsp;&lt;br&gt;
13&amp;nbsp;左右到中间刷新&amp;nbsp;&lt;br&gt;
14&amp;nbsp;中间到左右刷新&lt;br&gt;
15&amp;nbsp;中间到上下&lt;br&gt;
16&amp;nbsp;上下到中间&amp;nbsp;&lt;br&gt;
17&amp;nbsp;右下到左上&lt;br&gt;
18&amp;nbsp;右上到左下&amp;nbsp;&lt;br&gt;
19&amp;nbsp;左上到右下&amp;nbsp;&lt;br&gt;
20&amp;nbsp;左下到右上&lt;br&gt;
21&amp;nbsp;横条&amp;nbsp;&lt;br&gt;
22&amp;nbsp;竖条&amp;nbsp;&lt;br&gt;
23&amp;nbsp;以上22种随机选择一种&lt;br&gt;
&lt;br&gt;
39.在规定时间内跳转&lt;br&gt;
&amp;lt;META&amp;nbsp;http-equiv=V="REFRESH"&amp;nbsp;content="5;URL=http://www.51js.com"&amp;gt;&amp;nbsp;&lt;br&gt;
&lt;br&gt;
40.网页是否被检索&lt;br&gt;
&amp;lt;meta&amp;nbsp;name="ROBOTS"&amp;nbsp;content="属性值"&amp;gt;&lt;br&gt;
其中属性值有以下一些:&lt;br&gt;
属性值为"all":&amp;nbsp;文件将被检索，且页上链接可被查询；&lt;br&gt;
属性值为"none":&amp;nbsp;文件不被检索，而且不查询页上的链接；&lt;br&gt;
属性值为"index":&amp;nbsp;文件将被检索；&lt;br&gt;
属性值为"follow":&amp;nbsp;查询页上的链接；&lt;br&gt;
属性值为"noindex":&amp;nbsp;文件不检索，但可被查询链接；&lt;br&gt;
属性值为"nofollow":&amp;nbsp;文件不被检索，但可查询页上的链接。&lt;br&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.hifar.com/blog/aggbug.ashx?id=a195b680-e8d1-41e3-9f13-fc3999cc3fd9" /&gt;</description>
      <category>Web 技术</category>
      <category>文摘和收藏</category>
    </item>
    <item>
      <trackback:ping>http://www.hifar.com/blog/Trackback.aspx?guid=c7f0b35a-6564-4009-a261-1745e8e802b2</trackback:ping>
      <pingback:server>http://www.hifar.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.hifar.com/blog/PermaLink,guid,c7f0b35a-6564-4009-a261-1745e8e802b2.aspx</pingback:target>
      <dc:creator>Jimmy Gao</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <table style="TABLE-LAYOUT: fixed" cellspacing="0" cellpadding="10" width="100%" border="0">
            <tbody>
              <tr>
                <td align="middle">
                  <span class="title">一个log4j的学习笔计</span>
                  <br />
                  <br />
                  <span class="highlight1">转贴：</span>snow   <span class="highlight1">日期：</span>2004-09-01   <span class="highlight1">人气：</span>76</td>
              </tr>
              <tr>
                <td align="middle">
                </td>
              </tr>
              <tr>
                <td class="content" style="LEFT: 0px; WIDTH: 100%; WORD-WRAP: break-word">
Log4j 学习笔记 
<br /><br />
by heavyz 
<br />
2003-04-15 
<br /><br />
转自：http://zooo.51.net/heavyz_cs/notebook/log4j.html 
<br /><br /><br /><br />
-------------------------------------------------------------------------------- 
<br /><br /><br /><br /><br /><br />
Log4j主页：http://jakarta.apache.org/log4j 
<br /><br /><br /><br />
-------------------------------------------------------------------------------- 
<br /><br /><br />
Index 
<br /><br />
Log4j的类图 
<br />
Logger：日志写出器 
<br />
Logger的输出方法 
<br />
Logger的命名规则 
<br />
Log level 
<br />
示例代码 
<br />
关于logger的两点说明 
<br />
Appender：日志目的地 
<br />
ConsoleAppender 
<br />
FileAppender 
<br />
RollingFileAppender 
<br />
Layout：日志格式化器 
<br />
PatternLayout 
<br />
patterns in PatternLayout 
<br />
Configuration：配置 
<br />
默认的log4j初始化过程 
<br />
BasicConfigurator.configure() 
<br />
xml格式的log4j配置文件概述 
<br />
在xml文件中配置appender和layout 
<br />
我自己的一个使用xml文件配置log4j环境的很简单的例子 
<br />
Log4j的编码习惯 
<br />
参考资料 
<br /><br /><br /><br />
Log4j的类图 
<br /><br /><br /><br /><br />
Logger - 日志写出器，供程序员输出日志信息 
<br />
Appender - 日志目的地，把格式化好的日志信息输出到指定的地方去 
<br />
ConsoleAppender - 目的地为控制台的Appender 
<br />
FileAppender - 目的地为文件的Appender 
<br />
RollingFileAppender - 目的地为大小受限的文件的Appender 
<br />
Layout - 日志格式化器，用来把程序员的logging request格式化成字符串 
<br />
PatternLayout - 用指定的pattern格式化logging request的Layout 
<br /><br /><br /><br />
Logger：日志写出器 
<br />
Logger对象是用来取代System.out或者System.err的日志写出器，用来供程序员输出日志信息。 
<br /><br />
Logger的输出方法 
<br />
Logger类对象提供一系列方法供程序员输出日志信息。 
<br /><br /><br /><br /><br />
------ Log4j APIs : class Logger ------ 
<br /><br /><br /><br />
// Printing methods : 
<br /><br />
public void debug(Object msg); 
<br />
public void debug(Object msg, Throwable t); 
<br /><br />
public void info(Object msg); 
<br />
public void info(Object msg, Throwable t); 
<br /><br />
public void warn(Object msg); 
<br />
public void warn(Object msg, Throwable t); 
<br /><br />
public void error(Object msg); 
<br />
public void error(Object msg, Throwable t); 
<br /><br />
public void fatal(Object msg); 
<br />
public void fatal(Object msg, Throwable t); 
<br /><br />
// Generic printing method : 
<br /><br />
public void log(Level l, Object msg); 
<br /><br /><br /><br /><br />
Logger的命名规则 
<br />
Logger由一个String类的名字识别，logger的名字是大小写敏感的，且名字之间具有继承的关系，子名有父名作为前缀，用点号.分隔。如：x.y是x.y.z的父亲。 
<br /><br />
根logger (root logger)是所有logger的祖先，它具有如下属性：1) 它总是存在的；2) 它不可以通过名字获得。 
<br /><br />
通过调用public static Logger Logger.getRootLogger()获得root logger；通过调用public static Logger
Logger.getLogger(String name)或者public static Logger Logger.getLogger(Class clazz)获得（或者创建）一个named
logger。后者相当于调用Logger.getLogger(clazz.getName())。 
<br /><br />
在某对象中，用该对象所属的类为参数，调用Logger.getLogger(Class clazz)以获得logger被认为是目前所知的最理智的命名logger的方法。 
<br /><br /><br />
Log level 
<br />
每个logger都被分配了一个日志级别 (log level)，用来控制日志信息的输出。未被分配level的logger将继承它最近的父logger的level。 
<br /><br />
每条输出到logger的日志请求(logging request)也都有一个level，如果该request的level大于等于该logger的level，则该request将被处理（称为enabled）；否则该request将被忽略。故可得知： 
<br /><br />
logger的level越低，表示该logger越详细 
<br />
logging request的level越高，表示该logging request越优先输出 
<br /><br />
Level类中预定义了五个level，它们的大小关系如下： 
<br /><br /><br />
Level.ALL &lt; Level.DEBUG &lt; Level.INFO &lt; Level.WARN &lt; Level.ERROR &lt; Level.FATAL
&lt; Level.OFF 
<br /><br /><br /><br /><br />
示例代码 
<br />
以下代码将用自己所属的类为参数，创建一个logger，启用默认配置，设置其level并向其输出若干logging request。 
<br /><br /><br />
import org.apache.log4j.Logger; 
<br />
import org.apache.log4j.BasicConfigurator; 
<br />
import org.apache.log4j.Level; 
<br /><br />
public class Log4jTest { 
<br />
public static void main(String argv[]) { 
<br /><br /><br />
// Create a logger by the name of class Log4jTest. 
<br /><br />
Logger logger = Logger.getLogger(Log4jTest.class); 
<br /><br />
// Use the default configuration. 
<br /><br />
BasicConfigurator.configure(); 
<br /><br />
// Set the logger level to Level.INFO 
<br /><br />
logger.setLevel(Level.INFO); 
<br /><br />
// This request will be disabled since Level.DEBUG &lt; Level.INFO. 
<br /><br />
logger.debug("This is debug."); 
<br /><br />
// These requests will be enabled. 
<br /><br />
logger.info("This is an info."); 
<br />
logger.warn("This is a warning."); 
<br />
logger.error("This is an error."); 
<br />
logger.fatal("This is a fatal error."); 
<br /><br />
return; 
<br />
} 
<br />
} 
<br /><br /><br /><br /><br />
关于logger的两点说明 
<br /><br />
用同名参数调用Logger.getLogger(String name)将返回同一个logger的引用。故可以在一个地方配置logger，在另外一个地方获得配置好的logger，而无须相互间传递logger的引用。 
<br />
logger的创建可以按照任意的顺序，即，父logger可以后于子logger被创建。log4j将自动维护logger的继承树。 
<br /><br /><br /><br /><br /><br />
Appender：日志目的地 
<br />
每个logger都可以拥有一个或者多个appender，每个appender表示一个日志的输出目的地，比如console或者某个文件。可以使用Logger.addAppender(Appender
app)为logger增加一个appender；可以使用Logger.removeAppender(Appender app)为logger移除一个appender。 
<br /><br />
默认情况下，logger的additive标志被设置为true，表示子logger将继承父logger的所有appenders。该选项可以被重新设置，表示子logger将不再继承父logger的appenders。 
<br /><br />
root logger拥有目标为system.out的consoleAppender，故默认情况下，所有的logger都将继承该appender。 
<br /><br /><br /><br /><br />
------ Log4j APIs : class Logger ------ 
<br /><br /><br /><br />
// 为logger对象增加或者移除一个Appender对象 :. 
<br /><br />
public void appAppender(Appender app); 
<br />
public void removeAppender(Appender app); 
<br /><br />
// 获得和设置additive标志：是否继承父logger的appenders :. 
<br />
// 注意：在设置additive标志为false时，必须保证已经为该logger设置了新的appender， :. 
<br />
// 否则log4j将报错：log4j:WARN No appenders could be found for logger (x.y.z). :. 
<br /><br />
public boolean getAdditivity(); 
<br />
public void setAdditivity(boolean additive); 
<br /><br /><br />
ConsoleAppender 
<br />
可以使用ConsoleAppender对象把日志输出到控制台。每个ConsoleAppender都有一个target，表示它的输出目的地。它可以是System.out，标准输出设备（缓冲显示屏）；或者是System.err，标准错误设备（不缓冲显示屏）。ConsoleAppender的使用方法参考如下API
:. 
<br /><br /><br /><br /><br />
------ Log4j APIs : class ConsoleAppender extends WriterAppender ------ 
<br /><br /><br /><br />
// 构造方法，使用一个Layout对象构造一个ConsoleAppender对象 :. 
<br />
// 默认情况下，ConsoleAppender的target是System.out :. 
<br /><br />
public ConsoleAppender(Layout layout); 
<br /><br />
// 构造方法，使用一个Layout对象和一个target字符串构造ConsoleAppender对象 :. 
<br />
// target的可能取值为ConsoleAppender.SYSTEM_OUT和ConsoleAppender.SYSTEM_ERR :. 
<br /><br />
public ConsoleAppender(Layout layout, String target); 
<br /><br /><br /><br /><br />
FileAppender 
<br />
可以使用FileAppender对象把日志输出到一个指定的日志文件中去。使用方法可以参考如下的API :. 
<br /><br /><br /><br /><br />
------ Log4j APIs : class FileAppender extends WriterAppender ------ 
<br /><br /><br /><br />
// 构造方法，使用一个Layout对象和日志文件名构造一个FileAppender对象 :. 
<br /><br />
public FileAppender(Layout layout, String filename) 
<br />
throws IOException; 
<br />
public FileAppender(Layout layout, String filename, boolean append) 
<br />
throws IOException; 
<br /><br /><br /><br /><br />
RollingFileAppender 
<br />
可以使用FileAppender的子类RollingFileAppender对象，把日志输出到一个指定的日志文件中。不同的是该日志文件的大小受到限制，当日志内容超出最大的尺寸时，该文件将向上滚动（最老的日志被擦除）。还可以在该类对象中指定为日志文件做多少个备份。具体使用方法参考如下API
:. 
<br /><br /><br /><br /><br />
------ Log4j APIs : class RollingFileAppender extends FileAppender ------ 
<br /><br /><br /><br />
// 构造方法，使用一个Layout对象和日志文件名构造一个RollingFileAppender对象 :. 
<br /><br />
public RollingFileAppender(Layout layout, String filename) 
<br />
throws IOException; 
<br />
public RollingFileAppender(Layout layout, String filename, boolean append) 
<br />
throws IOException; 
<br /><br />
// 获得和设置日志备份文件的个数 :. 
<br /><br />
public int getMaxBackupIndex(); 
<br />
public void setMaxBackupIndex(int index); 
<br /><br />
// 获得和设置滚动日志文件的最大尺寸 :. 
<br /><br />
public long getMaximumFileSize(); 
<br />
public void setMaximumFileSize(long size); 
<br /><br /><br /><br /><br /><br /><br />
Layout：日志格式化器 
<br />
每个appender都和一个layout相联系；layout的任务是格式化用户的logging request，appender的任务是把layout格式化好的输出内容送往指定的目的地。 
<br /><br />
PatternLayout 
<br />
PatternLayout是Layout的一个子类，用来使用类似C语言的printf函数中使用的格式控制字符串来控制日志的输出格式。使用方法参考如下API :. 
<br /><br /><br /><br /><br />
------ Log4j APIs : class PatternLayout extends Layout ------ 
<br /><br /><br /><br />
// 无参数构造方法，使用DEFAULT_CONVERSION_PATTERN构造一个PatternLayout :. 
<br />
// 注意：DEFAULT_CONVERSION_PATTERN为"%m%n"，只打印消息信息 :. 
<br /><br />
public PatternLayout(); 
<br /><br />
// 构造方法，使用自定义的pattern构造一个PatternLayout :. 
<br /><br />
public PatternLayout(String pattern); 
<br /><br />
// 获得和设置PatternLayout对象的日志pattern :. 
<br /><br />
public String getConversionPattern(); 
<br />
public void setConversionPattern(String pattern); 
<br /><br /><br /><br /><br />
patterns in PatternLayout 
<br />
未完待续 
<br /><br /><br /><br /><br />
Configuration：配置 
<br />
对log4j环境的配置就是对root logger的配置，包括把root logger设置为哪个级别(level)；为它增加哪些appender，等等。这些可以通过设置系统属性的方法来隐式地完成，也可以在程序里调用XXXConfigurator.configure()方法来显式地完成。 
<br /><br />
默认的log4j初始化过程 
<br />
Logger类的静态初始化块(static initialization block)中对log4j的环境做默认的初始化。注意：如果程序员已经通过设置系统属性的方法来配置了log4j环境，则不需要再显式地调用XXXConfigurator.configure()方法来配置log4j环境了。 
<br /><br />
Logger的静态初始化块在完成初始化过程时将检查一系列log4j定义的系统属性。它所做的事情如下： 
<br /><br />
检查系统属性log4j.defaultInitOverride，如果该属性被设置为false，则执行初始化；否则（只要不是false，无论是什么值，甚至没有值，都是否则），跳过初始化。 
<br />
把系统属性log4j.configuration的值赋给变量resource。如果该系统变量没有被定义，则把resource赋值为"log4j.properties"。注意：在apache的log4j文档中建议使用定义log4j.configuration系统属性的方法来设置默认的初始化文件是一个好方法。 
<br />
试图把resource变量转化成为一个URL对象url。如果一般的转化方法行不通，就调用org.apache.log4j.helpers.Loader.getResource(resource,
Logger.class)方法来完成转化。 
<br />
如果url以".html"结尾，则调用方法DOMConfigurator.configure(url)来完成初始化；否则，则调用方法PropertyConfigurator.configure(url)来完成初始化。如果url指定的资源不能被获得，则跳出初始化过程。 
<br /><br /><br /><br />
BasicConfigurator.configure() 
<br />
BasicConfigurator.configure()方法使用最简的方法配置log4j环境。注：所谓配置log4j环境，就是指配置root logger，因为所有其它的logger都是root
logger的后代，所以它们（默认情况下）都将继承root logger的性质。 
<br /><br />
BasicConfigurator.configure()完成的任务是： 
<br /><br />
用默认pattern创建PatternLayout对象p： 
<br />
PatternLayout p = new PatternLayout("%-4r[%t]%-5p%c%x - %m%n"); 
<br />
用p创建ConsoleAppender对象a，目标是system.out，标准输出设备： 
<br />
ConsoleAppender a = new ConsoleAppender(p,ConsoleAppender.SYSTEM_OUT); 
<br />
为root logger增加一个ConsoleAppender p： 
<br />
rootLogger.addAppender(p); 
<br />
把root logger的log level设置为DEBUG级别： 
<br />
rootLogger.setLevel(Level.DEBUG); 
<br /><br /><br /><br />
xml格式的log4j配置文件概述 
<br />
xml格式的log4j配置文件需要使用org.apache.log4j.html.DOMConfigurator.configure()方法来读入。对xml文件的语法定义可以在log4j的发布包中找到：org/apache/log4j/xml/log4j.dtd。 
<br /><br />
log4j的xml配置文件的树状结构 
<br />
log4j的xml配置文件的树状结构如下所示，注意下图只显示了常用的部分。 :. 
<br /><br /><br />
xml declaration and dtd 
<br />
| 
<br />
log4j:configuration 
<br />
| 
<br />
+-- appender (name, class) 
<br />
| | 
<br />
| +-- param (name, value) 
<br />
| +-- layout (class) 
<br />
| | 
<br />
| +-- param (name, value) 
<br />
+-- logger (name, additivity) 
<br />
| | 
<br />
| +-- level (class, value) 
<br />
| | | 
<br />
| | +-- param (name, value) 
<br />
| +-- appender-ref (ref) 
<br />
+-- root 
<br />
| 
<br />
+-- param (name, class) 
<br />
+-- level 
<br />
| | 
<br />
| +-- param (name, value) 
<br />
+-- appender-ref (ref) 
<br /><br /><br /><br /><br />
xml declaration and dtd 
<br />
xml配置文件的头部包括两个部分：xml声明和dtd声明。头部的格式如下： :. 
<br /><br /><br />
&lt;?xml version="1.0" encoding="UTF-8" ?&gt; 
<br />
&lt;!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"&gt; 
<br /><br /><br /><br /><br />
log4j:configuration (root element) 
<br /><br />
xmlns:log4j [#FIXED attribute] : 定义log4j的名字空间，取定值"http://jakarta.apache.org/log4j/" 
<br />
appender [* child] : 一个appender子元素定义一个日志输出目的地 
<br />
logger [* child] : 一个logger子元素定义一个日志写出器 
<br />
root [? child] : root子元素定义了root logger 
<br /><br /><br /><br />
appender 
<br />
appender元素定义一个日志输出目的地。 
<br /><br /><br />
name [#REQUIRED attribute] : 定义appender的名字，以便被后文引用 
<br />
class [#REQUIRED attribute] : 定义appender对象所属的类的全名 
<br />
param [* child] : 创建appender对象时传递给类构造方法的参数 
<br />
layout [? child] : 该appender使用的layout对象 
<br /><br /><br /><br />
layout 
<br />
layout元素定义与某一个appender相联系的日志格式化器。 
<br /><br /><br />
class [#REQUIRED attribute] : 定义layout对象所属的类的全名 
<br />
param [* child] : 创建layout对象时传递给类构造方法的参数 
<br /><br /><br /><br />
logger 
<br />
logger元素定义一个日志输出器。 
<br /><br /><br />
name [#REQUIRED attribute] : 定义logger的名字，以便被后文引用 
<br />
additivity [#ENUM attribute] : 取值为"true"（默认）或者"false"，是否继承父logger的属性 
<br />
level [? child] : 定义该logger的日志级别 
<br />
appender-ref [* child] : 定义该logger的输出目的地 
<br /><br /><br /><br />
root 
<br />
root元素定义根日志输出器root logger。 
<br /><br /><br />
param [* child] : 创建root logger对象时传递给类构造方法的参数 
<br />
level [? child] : 定义root logger的日志级别 
<br />
appender-ref [* child] : 定义root logger的输出目的地 
<br /><br /><br /><br />
level 
<br />
level元素定义logger对象的日志级别。 
<br /><br /><br />
class [#IMPLIED attribute] : 定义level对象所属的类，默认情况下是"org.apache.log4j.Level类 
<br />
value [#REQUIRED attribute] : 为level对象赋值。可能的取值从小到大依次为"all"、"debug"、"info"、"warn"、"error"、"fatal"和"off"。当值为"off"时表示没有任何日志信息被输出 
<br />
param [* child] : 创建level对象时传递给类构造方法的参数 
<br /><br /><br /><br />
appender-ref 
<br />
appender-ref元素引用一个appender元素的名字，为logger对象增加一个appender。 
<br /><br /><br />
ref [#REQUIRED attribute] : 一个appender元素的名字的引用 
<br />
appender-ref元素没有子元素 
<br /><br /><br /><br />
param 
<br />
param元素在创建对象时为类的构造方法提供参数。它可以成为appender、layout、filter、errorHandler、level、categoryFactory和root等元素的子元素。 
<br /><br /><br />
name and value [#REQUIRED attributes] : 提供参数的一组名值对 
<br />
param元素没有子元素 
<br /><br /><br /><br /><br /><br />
在xml文件中配置appender和layout 
<br />
创建不同的Appender对象或者不同的Layout对象要调用不同的构造方法。可以使用param子元素来设定不同的参数值。 
<br /><br />
创建ConsoleAppender对象 
<br />
ConsoleAppender的构造方法不接受其它的参数。 :. 
<br /><br /><br />
... ... ... ... 
<br />
&lt;appender name="console.log" class="org.apache.log4j.ConsoleAppender"&gt; 
<br />
&lt;layout ... &gt; 
<br />
... ... 
<br />
&lt;/layout&gt; 
<br />
&lt;/appender&gt; 
<br />
... ... ... ... 
<br /><br /><br /><br /><br />
创建FileAppender对象 
<br />
可以为FileAppender类的构造方法传递两个参数：File表示日志文件名；Append表示如文件已存在，是否把日志追加到文件尾部，可能取值为"true"和"false"（默认）。
:. 
<br /><br /><br />
... ... ... ... 
<br />
&lt;appender name="file.log" class="org.apache.log4j.FileAppender"&gt; 
<br />
&lt;param name="File" value="/tmp/log.txt" /&gt; 
<br />
&lt;param name="Append" value="false" /&gt; 
<br />
&lt;layout ... &gt; 
<br />
... ... 
<br />
&lt;/layout&gt; 
<br />
&lt;/appender&gt; 
<br />
... ... ... ... 
<br /><br /><br /><br /><br />
创建RollingFileAppender对象 
<br />
除了File和Append以外，还可以为RollingFileAppender类的构造方法传递两个参数：MaxBackupIndex备份日志文件的个数（默认是1个）；MaxFileSize表示日志文件允许的最大字节数（默认是10M）。
:. 
<br /><br /><br />
... ... ... ... 
<br />
&lt;appender name="rollingFile.log" class="org.apache.log4j.RollingFileAppender"&gt; 
<br />
&lt;param name="File" value="/tmp/rollingLog.txt" /&gt; 
<br />
&lt;param name="Append" value="false" /&gt; 
<br />
&lt;param name="MaxBackupIndex" value="2" /&gt; 
<br />
&lt;param name="MaxFileSize" value="1024" /&gt; 
<br />
&lt;layout ... &gt; 
<br />
... ... 
<br />
&lt;/layout&gt; 
<br />
&lt;/appender&gt; 
<br />
... ... ... ... 
<br /><br /><br /><br /><br />
创建PatternLayout对象 
<br />
可以为PatternLayout类的构造方法传递参数ConversionPattern。 :. 
<br /><br /><br />
... ... ... ... 
<br />
&lt;layout class="org.apache.log4j.PatternLayout&gt; 
<br />
&lt;param name="Conversion" value="%d [%t] %p - %m%n" /&gt; 
<br />
&lt;/layout&gt; 
<br />
... ... ... ... 
<br /><br /><br /><br /><br /><br /><br />
我自己的一个使用xml文件配置log4j环境的很简单的例子 
<br />
为WSOTA项目开发java web start的胖客户端时，使用了如下的xml文件配置log4j环境（文件名为wsota-rc.log4j.html）：:. 
<br /><br /><br />
&lt;?xml version="1.0" encoding="UTF-8" ?&gt; 
<br />
&lt;!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"&gt; 
<br /><br />
&lt;log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"&gt; 
<br /><br />
&lt;!-- ================================================================= --&gt; 
<br />
&lt;!-- a rolling file appender --&gt; 
<br />
&lt;!-- ================================================================= --&gt; 
<br /><br />
&lt;appender name="wsota-rc.file.log" class="org.apache.log4j.RollingFileAppender"&gt; 
<br />
&lt;param name="File" value="/tmp/wsota-rc.log" /&gt; 
<br />
&lt;param name="Append" value="false" /&gt; 
<br />
&lt;layout class="org.apache.log4j.PatternLayout"&gt; 
<br />
&lt;param name="ConversionPattern" value="%d [%t] %p - %m%n" /&gt; 
<br />
&lt;/layout&gt; 
<br />
&lt;/appender&gt; 
<br /><br />
&lt;!-- ================================================================= --&gt; 
<br />
&lt;!-- a console appender --&gt; 
<br />
&lt;!-- debug can be turned off by setting level of root to "off" --&gt; 
<br />
&lt;!-- ================================================================= --&gt; 
<br /><br />
&lt;appender name="wsota-rc.console.log" class="org.apache.log4j.ConsoleAppender"&gt; 
<br />
&lt;layout class="org.apache.log4j.PatternLayout"&gt; 
<br />
&lt;param name="ConversionPattern" value="%d [%t] %p - %m%n" /&gt; 
<br />
&lt;/layout&gt; 
<br />
&lt;/appender&gt; 
<br /><br />
&lt;!-- use this to turn on debug to a rolling file. --&gt; 
<br /><br />
&lt;root&gt; 
<br />
&lt;level value="debug" /&gt; 
<br />
&lt;appender-ref ref="wsota-rc.file.log" /&gt; 
<br />
&lt;/root&gt; 
<br /><br />
&lt;!-- use this to turn on debug to console. --&gt; 
<br />
&lt;!-- 
<br />
&lt;root&gt; 
<br />
&lt;level value="off" /&gt; 
<br />
&lt;appender-ref ref="wsota-rc.console.log" /&gt; 
<br />
&lt;/root&gt; 
<br />
--&gt; 
<br /><br /><br />
&lt;!-- use this to turn off debug. --&gt; 
<br />
&lt;!-- 
<br />
&lt;root&gt; 
<br />
&lt;level value="off" /&gt; 
<br />
&lt;appender-ref ref="wsota-rc.console.log" /&gt; 
<br />
&lt;/root&gt; 
<br />
--&gt; 
<br /><br />
&lt;/log4j:configuration&gt; 
<br /><br /><br />
在胖客户程序中使用了如下代码来使用外部xml文件配置log4j环境，注意该代码段位于程序的main class的静态初始化块中，含有以下代码的类和xml配置文件在同一个目录下：:. 
<br /><br /><br />
import org.apache.log4j.html.DOMConfigurator; 
<br /><br />
public class SapFrame extends JFrame { 
<br />
static { 
<br />
DOMConfigurator.configure(SapFrame.class.getResource("wsota-rc.log4j.html")); 
<br />
} 
<br />
... ... ... ... 
<br />
} 
<br /><br /><br /><br /><br /><br /><br />
Log4j的编码习惯 
<br /><br />
让每个类都拥有一个private static的Logger对象，用来输出该类中的全部日志信息 
<br />
使用xml文件来完成对log4j环境的配置。在项目的main class中的静态初始化块里放log4j环境的配置代码。注意：在一个项目中，log4j环境只需要被配置一次，而不是在每个使用了logger的类里都需要调用一次 
<br />
用MyClass.class作为参数创建该类的静态Logger对象 
<br />
补充中... 
<br /><br /></td>
              </tr>
            </tbody>
          </table>
        </p>
        <img width="0" height="0" src="http://www.hifar.com/blog/aggbug.ashx?id=c7f0b35a-6564-4009-a261-1745e8e802b2" />
      </body>
      <title>一个log4j的学习笔计</title>
      <guid isPermaLink="false">http://www.hifar.com/blog/PermaLink,guid,c7f0b35a-6564-4009-a261-1745e8e802b2.aspx</guid>
      <link>http://www.hifar.com/blog/2004/12/20/%e4%b8%80%e4%b8%aalog4j%e7%9a%84%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%a1.aspx</link>
      <pubDate>Mon, 20 Dec 2004 05:00:42 GMT</pubDate>
      <description>&lt;p&gt;
&lt;table style="TABLE-LAYOUT: fixed" cellspacing=0 cellpadding=10 width="100%" border=0&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=middle&gt;
&lt;span class=title&gt;一个log4j的学习笔计&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
&lt;span class=highlight1&gt;转贴：&lt;/span&gt;snow&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=highlight1&gt;日期：&lt;/span&gt;2004-09-01&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=highlight1&gt;人气：&lt;/span&gt;76&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=middle&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=content style="LEFT: 0px; WIDTH: 100%; WORD-WRAP: break-word"&gt;
Log4j 学习笔记 
&lt;br&gt;
&lt;br&gt;
by heavyz 
&lt;br&gt;
2003-04-15 
&lt;br&gt;
&lt;br&gt;
转自：http://zooo.51.net/heavyz_cs/notebook/log4j.html 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
-------------------------------------------------------------------------------- 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
Log4j主页：http://jakarta.apache.org/log4j 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
-------------------------------------------------------------------------------- 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
Index 
&lt;br&gt;
&lt;br&gt;
Log4j的类图 
&lt;br&gt;
Logger：日志写出器 
&lt;br&gt;
Logger的输出方法 
&lt;br&gt;
Logger的命名规则 
&lt;br&gt;
Log level 
&lt;br&gt;
示例代码 
&lt;br&gt;
关于logger的两点说明 
&lt;br&gt;
Appender：日志目的地 
&lt;br&gt;
ConsoleAppender 
&lt;br&gt;
FileAppender 
&lt;br&gt;
RollingFileAppender 
&lt;br&gt;
Layout：日志格式化器 
&lt;br&gt;
PatternLayout 
&lt;br&gt;
patterns in PatternLayout 
&lt;br&gt;
Configuration：配置 
&lt;br&gt;
默认的log4j初始化过程 
&lt;br&gt;
BasicConfigurator.configure() 
&lt;br&gt;
xml格式的log4j配置文件概述 
&lt;br&gt;
在xml文件中配置appender和layout 
&lt;br&gt;
我自己的一个使用xml文件配置log4j环境的很简单的例子 
&lt;br&gt;
Log4j的编码习惯 
&lt;br&gt;
参考资料 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
Log4j的类图 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
Logger - 日志写出器，供程序员输出日志信息 
&lt;br&gt;
Appender - 日志目的地，把格式化好的日志信息输出到指定的地方去 
&lt;br&gt;
ConsoleAppender - 目的地为控制台的Appender 
&lt;br&gt;
FileAppender - 目的地为文件的Appender 
&lt;br&gt;
RollingFileAppender - 目的地为大小受限的文件的Appender 
&lt;br&gt;
Layout - 日志格式化器，用来把程序员的logging request格式化成字符串 
&lt;br&gt;
PatternLayout - 用指定的pattern格式化logging request的Layout 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
Logger：日志写出器 
&lt;br&gt;
Logger对象是用来取代System.out或者System.err的日志写出器，用来供程序员输出日志信息。 
&lt;br&gt;
&lt;br&gt;
Logger的输出方法 
&lt;br&gt;
Logger类对象提供一系列方法供程序员输出日志信息。 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
------ Log4j APIs : class Logger ------ 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
// Printing methods : 
&lt;br&gt;
&lt;br&gt;
public void debug(Object msg); 
&lt;br&gt;
public void debug(Object msg, Throwable t); 
&lt;br&gt;
&lt;br&gt;
public void info(Object msg); 
&lt;br&gt;
public void info(Object msg, Throwable t); 
&lt;br&gt;
&lt;br&gt;
public void warn(Object msg); 
&lt;br&gt;
public void warn(Object msg, Throwable t); 
&lt;br&gt;
&lt;br&gt;
public void error(Object msg); 
&lt;br&gt;
public void error(Object msg, Throwable t); 
&lt;br&gt;
&lt;br&gt;
public void fatal(Object msg); 
&lt;br&gt;
public void fatal(Object msg, Throwable t); 
&lt;br&gt;
&lt;br&gt;
// Generic printing method : 
&lt;br&gt;
&lt;br&gt;
public void log(Level l, Object msg); 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
Logger的命名规则 
&lt;br&gt;
Logger由一个String类的名字识别，logger的名字是大小写敏感的，且名字之间具有继承的关系，子名有父名作为前缀，用点号.分隔。如：x.y是x.y.z的父亲。 
&lt;br&gt;
&lt;br&gt;
根logger (root logger)是所有logger的祖先，它具有如下属性：1) 它总是存在的；2) 它不可以通过名字获得。 
&lt;br&gt;
&lt;br&gt;
通过调用public static Logger Logger.getRootLogger()获得root logger；通过调用public static Logger
Logger.getLogger(String name)或者public static Logger Logger.getLogger(Class clazz)获得（或者创建）一个named
logger。后者相当于调用Logger.getLogger(clazz.getName())。 
&lt;br&gt;
&lt;br&gt;
在某对象中，用该对象所属的类为参数，调用Logger.getLogger(Class clazz)以获得logger被认为是目前所知的最理智的命名logger的方法。 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
Log level 
&lt;br&gt;
每个logger都被分配了一个日志级别 (log level)，用来控制日志信息的输出。未被分配level的logger将继承它最近的父logger的level。 
&lt;br&gt;
&lt;br&gt;
每条输出到logger的日志请求(logging request)也都有一个level，如果该request的level大于等于该logger的level，则该request将被处理（称为enabled）；否则该request将被忽略。故可得知： 
&lt;br&gt;
&lt;br&gt;
logger的level越低，表示该logger越详细 
&lt;br&gt;
logging request的level越高，表示该logging request越优先输出 
&lt;br&gt;
&lt;br&gt;
Level类中预定义了五个level，它们的大小关系如下： 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
Level.ALL &amp;lt; Level.DEBUG &amp;lt; Level.INFO &amp;lt; Level.WARN &amp;lt; Level.ERROR &amp;lt; Level.FATAL
&amp;lt; Level.OFF 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
示例代码 
&lt;br&gt;
以下代码将用自己所属的类为参数，创建一个logger，启用默认配置，设置其level并向其输出若干logging request。 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
import org.apache.log4j.Logger; 
&lt;br&gt;
import org.apache.log4j.BasicConfigurator; 
&lt;br&gt;
import org.apache.log4j.Level; 
&lt;br&gt;
&lt;br&gt;
public class Log4jTest { 
&lt;br&gt;
public static void main(String argv[]) { 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
// Create a logger by the name of class Log4jTest. 
&lt;br&gt;
&lt;br&gt;
Logger logger = Logger.getLogger(Log4jTest.class); 
&lt;br&gt;
&lt;br&gt;
// Use the default configuration. 
&lt;br&gt;
&lt;br&gt;
BasicConfigurator.configure(); 
&lt;br&gt;
&lt;br&gt;
// Set the logger level to Level.INFO 
&lt;br&gt;
&lt;br&gt;
logger.setLevel(Level.INFO); 
&lt;br&gt;
&lt;br&gt;
// This request will be disabled since Level.DEBUG &amp;lt; Level.INFO. 
&lt;br&gt;
&lt;br&gt;
logger.debug("This is debug."); 
&lt;br&gt;
&lt;br&gt;
// These requests will be enabled. 
&lt;br&gt;
&lt;br&gt;
logger.info("This is an info."); 
&lt;br&gt;
logger.warn("This is a warning."); 
&lt;br&gt;
logger.error("This is an error."); 
&lt;br&gt;
logger.fatal("This is a fatal error."); 
&lt;br&gt;
&lt;br&gt;
return; 
&lt;br&gt;
} 
&lt;br&gt;
} 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
关于logger的两点说明 
&lt;br&gt;
&lt;br&gt;
用同名参数调用Logger.getLogger(String name)将返回同一个logger的引用。故可以在一个地方配置logger，在另外一个地方获得配置好的logger，而无须相互间传递logger的引用。 
&lt;br&gt;
logger的创建可以按照任意的顺序，即，父logger可以后于子logger被创建。log4j将自动维护logger的继承树。 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
Appender：日志目的地 
&lt;br&gt;
每个logger都可以拥有一个或者多个appender，每个appender表示一个日志的输出目的地，比如console或者某个文件。可以使用Logger.addAppender(Appender
app)为logger增加一个appender；可以使用Logger.removeAppender(Appender app)为logger移除一个appender。 
&lt;br&gt;
&lt;br&gt;
默认情况下，logger的additive标志被设置为true，表示子logger将继承父logger的所有appenders。该选项可以被重新设置，表示子logger将不再继承父logger的appenders。 
&lt;br&gt;
&lt;br&gt;
root logger拥有目标为system.out的consoleAppender，故默认情况下，所有的logger都将继承该appender。 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
------ Log4j APIs : class Logger ------ 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
// 为logger对象增加或者移除一个Appender对象 :. 
&lt;br&gt;
&lt;br&gt;
public void appAppender(Appender app); 
&lt;br&gt;
public void removeAppender(Appender app); 
&lt;br&gt;
&lt;br&gt;
// 获得和设置additive标志：是否继承父logger的appenders :. 
&lt;br&gt;
// 注意：在设置additive标志为false时，必须保证已经为该logger设置了新的appender， :. 
&lt;br&gt;
// 否则log4j将报错：log4j:WARN No appenders could be found for logger (x.y.z). :. 
&lt;br&gt;
&lt;br&gt;
public boolean getAdditivity(); 
&lt;br&gt;
public void setAdditivity(boolean additive); 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
ConsoleAppender 
&lt;br&gt;
可以使用ConsoleAppender对象把日志输出到控制台。每个ConsoleAppender都有一个target，表示它的输出目的地。它可以是System.out，标准输出设备（缓冲显示屏）；或者是System.err，标准错误设备（不缓冲显示屏）。ConsoleAppender的使用方法参考如下API
:. 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
------ Log4j APIs : class ConsoleAppender extends WriterAppender ------ 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
// 构造方法，使用一个Layout对象构造一个ConsoleAppender对象 :. 
&lt;br&gt;
// 默认情况下，ConsoleAppender的target是System.out :. 
&lt;br&gt;
&lt;br&gt;
public ConsoleAppender(Layout layout); 
&lt;br&gt;
&lt;br&gt;
// 构造方法，使用一个Layout对象和一个target字符串构造ConsoleAppender对象 :. 
&lt;br&gt;
// target的可能取值为ConsoleAppender.SYSTEM_OUT和ConsoleAppender.SYSTEM_ERR :. 
&lt;br&gt;
&lt;br&gt;
public ConsoleAppender(Layout layout, String target); 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
FileAppender 
&lt;br&gt;
可以使用FileAppender对象把日志输出到一个指定的日志文件中去。使用方法可以参考如下的API :. 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
------ Log4j APIs : class FileAppender extends WriterAppender ------ 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
// 构造方法，使用一个Layout对象和日志文件名构造一个FileAppender对象 :. 
&lt;br&gt;
&lt;br&gt;
public FileAppender(Layout layout, String filename) 
&lt;br&gt;
throws IOException; 
&lt;br&gt;
public FileAppender(Layout layout, String filename, boolean append) 
&lt;br&gt;
throws IOException; 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
RollingFileAppender 
&lt;br&gt;
可以使用FileAppender的子类RollingFileAppender对象，把日志输出到一个指定的日志文件中。不同的是该日志文件的大小受到限制，当日志内容超出最大的尺寸时，该文件将向上滚动（最老的日志被擦除）。还可以在该类对象中指定为日志文件做多少个备份。具体使用方法参考如下API
:. 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
------ Log4j APIs : class RollingFileAppender extends FileAppender ------ 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
// 构造方法，使用一个Layout对象和日志文件名构造一个RollingFileAppender对象 :. 
&lt;br&gt;
&lt;br&gt;
public RollingFileAppender(Layout layout, String filename) 
&lt;br&gt;
throws IOException; 
&lt;br&gt;
public RollingFileAppender(Layout layout, String filename, boolean append) 
&lt;br&gt;
throws IOException; 
&lt;br&gt;
&lt;br&gt;
// 获得和设置日志备份文件的个数 :. 
&lt;br&gt;
&lt;br&gt;
public int getMaxBackupIndex(); 
&lt;br&gt;
public void setMaxBackupIndex(int index); 
&lt;br&gt;
&lt;br&gt;
// 获得和设置滚动日志文件的最大尺寸 :. 
&lt;br&gt;
&lt;br&gt;
public long getMaximumFileSize(); 
&lt;br&gt;
public void setMaximumFileSize(long size); 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
Layout：日志格式化器 
&lt;br&gt;
每个appender都和一个layout相联系；layout的任务是格式化用户的logging request，appender的任务是把layout格式化好的输出内容送往指定的目的地。 
&lt;br&gt;
&lt;br&gt;
PatternLayout 
&lt;br&gt;
PatternLayout是Layout的一个子类，用来使用类似C语言的printf函数中使用的格式控制字符串来控制日志的输出格式。使用方法参考如下API :. 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
------ Log4j APIs : class PatternLayout extends Layout ------ 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
// 无参数构造方法，使用DEFAULT_CONVERSION_PATTERN构造一个PatternLayout :. 
&lt;br&gt;
// 注意：DEFAULT_CONVERSION_PATTERN为"%m%n"，只打印消息信息 :. 
&lt;br&gt;
&lt;br&gt;
public PatternLayout(); 
&lt;br&gt;
&lt;br&gt;
// 构造方法，使用自定义的pattern构造一个PatternLayout :. 
&lt;br&gt;
&lt;br&gt;
public PatternLayout(String pattern); 
&lt;br&gt;
&lt;br&gt;
// 获得和设置PatternLayout对象的日志pattern :. 
&lt;br&gt;
&lt;br&gt;
public String getConversionPattern(); 
&lt;br&gt;
public void setConversionPattern(String pattern); 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
patterns in PatternLayout 
&lt;br&gt;
未完待续 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
Configuration：配置 
&lt;br&gt;
对log4j环境的配置就是对root logger的配置，包括把root logger设置为哪个级别(level)；为它增加哪些appender，等等。这些可以通过设置系统属性的方法来隐式地完成，也可以在程序里调用XXXConfigurator.configure()方法来显式地完成。 
&lt;br&gt;
&lt;br&gt;
默认的log4j初始化过程 
&lt;br&gt;
Logger类的静态初始化块(static initialization block)中对log4j的环境做默认的初始化。注意：如果程序员已经通过设置系统属性的方法来配置了log4j环境，则不需要再显式地调用XXXConfigurator.configure()方法来配置log4j环境了。 
&lt;br&gt;
&lt;br&gt;
Logger的静态初始化块在完成初始化过程时将检查一系列log4j定义的系统属性。它所做的事情如下： 
&lt;br&gt;
&lt;br&gt;
检查系统属性log4j.defaultInitOverride，如果该属性被设置为false，则执行初始化；否则（只要不是false，无论是什么值，甚至没有值，都是否则），跳过初始化。 
&lt;br&gt;
把系统属性log4j.configuration的值赋给变量resource。如果该系统变量没有被定义，则把resource赋值为"log4j.properties"。注意：在apache的log4j文档中建议使用定义log4j.configuration系统属性的方法来设置默认的初始化文件是一个好方法。 
&lt;br&gt;
试图把resource变量转化成为一个URL对象url。如果一般的转化方法行不通，就调用org.apache.log4j.helpers.Loader.getResource(resource,
Logger.class)方法来完成转化。 
&lt;br&gt;
如果url以".html"结尾，则调用方法DOMConfigurator.configure(url)来完成初始化；否则，则调用方法PropertyConfigurator.configure(url)来完成初始化。如果url指定的资源不能被获得，则跳出初始化过程。 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
BasicConfigurator.configure() 
&lt;br&gt;
BasicConfigurator.configure()方法使用最简的方法配置log4j环境。注：所谓配置log4j环境，就是指配置root logger，因为所有其它的logger都是root
logger的后代，所以它们（默认情况下）都将继承root logger的性质。 
&lt;br&gt;
&lt;br&gt;
BasicConfigurator.configure()完成的任务是： 
&lt;br&gt;
&lt;br&gt;
用默认pattern创建PatternLayout对象p： 
&lt;br&gt;
PatternLayout p = new PatternLayout("%-4r[%t]%-5p%c%x - %m%n"); 
&lt;br&gt;
用p创建ConsoleAppender对象a，目标是system.out，标准输出设备： 
&lt;br&gt;
ConsoleAppender a = new ConsoleAppender(p,ConsoleAppender.SYSTEM_OUT); 
&lt;br&gt;
为root logger增加一个ConsoleAppender p： 
&lt;br&gt;
rootLogger.addAppender(p); 
&lt;br&gt;
把root logger的log level设置为DEBUG级别： 
&lt;br&gt;
rootLogger.setLevel(Level.DEBUG); 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
xml格式的log4j配置文件概述 
&lt;br&gt;
xml格式的log4j配置文件需要使用org.apache.log4j.html.DOMConfigurator.configure()方法来读入。对xml文件的语法定义可以在log4j的发布包中找到：org/apache/log4j/xml/log4j.dtd。 
&lt;br&gt;
&lt;br&gt;
log4j的xml配置文件的树状结构 
&lt;br&gt;
log4j的xml配置文件的树状结构如下所示，注意下图只显示了常用的部分。 :. 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
xml declaration and dtd 
&lt;br&gt;
| 
&lt;br&gt;
log4j:configuration 
&lt;br&gt;
| 
&lt;br&gt;
+-- appender (name, class) 
&lt;br&gt;
| | 
&lt;br&gt;
| +-- param (name, value) 
&lt;br&gt;
| +-- layout (class) 
&lt;br&gt;
| | 
&lt;br&gt;
| +-- param (name, value) 
&lt;br&gt;
+-- logger (name, additivity) 
&lt;br&gt;
| | 
&lt;br&gt;
| +-- level (class, value) 
&lt;br&gt;
| | | 
&lt;br&gt;
| | +-- param (name, value) 
&lt;br&gt;
| +-- appender-ref (ref) 
&lt;br&gt;
+-- root 
&lt;br&gt;
| 
&lt;br&gt;
+-- param (name, class) 
&lt;br&gt;
+-- level 
&lt;br&gt;
| | 
&lt;br&gt;
| +-- param (name, value) 
&lt;br&gt;
+-- appender-ref (ref) 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
xml declaration and dtd 
&lt;br&gt;
xml配置文件的头部包括两个部分：xml声明和dtd声明。头部的格式如下： :. 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&amp;lt;?xml version="1.0" encoding="UTF-8" ?&amp;gt; 
&lt;br&gt;
&amp;lt;!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"&amp;gt; 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
log4j:configuration (root element) 
&lt;br&gt;
&lt;br&gt;
xmlns:log4j [#FIXED attribute] : 定义log4j的名字空间，取定值"http://jakarta.apache.org/log4j/" 
&lt;br&gt;
appender [* child] : 一个appender子元素定义一个日志输出目的地 
&lt;br&gt;
logger [* child] : 一个logger子元素定义一个日志写出器 
&lt;br&gt;
root [? child] : root子元素定义了root logger 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
appender 
&lt;br&gt;
appender元素定义一个日志输出目的地。 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
name [#REQUIRED attribute] : 定义appender的名字，以便被后文引用 
&lt;br&gt;
class [#REQUIRED attribute] : 定义appender对象所属的类的全名 
&lt;br&gt;
param [* child] : 创建appender对象时传递给类构造方法的参数 
&lt;br&gt;
layout [? child] : 该appender使用的layout对象 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
layout 
&lt;br&gt;
layout元素定义与某一个appender相联系的日志格式化器。 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
class [#REQUIRED attribute] : 定义layout对象所属的类的全名 
&lt;br&gt;
param [* child] : 创建layout对象时传递给类构造方法的参数 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
logger 
&lt;br&gt;
logger元素定义一个日志输出器。 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
name [#REQUIRED attribute] : 定义logger的名字，以便被后文引用 
&lt;br&gt;
additivity [#ENUM attribute] : 取值为"true"（默认）或者"false"，是否继承父logger的属性 
&lt;br&gt;
level [? child] : 定义该logger的日志级别 
&lt;br&gt;
appender-ref [* child] : 定义该logger的输出目的地 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
root 
&lt;br&gt;
root元素定义根日志输出器root logger。 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
param [* child] : 创建root logger对象时传递给类构造方法的参数 
&lt;br&gt;
level [? child] : 定义root logger的日志级别 
&lt;br&gt;
appender-ref [* child] : 定义root logger的输出目的地 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
level 
&lt;br&gt;
level元素定义logger对象的日志级别。 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
class [#IMPLIED attribute] : 定义level对象所属的类，默认情况下是"org.apache.log4j.Level类 
&lt;br&gt;
value [#REQUIRED attribute] : 为level对象赋值。可能的取值从小到大依次为"all"、"debug"、"info"、"warn"、"error"、"fatal"和"off"。当值为"off"时表示没有任何日志信息被输出 
&lt;br&gt;
param [* child] : 创建level对象时传递给类构造方法的参数 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
appender-ref 
&lt;br&gt;
appender-ref元素引用一个appender元素的名字，为logger对象增加一个appender。 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
ref [#REQUIRED attribute] : 一个appender元素的名字的引用 
&lt;br&gt;
appender-ref元素没有子元素 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
param 
&lt;br&gt;
param元素在创建对象时为类的构造方法提供参数。它可以成为appender、layout、filter、errorHandler、level、categoryFactory和root等元素的子元素。 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
name and value [#REQUIRED attributes] : 提供参数的一组名值对 
&lt;br&gt;
param元素没有子元素 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
在xml文件中配置appender和layout 
&lt;br&gt;
创建不同的Appender对象或者不同的Layout对象要调用不同的构造方法。可以使用param子元素来设定不同的参数值。 
&lt;br&gt;
&lt;br&gt;
创建ConsoleAppender对象 
&lt;br&gt;
ConsoleAppender的构造方法不接受其它的参数。 :. 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
... ... ... ... 
&lt;br&gt;
&amp;lt;appender name="console.log" class="org.apache.log4j.ConsoleAppender"&amp;gt; 
&lt;br&gt;
&amp;lt;layout ... &amp;gt; 
&lt;br&gt;
... ... 
&lt;br&gt;
&amp;lt;/layout&amp;gt; 
&lt;br&gt;
&amp;lt;/appender&amp;gt; 
&lt;br&gt;
... ... ... ... 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
创建FileAppender对象 
&lt;br&gt;
可以为FileAppender类的构造方法传递两个参数：File表示日志文件名；Append表示如文件已存在，是否把日志追加到文件尾部，可能取值为"true"和"false"（默认）。
:. 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
... ... ... ... 
&lt;br&gt;
&amp;lt;appender name="file.log" class="org.apache.log4j.FileAppender"&amp;gt; 
&lt;br&gt;
&amp;lt;param name="File" value="/tmp/log.txt" /&amp;gt; 
&lt;br&gt;
&amp;lt;param name="Append" value="false" /&amp;gt; 
&lt;br&gt;
&amp;lt;layout ... &amp;gt; 
&lt;br&gt;
... ... 
&lt;br&gt;
&amp;lt;/layout&amp;gt; 
&lt;br&gt;
&amp;lt;/appender&amp;gt; 
&lt;br&gt;
... ... ... ... 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
创建RollingFileAppender对象 
&lt;br&gt;
除了File和Append以外，还可以为RollingFileAppender类的构造方法传递两个参数：MaxBackupIndex备份日志文件的个数（默认是1个）；MaxFileSize表示日志文件允许的最大字节数（默认是10M）。
:. 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
... ... ... ... 
&lt;br&gt;
&amp;lt;appender name="rollingFile.log" class="org.apache.log4j.RollingFileAppender"&amp;gt; 
&lt;br&gt;
&amp;lt;param name="File" value="/tmp/rollingLog.txt" /&amp;gt; 
&lt;br&gt;
&amp;lt;param name="Append" value="false" /&amp;gt; 
&lt;br&gt;
&amp;lt;param name="MaxBackupIndex" value="2" /&amp;gt; 
&lt;br&gt;
&amp;lt;param name="MaxFileSize" value="1024" /&amp;gt; 
&lt;br&gt;
&amp;lt;layout ... &amp;gt; 
&lt;br&gt;
... ... 
&lt;br&gt;
&amp;lt;/layout&amp;gt; 
&lt;br&gt;
&amp;lt;/appender&amp;gt; 
&lt;br&gt;
... ... ... ... 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
创建PatternLayout对象 
&lt;br&gt;
可以为PatternLayout类的构造方法传递参数ConversionPattern。 :. 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
... ... ... ... 
&lt;br&gt;
&amp;lt;layout class="org.apache.log4j.PatternLayout&amp;gt; 
&lt;br&gt;
&amp;lt;param name="Conversion" value="%d [%t] %p - %m%n" /&amp;gt; 
&lt;br&gt;
&amp;lt;/layout&amp;gt; 
&lt;br&gt;
... ... ... ... 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
我自己的一个使用xml文件配置log4j环境的很简单的例子 
&lt;br&gt;
为WSOTA项目开发java web start的胖客户端时，使用了如下的xml文件配置log4j环境（文件名为wsota-rc.log4j.html）：:. 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&amp;lt;?xml version="1.0" encoding="UTF-8" ?&amp;gt; 
&lt;br&gt;
&amp;lt;!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"&amp;gt; 
&lt;br&gt;
&lt;br&gt;
&amp;lt;log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"&amp;gt; 
&lt;br&gt;
&lt;br&gt;
&amp;lt;!-- ================================================================= --&amp;gt; 
&lt;br&gt;
&amp;lt;!-- a rolling file appender --&amp;gt; 
&lt;br&gt;
&amp;lt;!-- ================================================================= --&amp;gt; 
&lt;br&gt;
&lt;br&gt;
&amp;lt;appender name="wsota-rc.file.log" class="org.apache.log4j.RollingFileAppender"&amp;gt; 
&lt;br&gt;
&amp;lt;param name="File" value="/tmp/wsota-rc.log" /&amp;gt; 
&lt;br&gt;
&amp;lt;param name="Append" value="false" /&amp;gt; 
&lt;br&gt;
&amp;lt;layout class="org.apache.log4j.PatternLayout"&amp;gt; 
&lt;br&gt;
&amp;lt;param name="ConversionPattern" value="%d [%t] %p - %m%n" /&amp;gt; 
&lt;br&gt;
&amp;lt;/layout&amp;gt; 
&lt;br&gt;
&amp;lt;/appender&amp;gt; 
&lt;br&gt;
&lt;br&gt;
&amp;lt;!-- ================================================================= --&amp;gt; 
&lt;br&gt;
&amp;lt;!-- a console appender --&amp;gt; 
&lt;br&gt;
&amp;lt;!-- debug can be turned off by setting level of root to "off" --&amp;gt; 
&lt;br&gt;
&amp;lt;!-- ================================================================= --&amp;gt; 
&lt;br&gt;
&lt;br&gt;
&amp;lt;appender name="wsota-rc.console.log" class="org.apache.log4j.ConsoleAppender"&amp;gt; 
&lt;br&gt;
&amp;lt;layout class="org.apache.log4j.PatternLayout"&amp;gt; 
&lt;br&gt;
&amp;lt;param name="ConversionPattern" value="%d [%t] %p - %m%n" /&amp;gt; 
&lt;br&gt;
&amp;lt;/layout&amp;gt; 
&lt;br&gt;
&amp;lt;/appender&amp;gt; 
&lt;br&gt;
&lt;br&gt;
&amp;lt;!-- use this to turn on debug to a rolling file. --&amp;gt; 
&lt;br&gt;
&lt;br&gt;
&amp;lt;root&amp;gt; 
&lt;br&gt;
&amp;lt;level value="debug" /&amp;gt; 
&lt;br&gt;
&amp;lt;appender-ref ref="wsota-rc.file.log" /&amp;gt; 
&lt;br&gt;
&amp;lt;/root&amp;gt; 
&lt;br&gt;
&lt;br&gt;
&amp;lt;!-- use this to turn on debug to console. --&amp;gt; 
&lt;br&gt;
&amp;lt;!-- 
&lt;br&gt;
&amp;lt;root&amp;gt; 
&lt;br&gt;
&amp;lt;level value="off" /&amp;gt; 
&lt;br&gt;
&amp;lt;appender-ref ref="wsota-rc.console.log" /&amp;gt; 
&lt;br&gt;
&amp;lt;/root&amp;gt; 
&lt;br&gt;
--&amp;gt; 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&amp;lt;!-- use this to turn off debug. --&amp;gt; 
&lt;br&gt;
&amp;lt;!-- 
&lt;br&gt;
&amp;lt;root&amp;gt; 
&lt;br&gt;
&amp;lt;level value="off" /&amp;gt; 
&lt;br&gt;
&amp;lt;appender-ref ref="wsota-rc.console.log" /&amp;gt; 
&lt;br&gt;
&amp;lt;/root&amp;gt; 
&lt;br&gt;
--&amp;gt; 
&lt;br&gt;
&lt;br&gt;
&amp;lt;/log4j:configuration&amp;gt; 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
在胖客户程序中使用了如下代码来使用外部xml文件配置log4j环境，注意该代码段位于程序的main class的静态初始化块中，含有以下代码的类和xml配置文件在同一个目录下：:. 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
import org.apache.log4j.html.DOMConfigurator; 
&lt;br&gt;
&lt;br&gt;
public class SapFrame extends JFrame { 
&lt;br&gt;
static { 
&lt;br&gt;
DOMConfigurator.configure(SapFrame.class.getResource("wsota-rc.log4j.html")); 
&lt;br&gt;
} 
&lt;br&gt;
... ... ... ... 
&lt;br&gt;
} 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
Log4j的编码习惯 
&lt;br&gt;
&lt;br&gt;
让每个类都拥有一个private static的Logger对象，用来输出该类中的全部日志信息 
&lt;br&gt;
使用xml文件来完成对log4j环境的配置。在项目的main class中的静态初始化块里放log4j环境的配置代码。注意：在一个项目中，log4j环境只需要被配置一次，而不是在每个使用了logger的类里都需要调用一次 
&lt;br&gt;
用MyClass.class作为参数创建该类的静态Logger对象 
&lt;br&gt;
补充中... 
&lt;br&gt;
&lt;br&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.hifar.com/blog/aggbug.ashx?id=c7f0b35a-6564-4009-a261-1745e8e802b2" /&gt;</description>
      <category>Java 技术</category>
      <category>文摘和收藏</category>
    </item>
    <item>
      <trackback:ping>http://www.hifar.com/blog/Trackback.aspx?guid=4d67ce90-6613-4539-befd-28f2db7e04ad</trackback:ping>
      <pingback:server>http://www.hifar.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.hifar.com/blog/PermaLink,guid,4d67ce90-6613-4539-befd-28f2db7e04ad.aspx</pingback:target>
      <dc:creator>Jimmy Gao</dc:creator>
      <title>Struts Validator 开发指南</title>
      <guid isPermaLink="false">http://www.hifar.com/blog/PermaLink,guid,4d67ce90-6613-4539-befd-28f2db7e04ad.aspx</guid>
      <link>http://www.hifar.com/blog/2004/12/07/StrutsValidator%e5%bc%80%e5%8f%91%e6%8c%87%e5%8d%97.aspx</link>
      <pubDate>Tue, 07 Dec 2004 16:09:00 GMT</pubDate>
      <description>&lt;p class=MsoNormal style="TEXT-INDENT: 48pt; TEXT-ALIGN: center" align=center&gt;
&lt;span lang=EN-US style="FONT-SIZE: 24pt"&gt;Struts &lt;span class=SpellE&gt;Validator&lt;/span&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 24pt; FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;开发指南&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 24pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoToc1 style="TEXT-INDENT: 20.1pt; tab-stops: right dotted 414.8pt"&gt;
&lt;span lang=EN-US&gt;&lt;span class=MsoHyperlink&gt;&lt;span style="mso-no-proof: yes"&gt;&lt;a href="http://xrh.vip.sina.com/#_Toc67710105"&gt;&lt;span lang=EN-US style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&lt;span lang=EN-US&gt;使&lt;/span&gt;&lt;/span&gt;Struts&lt;span lang=EN-US style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&lt;span lang=EN-US&gt;支持&lt;/span&gt;&lt;/span&gt;Validator&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;&lt;span style="mso-tab-count: 1 dotted"&gt;.. &lt;/span&gt;&lt;/span&gt;&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;1&lt;/span&gt;&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; TEXT-TRANSFORM: none; mso-bidi-font-size: 12.0pt; mso-no-proof: yes"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoToc1 style="TEXT-INDENT: 20.1pt; tab-stops: right dotted 414.8pt"&gt;
&lt;span class=MsoHyperlink&gt;&lt;span lang=EN-US style="mso-no-proof: yes"&gt;&lt;a href="http://xrh.vip.sina.com/#_Toc67710106"&gt;Validator-rules.xml&lt;span lang=EN-US style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&lt;span lang=EN-US&gt;文件&lt;/span&gt;&lt;/span&gt;&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;&lt;span style="mso-tab-count: 1 dotted"&gt;.... &lt;/span&gt;&lt;/span&gt;&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;2&lt;/span&gt;&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; TEXT-TRANSFORM: none; mso-bidi-font-size: 12.0pt; mso-no-proof: yes"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoToc1 style="TEXT-INDENT: 20.1pt; tab-stops: right dotted 414.8pt"&gt;
&lt;span class=MsoHyperlink&gt;&lt;span lang=EN-US style="mso-no-proof: yes"&gt;&lt;a href="http://xrh.vip.sina.com/#_Toc67710107"&gt;Validator.xml &lt;span lang=EN-US style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&lt;span lang=EN-US&gt;文件&lt;/span&gt;&lt;/span&gt;&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;&lt;span style="mso-tab-count: 1 dotted"&gt;.... &lt;/span&gt;&lt;/span&gt;&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;2&lt;/span&gt;&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; TEXT-TRANSFORM: none; mso-bidi-font-size: 12.0pt; mso-no-proof: yes"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoToc2 style="TEXT-INDENT: 20pt; tab-stops: right dotted 414.8pt"&gt;
&lt;span class=MsoHyperlink&gt;&lt;span lang=EN-US style="TEXT-TRANSFORM: uppercase; FONT-VARIANT: normal! important; mso-no-proof: yes"&gt;&lt;a href="http://xrh.vip.sina.com/#_Toc67710108"&gt;Required
Validator&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;&lt;span style="mso-tab-count: 1 dotted"&gt;.. &lt;/span&gt;&lt;/span&gt;&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;3&lt;/span&gt;&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 10.5pt; FONT-VARIANT: normal! important; mso-bidi-font-size: 12.0pt; mso-no-proof: yes"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoToc2 style="TEXT-INDENT: 20pt; tab-stops: right dotted 414.8pt"&gt;
&lt;span class=MsoHyperlink&gt;&lt;span lang=EN-US style="TEXT-TRANSFORM: uppercase; FONT-VARIANT: normal! important; mso-no-proof: yes"&gt;&lt;a href="http://xrh.vip.sina.com/#_Toc67710109"&gt;Mask
Validator&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;&lt;span style="mso-tab-count: 1 dotted"&gt;.. &lt;/span&gt;&lt;/span&gt;&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;3&lt;/span&gt;&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 10.5pt; FONT-VARIANT: normal! important; mso-bidi-font-size: 12.0pt; mso-no-proof: yes"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoToc2 style="TEXT-INDENT: 20pt; tab-stops: right dotted 414.8pt"&gt;
&lt;span class=MsoHyperlink&gt;&lt;span lang=EN-US style="TEXT-TRANSFORM: uppercase; FONT-VARIANT: normal! important; mso-no-proof: yes"&gt;&lt;a href="http://xrh.vip.sina.com/#_Toc67710110"&gt;Range
Validator&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;&lt;span style="mso-tab-count: 1 dotted"&gt;.. &lt;/span&gt;&lt;/span&gt;&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;4&lt;/span&gt;&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 10.5pt; FONT-VARIANT: normal! important; mso-bidi-font-size: 12.0pt; mso-no-proof: yes"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoToc2 style="TEXT-INDENT: 20pt; tab-stops: right dotted 414.8pt"&gt;
&lt;span class=MsoHyperlink&gt;&lt;span lang=EN-US style="TEXT-TRANSFORM: uppercase; FONT-VARIANT: normal! important; mso-no-proof: yes"&gt;&lt;a href="http://xrh.vip.sina.com/#_Toc67710111"&gt;Maxlength
Validator&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;&lt;span style="mso-tab-count: 1 dotted"&gt;.. &lt;/span&gt;&lt;/span&gt;&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;4&lt;/span&gt;&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 10.5pt; FONT-VARIANT: normal! important; mso-bidi-font-size: 12.0pt; mso-no-proof: yes"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoToc2 style="TEXT-INDENT: 20pt; tab-stops: right dotted 414.8pt"&gt;
&lt;span class=MsoHyperlink&gt;&lt;span lang=EN-US style="TEXT-TRANSFORM: uppercase; FONT-VARIANT: normal! important; mso-no-proof: yes"&gt;&lt;a href="http://xrh.vip.sina.com/#_Toc67710112"&gt;Minlength
Validator&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;&lt;span style="mso-tab-count: 1 dotted"&gt;.. &lt;/span&gt;&lt;/span&gt;&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;5&lt;/span&gt;&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 10.5pt; FONT-VARIANT: normal! important; mso-bidi-font-size: 12.0pt; mso-no-proof: yes"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoToc2 style="TEXT-INDENT: 20pt; tab-stops: right dotted 414.8pt"&gt;
&lt;span class=MsoHyperlink&gt;&lt;span lang=EN-US style="TEXT-TRANSFORM: uppercase; FONT-VARIANT: normal! important; mso-no-proof: yes"&gt;&lt;a href="http://xrh.vip.sina.com/#_Toc67710113"&gt;Email
Validator&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;&lt;span style="mso-tab-count: 1 dotted"&gt;.. &lt;/span&gt;&lt;/span&gt;&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;5&lt;/span&gt;&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 10.5pt; FONT-VARIANT: normal! important; mso-bidi-font-size: 12.0pt; mso-no-proof: yes"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoToc1 style="TEXT-INDENT: 20.1pt; tab-stops: right dotted 414.8pt"&gt;
&lt;span class=MsoHyperlink&gt;&lt;span lang=EN-US style="mso-no-proof: yes"&gt;&lt;a href="http://xrh.vip.sina.com/#_Toc67710114"&gt;Form
Bean&lt;span lang=EN-US style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&lt;span lang=EN-US&gt;的编写&lt;/span&gt;&lt;/span&gt;&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;&lt;span style="mso-tab-count: 1 dotted"&gt;.... &lt;/span&gt;&lt;/span&gt;&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;5&lt;/span&gt;&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; TEXT-TRANSFORM: none; mso-bidi-font-size: 12.0pt; mso-no-proof: yes"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoToc1 style="TEXT-INDENT: 20.1pt; tab-stops: right dotted 414.8pt"&gt;
&lt;span class=MsoHyperlink&gt;&lt;span lang=EN-US style="mso-no-proof: yes"&gt;&lt;a href="http://xrh.vip.sina.com/#_Toc67710115"&gt;Struts-config.xml&lt;span lang=EN-US style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&lt;span lang=EN-US&gt;文件的配置&lt;/span&gt;&lt;/span&gt;&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;&lt;span style="mso-tab-count: 1 dotted"&gt;.... &lt;/span&gt;&lt;/span&gt;&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;5&lt;/span&gt;&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; TEXT-TRANSFORM: none; mso-bidi-font-size: 12.0pt; mso-no-proof: yes"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoToc1 style="TEXT-INDENT: 20.1pt; tab-stops: right dotted 414.8pt"&gt;
&lt;span class=MsoHyperlink&gt;&lt;span lang=EN-US style="mso-no-proof: yes"&gt;&lt;a href="http://xrh.vip.sina.com/#_Toc67710116"&gt;&lt;span lang=EN-US style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&lt;span lang=EN-US&gt;在&lt;/span&gt;&lt;/span&gt;JSP&lt;span lang=EN-US style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&lt;span lang=EN-US&gt;页面捕捉错误信息&lt;/span&gt;&lt;/span&gt;&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;&lt;span style="mso-tab-count: 1 dotted"&gt;.... &lt;/span&gt;&lt;/span&gt;&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;6&lt;/span&gt;&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; TEXT-TRANSFORM: none; mso-bidi-font-size: 12.0pt; mso-no-proof: yes"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoToc2 style="TEXT-INDENT: 20pt; tab-stops: right dotted 414.8pt"&gt;
&lt;span class=MsoHyperlink&gt;&lt;span lang=EN-US style="TEXT-TRANSFORM: uppercase; FONT-VARIANT: normal! important; mso-no-proof: yes"&gt;&lt;a href="http://xrh.vip.sina.com/#_Toc67710117"&gt;&lt;span lang=EN-US style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&lt;span lang=EN-US&gt;捕捉服务端的错误信息&lt;/span&gt;&lt;/span&gt;&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;&lt;span style="mso-tab-count: 1 dotted"&gt;... &lt;/span&gt;&lt;/span&gt;&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;6&lt;/span&gt;&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 10.5pt; FONT-VARIANT: normal! important; mso-bidi-font-size: 12.0pt; mso-no-proof: yes"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoToc2 style="TEXT-INDENT: 20pt; tab-stops: right dotted 414.8pt"&gt;
&lt;span class=MsoHyperlink&gt;&lt;span lang=EN-US style="TEXT-TRANSFORM: uppercase; FONT-VARIANT: normal! important; mso-no-proof: yes"&gt;&lt;a href="http://xrh.vip.sina.com/#_Toc67710118"&gt;&lt;span lang=EN-US style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&lt;span lang=EN-US&gt;捕捉&lt;/span&gt;&lt;/span&gt;JavaScript&lt;span lang=EN-US style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&lt;span lang=EN-US&gt;的错误信息&lt;/span&gt;&lt;/span&gt;&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;&lt;span style="mso-tab-count: 1 dotted"&gt;... &lt;/span&gt;&lt;/span&gt;&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;6&lt;/span&gt;&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 10.5pt; FONT-VARIANT: normal! important; mso-bidi-font-size: 12.0pt; mso-no-proof: yes"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoToc1 style="TEXT-INDENT: 20.1pt; tab-stops: right dotted 414.8pt"&gt;
&lt;span class=MsoHyperlink&gt;&lt;span lang=EN-US style="mso-no-proof: yes"&gt;&lt;a href="http://xrh.vip.sina.com/#_Toc67710119"&gt;&lt;span lang=EN-US style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&lt;span lang=EN-US&gt;编写&lt;span lang=EN-US&gt;扩展&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Struts
Validator&lt;span lang=EN-US style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&lt;span lang=EN-US&gt;校验密码输入&lt;/span&gt;&lt;/span&gt;&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;&lt;span style="mso-tab-count: 1 dotted"&gt;.... &lt;/span&gt;&lt;/span&gt;&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;7&lt;/span&gt;&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; TEXT-TRANSFORM: none; mso-bidi-font-size: 12.0pt; mso-no-proof: yes"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoToc2 style="TEXT-INDENT: 20pt; tab-stops: right dotted 414.8pt"&gt;
&lt;span class=MsoHyperlink&gt;&lt;span lang=EN-US style="TEXT-TRANSFORM: uppercase; FONT-VARIANT: normal! important; mso-no-proof: yes"&gt;&lt;a href="http://xrh.vip.sina.com/#_Toc67710120"&gt;1.&lt;span lang=EN-US style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&lt;span lang=EN-US&gt;编写一个校验器&lt;/span&gt;&lt;/span&gt;(Validator),&lt;span lang=EN-US style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&lt;span lang=EN-US&gt;实现对&lt;/span&gt;&lt;/span&gt;form&lt;span lang=EN-US style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&lt;span lang=EN-US&gt;中两个字段的一致性校验&lt;/span&gt;&lt;/span&gt;:&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;&lt;span style="mso-tab-count: 1 dotted"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;7&lt;/span&gt;&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 10.5pt; FONT-VARIANT: normal! important; mso-bidi-font-size: 12.0pt; mso-no-proof: yes"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoToc2 style="TEXT-INDENT: 20pt; tab-stops: right dotted 414.8pt"&gt;
&lt;span class=MsoHyperlink&gt;&lt;span lang=EN-US style="TEXT-TRANSFORM: uppercase; FONT-VARIANT: normal! important; mso-no-proof: yes"&gt;&lt;a href="http://xrh.vip.sina.com/#_Toc67710121"&gt;2.&lt;span lang=EN-US style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&lt;span lang=EN-US&gt;编写&lt;/span&gt;&lt;/span&gt;validator-rules&lt;span lang=EN-US style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&lt;span lang=EN-US&gt;文件&lt;/span&gt;&lt;/span&gt;,&lt;span lang=EN-US style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&lt;span lang=EN-US&gt;增加一个自定义校验器的配置&lt;/span&gt;&lt;/span&gt;:&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;&lt;span style="mso-tab-count: 1 dotted"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;8&lt;/span&gt;&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 10.5pt; FONT-VARIANT: normal! important; mso-bidi-font-size: 12.0pt; mso-no-proof: yes"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoToc2 style="TEXT-INDENT: 20pt; tab-stops: right dotted 414.8pt"&gt;
&lt;span class=MsoHyperlink&gt;&lt;span lang=EN-US style="TEXT-TRANSFORM: uppercase; FONT-VARIANT: normal! important; mso-no-proof: yes"&gt;&lt;a href="http://xrh.vip.sina.com/#_Toc67710122"&gt;3.&lt;span lang=EN-US style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&lt;span lang=EN-US&gt;编写&lt;/span&gt;&lt;/span&gt;JSP&lt;span lang=EN-US style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&lt;span lang=EN-US&gt;页面&lt;/span&gt;&lt;/span&gt;&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;&lt;span style="mso-tab-count: 1 dotted"&gt;... &lt;/span&gt;&lt;/span&gt;&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;9&lt;/span&gt;&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 10.5pt; FONT-VARIANT: normal! important; mso-bidi-font-size: 12.0pt; mso-no-proof: yes"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoToc2 style="TEXT-INDENT: 20pt; tab-stops: right dotted 414.8pt"&gt;
&lt;span class=MsoHyperlink&gt;&lt;span lang=EN-US style="TEXT-TRANSFORM: uppercase; FONT-VARIANT: normal! important; mso-no-proof: yes"&gt;&lt;a href="http://xrh.vip.sina.com/#_Toc67710123"&gt;4.&lt;span lang=EN-US style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&lt;span lang=EN-US&gt;编写&lt;/span&gt;&lt;/span&gt;validator.xml&lt;span lang=EN-US style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&lt;span lang=EN-US&gt;配置文件&lt;/span&gt;&lt;/span&gt;:&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;&lt;span style="mso-tab-count: 1 dotted"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;10&lt;/span&gt;&lt;span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 10.5pt; FONT-VARIANT: normal! important; mso-bidi-font-size: 12.0pt; mso-no-proof: yes"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;h1 style="TEXT-INDENT: 44.15pt"&gt;&lt;a name=_Toc67710105&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;使&lt;/span&gt;&lt;span lang=EN-US&gt;Struts&lt;/span&gt;&lt;/a&gt;&lt;span style="mso-bookmark: _Toc67710105"&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;支持&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;Validator&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/h1&gt;
&lt;p class=074 style="MARGIN-BOTTOM: 7.8pt; TEXT-INDENT: 21pt"&gt;
&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;要在&lt;/span&gt;&lt;span lang=EN-US&gt;Struts&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;项目中使用&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;Validator&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;功能&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;首先需要配置&lt;/span&gt;&lt;span lang=EN-US&gt;Struts&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;项目&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;使其支持&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;Validator&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;框架&lt;/span&gt;&lt;span lang=EN-US&gt;.Struts&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;通过一个插件&lt;/span&gt;&lt;span lang=EN-US&gt;(&lt;span class=SpellE&gt;Plugin&lt;/span&gt;)&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;来使&lt;/span&gt;&lt;span lang=EN-US&gt;Struts&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;项目支持&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;Validator&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;这个&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;Plugin&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;由&lt;/span&gt;&lt;span lang=EN-US&gt;Struts&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;默认提供&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;用户也可以自己开发自己的&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;Validator&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US&gt; &lt;span class=SpellE&gt;Plugin.Struts&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;默认提供的&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;Plugin&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;为&lt;/span&gt;&lt;span lang=EN-US&gt;:&lt;/span&gt;
&lt;/p&gt;
&lt;p class=074 style="MARGIN-BOTTOM: 7.8pt; TEXT-INDENT: 21pt"&gt;
&lt;span class=SpellE&gt;&lt;span class=GramE&gt;&lt;span lang=EN-US&gt;org.apache.struts.validator.ValidatorPlugIn&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=GramE&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;用户必须在&lt;/span&gt;&lt;span lang=EN-US&gt;struts-&lt;span class=SpellE&gt;config.xml&lt;/span&gt; &lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;文件中配置这个&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;Plugin&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;才能使&lt;/span&gt;&lt;span lang=EN-US&gt;Struts&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;项目支持&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;Validator&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;配置方法比较简单&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;通过任何文本编辑器打开&lt;/span&gt;&lt;span lang=EN-US&gt;struts-&lt;span class=SpellE&gt;config.xml&lt;/span&gt; &lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;文件&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;在这个文件的末尾加上下面的代码&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;重新启动&lt;/span&gt;&lt;span lang=EN-US&gt;J2EE&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;服务器就可以实现对&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;Validator&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的支持了&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;table class=MsoTableGrid style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BACKGROUND: #ccffff; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid #FF6600 1.0pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: 1.0pt solid #FF6600; mso-border-insidev: 1.0pt solid #FF6600" cellspacing=0 cellpadding=0 border=1&gt;
&lt;tbody&gt;
&lt;tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes"&gt;
&lt;td style="BORDER-RIGHT: #ff6600 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ff6600 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ff6600 1pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ff6600 1pt solid" valign=top width=568&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&amp;lt;plug-in &lt;span class=SpellE&gt;className&lt;/span&gt;="&lt;span class=SpellE&gt;org.apache.struts.validator.ValidatorPlugIn&lt;/span&gt;"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;set-property&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp; &lt;/span&gt;property="pathnames" &lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 84pt; mso-char-indent-count: 8.0"&gt;
&lt;span lang=EN-US&gt;value="/WEB-&lt;span class=SpellE&gt;INF/validator-rules.xml,/WEB-INF/validation.xml&lt;/span&gt;"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&amp;lt;/plug-in&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;在&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;Jbuilder&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;开发环境中可以通过下面的方法使&lt;/span&gt;&lt;span lang=EN-US&gt;Struts&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;项目支持&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;Validator&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;框架&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN-LEFT: 21pt; TEXT-INDENT: 21pt; tab-stops: list 21.0pt; mso-list: l0 level1 lfo1"&gt;
&lt;span lang=EN-US style="mso-fareast-font-family: 'Times New Roman'"&gt;&lt;span style="mso-list: Ignore"&gt;1.&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;在项目管理器中用鼠标右键点击&lt;/span&gt;&lt;span lang=EN-US&gt;Web&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;项目&lt;/span&gt;&lt;span lang=EN-US&gt;(&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;在我们的项目中是&lt;/span&gt;&lt;span lang=EN-US&gt; &lt;span class=SpellE&gt;WebModule&lt;/span&gt; ).&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN-LEFT: 21pt; TEXT-INDENT: 21pt; tab-stops: list 21.0pt; mso-list: l0 level1 lfo1"&gt;
&lt;span lang=EN-US style="mso-fareast-font-family: 'Times New Roman'"&gt;&lt;span style="mso-list: Ignore"&gt;2.&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;选择菜单的&lt;/span&gt;&lt;span lang=EN-US&gt; &amp;#8220;Properties&amp;#8230;&amp;#8221;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;菜单项&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN-LEFT: 21pt; TEXT-INDENT: 21pt; tab-stops: list 21.0pt; mso-list: l0 level1 lfo1"&gt;
&lt;span lang=EN-US style="mso-fareast-font-family: 'Times New Roman'"&gt;&lt;span style="mso-list: Ignore"&gt;3.&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;在弹出的对话框的&lt;span class=GramE&gt;左边树&lt;/span&gt;型结构中选中&lt;/span&gt; &lt;span lang=EN-US&gt;&amp;#8220;web&amp;#8221; &lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;节点&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN-LEFT: 21pt; TEXT-INDENT: 21pt; tab-stops: list 21.0pt; mso-list: l0 level1 lfo1"&gt;
&lt;span lang=EN-US style="mso-fareast-font-family: 'Times New Roman'"&gt;&lt;span style="mso-list: Ignore"&gt;4.&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;在右边的&lt;/span&gt; &lt;span lang=EN-US&gt;&amp;#8220;JSP/&lt;span class=SpellE&gt;Servlet&lt;/span&gt; frameworks&amp;#8221; &lt;/span&gt;&lt;span class=GramE&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;框中勾选&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US&gt;&lt;?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /&gt; &amp;#8220;sturts&lt;st1:chmetcnv TCSC="0" NumberType="1" Negative="False" HasSpace="False" SourceValue="1.1" UnitName="&amp;#8221;" w:st="on"&gt;1.1&amp;#8221;&lt;/st1:chmetcnv&gt;
&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;节点以及&lt;/span&gt;&lt;span lang=EN-US&gt; &amp;#8220;struts&amp;#8221; &lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;节点下的&lt;/span&gt;&lt;span lang=EN-US&gt; &amp;#8220;validation&amp;#8221; &lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;子节点&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN-LEFT: 21pt; TEXT-INDENT: 21pt; tab-stops: list 21.0pt; mso-list: l0 level1 lfo1"&gt;
&lt;span lang=EN-US style="mso-fareast-font-family: 'Times New Roman'"&gt;&lt;span style="mso-list: Ignore"&gt;5.&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;点击&lt;/span&gt; &lt;span lang=EN-US&gt;&amp;#8220;OK&amp;#8221; &lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;按钮完成配置&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN-LEFT: 21pt; TEXT-INDENT: 21pt; tab-stops: list 21.0pt; mso-list: l0 level1 lfo1"&gt;
&lt;span lang=EN-US style="mso-fareast-font-family: 'Times New Roman'"&gt;&lt;span style="mso-list: Ignore"&gt;6.&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;检查&lt;/span&gt;&lt;span lang=EN-US&gt; struts-&lt;span class=SpellE&gt;config.xml&lt;/span&gt; &lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;文件&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;可以看到配置文件里已经加入了&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;Validator&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US&gt; &lt;span class=SpellE&gt;Plugin&lt;/span&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;h1 style="TEXT-INDENT: 44.15pt"&gt;&lt;a name=_Toc67710106&gt;&lt;/a&gt;&lt;span class=SpellE&gt;&lt;span style="mso-bookmark: _Toc67710106"&gt;&lt;span lang=EN-US&gt;Validator-rules.xml&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-bookmark: _Toc67710106"&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;文件&lt;/span&gt;&lt;/span&gt;
&lt;/h1&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;Validator-rules.xml&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;文件是校验器的定义文件&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;指定了每一个校验器的基本信息和执行校验的&lt;/span&gt;&lt;span lang=EN-US&gt;JavaScript&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;代码&lt;/span&gt;&lt;span lang=EN-US&gt;.Struts&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;默认提供了十四个校验器&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;这些校验器可以满足我们平时项目开发中碰到的绝大多数的输入校验要求&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;如果这些校验器不能满足用户的校验要求&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;那么我们也可以开发自己的校验器&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;我们项目主就实现了一个校验密码的一致性的&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;Validator&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;Struts&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;提供的校验器包括&lt;/span&gt;&lt;span lang=EN-US&gt;Required &lt;span class=SpellE&gt;Validator&lt;/span&gt; ,&lt;span class=SpellE&gt;Requiredif&lt;/span&gt; &lt;span class=SpellE&gt;Validator&lt;/span&gt;, &lt;span class=SpellE&gt;MinLength&lt;/span&gt; &lt;span class=SpellE&gt;Validator&lt;/span&gt; , &lt;span class=SpellE&gt;MaxLength&lt;/span&gt; &lt;span class=SpellE&gt;Validator&lt;/span&gt; ,
Mask &lt;span class=SpellE&gt;Validator&lt;/span&gt; , Byte &lt;span class=SpellE&gt;Validator&lt;/span&gt; ,
Short &lt;span class=SpellE&gt;Validaotr&lt;/span&gt; , Integer &lt;span class=SpellE&gt;Validator&lt;/span&gt; ,
Long &lt;span class=SpellE&gt;Validator&lt;/span&gt; , Float &lt;span class=SpellE&gt;Validator&lt;/span&gt; ,
Double &lt;span class=SpellE&gt;Validator&lt;/span&gt; , Date &lt;span class=SpellE&gt;Validator&lt;/span&gt; ,
Range &lt;span class=SpellE&gt;Validator&lt;/span&gt; , &lt;span class=SpellE&gt;IntRange&lt;/span&gt; &lt;span class=SpellE&gt;Validator&lt;/span&gt; , &lt;span class=SpellE&gt;FloatRange&lt;/span&gt; &lt;span class=SpellE&gt;Validator&lt;/span&gt; , &lt;span class=SpellE&gt;CrediteCard&lt;/span&gt; &lt;span class=SpellE&gt;Validator&lt;/span&gt; ,
Email &lt;span class=SpellE&gt;Validator&lt;/span&gt; &lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;等校验器&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;&lt;span class=GramE&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;后面我&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;将讲述一些比较常用的校验器的使用方法&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;h1 style="TEXT-INDENT: 44.15pt"&gt;&lt;a name=_Toc67710107&gt;&lt;/a&gt;&lt;span class=SpellE&gt;&lt;span style="mso-bookmark: _Toc67710107"&gt;&lt;span lang=EN-US&gt;Validator.xml&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-bookmark: _Toc67710107"&gt;&lt;span lang=EN-US&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="mso-bookmark: _Toc67710107"&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;文件&lt;/span&gt;&lt;/span&gt;
&lt;/h1&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;Validator.xml&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US&gt; &lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;文件用来定义用户需要校验的每一个&lt;/span&gt;&lt;span lang=EN-US&gt;JSP
Form&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;中的每一个字段的校验规则&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;这个文件是我们在&lt;/span&gt;&lt;span lang=EN-US&gt;Struts&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;项目开发中使用&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;Validator&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;框架所需要配置的文件&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;这个文件的根节点是&lt;/span&gt;&lt;span lang=EN-US&gt;&amp;lt;form-&lt;span class=SpellE&gt;validator&lt;/span&gt;&amp;gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;在根节点下的&lt;/span&gt;&lt;span lang=EN-US&gt;&amp;lt;&lt;span class=SpellE&gt;formset&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;节点的&lt;/span&gt;&lt;span lang=EN-US&gt;&amp;lt;form&amp;gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;子节点就对应了我们在开发&lt;/span&gt;&lt;span lang=EN-US&gt;JSP&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;文件是所定义的&lt;/span&gt;&lt;span lang=EN-US&gt;Form&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;标记&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;也对应这&lt;/span&gt;&lt;span lang=EN-US&gt;struts-&lt;span class=SpellE&gt;config.xml&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;中的&lt;/span&gt;&lt;span lang=EN-US&gt;form
bean&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的定义&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;一个&lt;/span&gt;&lt;span lang=EN-US&gt;&amp;lt;form&amp;gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;节点由多个&lt;/span&gt;&lt;span lang=EN-US&gt;&amp;lt;field&amp;gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;节点组成&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;每个&lt;/span&gt;&lt;span lang=EN-US&gt;&amp;lt;field&amp;gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;节点的结构大概如下&lt;/span&gt;&lt;span lang=EN-US&gt;:&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;table class=MsoTableGrid style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BACKGROUND: #99ccff; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid #FF6600 1.0pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: 1.0pt solid #FF6600; mso-border-insidev: 1.0pt solid #FF6600" cellspacing=0 cellpadding=0 border=1&gt;
&lt;tbody&gt;
&lt;tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes"&gt;
&lt;td style="BORDER-RIGHT: #ff6600 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ff6600 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ff6600 1pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ff6600 1pt solid" valign=top width=568&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;field
property="password" depends="&lt;span class=SpellE&gt;required,minlength,twofields&lt;/span&gt;"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 2"&gt;&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; &lt;/span&gt;&amp;lt;&lt;span class=SpellE&gt;msg&lt;/span&gt; name="required"
key="&lt;span class=SpellE&gt;test.required&lt;/span&gt;"/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 2"&gt;&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; &lt;/span&gt;&amp;lt;&lt;span class=SpellE&gt;msg&lt;/span&gt; name="&lt;span class=SpellE&gt;minlength&lt;/span&gt;"
key="&lt;span class=SpellE&gt;test.minlength&lt;/span&gt;"/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 2"&gt;&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; &lt;/span&gt;&amp;lt;&lt;span class=SpellE&gt;msg&lt;/span&gt; name="&lt;span class=SpellE&gt;twofields&lt;/span&gt;"
key="&lt;span class=SpellE&gt;test.twofields&lt;/span&gt;"/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 2"&gt;&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; &lt;/span&gt;&amp;lt;arg0
key="&lt;span class=SpellE&gt;test.password&lt;/span&gt;" /&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 2"&gt;&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; &lt;/span&gt;&amp;lt;arg1
name="&lt;span class=SpellE&gt;minlength&lt;/span&gt;" key="${&lt;span class=SpellE&gt;var:minlength&lt;/span&gt;}"
resource="false" /&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 2"&gt;&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; &lt;/span&gt;&amp;lt;&lt;span class=SpellE&gt;var&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 3"&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;span class=SpellE&gt;var&lt;/span&gt;-name&amp;gt;&lt;span class=SpellE&gt;minlength&lt;/span&gt;&amp;lt;/&lt;span class=SpellE&gt;var&lt;/span&gt;-name&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 3"&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;span class=SpellE&gt;var&lt;/span&gt;-value&amp;gt;8&amp;lt;/&lt;span class=SpellE&gt;var&lt;/span&gt;-value&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 2"&gt;&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; &lt;/span&gt;&amp;lt;/&lt;span class=SpellE&gt;var&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 2"&gt;&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; &lt;/span&gt;&amp;lt;&lt;span class=SpellE&gt;var&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 3"&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;span class=SpellE&gt;var&lt;/span&gt;-name&amp;gt;&lt;span class=SpellE&gt;secondProperty&lt;/span&gt;&amp;lt;/&lt;span class=SpellE&gt;var&lt;/span&gt;-name&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 3"&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;span class=SpellE&gt;var&lt;/span&gt;-value&amp;gt;password2&amp;lt;/&lt;span class=SpellE&gt;var&lt;/span&gt;-value&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 2"&gt;&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; &lt;/span&gt;&amp;lt;/&lt;span class=SpellE&gt;var&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/field&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;其中一个&lt;/span&gt;&lt;span lang=EN-US&gt;&amp;lt;Field&amp;gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;对应于一个&lt;/span&gt;&lt;span lang=EN-US&gt;Form
Bean&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的一个&lt;/span&gt;&lt;span lang=EN-US&gt;Field,&amp;lt;Field&amp;gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;标记的&lt;/span&gt;&lt;span lang=EN-US&gt;property&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;属性说明了这个&lt;/span&gt;&lt;span lang=EN-US&gt;Field&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;对应的&lt;/span&gt;&lt;span lang=EN-US&gt;Form
Bean&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的&lt;/span&gt;&lt;span lang=EN-US&gt;Field&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;名称&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;这个名称要跟&lt;/span&gt;&lt;span lang=EN-US&gt;struts-&lt;span class=SpellE&gt;config.xml&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;文件中的&lt;/span&gt;&lt;span lang=EN-US&gt;&amp;lt;form-bean&amp;gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;中定义的名字一致&lt;/span&gt;&lt;span lang=EN-US&gt;.depends&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;属性说明了这个&lt;/span&gt;&lt;span lang=EN-US&gt;Field&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;依赖于那些校验器的校验&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;可以使用多个校验器&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;各个校验器之间使用逗号隔开&lt;/span&gt;&lt;span lang=EN-US&gt;.&amp;lt;&lt;span class=SpellE&gt;msg&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;标记说明了当这个&lt;/span&gt;&lt;span lang=EN-US&gt;Field&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;通不过校验的时候向用户提供的错误信息&lt;/span&gt;&lt;span lang=EN-US&gt;.name&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;属性指定了对应的校验器&lt;/span&gt;&lt;span lang=EN-US&gt;,key&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;属性指定了定义在&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;ApplicationResources.properties&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;文件中的错误信息&lt;/span&gt;&lt;span lang=EN-US&gt;.&amp;lt;arg0&amp;gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;和&lt;/span&gt;&lt;span lang=EN-US&gt;&amp;lt;arg1&amp;gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;是传递给校验器的参数&lt;/span&gt;&lt;span lang=EN-US&gt;.&amp;lt;&lt;span class=SpellE&gt;var&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;标记定义了参数的名字和参数值&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;上面的这个例子说明了&lt;/span&gt;&lt;span lang=EN-US&gt;password&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;字段由&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;Required,Minlength,Twofields&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;校验器进行校验&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;指定了这个&lt;/span&gt;&lt;span lang=EN-US&gt;Field&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;不能为空&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;而且最小长度不能小于&lt;/span&gt;&lt;span lang=EN-US&gt;8&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;为&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;并且必须和同一个&lt;/span&gt;&lt;span lang=EN-US&gt;Form&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;中的另一个名为&lt;/span&gt;&lt;span lang=EN-US&gt;password2&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的字段相同&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;如果用户的输入不能满足这些要求&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;校验器将会抛出异常&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;下面开始将怎么在这个配置文件中配置各个校验&lt;span class=GramE&gt;器实现&lt;/span&gt;对&lt;/span&gt;&lt;span lang=EN-US&gt;form&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;中的多&lt;span class=GramE&gt;中类型&lt;/span&gt;的&lt;/span&gt;&lt;span lang=EN-US&gt;field&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;进行校验&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;h2 style="TEXT-INDENT: 32.15pt"&gt;&lt;a name=_Toc67710108&gt;&lt;span lang=EN-US&gt;Required &lt;/span&gt;&lt;/a&gt;&lt;span class=SpellE&gt;&lt;span style="mso-bookmark: _Toc67710108"&gt;&lt;span lang=EN-US&gt;Validator&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-bookmark: _Toc67710108"&gt;&lt;/span&gt;
&lt;/h2&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;这个校验器用来校验&lt;/span&gt;&lt;span lang=EN-US&gt;Form&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的输入数据不能为空&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;如果某一个&lt;/span&gt;&lt;span lang=EN-US&gt;Form &lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的&lt;/span&gt;&lt;span lang=EN-US&gt; Field &lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;依赖于这个校验器&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;那么如果用户在&lt;/span&gt;&lt;span lang=EN-US&gt;Form&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;中没有输入这个&lt;/span&gt;&lt;span lang=EN-US&gt;Field&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;对应的输入数据时&lt;/span&gt;&lt;span lang=EN-US&gt;,Required&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;校验器将会触发一个&lt;/span&gt;&lt;span lang=EN-US&gt;Exception,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;这个&lt;/span&gt;&lt;span lang=EN-US&gt;Exception&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的错误信息可以在页面或者服务端被捕捉到&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;例子&lt;/span&gt;&lt;span lang=EN-US&gt;:&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;table class=MsoTableGrid style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BACKGROUND: #99ccff; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid #FF6600 1.0pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: 1.0pt solid #FF6600; mso-border-insidev: 1.0pt solid #FF6600" cellspacing=0 cellpadding=0 border=1&gt;
&lt;tbody&gt;
&lt;tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes"&gt;
&lt;td style="BORDER-RIGHT: #ff6600 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ff6600 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ff6600 1pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ff6600 1pt solid" valign=top width=568&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;field&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;property="test"
depends="required"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 2"&gt;&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; &lt;/span&gt;&amp;lt;&lt;span class=SpellE&gt;msg&lt;/span&gt; name="required"
key="&lt;span class=SpellE&gt;test.required&lt;/span&gt;"/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 2"&gt;&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; &lt;/span&gt;&amp;lt;arg0
key="&lt;span class=SpellE&gt;test.testField.displayName&lt;/span&gt;"/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/field&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;上面的例子说明了&lt;/span&gt;&lt;span lang=EN-US&gt;test&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;字段的校验规则是不能为空&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;在&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;ApplicationResources.properties&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;中的相应的定义信息可能是下面这样的情况&lt;/span&gt;&lt;span lang=EN-US&gt;:&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;table class=MsoTableGrid style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BACKGROUND: #99ccff; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid #FF6600 1.0pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: 1.0pt solid #FF6600; mso-border-insidev: 1.0pt solid #FF6600" cellspacing=0 cellpadding=0 border=1&gt;
&lt;tbody&gt;
&lt;tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes"&gt;
&lt;td style="BORDER-RIGHT: #ff6600 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ff6600 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ff6600 1pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ff6600 1pt solid" valign=top width=568&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;Test.testField.displayName&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US&gt; =&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;测试字段&lt;/span&gt;&lt;span lang=EN-US&gt; #&lt;/span&gt;&lt;span class=GramE&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;上面在&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US&gt;&amp;lt;arg0&amp;gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;标记中定义的&lt;/span&gt;&lt;span lang=EN-US&gt;key=
&amp;#8220;&lt;span class=SpellE&gt;test.testField&lt;/span&gt;&amp;#8221; &lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;对应这个信息&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;Test.required&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US&gt;={0} &lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;不能为空&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;请重新输入&lt;/span&gt;&lt;span lang=EN-US&gt;.
#&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;在上面定义的&lt;/span&gt;&lt;span lang=EN-US&gt;&amp;lt;&lt;span class=SpellE&gt;msg&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;标记对应这个信息&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;如果&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;Validator&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;校验到用户没有输入&lt;/span&gt;&lt;span lang=EN-US&gt;test&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;这个字段&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;就会将&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;test.testField&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;对应的信息作为&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;test.required&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的参数传递给校验器&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;如果在&lt;/span&gt;&lt;span lang=EN-US&gt;JSP&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;页面中捕捉了错误信息&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;错误信息将会是下面的这个形式&lt;/span&gt;&lt;span lang=EN-US&gt;:&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;#8220;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;测试字段&lt;/span&gt; &lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;不能为空&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;请重新输入&lt;/span&gt;&lt;span lang=EN-US&gt;&amp;#8221;&lt;/span&gt;
&lt;/p&gt;
&lt;h2 style="TEXT-INDENT: 32.15pt"&gt;&lt;a name=_Toc67710109&gt;&lt;span lang=EN-US&gt;Mask &lt;/span&gt;&lt;/a&gt;&lt;span class=SpellE&gt;&lt;span style="mso-bookmark: _Toc67710109"&gt;&lt;span lang=EN-US&gt;Validator&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-bookmark: _Toc67710109"&gt;&lt;/span&gt;
&lt;/h2&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;Mask &lt;span class=SpellE&gt;Validator&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;校验用户输入的数据是否遵照一定的规则&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;这个规则由开发者在&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;validator.xml&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;文件中定义&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;例子&lt;/span&gt;&lt;span lang=EN-US&gt;:&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;table class=MsoTableGrid style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BACKGROUND: #99ccff; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid #FF6600 1.0pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: 1.0pt solid #FF6600; mso-border-insidev: 1.0pt solid #FF6600" cellspacing=0 cellpadding=0 border=1&gt;
&lt;tbody&gt;
&lt;tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes"&gt;
&lt;td style="BORDER-RIGHT: #ff6600 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ff6600 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ff6600 1pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ff6600 1pt solid" valign=top width=568&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US style="mso-font-kerning: 0pt"&gt;&amp;lt;field property="&lt;span class=SpellE&gt;postalCode&lt;/span&gt;"
depends="mask"&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US style="mso-font-kerning: 0pt"&gt;&amp;lt;arg0 key="&lt;span class=SpellE&gt;test.postalCode.displayname&lt;/span&gt;"/&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US style="mso-font-kerning: 0pt"&gt;&amp;lt;arg1 name=&amp;#8221;mask&amp;#8221; key="${&lt;span class=SpellE&gt;var:mask&lt;/span&gt;}"
resource="false"&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US style="mso-font-kerning: 0pt"&gt;&amp;lt;&lt;span class=SpellE&gt;var&lt;/span&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 42pt; mso-char-indent-count: 4.0"&gt;
&lt;span lang=EN-US style="mso-font-kerning: 0pt"&gt;&amp;lt;&lt;span class=SpellE&gt;var&lt;/span&gt;-name&amp;gt;mask&amp;lt;/&lt;span class=SpellE&gt;var&lt;/span&gt;-name&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 42pt; mso-char-indent-count: 4.0"&gt;
&lt;span lang=EN-US style="mso-font-kerning: 0pt"&gt;&amp;lt;&lt;span class=SpellE&gt;var&lt;/span&gt;-value&amp;gt;^0\d*$&amp;lt;/&lt;span class=SpellE&gt;var&lt;/span&gt;-value&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US style="mso-font-kerning: 0pt"&gt;&amp;lt;/&lt;span class=SpellE&gt;var&lt;/span&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US style="mso-font-kerning: 0pt"&gt;&amp;lt;/field&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;上面的&lt;/span&gt;&lt;span lang=EN-US&gt;&amp;lt;arg1&amp;gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;标记说明了这个校验的第二个参数是定义在下面的&lt;/span&gt;&lt;span lang=EN-US&gt;&amp;lt;&lt;span class=SpellE&gt;var&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;标记的名为&lt;/span&gt;&lt;span lang=EN-US&gt;mask&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的值&lt;/span&gt;&lt;span lang=EN-US&gt;.&amp;lt;&lt;span class=SpellE&gt;var&lt;/span&gt;-value&amp;gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的值说明了这个字段必须是以数字&lt;/span&gt;&lt;span lang=EN-US&gt;0&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;开头&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;以任意数字字符结尾的一个串&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;h2 style="TEXT-INDENT: 32.15pt"&gt;&lt;a name=_Toc67710110&gt;&lt;span lang=EN-US&gt;Range &lt;/span&gt;&lt;/a&gt;&lt;span class=SpellE&gt;&lt;span style="mso-bookmark: _Toc67710110"&gt;&lt;span lang=EN-US&gt;Validator&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-bookmark: _Toc67710110"&gt;&lt;/span&gt;
&lt;/h2&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;这个校验器校验字段是否在一个数字范围内&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;例子&lt;/span&gt;&lt;span lang=EN-US&gt;:&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;table class=MsoTableGrid style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BACKGROUND: #99ccff; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid #FF6600 1.0pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: 1.0pt solid #FF6600; mso-border-insidev: 1.0pt solid #FF6600" cellspacing=0 cellpadding=0 border=1&gt;
&lt;tbody&gt;
&lt;tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes"&gt;
&lt;td style="BORDER-RIGHT: #ff6600 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ff6600 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ff6600 1pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ff6600 1pt solid" valign=top width=568&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;field
property="age" depends="range"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 2"&gt;&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; &lt;/span&gt;&amp;lt;&lt;span class=SpellE&gt;msg&lt;/span&gt; name="range"
key="&lt;span class=SpellE&gt;test.rang&lt;/span&gt;"/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 2"&gt;&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; &lt;/span&gt;&amp;lt;arg0
key="&lt;span class=SpellE&gt;test.age&lt;/span&gt;"/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 2"&gt;&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; &lt;/span&gt;&amp;lt;arg1
name="range" key="${&lt;span class=SpellE&gt;var:min&lt;/span&gt;}" resource="false"/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 2"&gt;&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; &lt;/span&gt;&amp;lt;arg2
name="range" key="${&lt;span class=SpellE&gt;var:max&lt;/span&gt;}" resource="false"/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 2"&gt;&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; &lt;/span&gt;&amp;lt;&lt;span class=SpellE&gt;var&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 3"&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;span class=SpellE&gt;var&lt;/span&gt;-name&amp;gt;min&amp;lt;/&lt;span class=SpellE&gt;var&lt;/span&gt;-name&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 3"&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;span class=SpellE&gt;var&lt;/span&gt;-value&amp;gt;1&amp;lt;/&lt;span class=SpellE&gt;var&lt;/span&gt;-value&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 2"&gt;&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; &lt;/span&gt;&amp;lt;/&lt;span class=SpellE&gt;var&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 2"&gt;&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; &lt;/span&gt;&amp;lt;&lt;span class=SpellE&gt;var&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 3"&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;span class=SpellE&gt;var&lt;/span&gt;-name&amp;gt;max&amp;lt;/&lt;span class=SpellE&gt;var&lt;/span&gt;-name&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 3"&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;span class=SpellE&gt;var&lt;/span&gt;-value&amp;gt;100&amp;lt;/&lt;span class=SpellE&gt;var&lt;/span&gt;-value&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 2"&gt;&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; &lt;/span&gt;&amp;lt;/&lt;span class=SpellE&gt;var&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/field&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;Range &lt;span class=SpellE&gt;Validator&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;需要三个参数&lt;/span&gt;&lt;span lang=EN-US&gt;(&lt;span class=SpellE&gt;arg&lt;/span&gt;),&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;第一个参数&lt;/span&gt;&lt;span lang=EN-US&gt;arg0&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;是指定这个字段的名字&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;第二个和第三个参数指定范围的最大和最小值&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;分别的名称是&lt;/span&gt;&lt;span lang=EN-US&gt;max&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;和&lt;/span&gt;&lt;span lang=EN-US&gt;min.&lt;/span&gt;
&lt;/p&gt;
&lt;h2 style="TEXT-INDENT: 32.15pt"&gt;&lt;a name=_Toc67710111&gt;&lt;/a&gt;&lt;span class=SpellE&gt;&lt;span style="mso-bookmark: _Toc67710111"&gt;&lt;span lang=EN-US&gt;Maxlength&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-bookmark: _Toc67710111"&gt;&lt;span lang=EN-US&gt; &lt;span class=SpellE&gt;Validator&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/h2&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;Maxlength&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;校验器校验一个字符串的最大长度&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;它需要两个参数&lt;/span&gt;&lt;span lang=EN-US&gt;,arg0&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;说明字段的名称&lt;/span&gt;&lt;span lang=EN-US&gt;,arg1&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;说明最大长度&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;例子&lt;/span&gt;&lt;span lang=EN-US&gt;:&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;table class=MsoTableGrid style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BACKGROUND: #99ccff; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid #FF6600 1.0pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: 1.0pt solid #FF6600; mso-border-insidev: 1.0pt solid #FF6600" cellspacing=0 cellpadding=0 border=1&gt;
&lt;tbody&gt;
&lt;tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes"&gt;
&lt;td style="BORDER-RIGHT: #ff6600 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ff6600 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ff6600 1pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ff6600 1pt solid" valign=top width=568&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;field
property="password" depends="&lt;span class=SpellE&gt;maxlength&lt;/span&gt;"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 2"&gt;&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; &lt;/span&gt;&amp;lt;&lt;span class=SpellE&gt;msg&lt;/span&gt; name="&lt;span class=SpellE&gt;maxlength&lt;/span&gt;"
key="&lt;span class=SpellE&gt;test.minlength&lt;/span&gt;"/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 2"&gt;&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; &lt;/span&gt;&amp;lt;arg0
key="&lt;span class=SpellE&gt;test.password&lt;/span&gt;" /&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 2"&gt;&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; &lt;/span&gt;&amp;lt;arg1
name="&lt;span class=SpellE&gt;maxlength&lt;/span&gt;" key="${&lt;span class=SpellE&gt;var:maxlength&lt;/span&gt;}"
resource="false" /&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 2"&gt;&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; &lt;/span&gt;&amp;lt;&lt;span class=SpellE&gt;var&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 3"&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;span class=SpellE&gt;var&lt;/span&gt;-name&amp;gt;&lt;span class=SpellE&gt;maxlength&lt;/span&gt;&amp;lt;/&lt;span class=SpellE&gt;var&lt;/span&gt;-name&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 3"&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;span class=SpellE&gt;var&lt;/span&gt;-value&amp;gt;8&amp;lt;/&lt;span class=SpellE&gt;var&lt;/span&gt;-value&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 2"&gt;&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; &lt;/span&gt;&amp;lt;/&lt;span class=SpellE&gt;var&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/field&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;h2 style="TEXT-INDENT: 32.15pt"&gt;&lt;a name=_Toc67710112&gt;&lt;/a&gt;&lt;span class=SpellE&gt;&lt;span style="mso-bookmark: _Toc67710112"&gt;&lt;span lang=EN-US&gt;Minlength&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-bookmark: _Toc67710112"&gt;&lt;span lang=EN-US&gt; &lt;span class=SpellE&gt;Validator&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/h2&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;这个校验器类似于上面的&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;Maxlength&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US&gt; &lt;span class=SpellE&gt;Validator&lt;/span&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;参数一样&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;校验规则也一样&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;只是作为参数的变量名字为&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;minlength&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;table class=MsoTableGrid style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BACKGROUND: #99ccff; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid #FF6600 1.0pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: 1.0pt solid #FF6600; mso-border-insidev: 1.0pt solid #FF6600" cellspacing=0 cellpadding=0 border=1&gt;
&lt;tbody&gt;
&lt;tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes"&gt;
&lt;td style="BORDER-RIGHT: #ff6600 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ff6600 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ff6600 1pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ff6600 1pt solid" valign=top width=568&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;field
property="password" depends="&lt;span class=SpellE&gt;minlength&lt;/span&gt;"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 2"&gt;&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; &lt;/span&gt;&amp;lt;&lt;span class=SpellE&gt;msg&lt;/span&gt; name="&lt;span class=SpellE&gt;minlength&lt;/span&gt;"
key="&lt;span class=SpellE&gt;test.minlength&lt;/span&gt;"/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 2"&gt;&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; &lt;/span&gt;&amp;lt;arg0
key="&lt;span class=SpellE&gt;test.password&lt;/span&gt;" /&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 2"&gt;&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; &lt;/span&gt;&amp;lt;arg1
name="&lt;span class=SpellE&gt;minlength&lt;/span&gt;" key="${&lt;span class=SpellE&gt;var:minlength&lt;/span&gt;}"
resource="false" /&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 2"&gt;&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; &lt;/span&gt;&amp;lt;&lt;span class=SpellE&gt;var&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 3"&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;span class=SpellE&gt;var&lt;/span&gt;-name&amp;gt;&lt;span class=SpellE&gt;minlength&lt;/span&gt;&amp;lt;/&lt;span class=SpellE&gt;var&lt;/span&gt;-name&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 3"&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;span class=SpellE&gt;var&lt;/span&gt;-value&amp;gt;8&amp;lt;/&lt;span class=SpellE&gt;var&lt;/span&gt;-value&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 2"&gt;&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; &lt;/span&gt;&amp;lt;/&lt;span class=SpellE&gt;var&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/field&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;h2 style="TEXT-INDENT: 32.15pt"&gt;&lt;a name=_Toc67710113&gt;&lt;span lang=EN-US&gt;Email &lt;/span&gt;&lt;/a&gt;&lt;span class=SpellE&gt;&lt;span style="mso-bookmark: _Toc67710113"&gt;&lt;span lang=EN-US&gt;Validator&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-bookmark: _Toc67710113"&gt;&lt;/span&gt;
&lt;/h2&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;这个校验器校验电子邮件字段&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;当用户输入的电子邮件地址不合法的时候&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;校验器抛出异常&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;例子&lt;/span&gt;&lt;span lang=EN-US&gt;:&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;table class=MsoTableGrid style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BACKGROUND: #99ccff; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid #FF6600 1.0pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: 1.0pt solid #FF6600; mso-border-insidev: 1.0pt solid #FF6600" cellspacing=0 cellpadding=0 border=1&gt;
&lt;tbody&gt;
&lt;tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes"&gt;
&lt;td style="BORDER-RIGHT: #ff6600 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ff6600 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ff6600 1pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ff6600 1pt solid" valign=top width=568&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;field&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;property="email"
depends="&lt;span class=SpellE&gt;required,email&lt;/span&gt;"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 2"&gt;&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; &lt;/span&gt;&amp;lt;&lt;span class=SpellE&gt;msg&lt;/span&gt; name="required"
key="&lt;span class=SpellE&gt;test.required&lt;/span&gt;"/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 2"&gt;&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; &lt;/span&gt;&amp;lt;&lt;span class=SpellE&gt;msg&lt;/span&gt; name="email"
key="&lt;span class=SpellE&gt;test.error.email&lt;/span&gt;"/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 2"&gt;&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; &lt;/span&gt;&amp;lt;arg0
key="&lt;span class=SpellE&gt;test.email&lt;/span&gt;"/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/field&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;h1 style="TEXT-INDENT: 44.15pt"&gt;&lt;a name=_Toc67710114&gt;&lt;span lang=EN-US&gt;Form Bean&lt;/span&gt;&lt;/a&gt;&lt;span style="mso-bookmark: _Toc67710114"&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的编写&lt;/span&gt;&lt;/span&gt;
&lt;/h1&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;要使用&lt;/span&gt;&lt;span lang=EN-US&gt;Struts&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;Validator&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;框架进行自动校验的&lt;/span&gt;&lt;span lang=EN-US&gt;Form
Bean&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;不能继承自普通的&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;ActionForm&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;必须继承自&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;ValidatorForm&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;或者&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;ValidatorActionForm&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;我们项目组都是继承自&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;ValidatorForm&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;ValidatorForm&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;根据&lt;/span&gt;&lt;span lang=EN-US&gt;struts-&lt;span class=SpellE&gt;config.xml&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;文件中的&lt;/span&gt;&lt;span lang=EN-US&gt;action&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的&lt;/span&gt;&lt;span lang=EN-US&gt;name&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;属性为当前&lt;/span&gt;&lt;span lang=EN-US&gt;form&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的调用相应的验证器，因此在&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;validator-rules.xml&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;中的&lt;/span&gt;&lt;span lang=EN-US&gt;&amp;lt;form-bean&amp;gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;元素的名称属性&lt;/span&gt;&lt;span lang=EN-US&gt;(name)&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;应该与&lt;/span&gt;&lt;span lang=EN-US&gt;&amp;lt;action&amp;gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的&lt;/span&gt;&lt;span lang=EN-US&gt;name&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;属性值相匹配。&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;ValidatorActionForm&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;使用&lt;/span&gt;&lt;span lang=EN-US&gt;struts-&lt;span class=SpellE&gt;config.xml&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;中&lt;/span&gt;&lt;span lang=EN-US&gt;action&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的&lt;/span&gt;&lt;span lang=EN-US&gt;path&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;属性，所以&lt;/span&gt;&lt;span lang=EN-US&gt;path&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;属性的值相应的应该与&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;validator.xml&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;中的&lt;/span&gt;&lt;span lang=EN-US&gt;Form&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的&lt;/span&gt;&lt;span lang=EN-US&gt;name&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;属性匹配。&lt;/span&gt;
&lt;/p&gt;
&lt;h1 style="TEXT-INDENT: 44.15pt"&gt;&lt;a name=_Toc67710115&gt;&lt;span lang=EN-US&gt;Struts-&lt;/span&gt;&lt;/a&gt;&lt;span class=SpellE&gt;&lt;span style="mso-bookmark: _Toc67710115"&gt;&lt;span lang=EN-US&gt;config.xml&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-bookmark: _Toc67710115"&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;文件的配置&lt;/span&gt;&lt;/span&gt;
&lt;/h1&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;要使用&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;Validator&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;框架的自动校验机制&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;还必须在&lt;/span&gt;&lt;span lang=EN-US&gt;Struts-&lt;span class=SpellE&gt;config.xml&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;文件中作相应的配置&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;除了前面已经说明了的配置&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;Validator&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US&gt; &lt;span class=SpellE&gt;Plugin&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;意外&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;还需要对需要校验的&lt;/span&gt;&lt;span lang=EN-US&gt;form&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的&lt;/span&gt;&lt;span lang=EN-US&gt;action&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;进行配置&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;主要有两个地方需要配置&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;一个是&lt;/span&gt;&lt;span lang=EN-US&gt;&amp;lt;action&amp;gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的&lt;/span&gt;&lt;span lang=EN-US&gt;input&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;属性&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;一个是&lt;/span&gt;&lt;span lang=EN-US&gt;&amp;lt;action&amp;gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的&lt;/span&gt;&lt;span lang=EN-US&gt;validate&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;属性&lt;/span&gt;&lt;span lang=EN-US&gt;.input&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;属性必须指定包含校验&lt;/span&gt;&lt;span lang=EN-US&gt;Form&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;jsp&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;页面的路径&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;以便&lt;/span&gt;&lt;span lang=EN-US&gt;Struts&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的校验框架校验失败的时候可以重新导向到原来的页面让用户重新输入&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;span class=SpellE&gt;validator&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;属性是一个&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;boolean&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;类型的属性&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;必须设置为&lt;/span&gt;&lt;span lang=EN-US&gt;true
struts&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;才会启动自动校验机制&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;h1 style="TEXT-INDENT: 44.15pt"&gt;&lt;a name=_Toc67710116&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;在&lt;/span&gt;&lt;span lang=EN-US&gt;JSP&lt;/span&gt;&lt;/a&gt;&lt;span style="mso-bookmark: _Toc67710116"&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;页面捕捉错误信息&lt;/span&gt;&lt;/span&gt;
&lt;/h1&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;Validator&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的校验机制可以定义在服务端进行校验或者通过&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;Javascript&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;在浏览器端进行校验&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;这两种不同的方式在&lt;/span&gt;&lt;span lang=EN-US&gt;JSP&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;页面编写的时候有很大的区别&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;h2 style="TEXT-INDENT: 32.15pt"&gt;&lt;a name=_Toc67710117&gt;&lt;span style="FONT-FAMILY: SimHei; mso-ascii-font-family: Arial"&gt;捕捉服务端的错误信息&lt;/span&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;要捕捉服务端校验的错误信息比较简单&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;只需要在&lt;/span&gt;&lt;span lang=EN-US&gt;JSP&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;页面中嵌入一下的代码就可以在页面中显示错误信息&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;这些错误信息也可以自定义显示风格&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;table class=MsoTableGrid style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BACKGROUND: #99ccff; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid #FF6600 1.0pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: 1.0pt solid #FF6600; mso-border-insidev: 1.0pt solid #FF6600" cellspacing=0 cellpadding=0 border=1&gt;
&lt;tbody&gt;
&lt;tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes"&gt;
&lt;td style="BORDER-RIGHT: #ff6600 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ff6600 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ff6600 1pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ff6600 1pt solid" valign=top width=568&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&amp;lt;&lt;span class=SpellE&gt;logic:messagesPresent&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;span class=SpellE&gt;bean:message&lt;/span&gt; key="&lt;span class=SpellE&gt;test.error.descript&lt;/span&gt;"/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;span class=SpellE&gt;html:messages&lt;/span&gt; id="error"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;span class=SpellE&gt;li&lt;/span&gt;&amp;gt;&amp;lt;&lt;span class=SpellE&gt;bean:write&lt;/span&gt; name="error"/&amp;gt;&amp;lt;/&lt;span class=SpellE&gt;li&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;span class=SpellE&gt;html:messages&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&amp;lt;/&lt;span class=SpellE&gt;logic:messagesPresent&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&amp;lt;&lt;span class=SpellE&gt;bean:message&lt;/span&gt; key=&lt;span class=GramE&gt;&amp;#8221;&lt;/span&gt;&lt;span class=SpellE&gt;test.error.descript&lt;/span&gt;&lt;span class=GramE&gt;&amp;#8221;&lt;/span&gt;/&amp;gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;通过&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;ApplicationResources.properties&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;文件中定义的信息向用户报告错误发生的原因和简单说明&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&amp;lt;&lt;span class=SpellE&gt;html&lt;span class=GramE&gt;:messages&lt;/span&gt;&lt;/span&gt; id=&amp;#8221;error&amp;#8221;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;span class=SpellE&gt;li&lt;/span&gt;&amp;gt;&amp;lt;&lt;span class=SpellE&gt;bean&lt;span class=GramE&gt;:write&lt;/span&gt;&lt;/span&gt; name=&amp;#8221;error&amp;#8221;
/&amp;gt;&amp;lt;/&lt;span class=SpellE&gt;li&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&amp;lt;/&lt;span class=SpellE&gt;html&lt;span class=GramE&gt;:messages&lt;/span&gt;&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;则是显示具体的由&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;Validator&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;框架产生的错误信息&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;h2 style="TEXT-INDENT: 32.15pt"&gt;&lt;a name=_Toc67710118&gt;&lt;span style="FONT-FAMILY: SimHei; mso-ascii-font-family: Arial"&gt;捕捉&lt;/span&gt;&lt;span lang=EN-US&gt;JavaScript&lt;/span&gt;&lt;/a&gt;&lt;span style="mso-bookmark: _Toc67710118"&gt;&lt;span style="FONT-FAMILY: SimHei; mso-ascii-font-family: Arial"&gt;的错误信息&lt;/span&gt;&lt;/span&gt;
&lt;/h2&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;要捕捉&lt;/span&gt;&lt;span lang=EN-US&gt;JavaScript&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;产生的错误信息首先要使&lt;/span&gt;&lt;span lang=EN-US&gt;JSP&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;页面产生&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;Validator&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;生成的&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;Javascript&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;代码&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;并在用户点击提交按钮的时候让提交按钮触发相应的校验函数&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;实现方法如下&lt;/span&gt;&lt;span lang=EN-US&gt;:&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;首先要让&lt;/span&gt;&lt;span lang=EN-US&gt;JSP&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;触发校验函数&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;使用这样的&lt;/span&gt;&lt;span lang=EN-US&gt;HTML&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;代码&lt;/span&gt;&lt;span lang=EN-US&gt;:&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&amp;lt;&lt;span class=SpellE&gt;html&lt;span class=GramE&gt;:form&lt;/span&gt;&lt;/span&gt; action="/&lt;span class=SpellE&gt;testAction.do&lt;/span&gt;" &lt;span class=SpellE&gt;onsubmit&lt;/span&gt;="return &lt;span class=SpellE&gt;validateTestForm&lt;/span&gt;(this);"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;其中&lt;/span&gt;&lt;span lang=EN-US&gt;action&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;指定这个&lt;/span&gt;&lt;span lang=EN-US&gt;form&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;对应的&lt;/span&gt;&lt;span lang=EN-US&gt;action,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;这个跟普通的&lt;/span&gt;&lt;span lang=EN-US&gt;form&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;没有区别&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;span class=SpellE&gt;onsubmit&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;属性就指定了校验函数&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;它的规则是&lt;/span&gt;&lt;span lang=EN-US&gt;:
return + &lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;空格&lt;/span&gt;&lt;span lang=EN-US&gt; + &lt;span class=SpellE&gt;validator&lt;/span&gt;+ &lt;span class=SpellE&gt;ValidatorForm&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的名字&lt;/span&gt;&lt;span lang=EN-US&gt; +
(this) &lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;注意这样的组合规则是不能变的&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;否则会导致页面错误并不能实现校验功能&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;还要注意&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;ValidatorForm&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的名字的第一个字母一定要大写&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;不管在&lt;/span&gt;&lt;span lang=EN-US&gt;Struts-&lt;span class=SpellE&gt;congfig.xml&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;文件中的定义是否大写&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;这里都要把它作为大写字母&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;然后还要在&lt;/span&gt;&lt;span lang=EN-US&gt;JSP&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;页面中产生可以实现校验的&lt;/span&gt;&lt;span lang=EN-US&gt;JavaScript&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;代码&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;这个步骤也很简单&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;只需要在&lt;/span&gt;&lt;span lang=EN-US&gt;JSP&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;页面的末尾加上下面一句&lt;/span&gt;&lt;span lang=EN-US&gt;:&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&amp;lt;&lt;span class=SpellE&gt;html&lt;span class=GramE&gt;:javascript&lt;/span&gt;&lt;/span&gt; &lt;span class=SpellE&gt;formName&lt;/span&gt;="&lt;span class=SpellE&gt;testForm&lt;/span&gt;" &lt;span class=SpellE&gt;staticJavascript&lt;/span&gt;="true"/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;其中&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;formName&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的名字要跟&lt;/span&gt;&lt;span lang=EN-US&gt;struts-&lt;span class=SpellE&gt;config.xml&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;文件中配置的一致&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;大小写也要一致&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;span class=SpellE&gt;staticJavascript&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;为&lt;/span&gt;&lt;span lang=EN-US&gt;true&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的时候&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;Validator&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;将使用&lt;/span&gt;&lt;span lang=EN-US&gt;JavaScript&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;代码进行校验&lt;/span&gt;&lt;span lang=EN-US&gt;(&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;这些&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;Javascript&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;代码由&lt;/span&gt;&lt;span lang=EN-US&gt;Struts &lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;validator&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;框架自动产生&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;我们只需要配置&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;validator.xml&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;文件&lt;/span&gt;&lt;span lang=EN-US&gt;),&lt;span class=SpellE&gt;staticJavascript&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;为&lt;/span&gt;&lt;span lang=EN-US&gt;false&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的时候&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;validator&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;将使用服务端代码进行校验&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;这些服务端的校验代码也不需要我们编写&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;h1 style="TEXT-INDENT: 0cm; mso-char-indent-count: 0"&gt;&lt;a name=_Toc67710119&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;编写扩展&lt;/span&gt;&lt;span lang=EN-US&gt;Struts
V&lt;/span&gt;&lt;/a&gt;&lt;span class=SpellE&gt;&lt;span style="mso-bookmark: _Toc67710119"&gt;&lt;span lang=EN-US&gt;alidator&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-bookmark: _Toc67710119"&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;校验密码输入&lt;/span&gt;&lt;/span&gt;
&lt;/h1&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;使用&lt;/span&gt;&lt;span lang=EN-US&gt;Struts&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;validator&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;校验页面&lt;/span&gt;&lt;span lang=EN-US&gt;form&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;中的两个字段是否一致&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;一般用在校验密码&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;当用户输入两次密码的时候需要校验用户的两次输入是否一致&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;如果不一致需要报错&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;实现这个功能的步骤如下&lt;/span&gt;&lt;span lang=EN-US&gt;:&lt;/span&gt;
&lt;/p&gt;
&lt;h2 style="TEXT-INDENT: 0cm; mso-char-indent-count: 0"&gt;&lt;a name=_Toc67710120&gt;&lt;span lang=EN-US&gt;1.&lt;/span&gt;&lt;/a&gt;&lt;span style="mso-bookmark: _Toc67710120"&gt;&lt;span style="FONT-FAMILY: SimHei; mso-ascii-font-family: Arial"&gt;编写一个校验器&lt;/span&gt;&lt;span lang=EN-US&gt;(&lt;span class=SpellE&gt;Validator&lt;/span&gt;),&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-bookmark: _Toc67710120"&gt;&lt;span style="FONT-FAMILY: SimHei; mso-ascii-font-family: Arial"&gt;实现对&lt;/span&gt;&lt;span lang=EN-US&gt;form&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-bookmark: _Toc67710120"&gt;&lt;span style="FONT-FAMILY: SimHei; mso-ascii-font-family: Arial"&gt;中两个字段的一致性校验&lt;/span&gt;&lt;span lang=EN-US&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;/h2&gt;
&lt;p&gt;
&lt;table class=MsoTableGrid style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BACKGROUND: #99ccff; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid #FF6600 1.5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: 1.5pt solid #FF6600; mso-border-insidev: 1.5pt solid #FF6600" cellspacing=0 cellpadding=0 border=1&gt;
&lt;tbody&gt;
&lt;tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes"&gt;
&lt;td style="BORDER-RIGHT: #ff6600 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ff6600 1.5pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ff6600 1.5pt solid; WIDTH: 452.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ff6600 1.5pt solid" valign=top width=604&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;package cn.com.syni.net800114.validator;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;import &lt;span class=SpellE&gt;org.apache.commons.validator.ValidatorUtil&lt;/span&gt;;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;import &lt;span class=SpellE&gt;org.apache.commons.validator.Field&lt;/span&gt;;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;import &lt;span class=SpellE&gt;org.apache.commons.validator.ValidatorAction&lt;/span&gt;;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;import &lt;span class=SpellE&gt;org.apache.commons.validator.GenericValidator&lt;/span&gt;;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;import &lt;span class=SpellE&gt;org.apache.struts.action.ActionErrors&lt;/span&gt;;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;import &lt;span class=SpellE&gt;org.apache.struts.validator.Resources&lt;/span&gt;;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;import &lt;span class=SpellE&gt;javax.servlet.http.HttpServletRequest&lt;/span&gt;;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;public class &lt;span class=SpellE&gt;ValidationUtil&lt;/span&gt; {&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;public
static &lt;span class=SpellE&gt;boolean&lt;/span&gt; &lt;span class=SpellE&gt;validateTwoFields&lt;/span&gt;(
Object bean, &lt;span class=SpellE&gt;ValidatorAction&lt;/span&gt; &lt;span class=SpellE&gt;va&lt;/span&gt;,&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&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;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Field &lt;span class=SpellE&gt;field&lt;/span&gt;, &lt;span class=SpellE&gt;ActionErrors&lt;/span&gt; errors,&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&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;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class=SpellE&gt;HttpServletRequest&lt;/span&gt; request)
{&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;String
value = &lt;span class=SpellE&gt;ValidatorUtil.getValueAsString&lt;/span&gt;(bean, &lt;span class=SpellE&gt;field.getProperty&lt;/span&gt;());&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;String
sProperty2 = &lt;span class=SpellE&gt;field.getVarValue&lt;/span&gt;("&lt;span class=SpellE&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="COLOR: #ff6600"&gt;secondProperty&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;");&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;String
value2 = &lt;span class=SpellE&gt;ValidatorUtil.getValueAsString&lt;/span&gt;(bean, sProperty2);&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;if
(!&lt;span class=SpellE&gt;GenericValidator.isBlankOrNull&lt;/span&gt;(value)) {&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;try
{&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&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;&amp;nbsp;&amp;nbsp; &lt;/span&gt;if
(!&lt;span class=SpellE&gt;value.equals&lt;/span&gt;(value2)) {&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class=SpellE&gt;errors.add&lt;/span&gt;(&lt;span class=SpellE&gt;field.getKey&lt;/span&gt;(),&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class=SpellE&gt;Resources.getActionError&lt;/span&gt;(request, &lt;span class=SpellE&gt;va&lt;/span&gt;,
field));&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;return
false;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&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;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;catch
(Exception e) {&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&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;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class=SpellE&gt;errors.add&lt;/span&gt;(&lt;span class=SpellE&gt;field.getKey&lt;/span&gt;(),&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&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;&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; &lt;/span&gt;&lt;span class=SpellE&gt;Resources.getActionError&lt;/span&gt;(request, &lt;span class=SpellE&gt;va&lt;/span&gt;,
field));&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&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;&amp;nbsp;&amp;nbsp; &lt;/span&gt;return
false;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;return
true;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;}&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;h2 style="TEXT-INDENT: 0cm; mso-char-indent-count: 0"&gt;&lt;a name=_Toc67710121&gt;&lt;span lang=EN-US&gt;2.&lt;/span&gt;&lt;/a&gt;&lt;span style="mso-bookmark: _Toc67710121"&gt;&lt;span style="FONT-FAMILY: SimHei; mso-ascii-font-family: Arial"&gt;编写&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;validator&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US&gt;-rules&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-bookmark: _Toc67710121"&gt;&lt;span style="FONT-FAMILY: SimHei; mso-ascii-font-family: Arial"&gt;文件&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-bookmark: _Toc67710121"&gt;&lt;span style="FONT-FAMILY: SimHei; mso-ascii-font-family: Arial"&gt;增加一个自定义校验器的配置&lt;/span&gt;&lt;span lang=EN-US&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;/h2&gt;
&lt;p&gt;
&lt;table class=MsoTableGrid style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BACKGROUND: #99ccff; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid #FF6600 1.5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: 1.5pt solid #FF6600; mso-border-insidev: 1.5pt solid #FF6600" cellspacing=0 cellpadding=0 border=1&gt;
&lt;tbody&gt;
&lt;tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes"&gt;
&lt;td style="BORDER-RIGHT: #ff6600 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ff6600 1.5pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ff6600 1.5pt solid; WIDTH: 452.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ff6600 1.5pt solid" valign=top width=604&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&amp;lt;&lt;span class=SpellE&gt;validator&lt;/span&gt; name="&lt;span class=SpellE&gt;twofields&lt;/span&gt;" &lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class=SpellE&gt;classname&lt;/span&gt;="cn.com.syni.net800114.validator.ValidationUtil"
method="&lt;span class=SpellE&gt;validateTwoFields&lt;/span&gt;" &lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class=SpellE&gt;methodParams&lt;/span&gt;="&lt;span class=SpellE&gt;java.lang.Object&lt;/span&gt;,&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class=SpellE&gt;org.apache.commons.validator.ValidatorAction&lt;/span&gt;,&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class=SpellE&gt;org.apache.commons.validator.Field&lt;/span&gt;,&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class=SpellE&gt;org.apache.struts.action.ActionErrors&lt;/span&gt;,&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class=SpellE&gt;javax.servlet.http.HttpServletRequest&lt;/span&gt;" &lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;depends="required" &lt;span class=SpellE&gt;msg&lt;/span&gt;="&lt;span class=SpellE&gt;errors.twofields&lt;/span&gt;"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;span class=SpellE&gt;javascript&lt;/span&gt;&amp;gt;&amp;lt;![CDATA[&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;function &lt;span class=SpellE&gt;validateTwoFields&lt;/span&gt;(form)
{&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class=SpellE&gt;var&lt;/span&gt; &lt;span class=SpellE&gt;bValid&lt;/span&gt; =
true;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class=SpellE&gt;var&lt;/span&gt; &lt;span class=SpellE&gt;focusField&lt;/span&gt; =
null;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class=SpellE&gt;var&lt;/span&gt; &lt;span class=SpellE&gt;i&lt;/span&gt; =
0;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class=SpellE&gt;var&lt;/span&gt; fields
= new Array();&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class=SpellE&gt;oTwoFields&lt;/span&gt; =
new &lt;span class=SpellE&gt;twofields&lt;/span&gt;();&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;for
(x in &lt;span class=SpellE&gt;oTwoFields&lt;/span&gt;) {&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=SpellE&gt;var&lt;/span&gt; field
= form[&lt;span class=SpellE&gt;oTwoFields&lt;/span&gt;[x][0]];&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&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;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class=SpellE&gt;var&lt;/span&gt; &lt;span class=SpellE&gt;secondField&lt;/span&gt; =
form[&lt;span class=SpellE&gt;oTwoFields&lt;/span&gt;[x][2]("&lt;span class=SpellE&gt;secondProperty&lt;/span&gt;")];&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&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;&amp;nbsp;&amp;nbsp; &lt;/span&gt;if
(&lt;span class=SpellE&gt;field.type&lt;/span&gt; == 'text' ||&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class=SpellE&gt;field.type&lt;/span&gt; ==
'&lt;span class=SpellE&gt;textarea&lt;/span&gt;' ||&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class=SpellE&gt;field.type&lt;/span&gt; ==
'select-one' ||&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class=SpellE&gt;field.type&lt;/span&gt; ==
'radio' ||&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class=SpellE&gt;field.type&lt;/span&gt; ==
'password') {&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class=SpellE&gt;var&lt;/span&gt; value;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class=SpellE&gt;var&lt;/span&gt; &lt;span class=SpellE&gt;secondValue&lt;/span&gt;;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;//
get field's value&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;if
(&lt;span class=SpellE&gt;field.type&lt;/span&gt; == "select-one") {&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class=SpellE&gt;var&lt;/span&gt; &lt;span class=SpellE&gt;si&lt;/span&gt; = &lt;span class=SpellE&gt;field.selectedIndex&lt;/span&gt;;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;value
= &lt;span class=SpellE&gt;field.options&lt;/span&gt;[&lt;span class=SpellE&gt;si&lt;/span&gt;].value;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class=SpellE&gt;secondValue&lt;/span&gt; = &lt;span class=SpellE&gt;secondField.options&lt;/span&gt;[&lt;span class=SpellE&gt;si&lt;/span&gt;].value;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}
else {&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&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;&lt;/span&gt;value
= &lt;span class=SpellE&gt;field.value&lt;/span&gt;;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class=SpellE&gt;secondValue&lt;/span&gt; = &lt;span class=SpellE&gt;secondField.value&lt;/span&gt;;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&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;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;if
(value != &lt;span class=SpellE&gt;secondValue&lt;/span&gt;) {&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;if
(&lt;span class=SpellE&gt;i&lt;/span&gt; == 0) {&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=SpellE&gt;focusField&lt;/span&gt; =
field;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;fields[&lt;span class=SpellE&gt;i&lt;/span&gt;++]
= &lt;span class=SpellE&gt;oTwoFields&lt;/span&gt;[x][1];&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class=SpellE&gt;bValid&lt;/span&gt; =
false;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&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;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;if
(&lt;span class=SpellE&gt;fields.length&lt;/span&gt; &amp;gt; 0) {&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&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;&amp;nbsp; &lt;/span&gt;&lt;span class=SpellE&gt;focusField.focus&lt;/span&gt;();&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&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;&amp;nbsp;&amp;nbsp; &lt;/span&gt;alert(&lt;span class=SpellE&gt;fields.join&lt;/span&gt;('\n'));&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;return &lt;span class=SpellE&gt;bValid&lt;/span&gt;;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}]]&amp;gt;&amp;lt;/&lt;span class=SpellE&gt;javascript&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&amp;lt;/&lt;span class=SpellE&gt;validator&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;h2 style="TEXT-INDENT: 0cm; mso-char-indent-count: 0"&gt;&lt;a name=_Toc67710122&gt;&lt;span lang=EN-US&gt;3.&lt;/span&gt;&lt;/a&gt;&lt;span style="mso-bookmark: _Toc67710122"&gt;&lt;span style="FONT-FAMILY: SimHei; mso-ascii-font-family: Arial"&gt;编写&lt;/span&gt;&lt;span lang=EN-US&gt;JSP&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-bookmark: _Toc67710122"&gt;&lt;span style="FONT-FAMILY: SimHei; mso-ascii-font-family: Arial"&gt;页面&lt;/span&gt;&lt;/span&gt;
&lt;/h2&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;form&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;中包括要进行自定义校验的字段&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;这里是两个&lt;/span&gt;&lt;span lang=EN-US&gt;password&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;类型的&lt;/span&gt;&lt;span lang=EN-US&gt;input,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;校验器将校验用户输入的这两个字段是否一致&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;如果不一致&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;将通过弹出对话框告诉用户&lt;/span&gt;&lt;span lang=EN-US&gt;:&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;table class=MsoTableGrid style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BACKGROUND: #99ccff; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid #FF6600 1.5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: 1.5pt solid #FF6600; mso-border-insidev: 1.5pt solid #FF6600" cellspacing=0 cellpadding=0 border=1&gt;
&lt;tbody&gt;
&lt;tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes"&gt;
&lt;td style="BORDER-RIGHT: #ff6600 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ff6600 1.5pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ff6600 1.5pt solid; WIDTH: 452.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ff6600 1.5pt solid" valign=top width=604&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&amp;lt;%@ &lt;span class=SpellE&gt;taglib&lt;/span&gt; &lt;span class=SpellE&gt;uri&lt;/span&gt;="/WEB-INF/struts-&lt;span class=SpellE&gt;bean.tld&lt;/span&gt;"
prefix="bean" %&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&amp;lt;%@ &lt;span class=SpellE&gt;taglib&lt;/span&gt; &lt;span class=SpellE&gt;uri&lt;/span&gt;="/WEB-INF/struts-&lt;span class=SpellE&gt;html.tld&lt;/span&gt;"
prefix="html" %&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&amp;lt;%@ page &lt;span class=SpellE&gt;contentType&lt;/span&gt;="text/html; &lt;span class=SpellE&gt;charset&lt;/span&gt;=GBK"
%&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&amp;lt;&lt;span class=SpellE&gt;html:html&lt;/span&gt;&amp;gt;&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;&lt;span class=SpellE&gt;Regiestation&lt;/span&gt;&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&amp;lt;&lt;span class=SpellE&gt;html:form&lt;/span&gt; action="/&lt;span class=SpellE&gt;registationAction.do&lt;/span&gt;" &lt;span class=SpellE&gt;onsubmit&lt;/span&gt;="return &lt;span class=SpellE&gt;validateRegistation&lt;/span&gt;(this);"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&amp;lt;&lt;span class=SpellE&gt;bean:message&lt;/span&gt; key="&lt;span class=SpellE&gt;userForm.password&lt;/span&gt;"/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&amp;lt;&lt;span class=SpellE&gt;html:password&lt;/span&gt; property="password"/&amp;gt;&amp;lt;&lt;span class=SpellE&gt;br&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&amp;lt;&lt;span class=SpellE&gt;bean:message&lt;/span&gt; key="userForm.password2"/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&amp;lt;&lt;span class=SpellE&gt;html:password&lt;/span&gt; property="password2"/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&amp;lt;&lt;span class=SpellE&gt;br&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&amp;lt;&lt;span class=SpellE&gt;html:submit&lt;/span&gt; property="submit" value="Submit"/&amp;gt;&amp;lt;&lt;span class=SpellE&gt;br&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&amp;lt;&lt;span class=SpellE&gt;html:reset&lt;/span&gt; value ="Reset"/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&amp;lt;/&lt;span class=SpellE&gt;html:form&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&amp;lt;&lt;span class=SpellE&gt;html:javascript&lt;/span&gt; &lt;span class=SpellE&gt;formName&lt;/span&gt;="&lt;span class=SpellE&gt;registation&lt;/span&gt;" &lt;span class=SpellE&gt;staticJavascript&lt;/span&gt;="true" &lt;span class=SpellE&gt;dynamicJavascript&lt;/span&gt;="true"/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&amp;lt;/&lt;span class=SpellE&gt;html:html&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;其中&lt;/span&gt;&lt;span lang=EN-US&gt;,&amp;lt;&lt;span class=SpellE&gt;html:form&lt;/span&gt; action=&lt;span class=GramE&gt;&amp;#8221;&lt;/span&gt;/&lt;span class=SpellE&gt;registationAction.do&lt;/span&gt;&lt;span class=GramE&gt;&amp;#8221;&lt;/span&gt; &lt;span class=SpellE&gt;onsubmit&lt;/span&gt;=&lt;span class=GramE&gt;&amp;#8221;&lt;/span&gt;return &lt;span class=SpellE&gt;validatorRegistation&lt;/span&gt;(this);&amp;#8221;&amp;gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;说明这个窗口需要使用&lt;/span&gt;&lt;span lang=EN-US&gt;Struts &lt;span class=SpellE&gt;Validator&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;进行校验&lt;/span&gt;&lt;span lang=EN-US&gt;,action&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;属性指定这个&lt;/span&gt;&lt;span lang=EN-US&gt;JSP&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;页面对应的&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;Action,onsubmit&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;属性指定了这个页面校验所对应的&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;ActionForm&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US&gt; Bean,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;它的规则是&lt;/span&gt; &lt;span lang=EN-US&gt;&amp;#8220;return
+ &lt;span class=SpellE&gt;validator&lt;/span&gt; + &lt;span class=SpellE&gt;FormBeanName&lt;/span&gt; + (this);&amp;#8221;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;这里的例子表示这个页面的&lt;/span&gt;&lt;span lang=EN-US&gt;action&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;是&lt;/span&gt;&lt;span lang=EN-US&gt;/&lt;span class=SpellE&gt;regiestationAction.do&lt;/span&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;它对应的&lt;/span&gt;&lt;span lang=EN-US&gt;Action
Form&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;名称为&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;Registation&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US&gt;(&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;注意&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;如果在&lt;/span&gt;&lt;span lang=EN-US&gt;Struts-&lt;span class=SpellE&gt;config.xml&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;文件中&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;ActionForm&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的名字为&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;registation&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的话这里也要把第一个字母变为大写&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;否则出错&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;最后倒数第二行的&lt;/span&gt;&lt;span lang=EN-US&gt;&amp;lt;&lt;span class=SpellE&gt;html:javascrip&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;标记说明要使用&lt;/span&gt;&lt;span lang=EN-US&gt;java
script&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;进行客户端校验&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;span class=SpellE&gt;formName&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;属性指定&lt;/span&gt;&lt;span lang=EN-US&gt;Action
Form&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的名称&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;这个名称要跟&lt;/span&gt;&lt;span lang=EN-US&gt;struts-&lt;span class=SpellE&gt;config.xml&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;文件中的配置一致&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;严格区分大小写&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;span class=SpellE&gt;staticJavascript&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;和&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;dynamicJavascript&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;分别指定是使用静态的还是动态的&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;javascript&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;代码进行校验&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;h2 style="TEXT-INDENT: 0cm; mso-char-indent-count: 0"&gt;&lt;a name=_Toc67710123&gt;&lt;span lang=EN-US&gt;4.&lt;/span&gt;&lt;/a&gt;&lt;span style="mso-bookmark: _Toc67710123"&gt;&lt;span style="FONT-FAMILY: SimHei; mso-ascii-font-family: Arial"&gt;编写&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;validator.xml&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-bookmark: _Toc67710123"&gt;&lt;span style="FONT-FAMILY: SimHei; mso-ascii-font-family: Arial"&gt;配置文件&lt;/span&gt;&lt;span lang=EN-US&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;/h2&gt;
&lt;p&gt;
&lt;table class=MsoTableGrid style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BACKGROUND: #99ccff; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid #FF6600 1.5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: 1.5pt solid #FF6600; mso-border-insidev: 1.5pt solid #FF6600" cellspacing=0 cellpadding=0 border=1&gt;
&lt;tbody&gt;
&lt;tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes"&gt;
&lt;td style="BORDER-RIGHT: #ff6600 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ff6600 1.5pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ff6600 1.5pt solid; WIDTH: 452.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ff6600 1.5pt solid" valign=top width=604&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&amp;lt;form name="&lt;span class=SpellE&gt;registation&lt;/span&gt;" &amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 10.5pt; mso-char-indent-count: 1.0"&gt;
&lt;span lang=EN-US&gt;&amp;lt;field property="password" depends="&lt;span class=SpellE&gt;required,twofields&lt;/span&gt;"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&amp;lt;&lt;span class=SpellE&gt;msg&lt;/span&gt; name="required"
key="&lt;span class=SpellE&gt;errors.required&lt;/span&gt;"/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&amp;lt;&lt;span class=SpellE&gt;msg&lt;/span&gt; name="&lt;span class=SpellE&gt;twofields&lt;/span&gt;"
key="&lt;span class=SpellE&gt;errors.twofields&lt;/span&gt;"/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&amp;lt;arg0
key="&lt;span class=SpellE&gt;userForm.password&lt;/span&gt;"/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&amp;lt;arg1
key="userForm.password2" /&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&amp;lt;&lt;span class=SpellE&gt;var&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&amp;lt;&lt;span class=SpellE&gt;var&lt;/span&gt;-name&amp;gt;&lt;span class=SpellE&gt;secondProperty&lt;/span&gt;&amp;lt;/&lt;span class=SpellE&gt;var&lt;/span&gt;-name&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&amp;lt;&lt;span class=SpellE&gt;var&lt;/span&gt;-value&amp;gt;password2&amp;lt;/&lt;span class=SpellE&gt;var&lt;/span&gt;-value&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&amp;lt;/&lt;span class=SpellE&gt;var&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 10.5pt; mso-char-indent-count: 1.0"&gt;
&lt;span lang=EN-US&gt;&amp;lt;/field&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-INDENT: 21pt"&gt;
&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;这里要注意&lt;/span&gt;&lt;span lang=EN-US&gt;&amp;lt;&lt;span class=SpellE&gt;var&lt;/span&gt;-name&amp;gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;属性的&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;secondProperty&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;要跟&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;ValidatorUtil.java&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;中的校验方法中的代码一致&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;否则&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US&gt;ValidatorUtil.java&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;不能正确进行校验&lt;/span&gt;&lt;span lang=EN-US&gt;,&amp;lt;&lt;span class=SpellE&gt;var&lt;/span&gt;-value&amp;gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;属性指定这个校验字段所参照的校验字段&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;上面的配置代码说明要对&lt;/span&gt;&lt;span lang=EN-US&gt;form&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;中的&lt;/span&gt;&lt;span lang=EN-US&gt;password&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;字段进行校验&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;它必须和另外一个叫做&lt;/span&gt;&lt;span lang=EN-US&gt;password2&lt;/span&gt;&lt;span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的字段一致&lt;/span&gt;&lt;span lang=EN-US&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.hifar.com/blog/aggbug.ashx?id=4d67ce90-6613-4539-befd-28f2db7e04ad" /&gt;</description>
      <category>Java 技术</category>
      <category>文摘和收藏</category>
    </item>
    <item>
      <trackback:ping>http://www.hifar.com/blog/Trackback.aspx?guid=db282b3e-d992-464d-a33b-5f30594f6883</trackback:ping>
      <pingback:server>http://www.hifar.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.hifar.com/blog/PermaLink,guid,db282b3e-d992-464d-a33b-5f30594f6883.aspx</pingback:target>
      <dc:creator>Jimmy Gao</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
一.数据控制语句 (DML) 部分<br /><br />
1.INSERT  (往数据表里插入记录的语句)<br /><br />
INSERT INTO 表名(字段名1, 字段名2, ……) VALUES ( 值1, 值2, ……); 
<br />
INSERT INTO 表名(字段名1, 字段名2, ……)  SELECT (字段名1, 字段名2, ……)
FROM 另外的表名;<br /><br />
字符串类型的字段值必须用单引号括起来, 例如: ’GOOD DAY’<br />
如果字段值里包含单引号’ 需要进行字符串转换, 我们把它替换成两个单引号''. 
<br />
字符串类型的字段值超过定义的长度会出错, 最好在插入前进行长度校验.<br /><br />
日期字段的字段值可以用当前数据库的系统时间SYSDATE, 精确到秒<br />
或者用字符串转换成日期型函数TO_DATE(‘2001-08-01’,’YYYY-MM-DD’)<br />
TO_DATE()还有很多种日期格式, 可以参看ORACLE DOC. 
<br />
年-月-日 小时:分钟:秒 的格式YYYY-MM-DD HH24:MI:SS<br /><br />
INSERT时最大可操作的字符串长度小于等于4000个单字节, 如果要插入更长的字符串, 请考虑字段用CLOB类型,<br />
方法借用ORACLE里自带的DBMS_LOB程序包.<br /><br />
INSERT时如果要用到从1开始自动增长的序列号, 应该先建立一个序列号<br />
CREATE SEQUENCE 序列号的名称 (最好是表名+序列号标记) INCREMENT BY 1  START  WITH  1 
<br />
MAXVALUE  99999  CYCLE  NOCACHE;<br />
其中最大的值按字段的长度来定, 如果定义的自动增长的序列号 NUMBER(6) , 最大值为999999<br />
INSERT 语句插入这个字段值为: 序列号的名称.NEXTVAL<br /><br />
2.DELETE  (删除数据表里记录的语句)<br /><br />
DELETE FROM表名 WHERE 条件;<br /><br />
注意：删除记录并不能释放ORACLE里被占用的数据块表空间. 它只把那些被删除的数据块标成unused.<br /><br />
如果确实要删除一个大表里的全部记录, 可以用 TRUNCATE 命令, 它可以释放占用的数据块表空间<br />
TRUNCATE TABLE 表名; 
<br />
此操作不可回退.<br /><br />
3.UPDATE  (修改数据表里记录的语句)<br /><br />
UPDATE表名 SET 字段名1=值1, 字段名2=值2, …… WHERE 条件;<br /><br />
如果修改的值N没有赋值或定义时, 将把原来的记录内容清为NULL, 最好在修改前进行非空校验; 
<br />
值N超过定义的长度会出错, 最好在插入前进行长度校验..<br /><br />
注意事项: 
<br />
A. 以上SQL语句对表都加上了行级锁,<br />
确认完成后, 必须加上事物处理结束的命令 COMMIT 才能正式生效, 
<br />
否则改变不一定写入数据库里. 
<br />
如果想撤回这些操作, 可以用命令 ROLLBACK 复原.<br /><br />
B. 在运行INSERT, DELETE 和 UPDATE 语句前最好估算一下可能操作的记录范围, 
<br />
应该把它限定在较小 (一万条记录) 范围内,. 否则ORACLE处理这个事物用到很大的回退段. 
<br />
程序响应慢甚至失去响应. 如果记录数上十万以上这些操作, 可以把这些SQL语句分段分次完成, 
<br />
其间加上COMMIT 确认事物处理.<br /><br />
二.数据定义 (DDL) 部分<br /><br />
1.CREATE (创建表, 索引, 视图, 同义词, 过程, 函数, 数据库链接等)<br /><br />
ORACLE常用的字段类型有<br />
CHAR 固定长度的字符串<br />
VARCHAR2 可变长度的字符串<br />
NUMBER(M,N) 数字型M是位数总长度, N是小数的长度<br />
DATE 日期类型<br /><br />
创建表时要把较小的不为空的字段放在前面, 可能为空的字段放在后面<br /><br />
创建表时可以用中文的字段名, 但最好还是用英文的字段名<br /><br />
创建表时可以给字段加上默认值, 例如 DEFAULT SYSDATE<br />
这样每次插入和修改时, 不用程序操作这个字段都能得到动作的时间<br /><br />
创建表时可以给字段加上约束条件<br />
例如 不允许重复 UNIQUE, 关键字 PRIMARY KEY<br /><br />
2.ALTER (改变表, 索引, 视图等)<br /><br />
改变表的名称<br />
ALTER TABLE 表名1  TO 表名2;<br /><br />
在表的后面增加一个字段<br />
ALTER TABLE表名 ADD 字段名 字段名描述;<br /><br />
修改表里字段的定义描述<br />
ALTER TABLE表名 MODIFY字段名 字段名描述;<br /><br />
给表里的字段加上约束条件<br />
ALTER TABLE 表名 ADD CONSTRAINT 约束名 PRIMARY KEY (字段名);<br />
ALTER TABLE 表名 ADD CONSTRAINT 约束名 UNIQUE (字段名);<br /><br />
把表放在或取出数据库的内存区<br />
ALTER TABLE 表名 CACHE;<br />
ALTER TABLE 表名 NOCACHE;<br /><br />
3.DROP (删除表, 索引, 视图, 同义词, 过程, 函数, 数据库链接等)<br /><br />
删除表和它所有的约束条件<br />
DROP TABLE 表名 CASCADE CONSTRAINTS;<br /><br />
4.TRUNCATE (清空表里的所有记录, 保留表的结构)<br /><br />
TRUNCATE 表名;<br /><br />
三.查询语句 (SELECT) 部分<br /><br />
SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……] WHERE 条件; 
<br /><br />
字段名可以带入函数<br />
  例如:  COUNT(*), MIN(字段名),  MAX(字段名),  AVG(字段名), DISTINCT(字段名), 
<br />
  TO_CHAR(DATE字段名,'YYYY-MM-DD HH24:MI:SS')<br /><br />
NVL(EXPR1, EXPR2)函数<br />
解释: 
<br />
IF EXPR1=NULL<br />
RETURN EXPR2<br />
ELSE<br />
       RETURN EXPR1<br /><br />
DECODE(AA﹐V1﹐R1﹐V2﹐R2....)函数<br />
解释: 
<br />
IF AA=V1 THEN RETURN R1<br />
IF AA=V2 THEN RETURN R2<br />
..…<br />
ELSE<br />
RETURN NULL<br /><br />
LPAD(char1,n,char2)函数<br />
解释:<br />
字符char1按制定的位数n显示，不足的位数用char2字符串替换左边的空位<br /><br />
字段名之间可以进行算术运算<br />
例如:  (字段名1*字段名1)/3<br /><br />
查询语句可以嵌套<br />
例如: SELECT …… FROM 
<br />
(SELECT …… FROM表名1, [表名2, ……] WHERE 条件) WHERE 条件2;<br /><br />
两个查询语句的结果可以做集合操作<br />
例如: 并集UNION(去掉重复记录), 并集UNION ALL(不去掉重复记录), 差集MINUS,  交集INTERSECT<br /><br />
分组查询<br />
SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……] GROUP BY字段名1 
<br />
[HAVING 条件] ;<br /><br />
两个以上表之间的连接查询<br /><br />
SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……] WHERE 
<br />
表名1.字段名 = 表名2. 字段名 [ AND ……] ;<br /><br />
SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……] WHERE 
<br />
表名1.字段名 = 表名2. 字段名(+) [ AND ……] ;<br /><br />
有(+)号的字段位置自动补空值<br /><br />
查询结果集的排序操作, 默认的排序是升序ASC, 降序是DESC<br /><br />
SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……] 
<br />
ORDER BY字段名1, 字段名2 DESC;<br /><br />
字符串模糊比较的方法<br /><br />
INSTR(字段名, ‘字符串’)&gt;0 
<br />
字段名 LIKE  ‘字符串%’  [‘%字符串%’]<br /><br />
每个表都有一个隐含的字段ROWID, 它标记着记录的唯一性. 
<br /><br />
四.ORACLE里常用的数据对象 (SCHEMA)<br /><br />
1.索引 (INDEX)<br /><br />
CREATE INDEX 索引名ON 表名 ( 字段1, [字段2, ……] );<br />
ALTER INDEX 索引名 REBUILD;<br /><br />
一个表的索引最好不要超过三个 (特殊的大表除外), 最好用单字段索引, 结合SQL语句的分析执行情况, 
<br />
也可以建立多字段的组合索引和基于函数的索引<br /><br />
ORACLE8.1.7字符串可以索引的最大长度为1578 单字节<br />
ORACLE8.0.6字符串可以索引的最大长度为758 单字节<br /><br />
ORACLE DOC上说字符串最大可以建索引的长度约是:数据块的大小(db_block_size)*40%<br /><br />
2.视图 (VIEW)<br /><br />
CREATE VIEW 视图名AS SELECT …. FROM …..;<br />
ALTER VIEW视图名 COMPILE;<br /><br />
视图仅是一个SQL查询语句, 它可以把表之间复杂的关系简洁化.<br /><br />
3.同义词 (SYNONMY)<br />
CREATE SYNONYM同义词名FOR 表名;<br />
CREATE SYNONYM同义词名FOR 表名@数据库链接名;<br /><br />
4.数据库链接 (DATABASE LINK)<br />
CREATE DATABASE LINK数据库链接名CONNECT TO 用户名 IDENTIFIED BY 密码 USING ‘数据库连接字符串’;<br /><br />
数据库连接字符串可以用NET8 EASY CONFIG或者直接修改TNSNAMES.ORA里定义.<br /><br />
数据库参数global_name=true时要求数据库链接名称跟远端数据库名称一样<br /><br />
数据库全局名称可以用以下命令查出<br />
SELECT * FROM GLOBAL_NAME;<br /><br />
查询远端数据库里的表<br />
SELECT …… FROM 表名@数据库链接名;<br /><br />
五.权限管理 (DCL) 语句<br /><br />
1.GRANT 赋于权限<br />
常用的系统权限集合有以下三个:<br />
CONNECT(基本的连接), RESOURCE(程序开发), DBA(数据库管理)<br />
常用的数据对象权限有以下五个:<br />
ALL ON 数据对象名, SELECT ON 数据对象名, UPDATE ON 数据对象名,<br />
DELETE ON 数据对象名,  INSERT ON 数据对象名,   ALTER  ON 数据对象名<br /><br />
GRANT CONNECT, RESOURCE TO 用户名;<br />
GRANT SELECT ON 表名 TO 用户名;<br />
GRANT SELECT, INSERT, DELETE ON表名 TO 用户名1, 用户名2;<br /><br />
2.REVOKE 回收权限<br /><br />
REVOKE CONNECT, RESOURCE FROM 用户名;<br />
REVOKE SELECT ON 表名 FROM 用户名;<br />
REVOKE SELECT, INSERT, DELETE ON表名 FROM 用户名1, 用户名2;<br /></p>
        <img width="0" height="0" src="http://www.hifar.com/blog/aggbug.ashx?id=db282b3e-d992-464d-a33b-5f30594f6883" />
      </body>
      <title>ORACLE 常用的SQL语法和数据对象 </title>
      <guid isPermaLink="false">http://www.hifar.com/blog/PermaLink,guid,db282b3e-d992-464d-a33b-5f30594f6883.aspx</guid>
      <link>http://www.hifar.com/blog/2004/12/03/ORACLE%e5%b8%b8%e7%94%a8%e7%9a%84SQL%e8%af%ad%e6%b3%95%e5%92%8c%e6%95%b0%e6%8d%ae%e5%af%b9%e8%b1%a1.aspx</link>
      <pubDate>Fri, 03 Dec 2004 07:55:42 GMT</pubDate>
      <description>&lt;p&gt;
一.数据控制语句 (DML) 部分&lt;br&gt;
&lt;br&gt;
1.INSERT&amp;nbsp; (往数据表里插入记录的语句)&lt;br&gt;
&lt;br&gt;
INSERT INTO 表名(字段名1, 字段名2, &amp;#8230;&amp;#8230;) VALUES ( 值1, 值2, &amp;#8230;&amp;#8230;); 
&lt;br&gt;
INSERT INTO 表名(字段名1, 字段名2, &amp;#8230;&amp;#8230;)&amp;nbsp; SELECT (字段名1, 字段名2, &amp;#8230;&amp;#8230;)
FROM 另外的表名;&lt;br&gt;
&lt;br&gt;
字符串类型的字段值必须用单引号括起来, 例如: &amp;#8217;GOOD DAY&amp;#8217;&lt;br&gt;
如果字段值里包含单引号&amp;#8217; 需要进行字符串转换, 我们把它替换成两个单引号''. 
&lt;br&gt;
字符串类型的字段值超过定义的长度会出错, 最好在插入前进行长度校验.&lt;br&gt;
&lt;br&gt;
日期字段的字段值可以用当前数据库的系统时间SYSDATE, 精确到秒&lt;br&gt;
或者用字符串转换成日期型函数TO_DATE(&amp;#8216;2001-08-01&amp;#8217;,&amp;#8217;YYYY-MM-DD&amp;#8217;)&lt;br&gt;
TO_DATE()还有很多种日期格式, 可以参看ORACLE DOC. 
&lt;br&gt;
年-月-日 小时:分钟:秒 的格式YYYY-MM-DD HH24:MI:SS&lt;br&gt;
&lt;br&gt;
INSERT时最大可操作的字符串长度小于等于4000个单字节, 如果要插入更长的字符串, 请考虑字段用CLOB类型,&lt;br&gt;
方法借用ORACLE里自带的DBMS_LOB程序包.&lt;br&gt;
&lt;br&gt;
INSERT时如果要用到从1开始自动增长的序列号, 应该先建立一个序列号&lt;br&gt;
CREATE SEQUENCE 序列号的名称 (最好是表名+序列号标记) INCREMENT BY 1&amp;nbsp; START&amp;nbsp; WITH&amp;nbsp; 1 
&lt;br&gt;
MAXVALUE&amp;nbsp; 99999&amp;nbsp; CYCLE&amp;nbsp; NOCACHE;&lt;br&gt;
其中最大的值按字段的长度来定, 如果定义的自动增长的序列号 NUMBER(6) , 最大值为999999&lt;br&gt;
INSERT 语句插入这个字段值为: 序列号的名称.NEXTVAL&lt;br&gt;
&lt;br&gt;
2.DELETE&amp;nbsp; (删除数据表里记录的语句)&lt;br&gt;
&lt;br&gt;
DELETE FROM表名 WHERE 条件;&lt;br&gt;
&lt;br&gt;
注意：删除记录并不能释放ORACLE里被占用的数据块表空间. 它只把那些被删除的数据块标成unused.&lt;br&gt;
&lt;br&gt;
如果确实要删除一个大表里的全部记录, 可以用 TRUNCATE 命令, 它可以释放占用的数据块表空间&lt;br&gt;
TRUNCATE TABLE 表名; 
&lt;br&gt;
此操作不可回退.&lt;br&gt;
&lt;br&gt;
3.UPDATE&amp;nbsp; (修改数据表里记录的语句)&lt;br&gt;
&lt;br&gt;
UPDATE表名 SET 字段名1=值1, 字段名2=值2, &amp;#8230;&amp;#8230; WHERE 条件;&lt;br&gt;
&lt;br&gt;
如果修改的值N没有赋值或定义时, 将把原来的记录内容清为NULL, 最好在修改前进行非空校验; 
&lt;br&gt;
值N超过定义的长度会出错, 最好在插入前进行长度校验..&lt;br&gt;
&lt;br&gt;
注意事项: 
&lt;br&gt;
A. 以上SQL语句对表都加上了行级锁,&lt;br&gt;
确认完成后, 必须加上事物处理结束的命令 COMMIT 才能正式生效, 
&lt;br&gt;
否则改变不一定写入数据库里. 
&lt;br&gt;
如果想撤回这些操作, 可以用命令 ROLLBACK 复原.&lt;br&gt;
&lt;br&gt;
B. 在运行INSERT, DELETE 和 UPDATE 语句前最好估算一下可能操作的记录范围, 
&lt;br&gt;
应该把它限定在较小 (一万条记录) 范围内,. 否则ORACLE处理这个事物用到很大的回退段. 
&lt;br&gt;
程序响应慢甚至失去响应. 如果记录数上十万以上这些操作, 可以把这些SQL语句分段分次完成, 
&lt;br&gt;
其间加上COMMIT 确认事物处理.&lt;br&gt;
&lt;br&gt;
二.数据定义 (DDL) 部分&lt;br&gt;
&lt;br&gt;
1.CREATE (创建表, 索引, 视图, 同义词, 过程, 函数, 数据库链接等)&lt;br&gt;
&lt;br&gt;
ORACLE常用的字段类型有&lt;br&gt;
CHAR 固定长度的字符串&lt;br&gt;
VARCHAR2 可变长度的字符串&lt;br&gt;
NUMBER(M,N) 数字型M是位数总长度, N是小数的长度&lt;br&gt;
DATE 日期类型&lt;br&gt;
&lt;br&gt;
创建表时要把较小的不为空的字段放在前面, 可能为空的字段放在后面&lt;br&gt;
&lt;br&gt;
创建表时可以用中文的字段名, 但最好还是用英文的字段名&lt;br&gt;
&lt;br&gt;
创建表时可以给字段加上默认值, 例如 DEFAULT SYSDATE&lt;br&gt;
这样每次插入和修改时, 不用程序操作这个字段都能得到动作的时间&lt;br&gt;
&lt;br&gt;
创建表时可以给字段加上约束条件&lt;br&gt;
例如 不允许重复 UNIQUE, 关键字 PRIMARY KEY&lt;br&gt;
&lt;br&gt;
2.ALTER (改变表, 索引, 视图等)&lt;br&gt;
&lt;br&gt;
改变表的名称&lt;br&gt;
ALTER TABLE 表名1&amp;nbsp; TO 表名2;&lt;br&gt;
&lt;br&gt;
在表的后面增加一个字段&lt;br&gt;
ALTER TABLE表名 ADD 字段名 字段名描述;&lt;br&gt;
&lt;br&gt;
修改表里字段的定义描述&lt;br&gt;
ALTER TABLE表名 MODIFY字段名 字段名描述;&lt;br&gt;
&lt;br&gt;
给表里的字段加上约束条件&lt;br&gt;
ALTER TABLE 表名 ADD CONSTRAINT 约束名 PRIMARY KEY (字段名);&lt;br&gt;
ALTER TABLE 表名 ADD CONSTRAINT 约束名 UNIQUE (字段名);&lt;br&gt;
&lt;br&gt;
把表放在或取出数据库的内存区&lt;br&gt;
ALTER TABLE 表名 CACHE;&lt;br&gt;
ALTER TABLE 表名 NOCACHE;&lt;br&gt;
&lt;br&gt;
3.DROP (删除表, 索引, 视图, 同义词, 过程, 函数, 数据库链接等)&lt;br&gt;
&lt;br&gt;
删除表和它所有的约束条件&lt;br&gt;
DROP TABLE 表名 CASCADE CONSTRAINTS;&lt;br&gt;
&lt;br&gt;
4.TRUNCATE (清空表里的所有记录, 保留表的结构)&lt;br&gt;
&lt;br&gt;
TRUNCATE 表名;&lt;br&gt;
&lt;br&gt;
三.查询语句 (SELECT) 部分&lt;br&gt;
&lt;br&gt;
SELECT字段名1, 字段名2, &amp;#8230;&amp;#8230; FROM 表名1, [表名2, &amp;#8230;&amp;#8230;] WHERE 条件; 
&lt;br&gt;
&lt;br&gt;
字段名可以带入函数&lt;br&gt;
&amp;nbsp; 例如:&amp;nbsp; COUNT(*), MIN(字段名),&amp;nbsp; MAX(字段名),&amp;nbsp; AVG(字段名), DISTINCT(字段名), 
&lt;br&gt;
&amp;nbsp; TO_CHAR(DATE字段名,'YYYY-MM-DD HH24:MI:SS')&lt;br&gt;
&lt;br&gt;
NVL(EXPR1, EXPR2)函数&lt;br&gt;
解释: 
&lt;br&gt;
IF EXPR1=NULL&lt;br&gt;
RETURN EXPR2&lt;br&gt;
ELSE&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RETURN EXPR1&lt;br&gt;
&lt;br&gt;
DECODE(AA﹐V1﹐R1﹐V2﹐R2....)函数&lt;br&gt;
解释: 
&lt;br&gt;
IF AA=V1 THEN RETURN R1&lt;br&gt;
IF AA=V2 THEN RETURN R2&lt;br&gt;
..&amp;#8230;&lt;br&gt;
ELSE&lt;br&gt;
RETURN NULL&lt;br&gt;
&lt;br&gt;
LPAD(char1,n,char2)函数&lt;br&gt;
解释:&lt;br&gt;
字符char1按制定的位数n显示，不足的位数用char2字符串替换左边的空位&lt;br&gt;
&lt;br&gt;
字段名之间可以进行算术运算&lt;br&gt;
例如:&amp;nbsp; (字段名1*字段名1)/3&lt;br&gt;
&lt;br&gt;
查询语句可以嵌套&lt;br&gt;
例如: SELECT &amp;#8230;&amp;#8230; FROM 
&lt;br&gt;
(SELECT &amp;#8230;&amp;#8230; FROM表名1, [表名2, &amp;#8230;&amp;#8230;] WHERE 条件) WHERE 条件2;&lt;br&gt;
&lt;br&gt;
两个查询语句的结果可以做集合操作&lt;br&gt;
例如: 并集UNION(去掉重复记录), 并集UNION ALL(不去掉重复记录), 差集MINUS,&amp;nbsp; 交集INTERSECT&lt;br&gt;
&lt;br&gt;
分组查询&lt;br&gt;
SELECT字段名1, 字段名2, &amp;#8230;&amp;#8230; FROM 表名1, [表名2, &amp;#8230;&amp;#8230;] GROUP BY字段名1 
&lt;br&gt;
[HAVING 条件] ;&lt;br&gt;
&lt;br&gt;
两个以上表之间的连接查询&lt;br&gt;
&lt;br&gt;
SELECT字段名1, 字段名2, &amp;#8230;&amp;#8230; FROM 表名1, [表名2, &amp;#8230;&amp;#8230;] WHERE 
&lt;br&gt;
表名1.字段名 = 表名2. 字段名 [ AND &amp;#8230;&amp;#8230;] ;&lt;br&gt;
&lt;br&gt;
SELECT字段名1, 字段名2, &amp;#8230;&amp;#8230; FROM 表名1, [表名2, &amp;#8230;&amp;#8230;] WHERE 
&lt;br&gt;
表名1.字段名 = 表名2. 字段名(+) [ AND &amp;#8230;&amp;#8230;] ;&lt;br&gt;
&lt;br&gt;
有(+)号的字段位置自动补空值&lt;br&gt;
&lt;br&gt;
查询结果集的排序操作, 默认的排序是升序ASC, 降序是DESC&lt;br&gt;
&lt;br&gt;
SELECT字段名1, 字段名2, &amp;#8230;&amp;#8230; FROM 表名1, [表名2, &amp;#8230;&amp;#8230;] 
&lt;br&gt;
ORDER BY字段名1, 字段名2 DESC;&lt;br&gt;
&lt;br&gt;
字符串模糊比较的方法&lt;br&gt;
&lt;br&gt;
INSTR(字段名, &amp;#8216;字符串&amp;#8217;)&amp;gt;0 
&lt;br&gt;
字段名 LIKE&amp;nbsp; &amp;#8216;字符串%&amp;#8217;&amp;nbsp; [&amp;#8216;%字符串%&amp;#8217;]&lt;br&gt;
&lt;br&gt;
每个表都有一个隐含的字段ROWID, 它标记着记录的唯一性. 
&lt;br&gt;
&lt;br&gt;
四.ORACLE里常用的数据对象 (SCHEMA)&lt;br&gt;
&lt;br&gt;
1.索引 (INDEX)&lt;br&gt;
&lt;br&gt;
CREATE INDEX 索引名ON 表名 ( 字段1, [字段2, &amp;#8230;&amp;#8230;] );&lt;br&gt;
ALTER INDEX 索引名 REBUILD;&lt;br&gt;
&lt;br&gt;
一个表的索引最好不要超过三个 (特殊的大表除外), 最好用单字段索引, 结合SQL语句的分析执行情况, 
&lt;br&gt;
也可以建立多字段的组合索引和基于函数的索引&lt;br&gt;
&lt;br&gt;
ORACLE8.1.7字符串可以索引的最大长度为1578 单字节&lt;br&gt;
ORACLE8.0.6字符串可以索引的最大长度为758 单字节&lt;br&gt;
&lt;br&gt;
ORACLE DOC上说字符串最大可以建索引的长度约是:数据块的大小(db_block_size)*40%&lt;br&gt;
&lt;br&gt;
2.视图 (VIEW)&lt;br&gt;
&lt;br&gt;
CREATE VIEW 视图名AS SELECT &amp;#8230;. FROM &amp;#8230;..;&lt;br&gt;
ALTER VIEW视图名 COMPILE;&lt;br&gt;
&lt;br&gt;
视图仅是一个SQL查询语句, 它可以把表之间复杂的关系简洁化.&lt;br&gt;
&lt;br&gt;
3.同义词 (SYNONMY)&lt;br&gt;
CREATE SYNONYM同义词名FOR 表名;&lt;br&gt;
CREATE SYNONYM同义词名FOR 表名@数据库链接名;&lt;br&gt;
&lt;br&gt;
4.数据库链接 (DATABASE LINK)&lt;br&gt;
CREATE DATABASE LINK数据库链接名CONNECT TO 用户名 IDENTIFIED BY 密码 USING &amp;#8216;数据库连接字符串&amp;#8217;;&lt;br&gt;
&lt;br&gt;
数据库连接字符串可以用NET8 EASY CONFIG或者直接修改TNSNAMES.ORA里定义.&lt;br&gt;
&lt;br&gt;
数据库参数global_name=true时要求数据库链接名称跟远端数据库名称一样&lt;br&gt;
&lt;br&gt;
数据库全局名称可以用以下命令查出&lt;br&gt;
SELECT * FROM GLOBAL_NAME;&lt;br&gt;
&lt;br&gt;
查询远端数据库里的表&lt;br&gt;
SELECT &amp;#8230;&amp;#8230; FROM 表名@数据库链接名;&lt;br&gt;
&lt;br&gt;
五.权限管理 (DCL) 语句&lt;br&gt;
&lt;br&gt;
1.GRANT 赋于权限&lt;br&gt;
常用的系统权限集合有以下三个:&lt;br&gt;
CONNECT(基本的连接), RESOURCE(程序开发), DBA(数据库管理)&lt;br&gt;
常用的数据对象权限有以下五个:&lt;br&gt;
ALL ON 数据对象名, SELECT ON 数据对象名, UPDATE ON 数据对象名,&lt;br&gt;
DELETE ON 数据对象名,&amp;nbsp; INSERT ON 数据对象名,&amp;nbsp;&amp;nbsp; ALTER&amp;nbsp; ON 数据对象名&lt;br&gt;
&lt;br&gt;
GRANT CONNECT, RESOURCE TO 用户名;&lt;br&gt;
GRANT SELECT ON 表名 TO 用户名;&lt;br&gt;
GRANT SELECT, INSERT, DELETE ON表名 TO 用户名1, 用户名2;&lt;br&gt;
&lt;br&gt;
2.REVOKE 回收权限&lt;br&gt;
&lt;br&gt;
REVOKE CONNECT, RESOURCE FROM 用户名;&lt;br&gt;
REVOKE SELECT ON 表名 FROM 用户名;&lt;br&gt;
REVOKE SELECT, INSERT, DELETE ON表名 FROM 用户名1, 用户名2;&lt;br&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.hifar.com/blog/aggbug.ashx?id=db282b3e-d992-464d-a33b-5f30594f6883" /&gt;</description>
      <category>文摘和收藏</category>
    </item>
    <item>
      <trackback:ping>http://www.hifar.com/blog/Trackback.aspx?guid=354be4c2-0076-4653-9c12-c1216721c874</trackback:ping>
      <pingback:server>http://www.hifar.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.hifar.com/blog/PermaLink,guid,354be4c2-0076-4653-9c12-c1216721c874.aspx</pingback:target>
      <dc:creator>Jimmy Gao</dc:creator>
      <title>探查内存不足/内存泄漏问题</title>
      <guid isPermaLink="false">http://www.hifar.com/blog/PermaLink,guid,354be4c2-0076-4653-9c12-c1216721c874.aspx</guid>
      <link>http://www.hifar.com/blog/2004/12/02/%e6%8e%a2%e6%9f%a5%e5%86%85%e5%ad%98%e4%b8%8d%e8%b6%b3%e5%86%85%e5%ad%98%e6%b3%84%e6%bc%8f%e9%97%ae%e9%a2%98.aspx</link>
      <pubDate>Thu, 02 Dec 2004 09:41:08 GMT</pubDate>
      <description>&lt;p&gt;
&lt;table cellspacing=0 cellpadding=0 width=615 border=0&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=px14L150gray height=40&gt;
&lt;div align=center&gt;&lt;b&gt;探查内存不足/内存泄漏问题&lt;/b&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=px12none&gt;
&lt;img height=3 src="http://www.bea.com.cn/support_pattern/images/line.gif" width=615&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=px12none&gt;
&lt;table style="WIDTH: 615px; TEXT-ALIGN: left" cellspacing=2 cellpadding=2&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="VERTICAL-ALIGN: top"&gt;
&lt;p style="COLOR: rgb(0,0,0)"&gt;
&lt;b&gt;&lt;u&gt;问题描述&lt;/u&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;内存不足&lt;/strong&gt; (OOM) － 由于 java 堆或本地内存中的内存耗尽，应用程序显示&amp;#8220;内存不足&amp;#8221;错误。
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;内存泄漏&lt;/strong&gt; － java 堆或本地内存的持续内存增长，最终将导致内存不足状态。调试内存泄漏状态的技术与调试内存不足状态的技术相同。
&lt;/p&gt;
&lt;p&gt;
&lt;b style="COLOR: rgb(0,0,0)"&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt;&lt;font style="COLOR: rgb(0,0,0)" color=#009900&gt;&lt;u&gt;&lt;b&gt;故障排除&lt;/b&gt;&lt;/u&gt;&lt;/font&gt;
&lt;br&gt;
请注意，并非下面所有任务都需要完成。有些问题仅通过执行几项任务就可以解决。
&lt;/p&gt;
&lt;p style="COLOR: rgb(0,0,0)"&gt;
&lt;u&gt;&lt;b&gt;快速链接：&lt;/b&gt;&lt;/u&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://www.bea.com.cn/support_pattern/Investigating_Out_of_Memory_Memory_Leak_Pattern.html#Java" size="" process="" memory="" native="" heap=""&gt;Java
堆、本地内存和进程大小&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://www.bea.com.cn/support_pattern/Investigating_Out_of_Memory_Memory_Leak_Pattern.html#Difference" process="" memory="" physical="" and="" space="" address="" between=""&gt;进程地址空间和物理内存之间的差异&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://www.bea.com.cn/support_pattern/Investigating_Out_of_Memory_Memory_Leak_Pattern.html#Why" occur="" problem="" oom="" the="" does=""&gt;为什么会发生
OOM 问题，JVM 在这种情况下如何处理？&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://www.bea.com.cn/support_pattern/Investigating_Out_of_Memory_Memory_Leak_Pattern.html#Steps" problem="" the="" debug="" to=""&gt;排除故障的步骤&lt;/a&gt; 
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://www.bea.com.cn/support_pattern/Investigating_Out_of_Memory_Memory_Leak_Pattern.html#determine_OOM_type"&gt;确定是
Java OOM 还是本地 OOM&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://www.bea.com.cn/support_pattern/Investigating_Out_of_Memory_Memory_Leak_Pattern.html#Java_OOM"&gt;Java
OOM&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://www.bea.com.cn/support_pattern/Investigating_Out_of_Memory_Memory_Leak_Pattern.html#Native_OOM"&gt;本地
OOM&lt;/a&gt; 
&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
&lt;a href="http://www.bea.com.cn/support_pattern/Investigating_Out_of_Memory_Memory_Leak_Pattern.html#Jrockit" features="" specific=""&gt;Jrockit
特定特性&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://www.bea.com.cn/support_pattern/Investigating_Out_of_Memory_Memory_Leak_Pattern.html#Bibliography"&gt;参考文献&lt;/a&gt; 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="COLOR: rgb(0,0,0)"&gt;
&lt;b&gt;&lt;u&gt;&lt;a name=Java size="" process="" memory="" native="" heap=""&gt;Java 堆、本地内存和进程大小&lt;/a&gt;&lt;/u&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Java 堆&lt;/strong&gt; － 这是 JVM 用来分配 java 对象的内存。java 堆内存的最大值用 java 命令行中的 .Xmx 标志来指定。如果未指定最大的堆大小，那么该极限值由
JVM 根据诸如计算机中的物理内存量和该时刻的可用空闲内存量这类因素来决定。始终建议您指定最大的 java 堆值。
&lt;/p&gt;
&lt;strong&gt;本地内存&lt;/strong&gt; － 这是 JVM 用于其内部操作的内存。JVM 将使用的本地内存堆数量取决于生成的代码量、创建的线程、GC 期间用于保存
java 对象信息的内存，以及在代码生成、优化等过程中使用的临时空间。&lt;br&gt;
&lt;br&gt;
如果有一个第三方本地模块，那么它也可能使用本地内存。例如，本地 JDBC 驱动程序将分配本地内存。&lt;br&gt;
&lt;br&gt;
最大本地内存量受到任何特定操作系统上的虚拟进程大小限制的约束，也受到用 .Xmx 标志指定用于 java 堆的内存量的限制。例如，如果应用程序能分配总计为 3 GB
的内存量，并且最大 java 堆的大小为 1 GB，那么本地内存量的最大值可能在 2 GB 左右。 
&lt;p&gt;
&lt;strong&gt;进程大小&lt;/strong&gt; － 进程大小将是 java 堆、本地内存与加载的可执行文件和库所占用内存的总和。在 32 位操作系统上，进程的虚拟地址空间最大可达到
4 GB。从这 4 GB 内存中，操作系统内核为自己保留一部分内存（通常为 1 - 2 GB）。剩余内存可用于应用程序。
&lt;/p&gt;
&lt;p&gt;
Windows缺省情况下，2 GB 可用于应用程序，剩余 2 GB 保留供内核使用。但是，在 Windows 的一些变化版本中，有一个 /3GB 开关可用于改变该分配比率，使应用程序能够获得
3 GB。有关 /3GB 开关的详细信息，可以在以下网址中找到：&lt;br&gt;
&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ddtools/hh/ddtools/bootini_1fcj.asp"&gt;http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ddtools/hh/ddtools/bootini_1fcj.asp&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
RH Linux AS 2.1 － 3 GB 可用于应用程序。
&lt;/p&gt;
&lt;p&gt;
对于其它操作系统，请参考操作系统文档了解有关配置。
&lt;/p&gt;
&lt;p&gt;
&lt;font size=-1&gt;&lt;a href="http://www.bea.com.cn/support_pattern/Investigating_Out_of_Memory_Memory_Leak_Pattern.html#TOP"&gt;返回页首&lt;/a&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="COLOR: rgb(0,0,0)"&gt;
&lt;b&gt;&lt;u&gt;&lt;a name=Difference process="" memory="" physical="" and="" space="" address="" between=""&gt;进程地址空间和物理内存之间的差异&lt;/a&gt;&lt;/u&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
每个进程都获得其自有的地址空间。在 32 位操作系统中，此地址空间范围为 0 到 4 GB。此范围与计算机的可用随机存取内存 (RAM) 或交换空间无关。计算机中的可用物理内存总量是该计算机上的可用
RAM 和交换空间之和。所有运行的进程共享这些物理内存。
&lt;/p&gt;
&lt;p&gt;
进程内的存储地址是虚拟地址。内核将此虚拟地址映射到物理地址上。物理地址指向物理内存中的某个位置。在任一给定时间，计算机中运行进程所使用的全部虚拟内存的总和不能超过该计算机上可用物理内存的总量。
&lt;/p&gt;
&lt;p&gt;
&lt;font size=-1&gt;&lt;a href="http://www.bea.com.cn/support_pattern/Investigating_Out_of_Memory_Memory_Leak_Pattern.html#TOP"&gt;返回页首&lt;/a&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="COLOR: rgb(0,0,0)"&gt;
&lt;u&gt;&lt;b&gt;&lt;a name=Why occur="" problem="" oom="" the="" does=""&gt;为什么会发生 OOM 问题，JVM 在这种情况下如何处理？&lt;/a&gt;&lt;/b&gt;&lt;/u&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;java 堆中的内存不足&lt;/strong&gt;
&lt;br&gt;
如果 JVM 不能在 java 堆中获得更多内存来分配更多 java 对象，将会抛出 java 内存不足 (java OOM) 错误。如果 java 堆充满了活动对象，并且
JVM 无法再扩展 java 堆，那么它将不能分配更多 java 对象。
&lt;/p&gt;
&lt;p&gt;
在这种情况下，JVM 让应用程序决定在抛出 java.lang.OutOfMemoryError 后该执行什么操作。例如，应用程序可以处理此错误，并决定以安全方式自行关闭或决定忽略此错误。如果应用程序不处理此错误，那么抛出此错误的线程将退出（如果您进行
java Thread Dump，那么将看不到该线程）。
&lt;/p&gt;
&lt;p&gt;
在使用 Weblogic Server 的情况下，如果此错误是由某个执行线程抛出的，则会处理此错误并将其记录在日志中。如果连续抛出此错误，那么核心运行状况监视器线程将关闭
Weblogic Server。
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;本地堆中的内存不足&lt;/strong&gt;
&lt;br&gt;
如果 JVM 无法获得更多本地内存，它将抛出本地内存不足（本地 OOM）错误。当进程到达操作系统的进程大小限值，或者当计算机用完 RAM 和交换空间时，通常会发生这种情况。
&lt;/p&gt;
&lt;p&gt;
当发生这种情况时，JVM 处理本地 OOM 状态，记录说明它已用完本地内存或无法获得内存的消息，然后退出。如果 JVM 或加载的任何其它模块（如 libc 或第三方模块）不处理这个本地
OOM 状态，那么操作系统将给 JVM 发送命令 JVM 退出的 sigabort 信号。通常情况下，JVM 收到 sigabort 信号时将会生成一个核心文件。
&lt;/p&gt;
&lt;p&gt;
&lt;font size=-1&gt;&lt;a href="http://www.bea.com.cn/support_pattern/Investigating_Out_of_Memory_Memory_Leak_Pattern.html#TOP"&gt;返回页首&lt;/a&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;&lt;u&gt;&lt;font size=+0&gt;&lt;a name=Steps problem="" the="" debug="" to=""&gt;&lt;span style="COLOR: rgb(0,0,0)"&gt;排除故障的步骤&lt;/span&gt;&lt;/a&gt;&lt;/font&gt;&lt;/u&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;strong style="FONT-WEIGHT: normal"&gt;&lt;span style="FONT-WEIGHT: bold"&gt;&lt;a name=determine_OOM_type&gt;&lt;/a&gt;确定是 &lt;font face="Arial, Helvetica, sans-serif"&gt;Java
OOM&lt;/font&gt; 还是本地 &lt;font face="Arial, Helvetica, sans-serif"&gt;OOM&lt;/font&gt;：&lt;/span&gt;&lt;/strong&gt; 
&lt;ul&gt;
&lt;li&gt;
如果 stdout/stderr 消息说明这是一个 java.lang.OutOfMemoryError，那么这就是 &lt;span style="FONT-WEIGHT: bold"&gt;&lt;font face="Arial, Helvetica, sans-serif"&gt;Java
OOM&lt;/font&gt;&lt;/span&gt; 
&lt;li&gt;
如果 stdout/stderr 消息说明无法获得内存，那么这就是&lt;span style="FONT-WEIGHT: bold"&gt;本地&lt;font face="Arial, Helvetica, sans-serif"&gt; OOM&lt;/font&gt;&lt;/span&gt; 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
请注意，上述消息仅发送到 stdout 或 stderr 中，而不发送到应用程序特定的日志文件（如 weblogic.log）
&lt;/p&gt;
&lt;p&gt;
&lt;font size=-1&gt;&lt;a href="http://www.bea.com.cn/support_pattern/Investigating_Out_of_Memory_Memory_Leak_Pattern.html#TOP"&gt;返回页首&lt;/a&gt;&lt;/font&gt;
&lt;br&gt;
&lt;strong&gt;&lt;u&gt;&lt;/u&gt;&lt;/strong&gt;
&lt;br&gt;
&lt;strong style="FONT-WEIGHT: bold"&gt;&lt;span style="FONT-WEIGHT: bold"&gt;&lt;a name=Java_OOM&gt;&lt;/a&gt;对于
Java OOM：&lt;/span&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;收集和分析 verbose gc 输出&lt;/strong&gt; 
&lt;ol style="LIST-STYLE-TYPE: lower-alpha"&gt;
&lt;li&gt;
&lt;strong&gt;在 java 命令行中添加&amp;#8220;&lt;small&gt;&lt;span style="FONT-FAMILY: courier new"&gt;&lt;font size=1&gt;-verbosegc&lt;/font&gt;&lt;/span&gt;&lt;/small&gt;&amp;#8221;标志&lt;/strong&gt;。这样将会把
GC 活动信息打印到 stdout/stderr。将 stdout/stderr 重定向到一个文件。运行应用程序，直到该问题重现。 
&lt;ul&gt;
&lt;/ul&gt;
&lt;li&gt;
&lt;strong&gt;确保 JVM 在抛出 java OOM 之前完成下列任务&lt;/strong&gt; 
&lt;p&gt;
&lt;strong style="TEXT-DECORATION: underline"&gt;完整 GC 运行：&lt;/strong&gt;
&lt;br&gt;
执行一次完整 GC 运行，并且删除了所有不可及对象以及虚可及、弱可及、软可及对象，并回收了那些空间。有关不同级别的对象可及性的详细信息，可以在以下网址中可找到：&lt;br&gt;
&lt;a href="http://java.sun.com/developer/technicalArticles/ALT/RefObj"&gt;http://java.sun.com/developer/technicalArticles/ALT/RefObj&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
您可以检查是否在发出 OOM 消息之前执行了完整 GC 运行。当完成一次完整 GC 运行时，将会打印类似如下消息（格式取决于 JVM － 请查看 JVM 帮助信息以了解有关格式）
&lt;/p&gt;
&lt;p style="FONT-FAMILY: courier new"&gt;
&lt;small&gt;&lt;font size=1&gt;[memory ] 7.160: GC 131072K-&amp;gt;130052K (131072K) in 1057.359
ms&lt;/font&gt;&lt;/small&gt;
&lt;/p&gt;
&lt;p&gt;
以上输出的格式如下（备注：在此模式下将全部使用相同的格式）：
&lt;/p&gt;
&lt;p style="FONT-FAMILY: courier new"&gt;
&lt;small&gt;&lt;font size=1&gt;[memory ] &amp;lt;start&amp;gt;: GC &amp;lt;before&amp;gt;K-&amp;gt;&amp;lt;after&amp;gt;K
(&amp;lt;heap&amp;gt;K), &amp;lt;total&amp;gt; ms&lt;br&gt;
[memory ] &amp;lt;start&amp;gt; - start time of collection (seconds since jvm start)&lt;br&gt;
[memory ] &amp;lt;before&amp;gt; - memory used by objects before collection (KB)&lt;br&gt;
[memory ] &amp;lt;after&amp;gt; - memory used by objects after collection (KB)&lt;br&gt;
[memory ] &amp;lt;heap&amp;gt; - size of heap after collection (KB)&lt;br&gt;
[memory ] &amp;lt;total&amp;gt; - total time of collection (milliseconds)&lt;/font&gt;&lt;/small&gt;
&lt;/p&gt;
&lt;p&gt;
但是，没有办法断定是否使用 verbose 消息删除了软/弱/虚可及的对象。如果您怀疑在抛出 OOM 时这些对象仍然存在，请与 JVM 供应商联系。
&lt;/p&gt;
&lt;p&gt;
如果垃圾回收算法是一种按代回收算法（对于 Jrockit 为 gencopy 或 gencon，对于其它 JDK 则是缺省算法），您也将看到类似如下的 verbose
输出：&lt;br&gt;
&lt;small&gt;&lt;span style="FONT-FAMILY: courier new"&gt;&lt;font size=1&gt;[memory ] 2.414: Nursery
GC 31000K-&amp;gt;20760K (75776K), 0.469 ms&lt;/font&gt;&lt;/span&gt;&lt;/small&gt;
&lt;/p&gt;
&lt;p&gt;
以上是 nursery GC（即 young GC）周期，它将把活动对象从 nursery（或 young 空间）提升到 old 空间。这个周期对我们的分析不重要。有关按代回收算法的详细信息，可以在
JVM 文档中找到。
&lt;/p&gt;
&lt;p&gt;
如果在 java OOM 之前未发生 GC 周期，那么这是一个 JVM 错误。
&lt;/p&gt;
&lt;p&gt;
&lt;strong style="TEXT-DECORATION: underline"&gt;完全压缩：&lt;/strong&gt;
&lt;br&gt;
确保 JVM 执行了适当的压缩工作，并且内存并未成碎片（否则会阻止分配大对象并触发 java OOM 错误）。
&lt;/p&gt;
&lt;p&gt;
Java 对象要求内存是连续的。如果可用空闲内存是一些碎片，那么 JVM 将无法分配大对象，因为它可能无法放入任何可用空闲内存块中。在这种情况下，JVM 将执行一次完全压缩，以便形成更多连续的空闲内存来容纳大对象。
&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt; 
&lt;p&gt;
压缩工作包括在 java 堆内存中将对象从一个位置移动到另一个位置，以及更新对这些对象的引用以指向新位置。除非确有必要，否则 JVM 不会压缩所有对象。这是为了减少
GC 周期的暂停时间。
&lt;/p&gt;
&lt;p&gt;
我们可以通过分析 verbose gc 消息来检查 java OOM 是否由碎片引起。如果您看到类似如下的输出（在此无论是否有可用的空闲 java 堆都会抛出 OOM），那么这就是由碎片引起的。
&lt;/p&gt;
&lt;p style="FONT-FAMILY: courier new"&gt;
&lt;small&gt;&lt;font size=1&gt;[memory ] 8.162: GC 73043K-&amp;gt;72989K (131072K) in 12.938 ms&lt;br&gt;
[memory ] 8.172: GC 72989K-&amp;gt;72905K (131072K) in 12.000 ms&lt;br&gt;
[memory ] 8.182: GC 72905K-&amp;gt;72580K (131072K) in 13.509 ms&lt;br&gt;
java.lang.OutOfMemoryError&lt;/font&gt;&lt;/small&gt;
&lt;/p&gt;
&lt;p&gt;
在上述情况中您可以看到，所指定的最大堆内存是 128MB，并且当实际内存使用量仅为 72580K 时，JVM 抛出 OOM。堆使用量仅为 55%。因此在这种情况下，碎片影响是：即使还有
45％ 的空闲堆，内存也会抛出 OOM。这是一个 JVM 错误或缺陷。您应当与 JVM 供应商联系。
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;li&gt;
&lt;strong&gt;如果 JVM 一切都正常&lt;/strong&gt;（上一步中提到的所有操作），那么此 java OOM 可能是应用程序的问题。应用程序可能在不断泄漏一些 java
内存，而这可能导致出现上述问题。或者，应用程序使用更多的活动对象，因此它需要更多 java 堆内存。在应用程序中可以检查以下方面： 
&lt;/li&gt;
&lt;/ol&gt;
&lt;ol start=3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;应用程序中的缓存功能&lt;/strong&gt; － 如果应用程序在内存中缓存 java 对象，则应确保此缓存并没有不断增大。对缓存中的对象数应有一个限值。我们可以尝试减少此限值，来观察其是否降低
java 堆使用量。 
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt; 
&lt;p&gt;
Java 软引用也可用于数据缓存，当 JVM 用完 java 堆时，可以保证删除软可及对象。
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;长期活动对象&lt;/strong&gt; － 如果应用程序中有长期活动对象，则可以尝试尽可能减少这些对象的存在期。例如，调整 HTTP 会话超时值将有助于更快地回收空闲会话对象。 
&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;内存泄漏&lt;/strong&gt; － 内存泄漏的一个例子是在应用服务器中使用数据库连接池。当使用连接池时，必须在 finally 块中显式关闭 JDBC
语句和结果集对象。这是因为，当从池中调用连接对象上的 close() 时，只是简单地把连接返回池中以供重用，并没有实际关闭连接和关联的语句/结果集对象。&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;增加 java 堆&lt;/strong&gt; － 如果可能的话，我们也可尝试增加 java 堆，以观察是否能解决问题。 
&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
&lt;li&gt;
&lt;strong&gt;如果上述建议都不适用于该应用程序&lt;/strong&gt;，那么，我们需要使用一个基于 JVMPI（JVM 事件探查器接口）的事件探查器（如 Jprobe
或 OptimizeIt）来找出哪些对象正在占用 java 堆。事件探查器还提供 java 代码中正在创建这些对象的位置的详细信息。本文档并不介绍每个事件探查器的详细信息。可以参考事件探查器文档来了解如何用事件探查器设置和启动应用程序。一般而言，基于
JVMPI 的事件探查器需要较高的系统开销，并会大大降低应用程序的性能。因此，在生产环境中使用这些事件探查器并不可取。&lt;br&gt;
&lt;a href="http://www.borland.com/optimizeit"&gt;http://www.borland.com/optimizeit&lt;/a&gt;
&lt;br&gt;
&lt;a href="http://www.quest.com/jprobe"&gt;http://www.quest.com/jprobe&lt;/a&gt; 
&lt;/li&gt;
&gt;
&lt;p&gt;
&lt;font size=-1&gt;&lt;a href="http://www.bea.com.cn/support_pattern/Investigating_Out_of_Memory_Memory_Leak_Pattern.html#TOP"&gt;返回页首&lt;/a&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong style="FONT-WEIGHT: bold"&gt;&lt;span style="FONT-WEIGHT: bold"&gt;&lt;a name=Native_OOM&gt;&lt;/a&gt;对于本地
OOM 问题：&lt;/span&gt;&lt;/strong&gt; 
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;收集下列信息：&lt;/strong&gt; 
&lt;ol style="LIST-STYLE-TYPE: lower-alpha"&gt;
&lt;li&gt;
&lt;strong&gt;&amp;nbsp;&lt;small&gt;&lt;span style="FONT-FAMILY: courier new"&gt;&lt;font size=1&gt;.verbosegc&lt;/font&gt;&lt;/span&gt;&lt;/small&gt;&lt;/strong&gt; 输出，通过它可监视
java 堆使用量。这样将有助于了解此应用程序的 java 内存要求。 
&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt; 
&lt;div style="MARGIN-LEFT: 0px"&gt;应当注意，指定的最大堆内存量（在 java 命令行中使用&lt;small&gt;&lt;span style="FONT-FAMILY: courier new"&gt;&lt;font size=1&gt; Xmx&lt;/font&gt;&lt;/span&gt;&lt;/small&gt; 标志）与应用程序的实际
java 堆使用量无关，其在 JVM 启动时被保留，并且此保留内存不能用于其它任何用途。 
&lt;div style="MARGIN-LEFT: 0px"&gt;
&lt;br&gt;
在使用 Jrockit 时，使用 &lt;small&gt;&lt;span style="FONT-FAMILY: courier new"&gt;&lt;font size=1&gt;-verbose&lt;/font&gt;&lt;/span&gt;&lt;/small&gt; 来代替 &lt;small&gt;&lt;span style="FONT-FAMILY: courier new"&gt;&lt;font size=1&gt;-verbosegc&lt;/font&gt;&lt;/span&gt;&lt;/small&gt;，因为这可以提供
codegen 信息以及 GC 信息。
&lt;/div&gt;
&lt;/div&gt;
&lt;/blockquote&gt; 
&lt;ol type=a&gt;
&lt;li type=a value=2&gt;
&lt;div style="MARGIN-LEFT: 0px"&gt;&lt;strong&gt;定期记录进程虚拟内存大小&lt;/strong&gt;，从启动应用程序时起直到 JVM 用完本地内存。这样将有助于了解此进程是否确实达到该操作系统的大小限值。
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt; 
&lt;div style="MARGIN-LEFT: 0px"&gt;在 Windows 环境下，使用下列步骤来监视虚拟进程大小：
&lt;/div&gt;
&lt;ol&gt;
&lt;ol type=i&gt;
&lt;li type=i value=1&gt;
&lt;div style="MARGIN-LEFT: 0px"&gt;在&amp;#8220;开始&amp;#8221; -&amp;gt; &amp;#8220;运行&amp;#8221;对话框中，输入&amp;#8220;perfmon&amp;#8221;并单击&amp;#8220;确定&amp;#8221;。
&lt;/div&gt;
&lt;li&gt;
&lt;div style="MARGIN-LEFT: 0px"&gt;在弹出的&amp;#8220;性能&amp;#8221;窗口中，单击&amp;#8220;+&amp;#8221;按钮（图表上部）。
&lt;/div&gt;
&lt;li&gt;
&lt;div style="MARGIN-LEFT: 0px"&gt;在显示的对话框中选择下列选项：
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div style="MARGIN-LEFT: 0px"&gt;性能对象：进程（不是缺省的处理器）
&lt;/div&gt;
&lt;li&gt;
&lt;div style="MARGIN-LEFT: 0px"&gt;从列表中选择计数器：虚拟字节数
&lt;/div&gt;
&lt;li&gt;
&lt;div style="MARGIN-LEFT: 0px"&gt;从列表中选择实例：选择 JVM (java) 实例
&lt;/div&gt;
&lt;li&gt;
&lt;div style="MARGIN-LEFT: 0px"&gt;单击&amp;#8220;添加&amp;#8221;，然后单击&amp;#8220;关闭&amp;#8221; 
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="MARGIN-LEFT: 0px"&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&gt;&gt;&gt;
&lt;blockquote&gt; 
&lt;p style="MARGIN-LEFT: 40px"&gt;
在 Unix 或 Linux 环境下，对于一个给定 PID，可以使用以下命令来查找虚拟内存大小 - &lt;small&gt;&lt;span style="FONT-FAMILY: courier new"&gt;&lt;font size=1&gt;ps
-p &amp;lt;PID&amp;gt; -o vsz&lt;/font&gt;&lt;/span&gt;&lt;/small&gt;。
&lt;/p&gt;
&lt;p style="MARGIN-LEFT: 40px"&gt;
在 Linux 环境下，单个 JVM 实例内的每个 java 线程都显示为一个独立的进程。如果我们获得根 java 进程的 PID，那么这就足够了。可以使用 &lt;small&gt;&lt;span style="FONT-FAMILY: courier new"&gt;&lt;font size=1&gt;ps&lt;/font&gt;&lt;/span&gt;&lt;/small&gt; 命令的 &lt;small&gt;&lt;span style="FONT-FAMILY: courier new"&gt;&lt;font size=1&gt;.forest&lt;/font&gt;&lt;/span&gt;&lt;/small&gt; 选项来找到根
java 进程。例如，&lt;small&gt;&lt;span style="FONT-FAMILY: courier new"&gt;&lt;font size=1&gt;ps lU &amp;lt;user&amp;gt;
--forest&lt;/font&gt;&lt;/span&gt;&lt;/small&gt; 将提供一个由指定用户启动的所有进程的 ASCII 树图。您可以从该树图中找到根 java。
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;ol type=1&gt;
&lt;li type=1 value=2&gt;
&lt;strong&gt;计算机中的内存可用性&lt;/strong&gt;
&lt;br&gt;
如果计算机没有足够的 RAM 和交换空间，则操作系统将不能为此进程提供更多内存，这样也会导致内存不足。请确保 RAM 与磁盘中的交换空间之和足以满足该计算机中正在运行的所有进程的需要。 
&lt;/li&gt;
&lt;/ol&gt;
&lt;ol type=1&gt;
&lt;li type=1 value=3&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;strong&gt;调整 java 堆&lt;/strong&gt; 
&lt;br&gt;
如果 java 堆使用量完全在最大堆范围内，则减小 java 最大堆将为 JVM 提供更多的本地内存。这不是一个解决办法，而是一个可尝试的变通方法。由于操作系统限制进程大小，我们需要在
java 堆和本地堆之间寻求一个平衡。 
&lt;/li&gt;
&lt;/ol&gt;
&lt;ol type=1&gt;
&lt;li type=1 value=4&gt;
&lt;strong&gt;JVM 的本地内存使用量&lt;/strong&gt;
&lt;br&gt;
在加载了所有类并调用了方法（代码生成结束）后，JVM 的本地内存用量预计将会几乎达到稳定。对于大多数应用程序而言，这通常发生在最初几小时内。此后，JVM 可能会因加载运行时类型、生成优化代码等处理而仅使用少量本地内存。 
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
为了缩小问题的范围，可尝试禁用运行时优化，并检查这是否会产生任何效果。
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
在使用 Jrockit 时，可使用 &lt;small&gt;&lt;span style="FONT-FAMILY: courier new"&gt;&lt;font size=1&gt;-Xnoopt&lt;/font&gt;&lt;/span&gt;&lt;/small&gt; 标志来禁用运行时优化。&lt;br&gt;
&lt;li&gt;
在使用 SUN hotspot JVM 时，&lt;small&gt;&lt;span style="FONT-FAMILY: courier new"&gt;&lt;font size=1&gt;-Xint&lt;/font&gt;&lt;/span&gt;&lt;/small&gt; 标志将强迫
JVM 在解释模式中运行（不生成代码）。 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="MARGIN-LEFT: 0px"&gt;
如果在整个运行过程中，本地内存使用量继续不断增加，那么这可能是本地代码中的内存泄漏。
&lt;/p&gt;
&lt;li&gt;
&lt;strong&gt;第三方本地模块或应用程序中的 JNI 代码&lt;/strong&gt;
&lt;br&gt;
检查您是否在使用类似数据库驱动程序的任何第三方本地模块。这些本地模块也可以分配本地内存，泄漏可能从这些模块中发生。为了缩小问题的范围，应尝试在没有这些第三方模块的情况下重现问题。例如，可以使用纯
java 驱动程序来代替本地数据库驱动程序。 
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
检查应用程序是否使用一些 JNI 代码。这也可能造成本地内存泄漏，如果可能的话，您可以尝试在没有 JNI 代码的情况下运行应用程序。
&lt;/p&gt;
&lt;li&gt;
&lt;strong&gt;如果在执行上述步骤后还不能找到本地内存泄漏的根源&lt;/strong&gt;，那么您需要与 JVM 供应商合作来获得一个特殊的编译版本，它可以跟踪本地内存分配调用，并可提供有关泄漏的更多信息。 
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
&lt;font size=-1&gt;&lt;a href="http://www.bea.com.cn/support_pattern/Investigating_Out_of_Memory_Memory_Leak_Pattern.html#TOP"&gt;返回页首&lt;/a&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="COLOR: rgb(0,0,0)"&gt;
&lt;b&gt;&lt;u&gt;&lt;a name=Jrockit features="" specific=""&gt;Jrockit 特定特性&lt;/a&gt;&lt;/u&gt;&lt;/b&gt;
&lt;br&gt;
Jrockit 81SP1 和更高版本支持 JRA 记录（Java 运行时间分析器）。这对于收集 JVM 运行时的信息很有用，将提供应用程序的有关信息，例如，正在运行的
GC 数、软/弱/虚引用的数目、热方法，等等。如果 JVM 出现性能问题或挂起问题，那么用几分钟进行记录和分析数据就会很有用。有关详细信息，可以在 Jrockit
文档中找到。&lt;br&gt;
&lt;a href="http://e-docs.bea.com/wljrockit/docs142/userguide/jra.html"&gt;http://e-docs.bea.com/wljrockit/docs142/userguide/jra.html&lt;/a&gt;
&lt;/p&gt;
&lt;b style="COLOR: rgb(0,0,0)"&gt;&lt;u&gt;&lt;a name=Bibliography&gt;参考文献&lt;/a&gt;&lt;/u&gt;&lt;/b&gt; 
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://java.sun.com/"&gt;Sun Java 网站&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://forum.java.sun.com/"&gt;Sun Java 新闻组&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://edocs.bea.com/wljrockit/docs81/index.html"&gt;JRockit 文档&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://dev2dev.bea.com/products/wljrockit81/index.jsp"&gt;dev2dev (JRockit)&lt;/a&gt; 
&lt;li&gt;
&lt;a href="news://newsgroups.bea.com/jrockit.developer.interest.general"&gt;JRockit 新闻组&lt;/a&gt; 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&gt;
&gt;
&gt;&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.hifar.com/blog/aggbug.ashx?id=354be4c2-0076-4653-9c12-c1216721c874" /&gt;</description>
      <category>文摘和收藏</category>
      <category>Java 技术</category>
    </item>
    <item>
      <trackback:ping>http://www.hifar.com/blog/Trackback.aspx?guid=18774fcd-3b43-42fd-8656-0c74817202e8</trackback:ping>
      <pingback:server>http://www.hifar.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.hifar.com/blog/PermaLink,guid,18774fcd-3b43-42fd-8656-0c74817202e8.aspx</pingback:target>
      <dc:creator>Jimmy Gao</dc:creator>
      <title>OSWorkflow 文摘</title>
      <guid isPermaLink="false">http://www.hifar.com/blog/PermaLink,guid,18774fcd-3b43-42fd-8656-0c74817202e8.aspx</guid>
      <link>http://www.hifar.com/blog/2004/11/26/OSWorkflow%e6%96%87%e6%91%98.aspx</link>
      <pubDate>Fri, 26 Nov 2004 08:38:44 GMT</pubDate>
      <description>&lt;p&gt;
&lt;table class=MsoNormalTable style="WIDTH: 100%; mso-cellspacing: 0cm; mso-padding-alt: 0cm 0cm 0cm 0cm" cellspacing=0 cellpadding=0 width="100%" border=0&gt;
&lt;tbody&gt;
&lt;tr style="mso-yfti-irow: 0"&gt;
&lt;td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; WIDTH: 98.38%; PADDING-TOP: 0cm" width="98%"&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #000066; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial; mso-font-kerning: 0pt"&gt;OSWorkflow&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #000066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"&gt;基本概念&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial; mso-font-kerning: 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&amp;gt;&amp;gt; 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial; mso-font-kerning: 0pt"&gt;http://www.blogdriver.com/showBlog.do?diaryID=113138&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; WIDTH: 1.62%; PADDING-TOP: 0cm" width="1%"&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial; mso-font-kerning: 0pt"&gt;&lt;?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /&gt;
&lt;v:shapetype id=_x0000_t75 path=" m@4@5 l@4@11@9@11@9@5 xe" stroked="f" filled="f" o:spt="75" o:preferrelative="t" coordsize="21600,21600"&gt;
&lt;v:stroke joinstyle="miter"&gt;&lt;/v:stroke&gt;
&lt;v:formulas&gt;
&lt;v:f eqn="if lineDrawn pixelLineWidth 0 "&gt;&lt;/v:f&gt;
&lt;v:f eqn="sum @0 1 0 "&gt;&lt;/v:f&gt;
&lt;v:f eqn="sum 0 0 @1 "&gt;&lt;/v:f&gt;
&lt;v:f eqn="prod @2 1 2 "&gt;&lt;/v:f&gt;
&lt;v:f eqn="prod @3 21600 pixelWidth "&gt;&lt;/v:f&gt;
&lt;v:f eqn="prod @3 21600 pixelHeight "&gt;&lt;/v:f&gt;
&lt;v:f eqn="sum @0 0 1 "&gt;&lt;/v:f&gt;
&lt;v:f eqn="prod @6 1 2 "&gt;&lt;/v:f&gt;
&lt;v:f eqn="prod @7 21600 pixelWidth "&gt;&lt;/v:f&gt;
&lt;v:f eqn="sum @8 21600 0 "&gt;&lt;/v:f&gt;
&lt;v:f eqn="prod @7 21600 pixelHeight "&gt;&lt;/v:f&gt;
&lt;v:f eqn="sum @10 21600 0 "&gt;&lt;/v:f&gt;
&lt;/v:formulas&gt;
&lt;v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"&gt;&lt;/v:path&gt;
&lt;o:lock v:ext="edit" aspectratio="t"&gt;&lt;/o:lock&gt;
&lt;/v:shapetype&gt;
&lt;v:shape id=_x0000_i1025 style="WIDTH: 6.75pt; HEIGHT: 6.75pt; mso-wrap-distance-left: 3pt; mso-wrap-distance-right: 3pt" coordsize="21600,21600" alt="" type="#_x0000_t75"&gt;
&lt;v:imagedata o:href="http://www.blogdriver.com/model/model15/files/a-.gif" src="file0869.files/image001.gif"&gt;&lt;/v:imagedata&gt;
&lt;/v:shape&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow: 1; mso-yfti-lastrow: yes"&gt;
&lt;td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; WIDTH: 100%; PADDING-TOP: 0cm" width="100%" colspan=2&gt;
&lt;table class=MsoNormalTable style="WIDTH: 100%; mso-cellspacing: 3.0pt; mso-padding-alt: 0cm 0cm 0cm 0cm" cellspacing=4 cellpadding=0 width="100%" border=0&gt;
&lt;tbody&gt;
&lt;tr style="mso-yfti-irow: 0; mso-yfti-lastrow: yes"&gt;
&lt;td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm"&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt; &lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt; 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;b&gt;&lt;span lang=EN-US style="FONT-SIZE: 13.5pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt; mso-bidi-font-size: 12.0pt"&gt;Step&lt;/span&gt;&lt;/b&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;大致相当于&lt;/span&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-size: 12.0pt"&gt;流程所在的位置&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;。譬如企业年检，年检报告书在&lt;span class=GramE&gt;企业端算一个&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;step&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;，在工商局算第二个&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;step&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;，在复核窗口算第三个&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;step&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;。每个&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;step&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;可以有多种状态（&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;status&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;）和多个动作（&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;action&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;），用&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;Workflow.getCurrentSteps&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;()&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;可以获得所有当前的&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;step&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;（如果有并列流程，则可能同时有多个&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;step&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;，例如一次年检可能同时位于&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;#8220;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;初审&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;#8221;step&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;和&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;#8220;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;广告经营资格审查&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;#8221;step&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;）。&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;b&gt;&lt;span lang=EN-US style="FONT-SIZE: 13.5pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt; mso-bidi-font-size: 12.0pt"&gt;Status&lt;/span&gt;&lt;/b&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;b&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-size: 12.0pt"&gt;流程在某个&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt; mso-bidi-font-size: 12.0pt"&gt;step&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-size: 12.0pt"&gt;中的状态&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;。很容易理解，譬如&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;#8220;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;待认领&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;#8221;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;、&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;#8220;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;审核不通过&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;#8221;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;之类的。&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;OSWorkflow&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;中的状态完全是由开发者自定义的，状态判别纯粹是字符串比对，灵活性相当强，而且可以把定义文件做得很好看。&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;b&gt;&lt;span lang=EN-US style="FONT-SIZE: 13.5pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt; mso-bidi-font-size: 12.0pt"&gt;Action&lt;/span&gt;&lt;/b&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;b&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-size: 12.0pt"&gt;导致流程状态变迁的动作&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;。一个&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;action&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;典型地由两部分组成：可以执行此动作的条件（&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;conditions&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;），以及执行此动作的结果（&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;results&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;）。条件可以用&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;BeanShell&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;脚本来判断，因此具有很大的灵活性，几乎任何与流程相关的东西都可以用来做判断。&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;b&gt;&lt;span lang=EN-US style="FONT-SIZE: 13.5pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt; mso-bidi-font-size: 12.0pt"&gt;Result&lt;/span&gt;&lt;/b&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;b&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-size: 12.0pt"&gt;执行动作后的结果&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;。这是个比较重要的概念。&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;result&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;分为两种，&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;conditional-result&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;和&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;unconditional-result&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;。执行一个动作之后，首先判断所有&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;conditional-result&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;的条件是否满足，满足则使用该结果；如果没有任何&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;contidional&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;-result&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;满足条件，则使用&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;unconditional-result&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;。&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;unconditional-result&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;需要指定两部分信息：&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;old-status&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;，表示&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;#8220;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;当前&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;step&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;的状态变成什么&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;#8221;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;；后续状态，可能是用&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;step+status&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;指定一个新状态，也可能进入&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;split&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;或者&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;join&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;。&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;conditional-result&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;非常有用。还是以年检为例，同样是提交年检报告书，&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;#8220;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;未提交&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;#8221;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;和&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;#8220;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;被退回&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;#8221;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;是不同的状态，在这两个状态基础上执行&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;#8220;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;提交&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;#8221;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;动作，结果分别是&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;#8220;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;初次提交&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;#8221;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;和&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;#8220;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;退回之后再次提交&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;#8221;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;。这时可以考虑在&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;#8220;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;提交&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;#8221;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;动作上用&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;conditional-result&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;。&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;b&gt;&lt;span lang=EN-US style="FONT-SIZE: 13.5pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt; mso-bidi-font-size: 12.0pt"&gt;Split/Join&lt;/span&gt;&lt;/b&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;b&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-size: 12.0pt"&gt;流程的切分和融合&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;。很简单的概念，&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;split&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;提供多个&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;result&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;；&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;join&lt;/span&gt;&lt;span class=GramE&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;则判断&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;多个&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;current
step&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;的状态，提供一个&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;result&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;。&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;熟悉这些概念，在流程定义中尽量使用中文，可以给业务代码和表现&lt;span class=GramE&gt;层带来&lt;/span&gt;很多方便。&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;电子政务&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt;/
OA &lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;如果要使用&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt;workflow
engine&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;的话&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt;,
shark, &lt;span class=SpellE&gt;jbpm&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;之类的&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt;workflow
engine&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;有点杀鸡用牛刀的味道&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt;.
shark &lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;和&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt; &lt;span class=SpellE&gt;jbpm&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;都强迫你使用它的用户模型&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt;, &lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;怎样把企业现有的用户模型&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt;(&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;包括组织结构&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt;)&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;映射过来是很繁琐的事情&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt;, &lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;比如常见的&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt;OA&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;应用中&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt;, &lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;申请者对应的部门负责人为下一个流程的人工参与者&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt;, &lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;使用&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt;shark &lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;或者&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt; &lt;span class=SpellE&gt;jbpm&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;都得绕一圈&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt;, &lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;通过现有的人力资源系统&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt;, &lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;获得用户&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt;, &lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;再对应过来&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt;. &lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;这还仅仅是一个简单的需求&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt;, &lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;更不用说国内企业千奇百怪的组织结构&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt;, &lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;以及各种特殊流程&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt;, &lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;用&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt;wfmc&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;或者其他所谓的&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt;workflow&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;通用标准去做不怎么标准的事情&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt;, &lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;吃力不讨好&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt;.&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;用&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt;osworkflow&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;这种基于状态机的&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt;workflow
engine&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;反而会轻松很多&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt;, &lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;而且它也没有强迫你使用它的用户模型&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt;. &lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;另外纠正一点&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt;: &lt;span class=SpellE&gt;osworkflow&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;不仅仅支持简单的&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt;BeanShell&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt;, &lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;还支持&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt;java
class, &lt;span class=SpellE&gt;bsf&lt;/span&gt;, &lt;span class=SpellE&gt;ejb&lt;/span&gt;. &lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;如果做电子政务&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt;/
OA&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;的话&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt;, &lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;觉得目前&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt;osworkflow&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;是最适用的&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt;opensource&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt; workflow
engine.&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span lang=EN-US&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;div align=center&gt;
&lt;table class=MsoNormalTable style="WIDTH: 100%; mso-cellspacing: 0cm; mso-padding-alt: 0cm 0cm 0cm 0cm" cellspacing=0 cellpadding=0 width="100%" border=0&gt;
&lt;tbody&gt;
&lt;tr style="mso-yfti-irow: 0"&gt;
&lt;td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; WIDTH: 100%; PADDING-TOP: 0cm" width="100%"&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #000066; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial; mso-font-kerning: 0pt"&gt;OSWorkflow&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #000066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"&gt;中&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #000066; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial; mso-font-kerning: 0pt"&gt;BeanShell&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #000066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"&gt;的运行环境&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial; mso-font-kerning: 0pt"&gt;&amp;gt;&amp;gt; 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial; mso-font-kerning: 0pt"&gt;http://www.blogdriver.com/showBlog.do?diaryID=109107&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; WIDTH: 7.5pt; PADDING-TOP: 0cm" width=10&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial; mso-font-kerning: 0pt"&gt;
&lt;v:shape id=_x0000_i1032 style="WIDTH: 6.75pt; HEIGHT: 6.75pt; mso-wrap-distance-left: 3pt; mso-wrap-distance-right: 3pt" coordsize="21600,21600" alt="" type="#_x0000_t75"&gt;
&lt;v:imagedata o:href="http://www.blogdriver.com/model/model15/files/a-.gif" src="file0869.files/image001.gif"&gt;&lt;/v:imagedata&gt;
&lt;/v:shape&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow: 1; mso-yfti-lastrow: yes"&gt;
&lt;td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm" colspan=2&gt;
&lt;table class=MsoNormalTable style="WIDTH: 100%; mso-cellspacing: 3.0pt; mso-padding-alt: 0cm 0cm 0cm 0cm" cellspacing=4 cellpadding=0 width="100%" border=0&gt;
&lt;tbody&gt;
&lt;tr style="mso-yfti-irow: 0; mso-yfti-lastrow: yes"&gt;
&lt;td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm"&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt; &lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt; 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;以前问&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;Potian&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;#8220;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;脚本可以做什么&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;#8221;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;，现在明白了。脚本语言具有无穷大的威力，只要你给它无穷大的运行环境（&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;context&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;）。设计可以嵌入脚本的框架时，就要考虑给脚本怎样的&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;context&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;。一些最可能用到的东西，应该放在脚本伸手可及的地方；如果所有东西都可以通过一个全局&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;Service
Locator&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;导航获得，那么脚本就什么都可以做。&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;com.opensymphony.workflow.util.beanshell&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;这个包里的几个类就是&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;OSWorkflow&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;配置文件中&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;BeanShell&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;脚本的运行环境，每个类对应一种&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;BeanShell&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;定义。譬如对于&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;type="&lt;span class=SpellE&gt;beanshell&lt;/span&gt;"
name="&lt;span class=SpellE&gt;bsh.condition&lt;/span&gt;"&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;的&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;BeanShell&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;脚本，它得到的运行环境是这样设置的（&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;BeanShellCondition.passesCondition&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;方法）：&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Interpreter &lt;span class=SpellE&gt;i&lt;/span&gt; = new Interpreter();&amp;nbsp; // &lt;span class=SpellE&gt;BeanShell&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;解释器&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Map &lt;span class=SpellE&gt;transientVars&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class=SpellE&gt;PropertySet&lt;/span&gt; &lt;span class=SpellE&gt;ps&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class=SpellE&gt;WorkflowContext&lt;/span&gt; context;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class=SpellE&gt;WorkflowEntry&lt;/span&gt; entry;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class=SpellE&gt;ClassLoader&lt;/span&gt; loader;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class=SpellE&gt;i.set&lt;/span&gt;("entry",
entry);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class=SpellE&gt;i.set&lt;/span&gt;("context",
context);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class=SpellE&gt;i.set&lt;/span&gt;("&lt;span class=SpellE&gt;transientVars&lt;/span&gt;", &lt;span class=SpellE&gt;transientVars&lt;/span&gt;);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class=SpellE&gt;i.set&lt;/span&gt;("&lt;span class=SpellE&gt;propertySet&lt;/span&gt;", &lt;span class=SpellE&gt;ps&lt;/span&gt;);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class=SpellE&gt;i.set&lt;/span&gt;("&lt;span class=SpellE&gt;jn&lt;/span&gt;", &lt;span class=SpellE&gt;transientVars.get&lt;/span&gt;("&lt;span class=SpellE&gt;jn&lt;/span&gt;"));&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;br&gt;
&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;通过&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;entry&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;变量（&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;WorkflowEntry&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;）可以得到工作流&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;ID&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;、名称、状态（激活、挂起、结束等等）；通过&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;context&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;变量（&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;WorkflowContext&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;）可以得到调用者（&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;caller&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;，我打算用这个值&lt;span class=GramE&gt;来作&lt;/span&gt;为每个工作流实例的唯一标识，不知道是否合理）；&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;transientVars&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;是一个&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;Map&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;，传递临时性的参数；&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;propertySet&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;是持久化的属性设置。&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;jn&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;变量是用在&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;join&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;节点中的&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;#8212;&amp;#8212;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;当两个流程需要合并时，就会进入一个&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;join&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;节点。譬如说，年检流程和广告审查流程、注册流程和并联审批流程，它们的合并就要在一个&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;join&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;节点中判断两条流程是否都达到合适的位置。调用&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;jn.getStep&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;()&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;方法可以获得任意一个&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;step&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;，然后调用&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;getStatus&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;()&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;方法就可以判断任意&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;step&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;的当前状态。&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p class=MsoNormal&gt;
&lt;span lang=EN-US&gt;\&lt;/span&gt;
&lt;/p&gt;
&lt;div align=center&gt;
&lt;table class=MsoNormalTable style="WIDTH: 100%; mso-cellspacing: 0cm; mso-padding-alt: 0cm 0cm 0cm 0cm" cellspacing=0 cellpadding=0 width="100%" border=0&gt;
&lt;tbody&gt;
&lt;tr style="mso-yfti-irow: 0"&gt;
&lt;td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; WIDTH: 100%; PADDING-TOP: 0cm" width="100%"&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #000066; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial; mso-font-kerning: 0pt"&gt;OSWorkflow&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #000066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"&gt;真灵活&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial; mso-font-kerning: 0pt"&gt;&amp;gt;&amp;gt; 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial; mso-font-kerning: 0pt"&gt;http://www.blogdriver.com/showBlog.do?diaryID=108339&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; WIDTH: 7.5pt; PADDING-TOP: 0cm" width=10&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial; mso-font-kerning: 0pt"&gt;
&lt;v:shape id=_x0000_i1033 style="WIDTH: 6.75pt; HEIGHT: 6.75pt; mso-wrap-distance-left: 3pt; mso-wrap-distance-right: 3pt" coordsize="21600,21600" alt="" type="#_x0000_t75"&gt;
&lt;v:imagedata o:href="http://www.blogdriver.com/model/model15/files/a-.gif" src="file0869.files/image001.gif"&gt;&lt;/v:imagedata&gt;
&lt;/v:shape&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow: 1; mso-yfti-lastrow: yes"&gt;
&lt;td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm" colspan=2&gt;
&lt;table class=MsoNormalTable style="WIDTH: 100%; mso-cellspacing: 3.0pt; mso-padding-alt: 0cm 0cm 0cm 0cm" cellspacing=4 cellpadding=0 width="100%" border=0&gt;
&lt;tbody&gt;
&lt;tr style="mso-yfti-irow: 0; mso-yfti-lastrow: yes"&gt;
&lt;td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm"&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt; &lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt; 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;比如年检流程，&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;#8220;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;未提交年检报告书&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;#8221;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;的状态其实有好几种情况：首次填写未提交、报告书被退回未提交、初审不通过未提交。把这几个状态分别定义为&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;UnCommit1&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;、&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;UnCommit2&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;、&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;UnCommit3&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;。在&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;#8220;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;提交&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;#8221;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;的动作那里判断条件时，用&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;BeanShell&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;写一个脚本：&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;String
status = &lt;span class=SpellE&gt;getStatus&lt;/span&gt;();&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;status.indexOf&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;("&lt;span class=SpellE&gt;UnCommit&lt;/span&gt;")
&amp;gt;= 0;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;也就是说，只要当前状态字中含有&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;#8220;&lt;span class=SpellE&gt;UnCommit&lt;/span&gt;&amp;#8221;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;字样，就可以执行&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;#8220;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;提交&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;#8221;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;的动作。嘿嘿，&lt;span class=GramE&gt;噶&lt;/span&gt;灵活地。现在要把&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;BeanShell&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;的中文问题解决一下，再试试分支流程。&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p class=MsoNormal&gt;
&lt;span lang=EN-US&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;div align=center&gt;
&lt;table class=MsoNormalTable style="WIDTH: 100%; mso-cellspacing: 0cm; mso-padding-alt: 0cm 0cm 0cm 0cm" cellspacing=0 cellpadding=0 width="100%" border=0&gt;
&lt;tbody&gt;
&lt;tr style="mso-yfti-irow: 0"&gt;
&lt;td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; WIDTH: 100%; PADDING-TOP: 0cm" width="100%"&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span style="FONT-SIZE: 9pt; COLOR: #000066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"&gt;跟&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #000066; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial; mso-font-kerning: 0pt"&gt;OSWorkflow&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #000066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"&gt;奋斗一天&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial; mso-font-kerning: 0pt"&gt;&amp;gt;&amp;gt; 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial; mso-font-kerning: 0pt"&gt;http://www.blogdriver.com/showBlog.do?diaryID=107566&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; WIDTH: 7.5pt; PADDING-TOP: 0cm" width=10&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial; mso-font-kerning: 0pt"&gt;
&lt;v:shape id=_x0000_i1034 style="WIDTH: 6.75pt; HEIGHT: 6.75pt; mso-wrap-distance-left: 3pt; mso-wrap-distance-right: 3pt" coordsize="21600,21600" alt="" type="#_x0000_t75"&gt;
&lt;v:imagedata o:href="http://www.blogdriver.com/model/model15/files/a-.gif" src="file0869.files/image001.gif"&gt;&lt;/v:imagedata&gt;
&lt;/v:shape&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow: 1; mso-yfti-lastrow: yes"&gt;
&lt;td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm" colspan=2&gt;
&lt;table class=MsoNormalTable style="WIDTH: 100%; mso-cellspacing: 3.0pt; mso-padding-alt: 0cm 0cm 0cm 0cm" cellspacing=4 cellpadding=0 width="100%" border=0&gt;
&lt;tbody&gt;
&lt;tr style="mso-yfti-irow: 0; mso-yfti-lastrow: yes"&gt;
&lt;td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm"&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt; &lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt; 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;解决了两个问题：&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;b&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-size: 12.0pt"&gt;不能根据&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt; mso-bidi-font-size: 12.0pt"&gt;Hibernate&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-size: 12.0pt"&gt;映射文件生成数据库&lt;/span&gt;&lt;/b&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;#8212;&amp;#8212;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;用&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;SchemaExport&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;生成数据库的时候，&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;DOM4J&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;报错&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;#8220;&lt;span class=SpellE&gt;org.xml.sax.driver&lt;/span&gt;&amp;#8221;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;系统属性没有设置。查看了一下，在以往的任何一个项目中，这个系统属性都没有设置，但都可以生成数据库，不知道为什么在这里就不行了。自己动手给&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;SchemaExport&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;做了个包装，先设置&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;org.xml.sax.driver&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;系统属性值为&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;org.apache.xerces.parsers.SAXParser&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;，再调用&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;SchemaExport&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;。&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;b&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-size: 12.0pt"&gt;执行&lt;span class=GramE&gt;速度巨慢&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;#8212;&amp;#8212;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;是因为没有开启工作&lt;span class=GramE&gt;流工厂&lt;/span&gt;的缓存。在&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;osworkflow.xml&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;定义文件中加上&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;lt;property
key="cache" value="true" /&amp;gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;，速度明显提高。第一次加载工作流定义时，&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;XML&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;解析和验证（&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;validation&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;）费时较多，改用&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;JDOM&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;解析（&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;CrimsonDOMAdapter&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;），有所加快。&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;用&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;Hibernate&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;持久化时，&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;OSWorkflow&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;要求&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;client&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;提供&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;SessionFactory&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;，然后自主控制&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;session&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;和&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;transaction&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;。我计划将它纳入&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;G-Roller&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;框架，直接向&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;HibernateWorkflowStore&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;提供&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;SessionAdapter&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;，仍然用&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;G-Roller&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;统一管理&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;session&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;和&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;transaction&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;。首先要把核心部分的单元测试补起来，&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;hani&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;这个家伙从来不爱写测试，偶尔写几个也是&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;sample&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;一样的，估计是&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;OpenSymphony&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;公司给他下的任务&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;#8212;&amp;#8212;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;就像我的文档任务一样。&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p class=MsoNormal&gt;
&lt;span lang=EN-US&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span lang=EN-US&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span lang=EN-US&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 18pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span class=SpellE&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;OSWorkFlow&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;又爱又恨&lt;/span&gt;&lt;/b&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 18pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;http://www.blogdriver.com/showBlog.do?diaryID=182514&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 18pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;nbsp;&amp;nbsp; &lt;span class=SpellE&gt;OSWorkFlow&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;我研究已有一段时间了，并已在一些项目中开始使用了。&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;OSWorkFlow&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;流程定义灵活清晰，工作流引擎支持多种持久方式（&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;MemoryStore&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt; ,&lt;span class=SpellE&gt;SerializableStore&lt;/span&gt;, &lt;span class=SpellE&gt;JDBCStore&lt;/span&gt;, &lt;span class=SpellE&gt;OfbizStore&lt;/span&gt;,
and &lt;span class=SpellE&gt;EJBStore,HibernateStore&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;等），具有极强的可扩展性。&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;OSWorkFlow&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;强大的脚本支持（&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;BeanShell&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;、&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;BSF&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;等），多样化的&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;function,function&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;可以直接使用普通&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;java&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;类函数、&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;Xwork&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;的&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;Action&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;、&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;JMS&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;、&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;EJB&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;、脚本等。使用&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;propertyset&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;动态存取类型化的数据，使用成熟的&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;Quartz&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;实现工作&lt;span class=GramE&gt;流任务&lt;/span&gt;定时调度。最新版本&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;OSWorkFlow2.7&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;也添加了&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;Spring&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;框架的支持，&lt;span class=GramE&gt;设计器&lt;/span&gt;也有了很好的改善。&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 18pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;可是，&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;OSWorkFlow&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;的学习资料太少，只有&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;opensymphony&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;的一些概论介绍和简单的例子，连一个完善的实际项目使用都没有。代码的注释也是非常少，更不能接受的是只有部分的单元测试，若想在其基础上改进也困难，哎！&lt;span class=GramE&gt;设计器&lt;/span&gt;的代码更烂，好在&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;OSWorkFlow2.7&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;的设计器（&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;Designer2.7&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;）的改进，总算是能在实际中使用。&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 18pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;期待&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;OSworkflow&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;更好的完善、改进、发展&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;(&lt;a href="http://www.opensymphony.com/osworkflow/"&gt;&lt;span style="mso-bidi-font-size: 12.0pt"&gt;http://www.opensymphony.com/osworkflow/&lt;/span&gt;&lt;/a&gt;)...............&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span lang=EN-US&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span lang=EN-US&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span lang=EN-US&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 18pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span class=SpellE&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;OSWorkFlow&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;概论：&lt;/span&gt;&lt;/b&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;function(&lt;/span&gt;&lt;/b&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;函数&lt;/span&gt;&lt;/b&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 18pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;http://www.blogdriver.com/showBlog.do?diaryID=158730&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 18pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;function&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;（函数），在&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;OSWorkFlow&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;中是用来定义（引用）并执行外部的商业逻辑和服务，实现&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;OSWorkFlow&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;与外部具体的应用之间交互。&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 18pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;function&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;有二种类型：&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;br&gt;
pre function(&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;预处理函数&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;)&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;和&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;post
function&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;（后处理函数）&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;br&gt;
pre function&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;在工作流的一个转变操作执行之前调用，例如：在执行&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;Action&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;的一个结果之前，设置这个结果将导致状态改变的&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;Owner&lt;br&gt;
&amp;nbsp;&amp;lt;action id="0" name="&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;启动工作流&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;results&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;unconditional-result id="2" old-status="Finished"
status="Queued" step="1" owner="${caller}"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;pre-functions&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;function name="&lt;span class=SpellE&gt;set.&lt;span class=GramE&gt;caller&lt;/span&gt;&lt;/span&gt;"
type="class"&amp;gt;&lt;br&gt;
&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; &amp;lt;&lt;span class=SpellE&gt;arg&lt;/span&gt; name="&lt;span class=SpellE&gt;class.name&lt;/span&gt;"&amp;gt;&lt;span class=SpellE&gt;com.opensymphony.workflow.util.Caller&lt;/span&gt;&amp;lt;/&lt;span class=SpellE&gt;arg&lt;/span&gt;&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/function&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/pre-functions&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/unconditional-result&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/results&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/action&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 18pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;post
function&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;在工作流的一个转变操作执行完之后调用&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;:&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;例如在设备申请工作流中，部门经理审核步骤完成之后可以给申请的员工发&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;email&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;通知&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 18pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;等。&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 18pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;br&gt;
function&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;将被应用在&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;step&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;、&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;Action&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;、&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;Result&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;中&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;br&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;具体见&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;workflow_2_7.dtd&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;：&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;br&gt;
..&lt;br&gt;
&lt;span class=GramE&gt;&amp;lt;!ELEMENT&lt;/span&gt; step (meta*, pre-functions?, external-permissions?,
actions?, post-functions?)&amp;gt;&lt;br&gt;
&amp;lt;&lt;span class=GramE&gt;!ELEMENT&lt;/span&gt; action (meta*, restrict-to? , &lt;span class=SpellE&gt;validators&lt;/span&gt;?,
pre-functions?, results, post-functions?)&amp;gt;&lt;br&gt;
&amp;lt;&lt;span class=GramE&gt;!ELEMENT&lt;/span&gt; result (conditions, &lt;span class=SpellE&gt;validators&lt;/span&gt;?,
pre-functions?, post-functions?)&amp;gt;&lt;br&gt;
..&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 18pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 18pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;function&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;在&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;action&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;级别的应用：在执行某一步骤的&lt;span class=GramE&gt;的&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;Action&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;时，它会首先执行当前&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;Action&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;级别的&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;pre-function&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;，再去寻找&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;Action&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;里的&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;result&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;。&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 18pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;result&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;执行完成之后再调用&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;Action&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;级别的&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;post-function&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;，于是&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;Action&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;的执行结束。&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 18pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;如下图：&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 18pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;v:shape id=_x0000_i1026 style="WIDTH: 368.25pt; HEIGHT: 104.25pt" coordsize="21600,21600" alt="" type="#_x0000_t75"&gt;
&lt;v:imagedata o:href="http://wiki.opensymphony.com/download/attachments/299/actionfunctions.png" src="file0869.files/image002.png"&gt;&lt;/v:imagedata&gt;
&lt;/v:shape&gt;
&lt;br&gt;
function&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;在&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;result&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;级别的应用&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;:&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;类似&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;action&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;级别&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;br&gt;
function&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;在&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;step&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;级别的应用&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;:&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;上一个步骤执行结束，运转到当前步骤，执行当前步骤的&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;pre-function&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;。当前步骤执行完成，在未运转到下一步&lt;span class=GramE&gt;骤&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 18pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;之前，执行&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;post-function&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 18pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;如下图：&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 18pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;v:shape id=_x0000_i1027 style="WIDTH: 422.25pt; HEIGHT: 132pt" coordsize="21600,21600" alt="" type="#_x0000_t75"&gt;
&lt;v:imagedata o:href="http://wiki.opensymphony.com/download/attachments/299/stepfunction.png" src="file0869.files/image004.png"&gt;&lt;/v:imagedata&gt;
&lt;/v:shape&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 18pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 18pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 18pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 18pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;注意：&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;OSWorkFlow&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;里的&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;Action&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;和我们具体业务操作中的&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;Action&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;（比如：&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;xwork&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;中的&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;Action&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;）的区别&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 18pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class=SpellE&gt;OSWorkFlow&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;的&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;Action&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;是个更粗粒度的操作，它是指&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;OSWorkFlow&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;某一步骤可以执行的操作。在我们经常用的&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;action&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;（比如：&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;xwork&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;中的&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;Action&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;），是业务相关的一个操作，在&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;OSWorkFlow&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;相当于一个具体的&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;function&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;。&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span lang=EN-US&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span lang=EN-US&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span lang=EN-US&gt;&lt;a href="http://www.blogdriver.com/showBlog.do?diaryID=142676"&gt;&lt;span style="mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-ansi-font-size: 10.5pt"&gt;http://www.blogdriver.com/showBlog.do?diaryID=142676&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;div align=center&gt;
&lt;table class=MsoNormalTable style="WIDTH: 100%; mso-cellspacing: 0cm; mso-padding-alt: 0cm 0cm 0cm 0cm" cellspacing=0 cellpadding=0 width="100%" border=0&gt;
&lt;tbody&gt;
&lt;tr style="mso-yfti-irow: 0"&gt;
&lt;td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; WIDTH: 100%; PADDING-TOP: 0cm" width="100%"&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all"&gt;
&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #000066; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial"&gt;opensymphony&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #000066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"&gt;的开源项目&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial"&gt;&amp;gt;&amp;gt; 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; WIDTH: 7.5pt; PADDING-TOP: 0cm" width=10&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial"&gt;
&lt;v:shape id=_x0000_i1028 style="WIDTH: 6.75pt; HEIGHT: 6.75pt; mso-wrap-distance-left: 3pt; mso-wrap-distance-right: 3pt" coordsize="21600,21600" alt="" type="#_x0000_t75"&gt;
&lt;v:imagedata o:href="http://www.blogdriver.com/model/model15/files/a-.gif" src="file0869.files/image001.gif"&gt;&lt;/v:imagedata&gt;
&lt;/v:shape&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow: 1; mso-yfti-lastrow: yes"&gt;
&lt;td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm" colspan=2&gt;
&lt;table class=MsoNormalTable style="WIDTH: 100%; mso-cellspacing: 3.0pt; mso-padding-alt: 0cm 0cm 0cm 0cm" cellspacing=4 cellpadding=0 width="100%" border=0&gt;
&lt;tbody&gt;
&lt;tr style="mso-yfti-irow: 0; mso-yfti-lastrow: yes"&gt;
&lt;td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm"&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"&gt;
&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt; &lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt; 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"&gt;
&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;很多好用的&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt;openSource.webwork&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;就来源于这个组织！&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"&gt;
&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt;opensymphony&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;也是一個&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt; &lt;span class=SpellE&gt;opensource&lt;/span&gt; &lt;/span&gt;&lt;span class=GramE&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;專&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;案的組織&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt;, &lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;推出了&lt;span class=GramE&gt;幾&lt;/span&gt;個膾炙人口的&lt;span class=GramE&gt;專&lt;/span&gt;案&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt;
&lt;br&gt;
&lt;a href="http://wiki.opensymphony.com/space/OpenSymphonyComponents"&gt;http://wiki.opensymphony.com/space/OpenSymphonyComponents&lt;/a&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;div align=center&gt;
&lt;table class=MsoNormalTable style="BORDER-RIGHT: black 1pt outset; BORDER-TOP: black 1pt outset; BORDER-LEFT: black 1pt outset; WIDTH: 372pt; BORDER-BOTTOM: black 1pt outset; mso-cellspacing: .7pt; mso-border-alt: outset black .75pt" cellspacing=1 cellpadding=0 width=496 border=1&gt;
&lt;tbody&gt;
&lt;tr style="mso-yfti-irow: 0; mso-yfti-lastrow: yes"&gt;
&lt;td style="BORDER-RIGHT: black 1pt inset; PADDING-RIGHT: 0.75pt; BORDER-TOP: black 1pt inset; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: black 1pt inset; PADDING-TOP: 0.75pt; BORDER-BOTTOM: black 1pt inset; mso-border-alt: inset black .75pt"&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: SimHei; mso-bidi-font-family: SimHei; mso-hansi-font-family: SimHei"&gt;◎&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Verdana"&gt;OSCore&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Verdana"&gt;: &lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"&gt;一些開發&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial"&gt; j2ee &lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"&gt;基礎的核心程式&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial"&gt;
&lt;br&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: SimHei; mso-bidi-font-family: SimHei; mso-hansi-font-family: SimHei"&gt;◎&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Verdana"&gt;OSUser&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Verdana"&gt;: &lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"&gt;人員管理的程式&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial"&gt;, &lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"&gt;主要處理&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial"&gt; &lt;span class=SpellE&gt;authetication&lt;/span&gt; &lt;/span&gt;&lt;span class=GramE&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"&gt;為&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"&gt;主&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial"&gt;
&lt;br&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: SimHei; mso-bidi-font-family: SimHei; mso-hansi-font-family: SimHei"&gt;◎&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Verdana"&gt;O&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial"&gt;SAccess&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial"&gt;: &lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"&gt;存取控管的程式&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial"&gt;, &lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"&gt;主要處理&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial"&gt; authorization &lt;/span&gt;&lt;span class=GramE&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"&gt;為&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"&gt;主&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial"&gt;
&lt;br&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: SimHei; mso-bidi-font-family: SimHei; mso-hansi-font-family: SimHei"&gt;◎&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Verdana"&gt;WebWork&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Verdana"&gt;: &lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"&gt;方便簡&lt;span class=GramE&gt;單&lt;/span&gt;的&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial"&gt; MVC
Framework&lt;br&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: SimHei; mso-bidi-font-family: SimHei; mso-hansi-font-family: SimHei"&gt;◎&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Verdana"&gt;WebWork2: &lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"&gt;顧名思義&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial"&gt;, &lt;span class=SpellE&gt;WebWork&lt;/span&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"&gt;第二版&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial"&gt;
&lt;br&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: SimHei; mso-bidi-font-family: SimHei; mso-hansi-font-family: SimHei"&gt;◎&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Verdana"&gt;XWork&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Verdana"&gt;:
Model2x &lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"&gt;的&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial"&gt; MVC
Framework.&lt;br&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: SimHei; mso-bidi-font-family: SimHei; mso-hansi-font-family: SimHei"&gt;◎&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Verdana"&gt;SiteMesh&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Verdana"&gt;:
View &lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"&gt;端的網頁&lt;span class=GramE&gt;處理器&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial"&gt; ( &lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"&gt;許多&lt;span class=GramE&gt;書&lt;/span&gt;籍推薦&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial"&gt; )&lt;br&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: SimHei; mso-bidi-font-family: SimHei; mso-hansi-font-family: SimHei"&gt;◎&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Verdana"&gt;PropertySet&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Verdana"&gt;: &lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"&gt;管理&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial"&gt; properties &lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"&gt;的好工具&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial"&gt;
&lt;br&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: SimHei; mso-bidi-font-family: SimHei; mso-hansi-font-family: SimHei"&gt;◎&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Verdana"&gt;OSWorkflow&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Verdana"&gt;: &lt;span class=SpellE&gt;WorkFlow&lt;/span&gt; engine &lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"&gt;工作流引擎&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial"&gt;
&lt;br&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: SimHei; mso-bidi-font-family: SimHei; mso-hansi-font-family: SimHei"&gt;◎&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Verdana"&gt;OSCache&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Verdana"&gt;:
J2EE Cachin&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial"&gt;g &lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"&gt;機制&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt; TEXT-ALIGN: center" align=center&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p class=MsoNormal style="WORD-BREAK: break-all"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p class=MsoNormal&gt;
&lt;span lang=EN-US&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span lang=EN-US&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;table class=MsoNormalTable style="WIDTH: 100%; mso-cellspacing: 0cm; mso-padding-alt: 0cm 0cm 0cm 0cm" cellspacing=0 cellpadding=0 width="100%" border=0&gt;
&lt;tbody&gt;
&lt;tr style="mso-yfti-irow: 0"&gt;
&lt;td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; WIDTH: 100%; PADDING-TOP: 0cm" width="100%"&gt;
&lt;p class=MsoNormal style="TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #000066; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial; mso-font-kerning: 0pt"&gt;BeanShell&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #000066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"&gt;的中文问题&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial; mso-font-kerning: 0pt"&gt;&amp;gt;&amp;gt; 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial; mso-font-kerning: 0pt"&gt;http://www.blogdriver.com/showBlog.do?diaryID=108228&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; WIDTH: 7.5pt; PADDING-TOP: 0cm" width=10&gt;
&lt;p class=MsoNormal style="TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial; mso-font-kerning: 0pt"&gt;
&lt;v:shape id=_x0000_i1029 style="WIDTH: 6.75pt; HEIGHT: 6.75pt; mso-wrap-distance-left: 3pt; mso-wrap-distance-right: 3pt" coordsize="21600,21600" alt="" type="#_x0000_t75"&gt;
&lt;v:imagedata o:href="http://www.blogdriver.com/model/model15/files/a-.gif" src="file0869.files/image001.gif"&gt;&lt;/v:imagedata&gt;
&lt;/v:shape&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow: 1; mso-yfti-lastrow: yes"&gt;
&lt;td style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm" colspan=2&gt;
&lt;table class=MsoNormalTable style="WIDTH: 100%; mso-cellspacing: 3.0pt; mso-padding-alt: 0cm 0cm 0cm 0cm" cellspacing=4 cellpadding=0 width="100%" border=0&gt;
&lt;tbody&gt;
&lt;tr style="mso-yfti-irow: 0; mso-yfti-lastrow: yes"&gt;
&lt;td style="BORDER-RIGHT: #bbbbbb 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: white 1pt solid; PADDING-LEFT: 0cm; BACKGROUND: #f7f7f7; PADDING-BOTTOM: 0cm; BORDER-LEFT: white 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: #bbbbbb 1pt solid; mso-border-top-alt: white; mso-border-left-alt: white; mso-border-bottom-alt: #BBBBBB; mso-border-right-alt: #BBBBBB; mso-border-style-alt: solid; mso-border-width-alt: .75pt"&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 16.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt; &lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt; 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 16.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;在&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;XML&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;文件中写这么一段&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;BeanShell&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;：&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 16.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 16.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;String
status = &lt;span class=SpellE&gt;getStatus&lt;/span&gt;();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
// &lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;通过某种途径得到状态&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 16.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;System.out.println&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;(status);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
// &lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;这里输出&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;#8220;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;未提交&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;#8221;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 16.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;System.out.println&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;(&lt;span class=SpellE&gt;status.indexOf&lt;/span&gt;("&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;未提交&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;"));&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 16.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 16.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;最后一句就得到了&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;-1&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;。&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 16.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 16.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;System.out.println&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;("&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;未提交&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;");&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 16.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 16.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;这句直接就得到了乱码。这到底是&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;XML&lt;/span&gt;&lt;span class=GramE&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;解析器&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;的问题呢还是&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;BeanShell&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;的问题呢？搞&lt;span class=GramE&gt;不拎清&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;#8230;&amp;#8230;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;再试一下去。&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 16.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 16.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span style="FONT-SIZE: 9pt; COLOR: #669933; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;试过了，在&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #669933; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;Java&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #669933; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;里面写：&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 16.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 16.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #669933; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;nbsp;&amp;nbsp;Interpreter &lt;span class=SpellE&gt;i&lt;/span&gt; =
new Interpreter();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=SpellE&gt;i.setClassLoader&lt;/span&gt;(&lt;span class=SpellE&gt;getClass&lt;/span&gt;().&lt;span class=SpellE&gt;getClassLoader&lt;/span&gt;());&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=SpellE&gt;i.eval&lt;/span&gt;("&lt;span class=SpellE&gt;System.out.println&lt;/span&gt;(\"&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #669933; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;中文&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #669933; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;\");");&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 16.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 16.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span style="FONT-SIZE: 9pt; COLOR: #669933; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;输出乱码。果然是&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #669933; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;BeanShell&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #669933; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;的问题。&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 16.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left&gt;
&lt;span style="FONT-SIZE: 9pt; COLOR: #ff3333; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;原来是&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #ff3333; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;BeanShell&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #ff3333; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;版本的问题，&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #ff3333; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;1.2&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #ff3333; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;就不支持中文，换成&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #ff3333; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;2.0&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #ff3333; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;就搞定了。现在我的工作流配置是这个样子：&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 16.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #ff3333; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;actions&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;action id="1201" name="&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #ff3333; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;认领年检报告书&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #ff3333; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;restrict-to&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;conditions
type="AND"&amp;gt;&lt;br&gt;
&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; &amp;lt;condition
type="&lt;span class=SpellE&gt;beanshell&lt;/span&gt;" name="&lt;span class=SpellE&gt;bsh.condition&lt;/span&gt;"&amp;gt;&lt;br&gt;
&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;&amp;nbsp;&amp;nbsp;
&amp;lt;&lt;span class=SpellE&gt;arg&lt;/span&gt; name="script"&amp;gt;&lt;br&gt;
&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;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&lt;span class=SpellE&gt;com.opensymphony.workflow.util.beanshell.WorkflowStatus.isStatus&lt;/span&gt;(&lt;span class=SpellE&gt;transientVars&lt;/span&gt;,
"&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #ff3333; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;未认领&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #ff3333; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;");&lt;br&gt;
&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;&amp;nbsp;&amp;nbsp;
&amp;lt;/&lt;span class=SpellE&gt;arg&lt;/span&gt;&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
&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; &amp;lt;/condition&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/conditions&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/restrict-to&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;results&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;unconditional-result
old-status="Finished" status="&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #ff3333; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;认领未初审&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #ff3333; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;"
step="12" owner="${&lt;span class=SpellE&gt;ycheckId&lt;/span&gt;}" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/results&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/action&amp;gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 16.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left&gt;
&lt;span style="FONT-SIZE: 9pt; COLOR: #ff3333; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;好漂亮哦！&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #669933; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p class=MsoNormal style="TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span lang=EN-US&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span lang=EN-US&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span class=SpellE&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial"&gt;OsWorkFlow&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;配合&lt;/span&gt;&lt;/b&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial"&gt;Hibernate&lt;/span&gt;&lt;/b&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;攻略&lt;/span&gt;&lt;/b&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial"&gt;&amp;gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial"&gt;http://www.blogdriver.com/showBlog.do?diaryID=178570&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="LINE-HEIGHT: 16.5pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;1.&amp;nbsp;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;下载最新的&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;OsWorkflow2.7.0,&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;地址是&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;&lt;a href="https://osworkflow.dev.java.net/files/documents/635/4647/osworkflow-2.7.0.zip"&gt;https://osworkflow.dev.java.net/files/documents/635/4647/osworkflow-2.7.0.zip&lt;/a&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="LINE-HEIGHT: 16.5pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;2.&amp;nbsp;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;解压后&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;,&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;把&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;osworkflow-2.7.0-example.war&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;解压到一个目录，我一般起&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;web&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;，方便对里面进行修改&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="LINE-HEIGHT: 16.5pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;3.&amp;nbsp;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;部署到&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;Tomcat5&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="LINE-HEIGHT: 16.5pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;4.&amp;nbsp;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;试验一下&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;,&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;这个时候&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;,&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;默认的&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;MemoryWorkflowStore&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;应该已经工作正常了&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="LINE-HEIGHT: 16.5pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;5.&amp;nbsp;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;开始向&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;HibernateWorkflowStore&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;转移&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;,&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;先修改&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;WEB-INF\classes\&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;目录下的&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;osworkflow.xml&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;,&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;改为&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="LINE-HEIGHT: 16.5pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;persistence class="com.opensymphony.workflow.spi.hibernate.HibernateWorkflowStore"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/persistence&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="LINE-HEIGHT: 16.5pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;6.&amp;nbsp;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;把一个&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;Hibernate.cfg.xml&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;加到&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;WEB-INF\classes\&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;下面&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;,&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;我用的数据库是&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;mysql&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="LINE-HEIGHT: 16.5pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;&amp;nbsp;&amp;lt;property
name="hibernate.hbm2ddl.auto"&amp;gt;update&amp;lt;/property&amp;gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;这句是为了帮你创建数据库表的&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;,&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;跑起来后最好去掉&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;,&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;不去也没关系&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="LINE-HEIGHT: 16.5pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;
&lt;br&gt;
&amp;nbsp;&amp;lt;?xml version='1.0' encoding='utf-8'?&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;lt;!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration
DTD 2.0//EN" "&lt;a href="http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd"&gt;http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd&lt;/a&gt;"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;lt;hibernate-configuration&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;lt;session-factory&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;!-- properties --&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;property name="connection.driver_class"&amp;gt;org.gjt.mm.mysql.Driver&amp;lt;/property&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;property name="connection.url"&amp;gt;jdbc:mysql://localhost:3306/test?useUnicode=true&amp;amp;amp;characterEncoding=utf-8&amp;lt;/property&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;property name="&lt;span class=SpellE&gt;connection.username&lt;/span&gt;"&amp;gt;root&amp;lt;/property&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;property name="&lt;span class=SpellE&gt;connection.password&lt;/span&gt;"&amp;gt;123456&amp;lt;/property&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="LINE-HEIGHT: 16.5pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;span class=GramE&gt;property&lt;/span&gt; name="dialect"&amp;gt;&lt;span class=SpellE&gt;net.sf.hibernate.dialect.MySQLDialect&lt;/span&gt;&amp;lt;/property&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;property name="&lt;span class=SpellE&gt;show_sql&lt;/span&gt;"&amp;gt;true&amp;lt;/property&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;property name="&lt;span class=SpellE&gt;use_outer_join&lt;/span&gt;"&amp;gt;true&amp;lt;/property&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="LINE-HEIGHT: 16.5pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property
name="&lt;span class=SpellE&gt;connection.pool_size&lt;/span&gt;"&amp;gt;10&amp;lt;/property&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;property name="&lt;span class=SpellE&gt;statement_cache.size&lt;/span&gt;"&amp;gt;25&amp;lt;/property&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="LINE-HEIGHT: 16.5pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;span class=GramE&gt;property&lt;/span&gt; name="hibernate.hbm2ddl.auto"&amp;gt;update&amp;lt;/property&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="LINE-HEIGHT: 16.5pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;span class=GramE&gt;mapping&lt;/span&gt; resource="com/opensymphony/workflow/spi/hibernate/HibernateCurrentStep.hbm.xml"&amp;gt;&amp;lt;/mapping&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;mapping resource="com/opensymphony/workflow/spi/hibernate/HibernateHistoryStep.hbm.xml"&amp;gt;&amp;lt;/mapping&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;mapping resource="com/opensymphony/workflow/spi/hibernate/HibernateWorkflowEntry.hbm.xml"&amp;gt;&amp;lt;/mapping&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;mapping resource="com/opensymphony/module/propertyset/hibernate/PropertySetItemImpl.hbm.xml"&amp;gt;&amp;lt;/mapping&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="LINE-HEIGHT: 16.5pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;&amp;nbsp;&amp;lt;/session-factory&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;lt;/hibernate-configuration&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="LINE-HEIGHT: 16.5pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;7.&amp;nbsp;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;把&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;hibernate&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;的&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;jar&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;及&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;hibernate&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;所有要到的&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;jar,&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;统统加到&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;WEB-INF\lib\&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="LINE-HEIGHT: 16.5pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;8.&amp;nbsp;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;最后一步&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;,&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;修改源程序&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;.&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=SpellE&gt;OsWorkFlow&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;主要作者&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;Hani&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;,&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;认为生成&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;SessionFactory&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;的责任并不是&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;OsWorkFlow&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;的事情&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;,&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;坚持应该是用户&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;,&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;或者是服务器生成后&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;,&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;传给&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;HibernateWorkflowStore&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;.&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;他可能是&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;Spring&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;的思想太深了吧&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;.&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;我也赶紧开始学习了&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;.&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;但是如果这样的话&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;,&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;最好加个说明&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;,&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;说这个产品的&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;Hibernate&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;特性还必须配合&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;Spring&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;才行&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;,&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;那么我再装一个&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;.&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;既然他没有说明&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;,&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;我又暂时还打算用&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;spring,&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;而我又不想改&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;web&lt;/span&gt;&lt;span class=GramE&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;层任何&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;代码&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;,&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;那么我就只好修改他的源程序&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;,&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;在&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;HibernateWorkflowStore&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;里面生成一个独一无二的&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;SessionFactory&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;了&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="LINE-HEIGHT: 16.5pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;修改一是添加下面在开头&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="LINE-HEIGHT: 16.5pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;&amp;nbsp;&amp;nbsp;&lt;span class=GramE&gt;private&lt;/span&gt; static &lt;span class=SpellE&gt;SessionFactory&lt;/span&gt; &lt;span class=SpellE&gt;sessionFactory&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="LINE-HEIGHT: 16.5pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;&amp;nbsp;&amp;nbsp;//~
Constructors ///////////////////////////////////////////////////////////&lt;br&gt;
&amp;nbsp;&amp;nbsp;static{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;try { 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class=SpellE&gt;sessionFactory&lt;/span&gt; = new Configuration().configure().&lt;span class=SpellE&gt;buildSessionFactory&lt;/span&gt;(); 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;} catch (&lt;span class=SpellE&gt;HibernateException&lt;/span&gt; ex) { 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new &lt;span class=SpellE&gt;RuntimeException&lt;/span&gt;("Configuration
problem: " + &lt;span class=SpellE&gt;ex.getMessage&lt;/span&gt;(), ex); 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; } 
&lt;br&gt;
&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="LINE-HEIGHT: 16.5pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;二是在&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;init&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;中&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="LINE-HEIGHT: 16.5pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;把&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;sessionFactory&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt; =
(&lt;span class=SpellE&gt;SessionFactory&lt;/span&gt;) &lt;span class=SpellE&gt;props.get&lt;/span&gt;("&lt;span class=SpellE&gt;sessionFactory&lt;/span&gt;");&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;注释&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="LINE-HEIGHT: 16.5pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;编译&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;,&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;生成&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;class,&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;放到&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;osworkflow-2.7.0.jar,&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;取代原来的&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;HibernateWorkflowStore.class&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;,&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #666666; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;重启服务器&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Arial"&gt;,OK&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;div align=center&gt;
&lt;table class=MsoNormalTable style="WIDTH: 100%; mso-cellspacing: 0cm; mso-padding-alt: 0cm 0cm 0cm 0cm" cellspacing=0 cellpadding=0 width="100%" border=0&gt;
&lt;tbody&gt;
&lt;tr style="HEIGHT: 15.75pt; mso-yfti-irow: 0"&gt;
&lt;td style="BORDER-RIGHT: #bbbbbb 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: white 1pt solid; PADDING-LEFT: 0cm; BACKGROUND: #f7f7f7; PADDING-BOTTOM: 0cm; BORDER-LEFT: white 1pt solid; WIDTH: 100%; PADDING-TOP: 0cm; BORDER-BOTTOM: #bbbbbb 1pt solid; HEIGHT: 15.75pt; mso-border-top-alt: white; mso-border-left-alt: white; mso-border-bottom-alt: #BBBBBB; mso-border-right-alt: #BBBBBB; mso-border-style-alt: solid; mso-border-width-alt: .75pt" width="100%"&gt;
&lt;table class=MsoNormalTable style="WIDTH: 100%; mso-cellspacing: 0cm; mso-padding-alt: 0cm 0cm 0cm 0cm" cellspacing=0 cellpadding=0 width="100%" border=0&gt;
&lt;tbody&gt;
&lt;tr style="mso-yfti-irow: 0; mso-yfti-lastrow: yes"&gt;
&lt;td style="BORDER-RIGHT: #bbbbbb 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: white 1pt solid; PADDING-LEFT: 0cm; BACKGROUND: #f7f7f7; PADDING-BOTTOM: 0cm; BORDER-LEFT: white 1pt solid; WIDTH: 100%; PADDING-TOP: 0cm; BORDER-BOTTOM: #bbbbbb 1pt solid; mso-border-top-alt: white; mso-border-left-alt: white; mso-border-bottom-alt: #BBBBBB; mso-border-right-alt: #BBBBBB; mso-border-style-alt: solid; mso-border-width-alt: .75pt" width="100%"&gt;
&lt;p class=MsoNormal style="TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;b&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #ff7a00; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;Shark&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #ff7a00; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;第一印象&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #ff7a00; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;gt;&amp;gt;-
&amp;gt;&amp;gt; from GIGIX&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p class=MsoNormal style="TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #bbbbbb 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: white 1pt solid; PADDING-LEFT: 0cm; BACKGROUND: #f7f7f7; PADDING-BOTTOM: 0cm; BORDER-LEFT: white 1pt solid; WIDTH: 15.75pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #bbbbbb 1pt solid; HEIGHT: 15.75pt; mso-border-top-alt: white; mso-border-left-alt: white; mso-border-bottom-alt: #BBBBBB; mso-border-right-alt: #BBBBBB; mso-border-style-alt: solid; mso-border-width-alt: .75pt" width=21&gt;
&lt;p class=MsoNormal style="TEXT-ALIGN: center; mso-pagination: widow-orphan" align=center&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial; mso-font-kerning: 0pt"&gt;&lt;a href="javascript:void(0);"&gt;&lt;span style="COLOR: #3a5066; FONT-FAMILY: Arial"&gt;
&lt;v:shape id=_x0000_i1030 style="WIDTH: 14.25pt; HEIGHT: 14.25pt; mso-wrap-distance-left: .75pt; mso-wrap-distance-right: .75pt; mso-wrap-distance-top: .75pt; mso-wrap-distance-bottom: .75pt" coordsize="21600,21600" alt="编辑" type="#_x0000_t75" o:button="t" href="javascript:void(0);"&gt;
&lt;v:imagedata o:href="http://www.blogdriver.com/model/model21/files/c7.gif" src="file0869.files/image006.gif"&gt;&lt;/v:imagedata&gt;
&lt;/v:shape&gt;
&lt;/span&gt;&lt;/a&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #bbbbbb 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: white 1pt solid; PADDING-LEFT: 0cm; BACKGROUND: #f7f7f7; PADDING-BOTTOM: 0cm; BORDER-LEFT: white 1pt solid; WIDTH: 15.75pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #bbbbbb 1pt solid; HEIGHT: 15.75pt; mso-border-top-alt: white; mso-border-left-alt: white; mso-border-bottom-alt: #BBBBBB; mso-border-right-alt: #BBBBBB; mso-border-style-alt: solid; mso-border-width-alt: .75pt" width=21&gt;
&lt;p class=MsoNormal style="TEXT-ALIGN: center; mso-pagination: widow-orphan" align=center&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial; mso-font-kerning: 0pt"&gt;
&lt;v:shape id=_x0000_i1031 style="WIDTH: 14.25pt; HEIGHT: 14.25pt; mso-wrap-distance-left: .75pt; mso-wrap-distance-right: .75pt; mso-wrap-distance-top: .75pt; mso-wrap-distance-bottom: .75pt" coordsize="21600,21600" alt="最小化" type="#_x0000_t75"&gt;
&lt;v:imagedata o:href="http://www.blogdriver.com/model/model21/files/c6a.gif" src="file0869.files/image007.gif"&gt;&lt;/v:imagedata&gt;
&lt;/v:shape&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow: 1; mso-yfti-lastrow: yes"&gt;
&lt;td style="BORDER-RIGHT: #bbbbbb 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: white 1pt solid; PADDING-LEFT: 0cm; BACKGROUND: #f7f7f7; PADDING-BOTTOM: 0cm; BORDER-LEFT: white 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: #bbbbbb 1pt solid; mso-border-top-alt: white; mso-border-left-alt: white; mso-border-bottom-alt: #BBBBBB; mso-border-right-alt: #BBBBBB; mso-border-style-alt: solid; mso-border-width-alt: .75pt" colspan=3&gt;
&lt;table class=MsoNormalTable style="WIDTH: 100%; mso-cellspacing: 2.2pt; mso-padding-alt: 0cm 0cm 0cm 0cm" cellspacing=3 cellpadding=0 width="100%" border=0&gt;
&lt;tbody&gt;
&lt;tr style="mso-yfti-irow: 0; mso-yfti-lastrow: yes"&gt;
&lt;td style="BORDER-RIGHT: #bbbbbb 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: white 1pt solid; PADDING-LEFT: 0cm; BACKGROUND: #f7f7f7; PADDING-BOTTOM: 0cm; BORDER-LEFT: white 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: #bbbbbb 1pt solid; mso-border-top-alt: white; mso-border-left-alt: white; mso-border-bottom-alt: #BBBBBB; mso-border-right-alt: #BBBBBB; mso-border-style-alt: solid; mso-border-width-alt: .75pt"&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 16.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt; &lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt; 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 16.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;试了一下&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;Enhydra&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt; Shark&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;工作流引擎，暂时还不知道如何编程使用，只有一些肤浅的印象。&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 16.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 16.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;b&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-size: 12.0pt"&gt;庞大&lt;/span&gt;&lt;/b&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;#8212;&amp;#8212;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;比&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;OSWorkflow&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;和&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;Werkflow&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;都大了许多，概念非常完整，一时间还很难完全理解这些概念。对于&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;OSWorkflow&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;和&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;Werkflow&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;这种轻量级工作流来说，要管理的唯一目标就是流程实例（&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;process
instance&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;），操纵流程实例的状态变迁，至于如何使用流程实例、状态如何发展，都在工作流引擎之外。&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;Shark&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;管理的目标要宽泛得多，比如有&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;User&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;和&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;UserGroup&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;的概念，用户必须有此角色（即&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;group&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;）才能涉足此流程。不知道这会不会和统一用户管理平台冲突。&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 16.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 16.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;b&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-size: 12.0pt"&gt;标准&lt;/span&gt;&lt;/b&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;#8212;&amp;#8212;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;完全符合&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;WfMC&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;参考模型，并且没有任何额外扩展，采用&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;XPDL&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;作为工作流定义语言。标准是好事，但是对于一些比较特殊的流程，我担心它的扩展能力。比如电子政务中经常会出现一种&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;#8220;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;无序流程&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;#8221;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;（只要领导插手，就可以随便到任何位置），&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;WfMC&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;是否能支持呢？另外，&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;Enhydra&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;提供&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;JaWE&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;编辑器，可能是最好的&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;XPDL&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;可视化编辑器。&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 16.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 16.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;b&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-size: 12.0pt"&gt;支持多语言插件&lt;/span&gt;&lt;/b&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;#8212;&amp;#8212;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;对于需要自动执行的流程，&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;Shark&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;允许插入多种语言的运行单元，包括&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;Java&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;、&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;JavaScript&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;、&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;BeanShell&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;、&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;Python&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;等等，相信提供对&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;Groovy&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;的支持也会很简单。我们自己的工作流不支持自动执行，&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;OSWorkflow&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;只支持简单的&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;BeanShell&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;（语句直接写在配置文件中）。&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 16.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 16.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;b&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-size: 12.0pt"&gt;持久化&lt;/span&gt;&lt;/b&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;#8212;&amp;#8212;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;默认的持久化方式是&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;DODS&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;，这是&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;Enhydra&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;自己做的一个&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;O/R
mapping&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;。原来用的数据库是&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;HSQL&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;，我今天尝试迁移到&lt;/span&gt;&lt;span class=SpellE&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;MySQL&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;还没有成功，因此也不知道这个持久化机制究竟如何。另外还提供&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;LDAP&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;的持久化，持久化方式的移植也不知道是否困难。我相信&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;O/R
mapping&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;基础上移植不会太难。&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 16.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 16.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;b&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-size: 12.0pt"&gt;服务接口&lt;/span&gt;&lt;/b&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;#8212;&amp;#8212;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;可以作为应用程序的一部分在&lt;span class=GramE&gt;代码级集成&lt;/span&gt;，也可以作为外部服务通过&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;RPC&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;集成。&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;Shark&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;很重视&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;CORBA&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;接口，对于异构环境的集成应该是很有帮助的。这里也有一点性能上的顾虑：应用内集成时，工作流引擎和工作流实例会不会带来太大的性能开销？毕竟它给我一种重量级的感觉。&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 16.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="LINE-HEIGHT: 16.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left&gt;
&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;明天如果有空就继续尝试，先把应用内&lt;span class=GramE&gt;集成搞&lt;/span&gt;明白，那么&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;RPC&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: SimSun; mso-bidi-font-family: Arial; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"&gt;集成也就简单了&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt; COLOR: #3a5066; FONT-FAMILY: Arial; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;img width="0" height="0" src="http://www.hifar.com/blog/aggbug.ashx?id=18774fcd-3b43-42fd-8656-0c74817202e8" /&gt;</description>
      <category>文摘和收藏</category>
    </item>
    <item>
      <trackback:ping>http://www.hifar.com/blog/Trackback.aspx?guid=7d96b162-e9f6-4f0c-bf6a-d275893d0d07</trackback:ping>
      <pingback:server>http://www.hifar.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.hifar.com/blog/PermaLink,guid,7d96b162-e9f6-4f0c-bf6a-d275893d0d07.aspx</pingback:target>
      <dc:creator>Jimmy Gao</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <h3>Microsoft ObjectSpaces
</h3>
        <p>
objectspaces是个orm 工具，这个orm应该是object-relational mapping 而不是object rule modal，其主要目的就是为了简化数据库和对象之间的映射。连接
http://groups.msn.com/objectspaces<br /></p>
        <p>
        </p>
        <p>
objectspaces类似于jdo(jdo是java的一个orm工具)，在pdc版本中，提供了XmlObjectSpace 和SqlObjectSpace两个类，支持xml或是Sql
Server。
</p>
        <p>
从技术角度来说，objectspaces建筑于ado.net之上（同jdo建筑在jdbc之上一样)一样，使用map文件来映射对象和数据库的关系。
</p>
        <p>
如
</p>
        <p>
&lt;map xmlns="http://www.microsoft.com/ObjectSpaces-v1"&gt;<br />
  &lt;type name="Customer" dataSource="customers" source="s"&gt;<br />
    &lt;uniqueKey name="Id" mappedBy="autoIncrement" dataSource="CustomerId"
/&gt;<br /><br />
    &lt;property name="Name" dataSource="ContactName" /&gt;<br />
    &lt;property name="Title" dataSource="ContactTitle"/&gt;<br />
    &lt;property name="Company" dataSource="CompanyName"/&gt;<br />
    &lt;property name="Phone" dataSource="Phone"/&gt;<br />
    &lt;property name="Fax" dataSource="Fax"/&gt;<br /><br />
    &lt;method name="GetRandomOrder" userAssembly="Customization.dll"
userClass="Customizer" /&gt;<br />
&lt;/map&gt;
</p>
        <p>
在这个map文件中，type tag中的name是objectspaces中的对象,datasource 则是数据库表名，而source则是数据源map文件中定义的数据源
</p>
        <p>
property或是uniqueKey对应一个字段或是关键字字段。大家可以看到uniqueKey中的mappedBy被设置为autoIncrement，意味着是sql
server的identity或是access中的自动计数字段。当然，mappedBy还有guid、user或是custom等多种方式。dataSource则是实际的字段名。
</p>
        <p>
大家可以粗略看出这种定义方式非常灵活，因为在设计初期，数据库会经常改变，这种定义方式，可以减少对源代码的改动。
</p>
        <p>
使用objectspaces可以大大简化你的数据库存储代码，其实objectspaces的原则就是让你：
</p>
        <ul>
          <li>
不使用 sql 语言 
</li>
          <li>
不使用存储过程</li>
        </ul>
        <p>
在objectSpaces中，数据库操作(新增、删除、更新、查询)被简略成CreateObject,Delete,Update(UpdateAll),getobject(getObjects)等几个方法，下面以一个实例来介绍。
</p>
        <p>
如一个Customer(客户) 对象，其可能有Id(编号),Name( 名称),Address(地址)等属性<br />
注：代码中的os是ObjectSpace的一个实例<br /></p>
        <p dir="ltr" style="MARGIN-RIGHT: 0px">
          <b>定义对象</b>
          <br />
          <span class="code">public abstract Customer<br />
{<br />
[UniqueId]<br />
public abstract Int32 Id{get;set;}<br />
public abstract String Name{get;set;}<br />
public abstract String Address{get;set;}<br />
public void OnCreate(Int32 ItemId,String ItemName,String ItemAddress)<br />
{<br />
this.Id=ItemId;<br />
this.Name=ItemName;<br />
this.Address=ItemAddress;<br />
}<br />
}<br /></span>
        </p>
        <p dir="ltr" style="MARGIN-RIGHT: 0px">
          <b>查询对象</b>
          <br />
GetObject<br />
GetObjects<br /></p>
        <p dir="ltr" style="MARGIN-RIGHT: 0px">
GetObject返回单一对象，GetObjects返回对象的集合(ObjectSet)<br />
查询使用的是(OPath,ObjectPathLanguage)，也就是使用对象.属性的方式进行查询，查询根据编程语言的不同而不同，如C#用==表示是否相等而vb.net则用=<br /><span class="code">c=os.GetObject(typeof(Customer),"Id==1");</span></p>
        <p dir="ltr" style="MARGIN-RIGHT: 0px">
          <strong>注:</strong>(在pdc版本中,like 操作还未被支持，正式版中会支持这个操作，而且，从新闻组的一些文字上来看，这个特性已经被实现)<br /></p>
        <p dir="ltr" style="MARGIN-RIGHT: 0px">
objectSpace使用如下方式进行新增，删除、更新操作<br /><b></b></p>
        <p dir="ltr" style="MARGIN-RIGHT: 0px">
          <b>新增对象</b>
          <br />
CreateObject<br /></p>
        <p dir="ltr" style="MARGIN-RIGHT: 0px">
          <span class="code">Customer c=os.CreateObject(typeof(Customer),1,"jjx","浙江省")</span>
          <br />
          <b>
          </b>
        </p>
        <p dir="ltr" style="MARGIN-RIGHT: 0px">
          <b>删除对象</b>
          <br />
DeleteObject<br /><b></b></p>
        <p dir="ltr" style="MARGIN-RIGHT: 0px">
          <b>更新</b>
          <br />
Update 更新某个对象<br />
UpdateAll 更新全部对象
</p>
        <p dir="ltr" style="MARGIN-RIGHT: 0px">
          <br />
objectSpaces中的对象定义可以自行扩展，以加入各种商业逻辑。请大家参阅帮助文件。
</p>
        <p dir="ltr" style="MARGIN-RIGHT: 0px">
 
</p>
        <p dir="ltr" style="MARGIN-RIGHT: 0px">
老早就听到过这个东西，但没有找到，这次在fabrice's 的webblog（http://dotnetweblogs.com/FMARGUERIE/）中发现了这个连接（<a href="http://groups.msn.com/objectspaces">http://groups.msn.com/objectspaces</a>）<br /></p>
        <p dir="ltr" style="MARGIN-RIGHT: 0px">
现在的objectspaces还是最早的pdc preview版本，在浏览了新闻组和其它网站的一些消息后，确定这将是一个不会发表的产品，不过objectspaces
将会融合在.net 2.0中，来源如下
</p>
        <p dir="ltr" style="MARGIN-RIGHT: 0px">
Latest Update on Microsoft ObjectSpaces 
<br />
Wednesday, October 02, 2002 9:14 PM<br />
According to Guang-an Wu who works for the company, Microsoft have utilized the feedback
received via newsgroups and through customer meetings to improve ObjectSpaces further.
Currently, ObjectSpaces is being developed as a part of the next major .NET framework
release. 
<br />
Stay tuned for further announcements at the PDC next year.<br /></p>
        <p dir="ltr" style="MARGIN-RIGHT: 0px">
Since the component is still under development, many of the details are still being
decided and are not yet available for public release. However, here are some of the
highlights, with the usual caveat that all details are subject to change without further
notice. And Additional details beyond these highlights are not available at this point
for release.<br /></p>
        <p dir="ltr" style="MARGIN-RIGHT: 0px">
Unlike the PDC 2001 Technology Preview, classes don't need to be abstract. The goal
is to make ObjectSpaces available for all .NET objects. 
<br />
The foundation is a better optimized streaming model for fast retrieval of objects. 
<br />
Key features like simplicity of OPath queries for retrieving objects, choice of span
or delay loading are being enhanced and improved. 
<br />
More sophisticated support is planned for inheritance and advanced mapping between
classes and one or more tables. 
<br />
Further, tools support for application development lifecycle is in the works. 
<br /><br /><br /></p>
        <p dir="ltr" style="MARGIN-RIGHT: 0px">
虽然objectspaces只是个预览产品，但其特征非常丰富，我非常喜欢其基于map文件的特性，这是 ado.net的TableMappings集合的文件化，使你在改动数据库（如改变字段名时）不必改动代码。<br /><b></b></p>
        <p dir="ltr" style="MARGIN-RIGHT: 0px">
          <b>缺点</b>
          <br />
1、对象查询速度<br />
我做了一下测试，查询一个8000条的包含7个属性的对象需要20秒<br />
2、绑定<br />
ObjectSet实现支持ICollection和支持IBindingList，因此支持绑定<br />
类自己定义，需要自己实现IEditableObject,IDataErrorInfo来完美的支持.net数据绑定<br /><b></b></p>
        <p dir="ltr" style="MARGIN-RIGHT: 0px">
          <b>约定</b>
          <br />
在OjbectSpace中<br />
对象的UniqueId属性是必须的，当在进行OPaht查询时需要使用
</p>
        <img width="0" height="0" src="http://www.hifar.com/blog/aggbug.ashx?id=7d96b162-e9f6-4f0c-bf6a-d275893d0d07" />
      </body>
      <title>Microsoft ObjectSpaces 介绍</title>
      <guid isPermaLink="false">http://www.hifar.com/blog/PermaLink,guid,7d96b162-e9f6-4f0c-bf6a-d275893d0d07.aspx</guid>
      <link>http://www.hifar.com/blog/2004/11/26/MicrosoftObjectSpaces%e4%bb%8b%e7%bb%8d.aspx</link>
      <pubDate>Fri, 26 Nov 2004 07:56:49 GMT</pubDate>
      <description>&lt;h3&gt;Microsoft ObjectSpaces
&lt;/h3&gt;
&lt;p&gt;
objectspaces是个orm 工具，这个orm应该是object-relational mapping 而不是object rule modal，其主要目的就是为了简化数据库和对象之间的映射。连接
http://groups.msn.com/objectspaces&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;
objectspaces类似于jdo(jdo是java的一个orm工具)，在pdc版本中，提供了XmlObjectSpace 和SqlObjectSpace两个类，支持xml或是Sql
Server。
&lt;/p&gt;
&lt;p&gt;
从技术角度来说，objectspaces建筑于ado.net之上（同jdo建筑在jdbc之上一样)一样，使用map文件来映射对象和数据库的关系。
&lt;/p&gt;
&lt;p&gt;
如
&lt;/p&gt;
&lt;p&gt;
&amp;lt;map xmlns="http://www.microsoft.com/ObjectSpaces-v1"&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;type name="Customer" dataSource="customers" source="s"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;uniqueKey name="Id" mappedBy="autoIncrement" dataSource="CustomerId"
/&amp;gt;&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="Name" dataSource="ContactName" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="Title" dataSource="ContactTitle"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="Company" dataSource="CompanyName"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="Phone" dataSource="Phone"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="Fax" dataSource="Fax"/&amp;gt;&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;method name="GetRandomOrder" userAssembly="Customization.dll"
userClass="Customizer" /&amp;gt;&lt;br&gt;
&amp;lt;/map&amp;gt;
&lt;/p&gt;
&lt;p&gt;
在这个map文件中，type tag中的name是objectspaces中的对象,datasource 则是数据库表名，而source则是数据源map文件中定义的数据源
&lt;/p&gt;
&lt;p&gt;
property或是uniqueKey对应一个字段或是关键字字段。大家可以看到uniqueKey中的mappedBy被设置为autoIncrement，意味着是sql
server的identity或是access中的自动计数字段。当然，mappedBy还有guid、user或是custom等多种方式。dataSource则是实际的字段名。
&lt;/p&gt;
&lt;p&gt;
大家可以粗略看出这种定义方式非常灵活，因为在设计初期，数据库会经常改变，这种定义方式，可以减少对源代码的改动。
&lt;/p&gt;
&lt;p&gt;
使用objectspaces可以大大简化你的数据库存储代码，其实objectspaces的原则就是让你：
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
不使用 sql 语言 
&lt;li&gt;
不使用存储过程&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
在objectSpaces中，数据库操作(新增、删除、更新、查询)被简略成CreateObject,Delete,Update(UpdateAll),getobject(getObjects)等几个方法，下面以一个实例来介绍。
&lt;/p&gt;
&lt;p&gt;
如一个Customer(客户) 对象，其可能有Id(编号),Name( 名称),Address(地址)等属性&lt;br&gt;
注：代码中的os是ObjectSpace的一个实例&lt;br&gt;
&lt;/p&gt;
&lt;p dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;b&gt;定义对象&lt;/b&gt;
&lt;br&gt;
&lt;span class=code&gt;public abstract Customer&lt;br&gt;
{&lt;br&gt;
[UniqueId]&lt;br&gt;
public abstract Int32 Id{get;set;}&lt;br&gt;
public abstract String Name{get;set;}&lt;br&gt;
public abstract String Address{get;set;}&lt;br&gt;
public void OnCreate(Int32 ItemId,String ItemName,String ItemAddress)&lt;br&gt;
{&lt;br&gt;
this.Id=ItemId;&lt;br&gt;
this.Name=ItemName;&lt;br&gt;
this.Address=ItemAddress;&lt;br&gt;
}&lt;br&gt;
}&lt;br&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;b&gt;查询对象&lt;/b&gt;
&lt;br&gt;
GetObject&lt;br&gt;
GetObjects&lt;br&gt;
&lt;/p&gt;
&lt;p dir=ltr style="MARGIN-RIGHT: 0px"&gt;
GetObject返回单一对象，GetObjects返回对象的集合(ObjectSet)&lt;br&gt;
查询使用的是(OPath,ObjectPathLanguage)，也就是使用对象.属性的方式进行查询，查询根据编程语言的不同而不同，如C#用==表示是否相等而vb.net则用=&lt;br&gt;
&lt;span class=code&gt;c=os.GetObject(typeof(Customer),"Id==1");&lt;/span&gt;
&lt;/p&gt;
&lt;p dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;strong&gt;注:&lt;/strong&gt;(在pdc版本中,like 操作还未被支持，正式版中会支持这个操作，而且，从新闻组的一些文字上来看，这个特性已经被实现)&lt;br&gt;
&lt;/p&gt;
&lt;p dir=ltr style="MARGIN-RIGHT: 0px"&gt;
objectSpace使用如下方式进行新增，删除、更新操作&lt;br&gt;
&lt;b&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;b&gt;新增对象&lt;/b&gt;
&lt;br&gt;
CreateObject&lt;br&gt;
&lt;/p&gt;
&lt;p dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;span class=code&gt;Customer c=os.CreateObject(typeof(Customer),1,"jjx","浙江省")&lt;/span&gt;
&lt;br&gt;
&lt;b&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;b&gt;删除对象&lt;/b&gt;
&lt;br&gt;
DeleteObject&lt;br&gt;
&lt;b&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;b&gt;更新&lt;/b&gt;
&lt;br&gt;
Update 更新某个对象&lt;br&gt;
UpdateAll 更新全部对象
&lt;/p&gt;
&lt;p dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;br&gt;
objectSpaces中的对象定义可以自行扩展，以加入各种商业逻辑。请大家参阅帮助文件。
&lt;/p&gt;
&lt;p dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p dir=ltr style="MARGIN-RIGHT: 0px"&gt;
老早就听到过这个东西，但没有找到，这次在fabrice's 的webblog（http://dotnetweblogs.com/FMARGUERIE/）中发现了这个连接（&lt;a href="http://groups.msn.com/objectspaces"&gt;http://groups.msn.com/objectspaces&lt;/a&gt;）&lt;br&gt;
&lt;/p&gt;
&lt;p dir=ltr style="MARGIN-RIGHT: 0px"&gt;
现在的objectspaces还是最早的pdc preview版本，在浏览了新闻组和其它网站的一些消息后，确定这将是一个不会发表的产品，不过objectspaces
将会融合在.net 2.0中，来源如下
&lt;/p&gt;
&lt;p dir=ltr style="MARGIN-RIGHT: 0px"&gt;
Latest Update on Microsoft ObjectSpaces 
&lt;br&gt;
Wednesday, October 02, 2002 9:14 PM&lt;br&gt;
According to Guang-an Wu who works for the company, Microsoft have utilized the feedback
received via newsgroups and through customer meetings to improve ObjectSpaces further.
Currently, ObjectSpaces is being developed as a part of the next major .NET framework
release. 
&lt;br&gt;
Stay tuned for further announcements at the PDC next year.&lt;br&gt;
&lt;/p&gt;
&lt;p dir=ltr style="MARGIN-RIGHT: 0px"&gt;
Since the component is still under development, many of the details are still being
decided and are not yet available for public release. However, here are some of the
highlights, with the usual caveat that all details are subject to change without further
notice. And Additional details beyond these highlights are not available at this point
for release.&lt;br&gt;
&lt;/p&gt;
&lt;p dir=ltr style="MARGIN-RIGHT: 0px"&gt;
Unlike the PDC 2001 Technology Preview, classes don't need to be abstract. The goal
is to make ObjectSpaces available for all .NET objects. 
&lt;br&gt;
The foundation is a better optimized streaming model for fast retrieval of objects. 
&lt;br&gt;
Key features like simplicity of OPath queries for retrieving objects, choice of span
or delay loading are being enhanced and improved. 
&lt;br&gt;
More sophisticated support is planned for inheritance and advanced mapping between
classes and one or more tables. 
&lt;br&gt;
Further, tools support for application development lifecycle is in the works. 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p dir=ltr style="MARGIN-RIGHT: 0px"&gt;
虽然objectspaces只是个预览产品，但其特征非常丰富，我非常喜欢其基于map文件的特性，这是 ado.net的TableMappings集合的文件化，使你在改动数据库（如改变字段名时）不必改动代码。&lt;br&gt;
&lt;b&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;b&gt;缺点&lt;/b&gt;
&lt;br&gt;
1、对象查询速度&lt;br&gt;
我做了一下测试，查询一个8000条的包含7个属性的对象需要20秒&lt;br&gt;
2、绑定&lt;br&gt;
ObjectSet实现支持ICollection和支持IBindingList，因此支持绑定&lt;br&gt;
类自己定义，需要自己实现IEditableObject,IDataErrorInfo来完美的支持.net数据绑定&lt;br&gt;
&lt;b&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;b&gt;约定&lt;/b&gt;
&lt;br&gt;
在OjbectSpace中&lt;br&gt;
对象的UniqueId属性是必须的，当在进行OPaht查询时需要使用
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.hifar.com/blog/aggbug.ashx?id=7d96b162-e9f6-4f0c-bf6a-d275893d0d07" /&gt;</description>
      <category>文摘和收藏</category>
    </item>
    <item>
      <trackback:ping>http://www.hifar.com/blog/Trackback.aspx?guid=a0ca4e94-52f3-4b82-b3b6-7f1c67ad836e</trackback:ping>
      <pingback:server>http://www.hifar.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.hifar.com/blog/PermaLink,guid,a0ca4e94-52f3-4b82-b3b6-7f1c67ad836e.aspx</pingback:target>
      <dc:creator>Jimmy Gao</dc:creator>
      <title>在C#中调用VBScript、JavaScript等脚本的实现(文摘)</title>
      <guid isPermaLink="false">http://www.hifar.com/blog/PermaLink,guid,a0ca4e94-52f3-4b82-b3b6-7f1c67ad836e.aspx</guid>
      <link>http://www.hifar.com/blog/2004/11/25/%e5%9c%a8C%e4%b8%ad%e8%b0%83%e7%94%a8VBScriptJavaScript%e7%ad%89%e8%84%9a%e6%9c%ac%e7%9a%84%e5%ae%9e%e7%8e%b0%e6%96%87%e6%91%98.aspx</link>
      <pubDate>Thu, 25 Nov 2004 04:53:54 GMT</pubDate>
      <description>&lt;p&gt;
&lt;span id=ArticleContent1_ArticleContent1_lblContent&gt; 
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align=center&gt;
&lt;font size=3&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;在&lt;/span&gt;&lt;span lang=EN-US&gt;C#&lt;/span&gt;&lt;/b&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;中调用&lt;/span&gt;&lt;span lang=EN-US&gt;VBScript&lt;/span&gt;&lt;/b&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;、&lt;/span&gt;&lt;span lang=EN-US&gt;JavaScript&lt;/span&gt;&lt;/b&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;等脚本的实现&lt;/span&gt;&lt;span lang=EN-US&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: right" align=right&gt;
&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt"&gt;&lt;span style="mso-tab-count: 3"&gt;&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;&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;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;作者：秋枫&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;以前在做工作流&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt"&gt;(workflow)&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;项目的时候，里面有一项就是在用户制定流程定义时可以编写脚本来控制活动的跳转，而这些脚本定义后存在数据库中，当流程启动的时候，工作流引擎会控制活动执行顺序，串型的两个活动比较简单，但有的活动到下一个活动有条件判断，或者存在多个分支，简单的还好，只要在数据库表中加个字段就可以实现，复杂一点的就需要通过脚本实现了。当时经验不够，几天都没找到快速的解决办法，想自己写一个自定义脚本引擎没有把握，而且时间也不够，还是在网上找找看吧，花了一些时间，还是找到了一个自认为比较好的解决办法，写出来同大家分享。&lt;br&gt;
下面通过两部分来说明实现以及应用。&lt;br&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;一．使用MSScriptControl&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;到微软的网站上&lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&amp;amp;FamilyID=D05FCF37-4D9F-4769-9442-0BCEEF907033"&gt;下载Windows
Script Control&lt;/a&gt;，它是一个ActiveX(R) 控件，所以在.NET中使用我Interop了一下。下载安装完成后，新建一个C#的Windows应用程序项目，在解决方案资源管理器中选中引用节点，右键点击选择添加引用菜单，弹出添加引用对话框，单击浏览找到安装Windows
Script Control的目录，选取msscript.ocx文件确定。&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;那么在引用节点下会增加一个&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt"&gt;MSScriptControl&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;组件，下面是他&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt"&gt;Interop&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;后的所有对象。&lt;br&gt;
&lt;img alt=类 hspace=0 src="file:///C:/4gy/download/technic/CSDN技术中心%20在C#中调用VBScript、JavaScript等脚本的实现.files/CSDN_Dev_Image_2004-4-261347550.jpg" align=baseline border=0&gt;
&lt;br&gt;
&lt;/p&gt;
&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt"&gt;
&lt;o:p&gt;
&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"&gt; 
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman"&gt;ScriptControl 对支持 ActiveX(TM) Script 的宿主 Script 引擎提供简单接口。接下来我们对被转化成ScriptControlClass类的ScriptControl的属性和方法进行一些说明。&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman"&gt;属性&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman"&gt;AllowUI 属性：应用于 ScriptControl 本身或 Scirpt 引擎显示的用户界面元素，可读写。&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman"&gt;CodeObject 属性：返回对象，该对象用于调用指定模块的公用成员。只读。&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman"&gt;Error 属性：返回 Error 对象，其中包含所发生的最后一个错误的相关详细信息。只读。&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman"&gt;Language 属性：设置或返回正在使用的 Script 语言名称。可读写。&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman"&gt;Modules 属性：为 ScriptControl 对象返回模块集合。只读。&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman"&gt;Procedures 属性：返回在指定模块中定义的过程集合。只读。&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman"&gt;SitehWnd 属性：设置或返回窗口的 hWnd，通过执行 Script 代码，此窗口用于显示对话框和其他用户界面元素。可读写。&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman"&gt;State 属性：设置或返回 ScriptControl 对象的模式。可读写。&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman"&gt;Timeout 属性：设置或返回时间（毫秒），此时间后用户可选择中止 Script 代码的执行或允许代码继续执行。可读写。&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman"&gt;UseSafeSubset 属性：设置或返回 Boolean 值，指明宿主应用程序是否有保密性要求。如果宿主应用程序需要安全控制，则
UseSafeSubset 为 True，否则为 False。可读写。&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman"&gt;方法&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman"&gt;AddCode 方法：向模块添加指定代码。可多次调用 AddCode 方法。&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman"&gt;AddObject 方法：使主机对象模型对 Script 引擎可用。&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman"&gt;Eval 方法：计算表达式并返回结果。&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman"&gt;ExecuteStatement 方法：执行指定的语句。&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman"&gt;Reset 方法：放弃所有已经添加到 ScriptControl 中的 Script 代码和对象。&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman"&gt;Run 方法：运行指定过程。&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman"&gt;事件&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman"&gt;Error 事件：出现运行时错误时，发生此事件。&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman"&gt;Timeout 事件：当超出了 Timeout 属性指定的时间且用户在结果对话框中选定了 End 时，发生此事件。&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman"&gt;补充几点&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman"&gt;AllowUI 属性如果设置为false，则显示对话框之类的语句不起作用，如在 VBScript 中MsgBox
语句，JavaScript中的alert等，并且如果执行的脚本超出TimeOut设置的毫秒数，也不会跳出超出时间提醒的对话框，反之则相反；重新设置 Language
属性会清空AddCode加载的代码；对于TimeOut属性，发生超时时，ScriptControl 检查对象的 AllowUI 属性，确定是否允许显示用户界面元素。&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman"&gt;如果读者需要更详细的了解，可以查看MSDN文档。&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman"&gt;为了使控件更容易使用，我用一个ScriptEngine类包装了一下，下面是完整代码：&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;span lang=EN-US style="FONT-SIZE: 9pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman"&gt; 
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&lt;br&gt;
using System;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
using MSScriptControl;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
using System.Text;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
namespace ZZ
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
{
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// 脚本类型
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public enum ScriptLanguage
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// JScript脚本语言
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JScript,
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// VBscript脚本语言
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; VBscript,
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// JavaScript脚本语言
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JavaScript
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// 脚本运行错误代理
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public delegate void RunErrorHandler();
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// 脚本运行超时代理
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public delegate void RunTimeoutHandler();
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// ScriptEngine类
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class ScriptEngine
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private ScriptControl msc; 
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //定义脚本运行错误事件
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public event RunErrorHandler RunError;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //定义脚本运行超时事件
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public event RunTimeoutHandler RunTimeout;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ///构造函数
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public ScriptEngine():this(ScriptLanguage.VBscript)
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// 构造函数
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;param name="language"&amp;gt;脚本类型&amp;lt;/param&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public ScriptEngine(ScriptLanguage
language)
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; this.msc
= new ScriptControlClass();
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; this.msc.UseSafeSubset
= true;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; this.msc.Language
= language.ToString();
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; ((DScriptControlSource_Event)this.msc).Error
+= new DScriptControlSource_ErrorEventHandler(ScriptEngine_Error);
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; ((DScriptControlSource_Event)this.msc).Timeout
+= new DScriptControlSource_TimeoutEventHandler(ScriptEngine_Timeout);
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// 运行Eval方法
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;param name="expression"&amp;gt;表达式&amp;lt;/param&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;param name="codeBody"&amp;gt;函数体&amp;lt;/param&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;returns&amp;gt;返回值object&amp;lt;/returns&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public object Eval(string expression,string
codeBody)
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; msc.AddCode(codeBody);
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; return
msc.Eval(expression);
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// 运行Eval方法
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;param name="language"&amp;gt;脚本语言&amp;lt;/param&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;param name="expression"&amp;gt;表达式&amp;lt;/param&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;param name="codeBody"&amp;gt;函数体&amp;lt;/param&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;returns&amp;gt;返回值object&amp;lt;/returns&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public object Eval(ScriptLanguage
language,string expression,string codeBody)
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; if(this.Language
!= language)
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
this.Language = language;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; return
Eval(expression,codeBody);
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// 运行Run方法
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;param name="mainFunctionName"&amp;gt;入口函数名称&amp;lt;/param&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;param name="parameters"&amp;gt;参数&amp;lt;/param&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;param name="codeBody"&amp;gt;函数体&amp;lt;/param&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;returns&amp;gt;返回值object&amp;lt;/returns&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public object Run(string mainFunctionName,object[]
parameters,string codeBody)
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; this.msc.AddCode(codeBody);
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; return
msc.Run(mainFunctionName,ref parameters);
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// 运行Run方法
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;param name="language"&amp;gt;脚本语言&amp;lt;/param&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;param name="mainFunctionName"&amp;gt;入口函数名称&amp;lt;/param&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;param name="parameters"&amp;gt;参数&amp;lt;/param&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;param name="codeBody"&amp;gt;函数体&amp;lt;/param&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;returns&amp;gt;返回值object&amp;lt;/returns&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public object Run(ScriptLanguage
language,string mainFunctionName,object[] parameters,string codeBody)
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; if(this.Language
!= language)
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
this.Language = language;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; return
Run(mainFunctionName,parameters,codeBody);
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// 放弃所有已经添加到 ScriptControl 中的 Script
代码和对象
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void Reset()
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; this.msc.Reset();
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// 获取或设置脚本语言
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public ScriptLanguage Language
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; get{return
(ScriptLanguage)Enum.Parse(typeof(ScriptLanguage),this.msc.Language,false);}
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; set{this.msc.Language
= value.ToString();}
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// 获取或设置脚本执行时间，单位为毫秒
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int Timeout
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; get{return
this.msc.Timeout;}
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; set{this.msc.Timeout
= value;}
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// 设置是否显示用户界面元素
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public bool AllowUI
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; get{return
this.msc.AllowUI;}
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; set{this.msc.AllowUI
= value;}
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// 宿主应用程序是否有保密性要求
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public bool UseSafeSubset
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; get{return
this.msc.UseSafeSubset;}
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; set{this.msc.UseSafeSubset
= true;}
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// RunError事件激发
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void OnError()
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; if(RunError!=null)
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
RunError();
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// OnTimeout事件激发
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void OnTimeout()
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; if(RunTimeout!=null)
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
RunTimeout();
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void ScriptEngine_Error()
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; OnError();
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void ScriptEngine_Timeout()
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; OnTimeout();
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
}
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
上面的包装定义了一个ScriptLanguage枚举，这样操作起来更方便一点。另外脚本引擎包括了Error事件和Timeout事件，根据实际使用情况可进行注册。
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
二．脚本引擎演示
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 我建了个窗体程序，测试包括脚本语言的选择，是否开启AllowUI属性，超时时间的设置，以及脚本引擎调用方法的选择。测试程序代码比较长，下面列出了主要部分：
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
using System;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
using System.Drawing;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
using System.Collections;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
using System.ComponentModel;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
using System.Windows.Forms;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
using System.Data;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
namespace ZZ
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
{
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class Form1 : System.Windows.Forms.Form
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private ScriptEngine scriptEngine;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private System.Windows.Forms.CheckBox
checkBoxAllowUI;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private System.Windows.Forms.TextBox
textBoxResult;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private System.Windows.Forms.NumericUpDown
numericUpDownTimeout;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private System.Windows.Forms.TextBox
textBoxCodeBody;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private System.Windows.Forms.Button
buttonRun;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private System.Windows.Forms.Button
buttonCancel;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private System.Windows.Forms.ComboBox
comboBoxScript;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private System.Windows.Forms.TextBox
textBoxParams;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private System.Windows.Forms.RadioButton
radioButtonEval;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private System.Windows.Forms.RadioButton
radioButtonRun;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private System.Windows.Forms.TextBox
textBoxMethodName;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private System.ComponentModel.Container
components = null;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Form1()
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; InitializeComponent();
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; this.comboBoxScript.SelectedIndex
= 0;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; this.scriptEngine
= new ScriptEngine();
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; this.scriptEngine.UseSafeSubset
= true;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; this.scriptEngine.RunError
+= new RunErrorHandler(scriptEngine_RunError); 
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; this.scriptEngine.RunTimeout
+= new RunTimeoutHandler(scriptEngine_RunTimeout);
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected override void Dispose(
bool disposing )
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; if(
disposing )
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
if (components != null) 
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
components.Dispose();
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; base.Dispose(
disposing );
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #region Windows 窗体设计器生成的代码
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void InitializeComponent()
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; //省略
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #endregion
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [STAThread]
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; static void Main() 
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; Application.Run(new
Form1());
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //运行脚本
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void buttonRun_Click(object
sender, System.EventArgs e)
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; this.scriptEngine.Reset();
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; this.scriptEngine.Language
= (ScriptLanguage)Enum.Parse(typeof(ScriptLanguage),this.comboBoxScript.SelectedItem.ToString());
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; this.scriptEngine.Timeout
= (int)this.numericUpDownTimeout.Value;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; this.scriptEngine.AllowUI
= this.checkBoxAllowUI.Checked;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; if(this.radioButtonEval.Checked)//执行Eval方法
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; {
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
this.textBoxResult.Text = this.scriptEngine.Eval(this.textBoxMethodName.Text+"("+this.textBoxParams.Text+")",this.textBoxCodeBody.Text).ToString();
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; }
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; else//执行Run方法
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; {
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
string[] parameters = (string[])this.textBoxParams.Text.Split(',');
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
object [] paramArray = new object[parameters.Length];
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
for(int i = 0;i&amp;lt;parameters.Length;i++)
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
paramArray[i] = Int32.Parse(parameters[i]);
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
this.textBoxResult.Text = this.scriptEngine.Run(this.textBoxMethodName.Text,paramArray,this.textBoxCodeBody.Text).ToString();
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; }
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //退出程序
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void buttonCancel_Click(object
sender, System.EventArgs e)
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; this.Close();
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //错误函数
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void scriptEngine_RunError()
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; MessageBox.Show("RunError执行脚本错误!");
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void scriptEngine_RunTimeout()
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&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; MessageBox.Show("RunTimeout执行脚本超时，引发错误!");
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
}
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"&gt;
&lt;br&gt;
&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;下面是测试程序运行界面：&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;img alt=测试界面 hspace=0 src="file:///C:/4gy/download/technic/CSDN技术中心%20在C#中调用VBScript、JavaScript等脚本的实现.files/CSDN_Dev_Image_2004-4-261347552.jpg" align=baseline border=0&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;在文本框中写了一个&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt"&gt;&lt;font face="Times New Roman"&gt;JavaScript&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的函数。输入&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt"&gt;&lt;font face="Times New Roman"&gt;12&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;，输出&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt"&gt;&lt;font face="Times New Roman"&gt;12000012&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;。&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt -27pt; TEXT-INDENT: 27pt; mso-para-margin-left: -2.57gd"&gt;
&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;如果把超时时间调整为&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt"&gt;&lt;font face="Times New Roman"&gt;1&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;毫秒，那么执行该脚本就会跳出下面的超时提醒框，同时激发事件。&lt;/span&gt;&lt;span lang=EN-US style="FONT-SIZE: 9pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;img alt="" hspace=0 src="file:///C:/4gy/download/technic/CSDN技术中心%20在C#中调用VBScript、JavaScript等脚本的实现.files/CSDN_Dev_Image_2004-4-261347554.jpg" align=baseline border=0&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 20.95pt; mso-char-indent-count: 2.33"&gt;
总结，上面演示了JavaScript脚本，如果有兴趣读者可以写一些VBsript函数进行测试，脚本语言也只列出了三种，看了帮助，他还支持其他一些脚本，如果需要可以添加。另外，因为是调用Com，有些返回值是obejct类型的，需要进行转换。在CSDN的技术论坛C#板块下时常有朋友问这方面的问题，对于碰到这类问题的朋友，希望通过这篇文章能获得一些你需要的帮助，很高兴能和搞.net的朋友进行交流，我的邮件地址&lt;a href="mailto:zhzuocn@163.com"&gt;zhzuocn@163.com&lt;/a&gt;
&lt;/p&gt;
&lt;/span&gt;
&lt;/o:p&gt;
&lt;/span&gt;&gt;&lt;img width="0" height="0" src="http://www.hifar.com/blog/aggbug.ashx?id=a0ca4e94-52f3-4b82-b3b6-7f1c67ad836e" /&gt;</description>
      <category>文摘和收藏</category>
    </item>
    <item>
      <trackback:ping>http://www.hifar.com/blog/Trackback.aspx?guid=4399ace0-f66c-4351-9116-ae4a2daa45e7</trackback:ping>
      <pingback:server>http://www.hifar.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.hifar.com/blog/PermaLink,guid,4399ace0-f66c-4351-9116-ae4a2daa45e7.aspx</pingback:target>
      <dc:creator>Jimmy Gao</dc:creator>
      <title>每个开发人员现在应该下载的十种必备工具（.NET）</title>
      <guid isPermaLink="false">http://www.hifar.com/blog/PermaLink,guid,4399ace0-f66c-4351-9116-ae4a2daa45e7.aspx</guid>
      <link>http://www.hifar.com/blog/2004/11/25/%e6%af%8f%e4%b8%aa%e5%bc%80%e5%8f%91%e4%ba%ba%e5%91%98%e7%8e%b0%e5%9c%a8%e5%ba%94%e8%af%a5%e4%b8%8b%e8%bd%bd%e7%9a%84%e5%8d%81%e7%a7%8d%e5%bf%85%e5%a4%87%e5%b7%a5%e5%85%b7NET.aspx</link>
      <pubDate>Thu, 25 Nov 2004 04:30:29 GMT</pubDate>
      <description>&lt;h1&gt;每个开发人员现在应该下载的十种必备工具
&lt;/h1&gt;
&lt;h2 class=subtitle&gt;
&lt;/h2&gt;
&lt;div class=date&gt;发布日期： 7/20/2004&lt;span class=datePipe&gt; | &lt;/span&gt;更新日期： 7/20/2004
&lt;/div&gt;
&lt;div class=overview&gt;
&lt;p&gt;
本文自发布以来已经增加了新信息。
&lt;/p&gt;
&lt;p&gt;
请参阅下面的编辑更新。
&lt;/p&gt;
&lt;p&gt;
本文讨论：
&lt;/p&gt;
&lt;table cellspacing=0 cellpadding=0 border=0&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=listBullet valign=top&gt;
&amp;#8226;&lt;/td&gt;
&lt;td class=listItem&gt;
&lt;p&gt;
用于编写单元测试的 NUnit
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=listBullet valign=top&gt;
&amp;#8226;&lt;/td&gt;
&lt;td class=listItem&gt;
&lt;p&gt;
用于创建代码文档资料的 NDoc
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=listBullet valign=top&gt;
&amp;#8226;&lt;/td&gt;
&lt;td class=listItem&gt;
&lt;p&gt;
用于生成解决方案的 NAnt
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=listBullet valign=top&gt;
&amp;#8226;&lt;/td&gt;
&lt;td class=listItem&gt;
&lt;p&gt;
用于生成代码的 CodeSmith
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=listBullet valign=top&gt;
&amp;#8226;&lt;/td&gt;
&lt;td class=listItem&gt;
&lt;p&gt;
用于监视代码的 FxCop
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=listBullet valign=top&gt;
&amp;#8226;&lt;/td&gt;
&lt;td class=listItem&gt;
&lt;p&gt;
用于编译少量代码的 Snippet Compiler
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=listBullet valign=top&gt;
&amp;#8226;&lt;/td&gt;
&lt;td class=listItem&gt;
&lt;p&gt;
两种不同的转换器工具：ASP.NET 版本转换器和 Visual Studio .NET 项目转换器
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=listBullet valign=top&gt;
&amp;#8226;&lt;/td&gt;
&lt;td class=listItem&gt;
&lt;p&gt;
用于生成正则表达式的 Regulator
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=listBullet valign=top&gt;
&amp;#8226;&lt;/td&gt;
&lt;td class=listItem&gt;
&lt;p&gt;
用于分析程序集的 .NET Reflector
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
&lt;b&gt;本文使用了下列技术：&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
.NET、C# 或 Visual Basic .NET、Visual Studio .NET
&lt;/p&gt;
&lt;p&gt;
除非您使用能够获得的最佳工具，否则您无法期望生成一流的应用程序。除了像 Visual Studio&amp;#174;.NET 这样的著名工具以外，还可以从 .NET 社区获得许多小型的、不太为人所知的工具。在本文中，我将向您介绍一些目前可以获得的、面向
.NET 开发的最佳免费工具。我将引导您完成一个有关如何使用其中每种工具的快速教程 &amp;#8212; 一些工具在许多时候可以使您节约一分钟，而另一些工具则可能彻底改变您编写代码的方式。因为我要在本篇文章中介绍如此之多的不同工具，所以我无法详尽讨论其中每种工具，但您应该了解到有关每种工具的足够信息，以便判断哪些工具对您的项目有用。
&lt;/p&gt;
&lt;/div&gt;
&lt;center&gt;&lt;img title="" height=6 alt=* src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/3squares.gif" width=30 border=0&gt;
&lt;/center&gt;
&lt;div style="HEIGHT: 18px"&gt;
&lt;/div&gt;
&lt;h5 style="PADDING-TOP: 2px"&gt;本页内容
&lt;/h5&gt;
&lt;p&gt;
&lt;table style="MARGIN-TOP: 7px; MARGIN-BOTTOM: 12px" cellspacing=0 cellpadding=0 border=0&gt;
&lt;tbody&gt;
&lt;tr valign=top&gt;
&lt;td&gt;
&lt;a href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#EQAA"&gt;&lt;img height=9 alt="Snippet Compiler" hspace=4 src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width=7 vspace=2 border=0&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td class=onThisPage&gt;
&lt;a href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#EQAA"&gt;Snippet
Compiler&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign=top&gt;
&lt;td&gt;
&lt;a href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#EPAA"&gt;&lt;img height=9 alt=Regulator hspace=4 src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width=7 vspace=2 border=0&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td class=onThisPage&gt;
&lt;a href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#EPAA"&gt;Regulator&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign=top&gt;
&lt;td&gt;
&lt;a href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#EOAA"&gt;&lt;img height=9 alt=CodeSmith hspace=4 src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width=7 vspace=2 border=0&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td class=onThisPage&gt;
&lt;a href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#EOAA"&gt;CodeSmith&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign=top&gt;
&lt;td&gt;
&lt;a href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#ENAA"&gt;&lt;img height=9 alt=生成自定义模板 hspace=4 src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width=7 vspace=2 border=0&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td class=onThisPage&gt;
&lt;a href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#ENAA"&gt;生成自定义模板&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign=top&gt;
&lt;td&gt;
&lt;a href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#EMAA"&gt;&lt;img height=9 alt=NUnit hspace=4 src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width=7 vspace=2 border=0&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td class=onThisPage&gt;
&lt;a href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#EMAA"&gt;NUnit&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign=top&gt;
&lt;td&gt;
&lt;a href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#ELAA"&gt;&lt;img height=9 alt="编写 NUnit 测试" hspace=4 src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width=7 vspace=2 border=0&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td class=onThisPage&gt;
&lt;a href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#ELAA"&gt;编写
NUnit 测试&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign=top&gt;
&lt;td&gt;
&lt;a href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#EKAA"&gt;&lt;img height=9 alt=FxCop hspace=4 src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width=7 vspace=2 border=0&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td class=onThisPage&gt;
&lt;a href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#EKAA"&gt;FxCop&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign=top&gt;
&lt;td&gt;
&lt;a href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#EJAA"&gt;&lt;img height=9 alt="Lutz Roeder 的 .NET Reflector" hspace=4 src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width=7 vspace=2 border=0&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td class=onThisPage&gt;
&lt;a href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#EJAA"&gt;Lutz
Roeder 的 .NET Reflector&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign=top&gt;
&lt;td&gt;
&lt;a href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#EIAA"&gt;&lt;img height=9 alt=NDoc hspace=4 src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width=7 vspace=2 border=0&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td class=onThisPage&gt;
&lt;a href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#EIAA"&gt;NDoc&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign=top&gt;
&lt;td&gt;
&lt;a href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#EHAA"&gt;&lt;img height=9 alt=NAnt hspace=4 src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width=7 vspace=2 border=0&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td class=onThisPage&gt;
&lt;a href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#EHAA"&gt;NAnt&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign=top&gt;
&lt;td&gt;
&lt;a href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#EGAA"&gt;&lt;img height=9 alt="实际运行的 NAnt" hspace=4 src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width=7 vspace=2 border=0&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td class=onThisPage&gt;
&lt;a href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#EGAA"&gt;实际运行的
NAnt&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign=top&gt;
&lt;td&gt;
&lt;a href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#EFAA"&gt;&lt;img height=9 alt=转换工具 hspace=4 src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width=7 vspace=2 border=0&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td class=onThisPage&gt;
&lt;a href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#EFAA"&gt;转换工具&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign=top&gt;
&lt;td&gt;
&lt;a href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#EEAA"&gt;&lt;img height=9 alt=小结 hspace=4 src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width=7 vspace=2 border=0&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td class=onThisPage&gt;
&lt;a href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#EEAA"&gt;小结&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;a name=EQAA&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;h2&gt;Snippet Compiler
&lt;/h2&gt;
&lt;p&gt;
Snippet Compiler 是一个基于 Windows&amp;#174; 的小型应用程序，您可以通过它来编写、编译和运行代码。如果您具有较小的代码段，并且您不希望为其创建完整的
Visual Studio .NET 项目（以及伴随该项目的所有文件），则该工具将很有用。
&lt;/p&gt;
&lt;p&gt;
例如，假设我希望向您说明如何从 Microsoft?.NET 框架中启动另一个应用程序。在 Snippet Compiler 中，我将通过新建一个能够创建小型控制台应用程序的文件开始。可以在该控制台应用程序的
Main 方法内部创建代码片段，而这正是我要在这里做的事情。下面的代码片段演示了如何从 .NET 框架中创建记事本实例： 
&lt;/p&gt;
&lt;pre class=codeSample&gt;System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo.FileName= "notepad.exe";
proc.Start();
proc.WaitForExit();
&lt;/pre&gt;
&lt;p&gt;
当然该代码片段本身无法编译，而这正是 Snippet Compiler 的用武之地。图 1 显示了 Snippet Compiler 中的这一代码示例。
&lt;/p&gt;
&lt;div style="WIDTH: 400px"&gt;&lt;img height=320 alt="" src="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/art/TMHTEDSDN01.gif" width=400 border=0&gt;
&lt;br&gt;
&lt;p class=figureCaption&gt;
&lt;b&gt;图&lt;/b&gt;&lt;b&gt; 1&lt;/b&gt; Snippet Compiler
&lt;/p&gt;
&lt;div class=figureRule&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
要测试该代码片段，只须按 play（运行）按钮（绿色三角形），它就会在调试模式下运行。该代码片段将生成一个弹出式控制台应用程序，并且将显示记事本。当您关闭记事本时，该控制台应用程序也将关闭。
&lt;/p&gt;
&lt;p&gt;
就我个人而言，我是在尝试为某位向我求助的人士创建一个小型示例时，才发现 Snippet Compiler 是如此宝贵的 &amp;#8212; 如果不使用该工具，则我通常必须新建一个项目，确保每个部分都能编译通过，然后将代码片段发送给求助者，并删除该项目。Snippet
Compiler 使得这一过程变得更加容易、更加愉快。
&lt;/p&gt;
&lt;p&gt;
Snippet Compiler 由 Jeff Key 编写，并且可以从 &lt;a href="http://www.sliver.com/dotnet/SnippetCompiler" target=_blank&gt;http://www.sliver.com/dotnet/SnippetCompiler&lt;/a&gt; 下载。
&lt;/p&gt;
&lt;div style="MARGIN-TOP: 3px; MARGIN-BOTTOM: 10px"&gt;&lt;a href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#top"&gt;&lt;img height=9 alt=返回页首 src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width=7 border=0&gt;&lt;/a&gt;&lt;a class=topOfPage href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#top"&gt;返回页首&lt;/a&gt;
&lt;/div&gt;
&lt;a name=EPAA&gt;&lt;/a&gt; 
&lt;h2&gt;Regulator
&lt;/h2&gt;
&lt;p&gt;
Regulator 是最后一个添加到我的头等工具清单中的。它是一种很有特色的工具，能够使生成和测试正则表达式变得很容易。人们对正则表达式重新产生了兴趣，因为它们在
.NET 框架中受到很好的支持。正则表达式用来基于字符、频率和字符顺序定义字符串中的模式。它们最常见的用途是作为验证用户输入有效性的手段或者作为在较大字符串中查找字符串的方法
&amp;#8212; 例如，在 Web 页上查找 URL 或电子邮件地址。
&lt;/p&gt;
&lt;p&gt;
Regulator 使您可以输入一个正则表达式以及一些针对其运行该表达式的输入内容。这样，在应用程序中实现该正则表达式之前，您可以了解它将产生什么效果以及它将返回哪些种类的匹配项。&lt;a href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/art/TMHTEDSDN02.htm" target=_blank&gt;图
2&lt;/a&gt; 显示了带有简单正则表达式的 Regulator。
&lt;/p&gt;
&lt;p&gt;
文档中包含该正则表达式 &amp;#8212; 在该示例中，它是 [0-9]*，应该匹配一行中任意数量的数字。右下侧的框中含有针对该正则表达式的输入，而左下侧的框显示了该正则表达式在输入内容中找到的匹配项。在这样的单独应用程序中编写和测试正则表达式，要比尝试在您的应用程序中处理它们容易得多。
&lt;/p&gt;
&lt;p&gt;
Regulator 中的最佳功能之一是能够在 regexlib.com 搜索联机正则表达式库。例如，如果您在搜索框中输入字符串&amp;#8220;phone&amp;#8221;，您将找到
20 种以上能够匹配各种电话号码的不同的正则表达式，包括用于英国、澳大利亚的表达式以及其他许多电话号码。Regulator 由 Roy Osherove 编写，并且可以在 &lt;a href="http://royo.is-a-geek.com/regulator" target=_blank&gt;http://royo.is-a-geek.com/regulator&lt;/a&gt; 下载。
&lt;/p&gt;
&lt;div style="MARGIN-TOP: 3px; MARGIN-BOTTOM: 10px"&gt;&lt;a href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#top"&gt;&lt;img height=9 alt=返回页首 src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width=7 border=0&gt;&lt;/a&gt;&lt;a class=topOfPage href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#top"&gt;返回页首&lt;/a&gt;
&lt;/div&gt;
&lt;a name=EOAA&gt;&lt;/a&gt; 
&lt;h2&gt;CodeSmith
&lt;/h2&gt;
&lt;p&gt;
CodeSmith 是一种基于模板的代码生成工具，它使用类似于 ASP.NET 的语法来生成任意类型的代码或文本。与其他许多代码生成工具不同，CodeSmith 不要求您订阅特定的应用程序设计或体系结构。使用
CodeSmith，可以生成包括简单的强类型集合和完整应用程序在内的任何东西。
&lt;/p&gt;
&lt;p&gt;
当您生成应用程序时，您经常需要重复完成某些特定的任务，例如编写数据访问代码或者生成自定义集合。CodeSmith 在这些时候特别有用，因为您可以编写模板自动完成这些任务，从而不仅提高您的工作效率，而且能够自动完成那些最为乏味的任务。CodeSmith
附带了许多模板，包括对应于所有 .NET 集合类型的模板以及用于生成存储过程的模板，但该工具的真正威力在于能够创建自定义模板。为了使您能够入门，我将快速介绍一下如何生成自定义模板。
&lt;/p&gt;
&lt;div style="MARGIN-TOP: 3px; MARGIN-BOTTOM: 10px"&gt;&lt;a href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#top"&gt;&lt;img height=9 alt=返回页首 src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width=7 border=0&gt;&lt;/a&gt;&lt;a class=topOfPage href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#top"&gt;返回页首&lt;/a&gt;
&lt;/div&gt;
&lt;a name=ENAA&gt;&lt;/a&gt; 
&lt;h2&gt;生成自定义模板
&lt;/h2&gt;
&lt;p&gt;
CodeSmith 模板只是一些可以在任意文本编辑器中创建的文本文件。它们的唯一要求是用 .cst 文件扩展名来保存它们。我将要生成的示例模板将接受一个字符串，然后基于该字符串生成一个类。创建模板的第一步是添加模板头，它可声明模板的语言、目标语言以及简要模板说明： 
&lt;/p&gt;
&lt;pre class=codeSample&gt;&amp;lt;%@ CodeTemplate Language="C#"    
   TargetLanguage="C#" 
   Description="Car Template" %&amp;gt;
&lt;/pre&gt;
&lt;p&gt;
模板的下一部分是属性声明，在这里可声明将在模板每次运行时指定的属性。就该模板而言，我要使用的唯一属性只是一个字符串，因此属性声明如下所示： 
&lt;/p&gt;
&lt;pre class=codeSample&gt;&amp;lt;%@ Property Name="ClassName" Type="String" Category="Context" 
    Description="Class Name" %&amp;gt;
&lt;/pre&gt;
&lt;p&gt;
该属性声明将使 ClassName 属性出现在 CodeSmith 属性窗口中，以便可以在模板运行时指定它。下一步是实际生成模板主体，它非常类似于用 ASP.NET
进行编码。您可以在&lt;a href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/art/TMHTEDSDN03.htm" target=_blank&gt;图
3&lt;/a&gt; 中查看该模板的主体。[&lt;b&gt;编辑更新 &amp;#8212; &lt;/b&gt;&lt;b&gt;6/16/2004&lt;/b&gt;：图 3 中的代码已被更新，以便对多线程操作保持安全。]
&lt;/p&gt;
&lt;p&gt;
正如您所见，该模板接受字符串输入并使用该类名生成单独的类。在模板主体中，使用与 ASP.NET 中相同的起始和结束标记。在该模板中，我只是插入属性值，但您还可以在这些标记内部使用任意类型的
.NET 代码。在该模板完成之后，您就可以通过双击它或者从 CodeSmith 应用程序中打开它将其加载到 CodeSmith 中。&lt;a href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/art/TMHTEDSDN04.htm" target=_blank&gt;图
4&lt;/a&gt; 显示了已经加载到 CodeSmith 中的该模板。
&lt;/p&gt;
&lt;p&gt;
您可以看到左侧的属性正是我在该模板中声明的属性。如果我输入&amp;#8220;SingletonClass&amp;#8221;作为类名，并单击 Generate 按钮，则将生成&lt;a href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/art/TMHTEDSDN03.htm" target=_blank&gt;图
3&lt;/a&gt; 的底部显示的类。
&lt;/p&gt;
&lt;p&gt;
CodeSmith 使用起来相当容易，如果能够正确应用，则可以产生一些令人难以置信的结果。面向代码生成的应用程序中最常见的部分之一是数据访问层。CodeSmith
包括一个名为 SchemaExplorer 的特殊的程序集，可用来从表、存储过程或几乎任何其他 SQL Server? 对象生成模板。
&lt;/p&gt;
&lt;p&gt;
CodeSmith 由 Eric J. Smith 编写，并且可以在 &lt;a href="http://www.ericjsmith.net/codesmith" target=_blank&gt;http://www.ericjsmith.net/codesmith&lt;/a&gt; 下载。
&lt;/p&gt;
&lt;div style="MARGIN-TOP: 3px; MARGIN-BOTTOM: 10px"&gt;&lt;a href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#top"&gt;&lt;img height=9 alt=返回页首 src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width=7 border=0&gt;&lt;/a&gt;&lt;a class=topOfPage href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#top"&gt;返回页首&lt;/a&gt;
&lt;/div&gt;
&lt;a name=EMAA&gt;&lt;/a&gt; 
&lt;h2&gt;NUnit
&lt;/h2&gt;
&lt;p&gt;
NUnit 是为 .NET 框架生成的开放源代码单元测试框架。NUnit 使您可以用您喜欢的语言编写测试，从而测试应用程序的特定功能。当您首次编写代码时，单元测试是一种测试代码功能的很好方法，它还提供了一种对应用程序进行回归测试的方法。NUnit
应用程序提供了一个用于编写单元测试的框架，以及一个运行这些测试和查看结果的图形界面。
&lt;/p&gt;
&lt;div style="MARGIN-TOP: 3px; MARGIN-BOTTOM: 10px"&gt;&lt;a href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#top"&gt;&lt;img height=9 alt=返回页首 src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width=7 border=0&gt;&lt;/a&gt;&lt;a class=topOfPage href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#top"&gt;返回页首&lt;/a&gt;
&lt;/div&gt;
&lt;a name=ELAA&gt;&lt;/a&gt; 
&lt;h2&gt;编写 NUnit 测试
&lt;/h2&gt;
&lt;p&gt;
作为示例，我将测试 .NET 框架中 Hashtable 类的功能，以确定是否可以添加两个对象并且随后检索这些对象。我的第一步是添加对 NUnit.Framework
程序集的引用，该程序集将赋予我对 NUnit 框架的属性和方法的访问权。接下来，我将创建一个类并用 TestFixture 属性标记它。该属性使 NUnit 可以知道该类包含
NUnit 测试： 
&lt;/p&gt;
&lt;pre class=codeSample&gt;using System;
using System.Collections;
using NUnit.Framework;

namespace NUnitExample
{
    [TestFixture]
    public class HashtableTest {
        public HashtableTest() {
            
        }
    }
}
&lt;/pre&gt;
&lt;p&gt;
下一步，我将创建一个方法并用 [Test] 属性标记它，以便 NUnit 知道该方法是一个测试。然后，我将建立一个 Hashtable 并向其添加两个值，再使用 Assert.AreEqual
方法查看我是否可以检索到与我添加到 Hashtable 的值相同的值，如下面的代码所示： 
&lt;/p&gt;
&lt;pre class=codeSample&gt;[Test]
public void HashtableAddTest()
{
    Hashtable ht = new Hashtable();
            
    ht.Add("Key1", "Value1");
    ht.Add("Key2", "Value2");

    Assert.AreEqual("Value1", ht["Key1"], "Wrong object returned!");
    Assert.AreEqual("Value2", ht["Key2"], "Wrong object returned!");
}
&lt;/pre&gt;
&lt;p&gt;
这将确认我可以首先向 Hashtable 中添加值并随后检索相应的值 &amp;#8212; 这是一个很简单的测试，但能够表现 NUnit 的功能。存在许多测试类型以及各种
Assert 方法，可使用它们来测试代码的每个部分。
&lt;/p&gt;
&lt;p&gt;
要运行该测试，我需要生成项目，在 NUnit 应用程序中打开生成的程序集，然后单击 Run 按钮。图 5 显示了结果。当我看到那个大的绿色条纹时，我有一种兴奋和头晕的感觉，因为它让我知道测试已经通过了。这个简单的示例表明
NUnit 和单元测试是多么方便和强大。由于能够编写可以保存的单元测试，并且每当您更改代码时都可以重新运行该单元测试，您不仅可以更容易地检测到代码中的缺陷，而且最终能够交付更好的应用程序。
&lt;/p&gt;
&lt;div style="WIDTH: 400px"&gt;&lt;img height=233 alt="" src="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/art/TMHTEDSDN05.gif" width=400 border=0&gt;
&lt;br&gt;
&lt;p class=figureCaption&gt;
&lt;b&gt;图&lt;/b&gt;&lt;b&gt; 5&lt;/b&gt; NUnit
&lt;/p&gt;
&lt;div class=figureRule&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
NUnit 是一个开放源代码项目，并且可以从 &lt;a href="http://www.nunit.org/" target=_blank&gt;http://www.nunit.org&lt;/a&gt; 下载。还有一个优秀的
NUnit Visual Studio .NET 外接程序，它使您可以直接从 Visual Studio 中运行单元测试。您可以在 &lt;a href="http://sourceforge.net/projects/nunitaddin" target=_blank&gt;http://sourceforge.net/projects/nunitaddin&lt;/a&gt; 找到它。有关
NUnit 及其在测试驱动开发中的地位的详细信息，请参阅文章&amp;#8220;&lt;a href="http://msdn.microsoft.com/msdnmag/issues/04/04/ExtremeProgramming/" target=_blank&gt;Test-Driven
C#: Improve the Design and Flexibility of Your Project with Extreme Programming Techniques&lt;/a&gt;&amp;#8221;（&lt;i&gt;MSDN&lt;/i&gt; &amp;#174;&lt;i&gt;Magazine&lt;/i&gt; 2004
年 4 月刊）。
&lt;/p&gt;
&lt;div style="MARGIN-TOP: 3px; MARGIN-BOTTOM: 10px"&gt;&lt;a href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#top"&gt;&lt;img height=9 alt=返回页首 src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width=7 border=0&gt;&lt;/a&gt;&lt;a class=topOfPage href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#top"&gt;返回页首&lt;/a&gt;
&lt;/div&gt;
&lt;a name=EKAA&gt;&lt;/a&gt; 
&lt;h2&gt;FxCop
&lt;/h2&gt;
&lt;p&gt;
.NET 框架非常强大，这意味着存在创建优秀应用程序的极大可能，但是也同样存在创建劣质程序的可能。FxCop 是有助于创建更好的应用程序的工具之一，它所采用的方法是：使您能够分析程序集，并使用一些不同的规则来检查它是否符合这些规则。FxCop
随附了由 Microsoft 创建的固定数量的规则，但您也可以创建并包括您自己的规则。例如，如果您决定所有的类都应该具有一个不带任何参数的默认构造函数，则可以编写一条规则，以确保程序集的每个类上都具有一个构造函数。这样，无论是谁编写该代码，您都将获得一定程度的一致性。如果您需要有关创建自定义规则的详细信息，请参阅
John Robbins 的有关该主题的 &lt;a href="http://msdn.microsoft.com/msdnmag/issues/04/06/bugslayer/" target=_blank&gt;Bugslayer&lt;/a&gt; 专栏文章（&lt;i&gt;MSDN&lt;/i&gt; &amp;#174;&lt;i&gt; Magazine&lt;/i&gt; 2004
年 6 月刊）。
&lt;/p&gt;
&lt;p&gt;
那么，让我们观察一下实际运行的 FxCop，并且看一下它在我一直在处理的 NUnitExample 程序集中找到哪些错误。当您打开 FxCop 时，您首先需要创建一个
FxCop 项目，然后向其添加您要测试的程序集。在将该程序集添加到项目以后，就可以按 Analyze，FxCop 将分析该程序集。&lt;a href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/art/TMHTEDSDN06.htm" target=_blank&gt;图
6&lt;/a&gt; 中显示了在该程序集中找到的错误和警告。
&lt;/p&gt;
&lt;p&gt;
FxCop 在我的程序集中找到了几个问题。您可以双击某个错误以查看详细信息，包括规则说明以及在哪里可以找到更多信息。（您可以做的一件有趣的事情是在框架程序集上运行
FxCop 并查看发生了什么事情。）
&lt;/p&gt;
&lt;p&gt;
FxCop 可以帮助您创建更好的、更一致的代码，但它无法补偿低劣的应用程序设计或非常简单拙劣的编程。FxCop 也不能替代对等代码检查，但是因为它可以在进行代码检查之前捕获大量错误，所以您可以花费更多时间来解决严重的问题，而不必担心命名约定。FxCop
由 Microsoft 开发，并且可以从 &lt;a href="http://www.gotdotnet.com/team/fxcop" target=_blank&gt;http://www.gotdotnet.com/team/fxcop&lt;/a&gt; 下载。
&lt;/p&gt;
&lt;div style="MARGIN-TOP: 3px; MARGIN-BOTTOM: 10px"&gt;&lt;a href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#top"&gt;&lt;img height=9 alt=返回页首 src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width=7 border=0&gt;&lt;/a&gt;&lt;a class=topOfPage href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#top"&gt;返回页首&lt;/a&gt;
&lt;/div&gt;
&lt;a name=EJAA&gt;&lt;/a&gt; 
&lt;h2&gt;Lutz Roeder 的 .NET Reflector
&lt;/h2&gt;
&lt;p&gt;
下一个必不可少的工具称为 .NET Reflector，它是一个类浏览器和反编译器，可以分析程序集并向您展示它的所有秘密。.NET 框架向全世界引入了可用来分析任何基于
.NET 的代码（无论它是单个类还是完整的程序集）的反射概念。反射还可以用来检索有关特定程序集中包含的各种类、方法和属性的信息。使用 .NET Reflector，您可以浏览程序集的类和方法，可以分析由这些类和方法生成的
Microsoft 中间语言 (MSIL)，并且可以反编译这些类和方法并查看 C# 或 Visual Basic &amp;#174;.NET 中的等价类和方法。
&lt;/p&gt;
&lt;p&gt;
为了演示 .NET Reflector 的工作方式，我将加载和分析前面已经显示的 NUnitExample 程序集。图 7 显示了 .NET Reflector 中加载的该程序集。
&lt;/p&gt;
&lt;div style="WIDTH: 250px"&gt;&lt;img height=432 alt="" src="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/art/TMHTEDSDN07.gif" width=250 border=0&gt;
&lt;br&gt;
&lt;p class=figureCaption&gt;
&lt;b&gt;图&lt;/b&gt;&lt;b&gt; 7&lt;/b&gt; NUnitExample 程序集
&lt;/p&gt;
&lt;div class=figureRule&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
在 .NET Reflector 内部，有各种可用来进一步分析该程序集的工具。要查看构成某个方法的 MSIL，请单击该方法并从菜单中选择 Disassembler。
&lt;/p&gt;
&lt;p&gt;
除了能够查看 MSIL 以外，您还可以通过选择 Tools 菜单下的 Decompiler 来查看该方法的 C# 形式。通过在 Languages 菜单下更改您的选择，您还可以查看该方法被反编译到
Visual Basic .NET 或 Delphi 以后的形式。以下为 .NET Reflector 生成的代码： 
&lt;/p&gt;
&lt;pre class=codeSample&gt;public void HashtableAddTest()
{ 
    Hashtable hashtable1;
    hashtable1 = new Hashtable();
    hashtable1.Add("Key1", "Value1");
    hashtable1.Add("Key2", "Value2");
    Assert.AreEqual("Value1", hashtable1["Key1"], 
       "Wrong object returned!");
    Assert.AreEqual("Value2", hashtable1["Key2"],
       "Wrong object returned!");
}
&lt;/pre&gt;
&lt;p&gt;
前面的代码看起来非常像我为该方法实际编写的代码。以下为该程序集中的实际代码： 
&lt;/p&gt;
&lt;pre class=codeSample&gt;public void HashtableAddTest()
{
    Hashtable ht = new Hashtable();
            
    ht.Add("Key1", "Value1");
    ht.Add("Key2", "Value2");

    Assert.AreEqual("Value1", ht["Key1"],
        "Wrong object returned!");
    Assert.AreEqual("Value2", ht["Key2"],
        "Wrong object returned!");
}
&lt;/pre&gt;
&lt;p&gt;
尽管上述代码中存在一些小的差异，但它们在功能上是完全相同的。
&lt;/p&gt;
&lt;p&gt;
虽然该示例是一种显示实际代码与反编译代码之间对比的好方法，但在我看来，它并不代表 .NET Reflector 所具有的最佳用途 &amp;#8212; 分析 .NET 框架程序集和方法。.NET
框架提供了许多执行类似操作的不同方法。例如，如果您需要从 XML 中读取一组数据，则存在多种使用 XmlDocument、XPathNavigator 或 XmlReader
完成该工作的不同方法。通过使用 .NET Reflector，您可以查看 Microsoft 在编写数据集的 ReadXml 方法时使用了什么，或者查看他们在从配置文件读取数据时做了哪些工作。.NET
Reflector 还是一个了解以下最佳实施策略的优秀方法：创建诸如 HttpHandlers 或配置处理程序之类的对象，因为您可以了解到 Microsoft 工作组实际上是如何在框架中生成这些对象的。
&lt;/p&gt;
&lt;p&gt;
.NET Reflector 由 Lutz Roeder 编写，并且可以从 &lt;a href="http://www.aisto.com/roeder/dotnet" target=_blank&gt;http://www.aisto.com/roeder/dotnet&lt;/a&gt; 下载。
&lt;/p&gt;
&lt;div style="MARGIN-TOP: 3px; MARGIN-BOTTOM: 10px"&gt;&lt;a href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#top"&gt;&lt;img height=9 alt=返回页首 src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width=7 border=0&gt;&lt;/a&gt;&lt;a class=topOfPage href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#top"&gt;返回页首&lt;/a&gt;
&lt;/div&gt;
&lt;a name=EIAA&gt;&lt;/a&gt; 
&lt;h2&gt;NDoc
&lt;/h2&gt;
&lt;p&gt;
编写代码文档资料几乎总是一项令人畏惧的任务。我所说的不是早期设计文档，甚至也不是更为详细的设计文档；我说的是记录类上的各个方法和属性。NDoc 工具能够使用反射来分析程序集，并使用从
C# XML 注释生成的 XML 自动为代码生成文档资料。XML 注释仅适用于 C#，但有一个名为 VBCommenter 的 Visual Studio .NET
Power Toy，它能够为 Visual Basic .NET 完成类似的工作。此外，下一版本的 Visual Studio 将为更多语言支持 XML 注释。
&lt;/p&gt;
&lt;p&gt;
使用 NDoc 时，您仍然在编写代码的技术文档，但您是在编写代码的过程中完成了文档编写工作（在 XML 注释中），而这更容易忍受。使用 NDoc 时，第一步是为您的程序集打开
XML 注释生成功能。右键单击该项目并选择 Properties | Configuration Properties | Build，然后在 XML Documentation
File 选项中输入用于保存 XML 文件的路径。当该项目生成时，将创建一个 XML 文件，其中包含所有 XML 注释。下面是 NUnit 示例中的一个用 XML
编写了文档的方法： 
&lt;/p&gt;
&lt;pre class=codeSample&gt;/// &amp;lt;summary&amp;gt;
/// This test adds a number of values to the Hashtable collection 
/// and then retrieves those values and checks if they match.
/// &amp;lt;/summary&amp;gt;
[Test]
public void HashtableAddTest()
{
    //Method Body Here
}
&lt;/pre&gt;
&lt;p&gt;
有关该方法的 XML 文档资料将被提取并保存在 XML 文件中，如下所示： 
&lt;/p&gt;
&lt;pre class=codeSample&gt;&amp;lt;member name="M:NUnitExample.HashtableTest.HashtableAddTest"&amp;gt;
  &amp;lt;summary&amp;gt;This test adds a number of values to the Hashtable collection
    and then retrieves those values and checks if they match.&amp;lt;/summary&amp;gt; 
&amp;lt;/member&amp;gt;
&lt;/pre&gt;
&lt;p&gt;
NDoc 使用反射来考察您的程序集，然后读取该文档中的 XML，并且将它们进行匹配。NDoc 使用该数据来创建任意数量的不同文档格式，包括 HTML 帮助文件 (CHM)。在生成
XML 文件以后，下一步是将程序集和 XML 文件加载到 NDoc 中，以便可以对它们进行处理。通过打开 NDoc 并单击 Add 按钮，可以容易地完成该工作。
&lt;/p&gt;
&lt;p&gt;
在将程序集和 XML 文件加载到 NDoc 中并且使用可用的属性范围自定义输出以后，单击 Generate 按钮将启动生成文档资料的过程。使用默认的属性，NDoc
可以生成一些非常吸引人并且实用的 .html 和 .chm 文件，从而以快速有效的方式自动完成原来非常乏味的任务。
&lt;/p&gt;
&lt;p&gt;
NDoc 是一个开放源代码项目，并且可以从 &lt;a href="http://ndoc.sourceforge.net/" target=_blank&gt;http://ndoc.sourceforge.net&lt;/a&gt; 下载。
&lt;/p&gt;
&lt;div style="MARGIN-TOP: 3px; MARGIN-BOTTOM: 10px"&gt;&lt;a href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#top"&gt;&lt;img height=9 alt=返回页首 src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width=7 border=0&gt;&lt;/a&gt;&lt;a class=topOfPage href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#top"&gt;返回页首&lt;/a&gt;
&lt;/div&gt;
&lt;a name=EHAA&gt;&lt;/a&gt; 
&lt;h2&gt;NAnt
&lt;/h2&gt;
&lt;p&gt;
NAnt 是一个基于 .NET 的生成工具，与当前版本的 Visual Studio .NET 不同，它使得为您的项目创建生成过程变得非常容易。当您拥有大量从事单个项目的开发人员时，您不能依赖于从单个用户的座位进行生成。您也不希望必须定期手动生成该项目。您更愿意创建每天晚上运行的自动生成过程。NAnt
使您可以生成解决方案、复制文件、运行 NUnit 测试、发送电子邮件，等等。遗憾的是，NAnt 缺少漂亮的图形界面，但它的确具有可以指定应该在生成过程中完成哪些任务的控制台应用程序和
XML 文件。注意，MSBuild（属于 Visual Studio 2005 的新的生成平台）为每种健壮的生成方案进行了准备，并且由基于 XML 的项目文件以类似的方式驱动。
&lt;/p&gt;
&lt;div style="MARGIN-TOP: 3px; MARGIN-BOTTOM: 10px"&gt;&lt;a href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#top"&gt;&lt;img height=9 alt=返回页首 src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width=7 border=0&gt;&lt;/a&gt;&lt;a class=topOfPage href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#top"&gt;返回页首&lt;/a&gt;
&lt;/div&gt;
&lt;a name=EGAA&gt;&lt;/a&gt; 
&lt;h2&gt;实际运行的 NAnt
&lt;/h2&gt;
&lt;p&gt;
在该示例中，我将为前面创建的 NUnitExample 解决方案创建一个 NAnt 版本文件。首先，我需要创建一个具有 .build 扩展名的 XML 文件，将其放在我的项目的根目录中，然后向该文件的顶部添加一个
XML 声明。我需要添加到该文件的第一个标记是 project 标记： 
&lt;/p&gt;
&lt;pre class=codeSample&gt;&amp;lt;?xml version="1.0"?&amp;gt;
&amp;lt;project name="NUnit Example" default="build" basedir="."&amp;gt;
    &amp;lt;description&amp;gt;The NUnit Example Project&amp;lt;/description&amp;gt;
&amp;lt;/project&amp;gt;
&lt;/pre&gt;
&lt;p&gt;
项目标记还用于设置项目名称、默认目标以及基目录。Description 标记用于设置该项目的简短说明。
&lt;/p&gt;
&lt;p&gt;
接下来，我将添加 property 标记，该标记可用于将设置存储到单个位置（随后可以从文件中的任意位置访问该位置）。在该例中，我将创建一个名为 debug 的属性，我可以随后将其设置为
true 或 false，以反映我是否要在调试配置下编译该项目。（最后，这一特定属性并未真正影响如何生成该项目；它只是您设置的一个变量，当您真正确定了如何生成该项目时将读取该变量。）
&lt;/p&gt;
&lt;p&gt;
接下来，我需要创建一个 target 标记。一个项目可以包含多个可在 NAnt 运行时指定的 target。如果未指定 target，则使用默认 target（我在
project 元素中设置的 target）。在该示例中，默认 target 是 build。让我们观察一下 target 元素，它将包含大多数生成信息： 
&lt;/p&gt;
&lt;pre class=codeSample&gt;&amp;lt;target name="build" description="compiles the source code"&amp;gt;
&amp;lt;/target&amp;gt;
&lt;/pre&gt;
&lt;p&gt;
在 target 元素内，我将把 target 的名称设置为 build，并且创建有关该 target 将做哪些工作的说明。我还将创建一个 csc 元素，该元素用于指定应该传递给
csc C# 编译器的数据。让我们看一下该 csc 元素： 
&lt;/p&gt;
&lt;pre class=codeSample&gt;&amp;lt;csc target="library" output=".\bin\debug\NUnitExample.dll" 
    debug="${debug}"&amp;gt;
&amp;lt;references&amp;gt;
    &amp;lt;includes name="C:\program files\NUnit V2.1\bin\NUnit.Framework.dll"/&amp;gt;
&amp;lt;/references&amp;gt;
    &amp;lt;sources&amp;gt;
       &amp;lt;includes name="HashtableTest.cs"/&amp;gt;
    &amp;lt;/sources&amp;gt;
&amp;lt;/csc&amp;gt;
&lt;/pre&gt;
&lt;p&gt;
首先，我必须设置该 csc 元素的 target。在该例中，我将创建一个 .dll 文件，因此我将 target 设置为 library。接下来，我必须设置 csc
元素的 output，它是将要创建 .dll 文件的位置。最后，我需要设置 debug 属性，它确定了是否在调试中编译该项目。因为我在前面创建了一个用于存储该值的属性，所以我可以使用下面的字符串来访问该属性的值：${debug}。Csc
元素还包含一些子元素。我需要创建两个元素：references 元素将告诉 NAnt 需要为该项目引用哪些程序集，sources 元素告诉 NAnt 要在生成过程中包含哪些文件。在该示例中，我引用了
NUnit.Framework.dll 程序集并包含了 HashtableTest.cs 文件。&lt;a href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/art/TMHTEDSDN08.htm" target=_blank&gt;图
8&lt;/a&gt; 中显示了完整的生成文件。（您通常还要创建一个干净的 target，用于删除生成的文件，但为了简洁起见，我已经将其省略。）
&lt;/p&gt;
&lt;p&gt;
要生成该文件，我需要转到我的项目的根目录（生成文件位于此处），然后从该位置执行 nant.exe。如果生成成功，您可以在该应用程序的 bin 目录中找到 .dll
和 .pdb 文件。尽管使用 NAnt 肯定不像在 Visual Studio 中单击 Build 那样简单，但它仍然是一种非常强大的工具，可用于开发按自动计划运行的生成过程。NAnt
还包括一些有用的功能，例如能够运行单元测试或者复制附加文件（这些功能没有受到当前 Visual Studio 生成过程的支持）。
&lt;/p&gt;
&lt;p&gt;
NAnt 是一个开放源代码项目，并且可以从 &lt;a href="http://nant.sourceforge.net/" target=_blank&gt;http://nant.sourceforge.net&lt;/a&gt; 下载。
&lt;/p&gt;
&lt;div style="MARGIN-TOP: 3px; MARGIN-BOTTOM: 10px"&gt;&lt;a href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#top"&gt;&lt;img height=9 alt=返回页首 src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width=7 border=0&gt;&lt;/a&gt;&lt;a class=topOfPage href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#top"&gt;返回页首&lt;/a&gt;
&lt;/div&gt;
&lt;a name=EFAA&gt;&lt;/a&gt; 
&lt;h2&gt;转换工具
&lt;/h2&gt;
&lt;p&gt;
我已经将两个独立的工具合在一起放在标题&amp;#8220;转换工具&amp;#8221;下面。这两个工具都非常简单，但又可能极为有用。第一个工具是 ASP.NET 版本转换器，它可用于转换
ASP.NET（虚拟目录在它下面运行）的版本。第二个工具是 Visual Studio Converter，它可用于将项目文件从 Visual Studio .NET
2002 转换到 Visual Studio .NET 2003。
&lt;/p&gt;
&lt;p&gt;
当 IIS 处理请求时，它会查看正在请求的文件的扩展名，然后基于该 Web 站点或虚拟目录的扩展名映射，将请求委派给 ISAPI 扩展或者自己处理该请求。这正是 ASP.NET
的工作方式；将为所有 ASP.NET 扩展名注册扩展名映射，并将这些扩展名映射导向 aspnet_isapi.dll。这种工作方式是完美无缺的，除非您安装了 ASP.NET
1.1 &amp;#8212; 它会将扩展名映射升级到新版本的 aspnet_isapi.dll。当在 ASP.NET 1.0 上生成的应用程序试图用 1.1 版运行时，这会导致错误。要解决该问题，可以将所有扩展名映射重新转换到
1.0 版的 aspnet_isapi.dll，但是由于有 18 种扩展名映射，所以手动完成这一工作将很枯燥。这正是 ASP.NET 版本转换器可以发挥作用的时候。使用这一小型实用工具，可以转换任何单个
ASP.NET 应用程序所使用的 .NET 框架的版本。
&lt;/p&gt;
&lt;div style="WIDTH: 280px"&gt;&lt;img height=232 alt="" src="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/art/TMHTEDSDN09.gif" width=280 border=0&gt;
&lt;br&gt;
&lt;p class=figureCaption&gt;
&lt;b&gt;图&lt;/b&gt;&lt;b&gt; 9&lt;/b&gt; ASP.NET 版本转换器
&lt;/p&gt;
&lt;div class=figureRule&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
图 9 显示了实际运行的 ASP.NET 版本转换器。它的使用方法非常简单，只须选择相应的应用程序，然后选择您希望该应用程序使用的 .NET 框架版本。该工具随后将使用
aspnet_regiis.exe 命令行工具将该应用程序转换到所选版本的框架。随着将来版本的 ASP.NET 和 .NET 框架的发布，该工具将变得更为有用。
&lt;/p&gt;
&lt;p&gt;
ASP.NET 版本转换器由 Denis Bauer 编写，并且可以从 &lt;a href="http://www.denisbauer.com/NETTools/ASPNETVersionSwitcher.aspx" target=_blank&gt;http://www.denisbauer.com/NETTools/ASPNETVersionSwitcher.aspx&lt;/a&gt; 下载。
&lt;/p&gt;
&lt;p&gt;
Visual Studio .NET 项目转换器（参见图 10）非常类似于 ASP.NET 版本转换器，区别在于它用于转换 Visual Studio 项目文件的版本。尽管在
.NET 框架的 1.0 版和 1.1 版之间只有很小的差异，但一旦将项目文件从 Visual Studio .NET 2002 转换到 Visual Studio
.NET 2003，将无法再把它转换回去。虽然这在大多数时候可能不会成为问题（因为在 .NET 框架 1.0 版和 1.1 版之间几乎没有什么破坏性的更改），但在某些时刻您可能需要将项目转换回去。该转换器可以将任何解决方案或项目文件从
Visual Studio 7.1 (Visual Studio .NET 2003) 转换到 Visual Studio 7.0 (Visual Studio .NET
2002)，并在必要时进行反向转换。
&lt;/p&gt;
&lt;div style="WIDTH: 340px"&gt;&lt;img height=251 alt="" src="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/art/TMHTEDSDN10.gif" width=340 border=0&gt;
&lt;br&gt;
&lt;p class=figureCaption&gt;
&lt;b&gt;图&lt;/b&gt;&lt;b&gt; 10&lt;/b&gt; Visual Studio .NET 项目转换器
&lt;/p&gt;
&lt;div class=figureRule&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
Visual Studio .NET 项目转换器由 Dacris Software 编写。该工具可以从 &lt;a href="http://www.codeproject.com/macro/vsconvert.asp" target=_blank&gt;http://www.codeproject.com/macro/vsconvert.asp&lt;/a&gt; 下载。
&lt;/p&gt;
&lt;div style="MARGIN-TOP: 3px; MARGIN-BOTTOM: 10px"&gt;&lt;a href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#top"&gt;&lt;img height=9 alt=返回页首 src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width=7 border=0&gt;&lt;/a&gt;&lt;a class=topOfPage href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx#top"&gt;返回页首&lt;/a&gt;
&lt;/div&gt;
&lt;a name=EEAA&gt;&lt;/a&gt; 
&lt;h2&gt;小结
&lt;/h2&gt;
&lt;p&gt;
本文采用走马观花的方式介绍了上述工具，但我已经试图起码向您提供足够的信息以激起您的好奇心。我相信本文已经让您在某种程度上领悟了几个免费工具，您可以立即开始使用这些工具来编写更好的项目。同时，我还要敦促您确保自己拥有所有其他可以获得的合适工具，无论是最新版本的
Visual Studio、功能强大的计算机还是免费的实用工具。拥有合适的工具将使一切变得大不相同。
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;James Avery&lt;/b&gt; 是一位使用 .NET 和其他 Microsoft 技术的顾问。他已经撰写了许多书籍和文章，他的最新著作是《ASP.NET Setup
and Configuration Pocket Reference》(Microsoft Press, 2003)。您可以通过 &lt;a href="mailto:javery@infozerk.com" target=_blank&gt;javery@infozerk.com&lt;/a&gt; 向他发送电子邮件，并且在 &lt;a href="http://www.dotavery.com/blog" target=_blank&gt;http://www.dotavery.com/blog&lt;/a&gt; 阅读他的网络日记。
&lt;/p&gt;
&lt;p&gt;
本文摘自 &lt;a href="http://msdn.microsoft.com/msdnmag/default.aspx" target=_blank&gt;MSDN Magazine&lt;/a&gt; 的 &lt;a href="http://msdn.microsoft.com/msdnmag/issues/04/07/default.aspx" target=_blank&gt;2004
年 7 月&lt;/a&gt;刊。
&lt;/p&gt;
&lt;p&gt;
该杂志可在各地的报摊购买，也可以&lt;a href="http://msdn.microsoft.com/msdnmag/subscribe.aspx" target=_blank&gt;&lt;i&gt;订阅&lt;/i&gt;&lt;/a&gt;。 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://msdn.microsoft.com/msdnmag/issues/04/07/MustHaveTools/default.aspx" target=_blank&gt;转到原英文页面&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.hifar.com/blog/aggbug.ashx?id=4399ace0-f66c-4351-9116-ae4a2daa45e7" /&gt;</description>
      <category>文摘和收藏</category>
    </item>
    <item>
      <trackback:ping>http://www.hifar.com/blog/Trackback.aspx?guid=5f5488ac-81e2-479b-8bdd-5327ccc8d304</trackback:ping>
      <pingback:server>http://www.hifar.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.hifar.com/blog/PermaLink,guid,5f5488ac-81e2-479b-8bdd-5327ccc8d304.aspx</pingback:target>
      <dc:creator>Jimmy Gao</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <h2>面向对象设计原则 
</h2>
        <p>
          <hr id="null" />
        </p>
        <div class="postbody">
          <strong>
            <div>“开－闭”原则（OCP）对可变性封装
</div>
            <div> 
</div>
            <div>The Open--Closed PrincipleClosed Principle<br />
任何系统在其生命周期中都会发生变化。如果我们希望开发出的系统不会在第一版本后就被抛弃，那么我们就必须牢牢记住这一点。<br />
软件组成实体（类，模块，函数，等等）应该是可扩展的，但是不可修改的。
</div>
            <div>OCP  特征
</div>
            <div>可扩展（对扩展是开放的）<br />
模块的行为功能可以被扩展，在应用需求改变或需要满足新的应用需求时，我们可以让模块以不同的方式工作<br />
不可更改（对更改是封闭的）<br />
这些模块的源代码是不可改动的。任何人都不许修改模块的源代码。
</div>
            <div>关键是抽象！<br />
模块可以操作一个抽象体。由于模块依赖于一个固定的抽象体，因此它可以是不允许修改（closed for modification）的；同时，通过从这个抽象体派生，也可扩展此模块的行为功能。
</div>
            <div>符合OCP原则的程序只通过增加代码来变化而不是通过更改现有代码来变化，因此这样的程序就不会引起象非开放―封闭（open-closed）的程序那样的连锁反应的变化。
</div>
            <div>
              <br />
对可变性的封装 
</div>
            <div>考虑系统中什么可能会发生变化，一种可变性不应当散落在代码的很多角落里，而应当被封装到一个对象里。
</div>
            <div>正确理解继承<br />
一种可变性不应当与另一个可变性混合在一起
</div>
            <div>选择性的封闭（Strategic Closure）没有任何一个大的程序能够做到100%的封闭。一般来讲，无论模块是多么的“封闭”，都会存在一些无法对之封闭的变化。既然不可能完全封闭，因此就必须选择性地对待这个问题。也就是说，设计者必须对于他（她）设计的模块应该对何种变化封闭做出选择。
</div>
            <div>
              <hr id="null" />
              <br />
里氏替换原则（LSP）如何进行继承
</div>
            <div>
              <br />
Liskov替换原则替换原则<br />
LSP<br />
LSP The The Liskov Substitution Principle<br />
OCP原则背后的主要机制是抽象和多态。支持抽象和多态的关键机制是继承。
</div>
            <div>LSP LSP的定义 的定义<br />
若对于每一个类型S的对象o1，都存在一个类型T的对象o2，使得在所有针对T编写的程序P中，用o1替换o2后，程序P的行为功能不变，则S是T的子类型。<br />
LSP原则清楚地指出，OOD中Is-A关系是就行为功能而言。行为功能（behavior）不是内在的、私有的，而是外在、公开的，是客户程序所依赖的。行为功能（behavior）才是软件所关注的问题！所有派生类的行为功能必须和客户程序对其基类所期望的保持一致。
</div>
            <div>LSP 和DBC<br />
DBC（Design by Contract）定义把类和其客户之间的关系看作是一个正式的协议，明确各方的权利和义务。DBC对类的要求类的方法声明为先决条件（precondition）和后续条件（postcondition）。为了让方法得以执行，先决条件必须为真。完成后，方法保证后续条件为真。DBC对派生类的要求当重新定义派生类中的例行程序时，我们只能用更弱的先决条件和更强的后续条件替换之。
</div>
            <div>LSP－结论<br />
LSP原则是符合OCP原则应用程序的一项重要特性。仅当派生类能完全替换基类时，我们才能放心地重用那些使用基类的函数和修改派生类型。
</div>
            <div>
              <hr id="null" />
            </div>
            <div>依赖倒转原则（DIP）针对接口编程
</div>
            <div>
              <br />
高层模块不应该依赖于低层模块。二者都应该依赖于抽象。
</div>
            <div>抽象不应该依赖于细节。细节应该依赖于抽象。
</div>
            <div>实施重点
</div>
            <div>从问题的具体细节中分离出抽象，以抽象方式对类进行耦合<br />
不足 
<br />
导致生成大量的类<br />
假定所有的具体类都是会变化的，这也不总是正确的
</div>
            <div>DIP与设计模式<br />
DIP以LSP为基础，是实现OCP的主要手段，是设计模式研究和应用的主要指导原则
</div>
            <div>
              <br />
接口隔离原则（ISP）恰当的划分角色和接口<br />
接口的污染（Interface Contamination）一个没有经验的设计师往往想节省接口的数目，将一些功能相近或功能相关的接口合并，并将这看成是代码优化的一部分。
</div>
            <div>定义：从一个客户类的角度来讲：一个类对另外一个类的依赖性应当是建立在最小的接口上的。使用多个专门的接口比使用单一的总接口要好。
</div>
            <div>
              <br />
合成/聚合复用原则（CARP）尽量使用合成/聚合、尽量不使用继承<br />
定义：在一个新的对象里面使用一些已有的对象
</div>
            <div> 
</div>
            <div>
              <hr id="null" />
            </div>
          </strong>
        </div>
        <div class="postbody">千万不要忘啊
</div>
        <img width="0" height="0" src="http://www.hifar.com/blog/aggbug.ashx?id=5f5488ac-81e2-479b-8bdd-5327ccc8d304" />
      </body>
      <title>面向对象设计原则 </title>
      <guid isPermaLink="false">http://www.hifar.com/blog/PermaLink,guid,5f5488ac-81e2-479b-8bdd-5327ccc8d304.aspx</guid>
      <link>http://www.hifar.com/blog/2004/11/25/%e9%9d%a2%e5%90%91%e5%af%b9%e8%b1%a1%e8%ae%be%e8%ae%a1%e5%8e%9f%e5%88%99.aspx</link>
      <pubDate>Thu, 25 Nov 2004 04:20:19 GMT</pubDate>
      <description>&lt;h2&gt;面向对象设计原则 
&lt;/h2&gt;
&lt;p&gt;
&lt;hr id=null&gt;
&lt;/p&gt;
&lt;div class=postbody&gt;&lt;strong&gt; 
&lt;div&gt;&amp;#8220;开－闭&amp;#8221;原则（OCP）对可变性封装
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;The Open--Closed PrincipleClosed Principle&lt;br&gt;
任何系统在其生命周期中都会发生变化。如果我们希望开发出的系统不会在第一版本后就被抛弃，那么我们就必须牢牢记住这一点。&lt;br&gt;
软件组成实体（类，模块，函数，等等）应该是可扩展的，但是不可修改的。
&lt;/div&gt;
&lt;div&gt;OCP&amp;nbsp; 特征
&lt;/div&gt;
&lt;div&gt;可扩展（对扩展是开放的）&lt;br&gt;
模块的行为功能可以被扩展，在应用需求改变或需要满足新的应用需求时，我们可以让模块以不同的方式工作&lt;br&gt;
不可更改（对更改是封闭的）&lt;br&gt;
这些模块的源代码是不可改动的。任何人都不许修改模块的源代码。
&lt;/div&gt;
&lt;div&gt;关键是抽象！&lt;br&gt;
模块可以操作一个抽象体。由于模块依赖于一个固定的抽象体，因此它可以是不允许修改（closed for modification）的；同时，通过从这个抽象体派生，也可扩展此模块的行为功能。
&lt;/div&gt;
&lt;div&gt;符合OCP原则的程序只通过增加代码来变化而不是通过更改现有代码来变化，因此这样的程序就不会引起象非开放―封闭（open-closed）的程序那样的连锁反应的变化。
&lt;/div&gt;
&lt;div&gt;
&lt;br&gt;
对可变性的封装 
&lt;/div&gt;
&lt;div&gt;考虑系统中什么可能会发生变化，一种可变性不应当散落在代码的很多角落里，而应当被封装到一个对象里。
&lt;/div&gt;
&lt;div&gt;正确理解继承&lt;br&gt;
一种可变性不应当与另一个可变性混合在一起
&lt;/div&gt;
&lt;div&gt;选择性的封闭（Strategic Closure）没有任何一个大的程序能够做到100%的封闭。一般来讲，无论模块是多么的&amp;#8220;封闭&amp;#8221;，都会存在一些无法对之封闭的变化。既然不可能完全封闭，因此就必须选择性地对待这个问题。也就是说，设计者必须对于他（她）设计的模块应该对何种变化封闭做出选择。
&lt;/div&gt;
&lt;div&gt;
&lt;hr id=null&gt;
&lt;br&gt;
里氏替换原则（LSP）如何进行继承
&lt;/div&gt;
&lt;div&gt;
&lt;br&gt;
Liskov替换原则替换原则&lt;br&gt;
LSP&lt;br&gt;
LSP The The Liskov Substitution Principle&lt;br&gt;
OCP原则背后的主要机制是抽象和多态。支持抽象和多态的关键机制是继承。
&lt;/div&gt;
&lt;div&gt;LSP LSP的定义 的定义&lt;br&gt;
若对于每一个类型S的对象o1，都存在一个类型T的对象o2，使得在所有针对T编写的程序P中，用o1替换o2后，程序P的行为功能不变，则S是T的子类型。&lt;br&gt;
LSP原则清楚地指出，OOD中Is-A关系是就行为功能而言。行为功能（behavior）不是内在的、私有的，而是外在、公开的，是客户程序所依赖的。行为功能（behavior）才是软件所关注的问题！所有派生类的行为功能必须和客户程序对其基类所期望的保持一致。
&lt;/div&gt;
&lt;div&gt;LSP 和DBC&lt;br&gt;
DBC（Design by Contract）定义把类和其客户之间的关系看作是一个正式的协议，明确各方的权利和义务。DBC对类的要求类的方法声明为先决条件（precondition）和后续条件（postcondition）。为了让方法得以执行，先决条件必须为真。完成后，方法保证后续条件为真。DBC对派生类的要求当重新定义派生类中的例行程序时，我们只能用更弱的先决条件和更强的后续条件替换之。
&lt;/div&gt;
&lt;div&gt;LSP－结论&lt;br&gt;
LSP原则是符合OCP原则应用程序的一项重要特性。仅当派生类能完全替换基类时，我们才能放心地重用那些使用基类的函数和修改派生类型。
&lt;/div&gt;
&lt;div&gt;
&lt;hr id=null&gt;
&lt;/div&gt;
&lt;div&gt;依赖倒转原则（DIP）针对接口编程
&lt;/div&gt;
&lt;div&gt;
&lt;br&gt;
高层模块不应该依赖于低层模块。二者都应该依赖于抽象。
&lt;/div&gt;
&lt;div&gt;抽象不应该依赖于细节。细节应该依赖于抽象。
&lt;/div&gt;
&lt;div&gt;实施重点
&lt;/div&gt;
&lt;div&gt;从问题的具体细节中分离出抽象，以抽象方式对类进行耦合&lt;br&gt;
不足 
&lt;br&gt;
导致生成大量的类&lt;br&gt;
假定所有的具体类都是会变化的，这也不总是正确的
&lt;/div&gt;
&lt;div&gt;DIP与设计模式&lt;br&gt;
DIP以LSP为基础，是实现OCP的主要手段，是设计模式研究和应用的主要指导原则
&lt;/div&gt;
&lt;div&gt;
&lt;br&gt;
接口隔离原则（ISP）恰当的划分角色和接口&lt;br&gt;
接口的污染（Interface Contamination）一个没有经验的设计师往往想节省接口的数目，将一些功能相近或功能相关的接口合并，并将这看成是代码优化的一部分。
&lt;/div&gt;
&lt;div&gt;定义：从一个客户类的角度来讲：一个类对另外一个类的依赖性应当是建立在最小的接口上的。使用多个专门的接口比使用单一的总接口要好。
&lt;/div&gt;
&lt;div&gt;
&lt;br&gt;
合成/聚合复用原则（CARP）尽量使用合成/聚合、尽量不使用继承&lt;br&gt;
定义：在一个新的对象里面使用一些已有的对象
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;
&lt;hr id=null&gt;
&lt;/div&gt;
&lt;/strong&gt;
&lt;/div&gt;
&lt;div class=postbody&gt;千万不要忘啊
&lt;/div&gt;
&lt;img width="0" height="0" src="http://www.hifar.com/blog/aggbug.ashx?id=5f5488ac-81e2-479b-8bdd-5327ccc8d304" /&gt;</description>
      <category>软件设计</category>
      <category>文摘和收藏</category>
    </item>
  </channel>
</rss>