﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-方枪枪的java世界-文章分类-Jsp</title><link>http://www.blogjava.net/tiandizhijian/category/48427.html</link><description>不要因为风雨飘落就停止了你的脚步，真正的得失就在你的心中。</description><language>zh-cn</language><lastBuildDate>Tue, 01 Jan 2013 05:07:38 GMT</lastBuildDate><pubDate>Tue, 01 Jan 2013 05:07:38 GMT</pubDate><ttl>60</ttl><item><title>关于ActiveX控件的使用</title><link>http://www.blogjava.net/tiandizhijian/articles/393483.html</link><dc:creator>秋天的山谷</dc:creator><author>秋天的山谷</author><pubDate>Tue, 25 Dec 2012 14:58:00 GMT</pubDate><guid>http://www.blogjava.net/tiandizhijian/articles/393483.html</guid><wfw:comment>http://www.blogjava.net/tiandizhijian/comments/393483.html</wfw:comment><comments>http://www.blogjava.net/tiandizhijian/articles/393483.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tiandizhijian/comments/commentRss/393483.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tiandizhijian/services/trackbacks/393483.html</trackback:ping><description><![CDATA[<h1><span>1 </span><span style="font-family: 黑体">需求背景</span></h1>
<p><span style="font-family: 宋体">我们在企业应用开发中经常会用到</span>ActiveX<span style="font-family: 宋体">控件，如：华表打印控件、密码小键盘控件、写卡器控件、读取客户端</span>IP<span style="font-family: 宋体">、</span>MAC<span style="font-family: 宋体">信息的控件、二代身份证读取控件。</span></p>
<h2><span>1.1 </span><span style="font-family: 黑体">问题现象</span></h2>
<p><span style="font-family: 宋体">这些控件在代码中的调用方式不够标准，五花八门，千差万别，如：</span></p>
<table style="border-bottom: medium none; border-left: medium none; width: 518.4pt; border-collapse: collapse; border-top: medium none; border-right: medium none" border="1" cellspacing="0" cellpadding="0" width="691">
<tbody>
<tr>
<td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 518.4pt; padding-right: 5.4pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm" valign="top" width="691">
<p style="text-justify: inter-ideograph"><span style="line-height: 150%; font-family: 宋体; font-size: 9pt">// </span><span style="line-height: 150%; font-family: 宋体; font-size: 9pt">没有版本号，和本地安装版本比对发现有新版本时不会提示用户进行升级</span></p>
<p style="text-justify: inter-ideograph"><span style="line-height: 150%; font-family: 宋体; font-size: 9pt">&lt;object classid="clsid:80B7C135-4C0B-48DE-BA77-0E353012C169" id="TcpCfg"</span></p>
<p style="text-justify: inter-ideograph; text-align: justify; text-indent: 31.5pt"><span style="line-height: 150%; font-family: 宋体; font-size: 9pt">&nbsp;<span style="color: red">codebase="&lt;%=request.getContextPath()%&gt;/data/gettcpcfg.ocx</span>"&gt;</span></p>
<p style="text-justify: inter-ideograph"><span style="line-height: 150%; font-family: 宋体; font-size: 9pt">&lt;/object&gt;</span></p>
<p style="text-justify: inter-ideograph"><span style="line-height: 150%; font-family: 宋体; font-size: 9pt">// Jsp</span><span style="line-height: 150%; font-family: 宋体; font-size: 9pt">所在路径才行，否则找不到</span></p>
<p style="text-justify: inter-ideograph"><span style="line-height: 150%; font-family: 宋体; font-size: 9pt">&lt;object id="ThirdParty" name="ThirdParty" classid="clsid:DAD0331B-6F7E-4CFB-89BF-1DE86A0AC626" </span></p>
<p style="text-justify: inter-ideograph; text-align: justify; text-indent: 36pt"><span style="line-height: 150%; font-family: 宋体; color: red; font-size: 9pt">codebase="ThirdParty.ocx"</span><span style="line-height: 150%; font-family: 宋体; font-size: 9pt"> width="10" height="10"&gt;</span></p>
<p style="text-justify: inter-ideograph"><span style="line-height: 150%; font-family: 宋体; font-size: 9pt">&lt;/object&gt;</span></p>
<p style="text-justify: inter-ideograph"><span style="line-height: 150%; font-family: 宋体; font-size: 9pt">&lt;object classid="clsid:14B8260F-CBF7-41C0-B52B-062F712ACBF1" id="CRSClientHUB" height="0" width="0" &gt;&lt;/object&gt;</span></p>
<p style="text-justify: inter-ideograph"><span style="line-height: 150%; font-family: 宋体; font-size: 9pt">// </span><span style="font-family: 宋体">如果不写，操作员没有安装，会直接报错，不会提示安装</span></p>
<p style="text-justify: inter-ideograph"><span style="line-height: 150%; font-family: 宋体; color: red; font-size: 9pt">&lt;object classid="CLSID:636BCD61-4473-4FF5-A4C6-6E030C31EBD4" id="BossICCardOCX"&gt;&lt;/object&gt;</span></p>
<p style="text-justify: inter-ideograph">// <span style="font-family: 宋体">没有版本号</span></p>
<p style="text-justify: inter-ideograph"><span style="line-height: 150%; font-family: 宋体; font-size: 9pt">&lt;object classid="clsid:3FA32835-2A6A-45E9-B6E9-B00A779A60F3" id="MINIPRINT" name="miniCell" </span></p>
<p style="text-justify: inter-ideograph; text-align: justify; text-indent: 36pt"><span style="line-height: 150%; font-family: 宋体; font-size: 9pt">width="0" height="0" codebase="&lt;%=miniPath%&gt;"&gt;&lt;/object&gt;</span></p></td></tr></tbody></table>
<h2><span>1.2 </span><span style="font-family: 黑体">问题总结</span></h2>
<p style="text-indent: 21pt"><span style="font-family: 宋体">由上面代码可以看出，上面的代码有的指定了</span>codebase<span style="font-family: 宋体">，有的没有指定</span>codebase<span style="font-family: 宋体">，<strong>对于没有指定</strong></span><strong>codebase</strong><strong><span style="font-family: 宋体">的情况，控件无法自动下载安装，用户安装该控件只有一种方式，那就是主动下载控件安装包进行手工安装。</span></strong><span style="font-family: 宋体">当前所有的控件使用方式，都无法实现控件版本升级后自动更新，只能靠通知用户手工下载安装包重新安装来实现升级。因此，有必要对当前系统中控件使用方法进行规范，简化调用方式，减少代码量，同时实现自动升级。</span></p>
<h1><span>2 </span><span style="font-family: 黑体">解决方案</span>(tag)</h1>
<h2><span>2.1 </span><span style="font-family: 黑体">使用</span>tag<span style="font-family: 黑体">引用</span>ActiveX<span style="font-family: 黑体">控件</span></h2>
<p>&lt;xx:activex id='KeyCard1' <span style="color: red">code='KeyCard' style=&#8221;&#8230;..&#8221; /&gt; <strong>// keyCard</strong></span><strong><span style="font-family: 宋体">唯一标记数据库中一个控件</span></strong></p>
<p>tag<span style="font-family: 宋体">从数据库中取出该控件的相关属性（是否显示、</span>classid<span style="font-family: 宋体">、</span>codebase<span style="font-family: 宋体">、版本号等），然后组装成以下格式的</span>HTML<span style="font-family: 宋体">：</span></p>
<p><strong>&lt;object id="KeyCard1" style="display:none"&nbsp;classid="clsid:ACFC1E38-2FA5-4D00-BA69-0EFB62BC96C6" codebase="/data/KeyCard.cab#version=1,0,0,0"&gt;</strong></p>
<p><strong>&lt;/object&gt;</strong></p>
<p><span style="font-family: 宋体; color: red">其中</span><span style="color: red">Codebase</span><span style="font-family: 宋体; color: red">部分包括</span><span style="color: red">.ocx</span><span style="font-family: 宋体; color: red">文件的版本号。</span><span style="color: red">IE</span><span style="font-family: 宋体; color: red">会比较</span><span style="color: red">HTML</span><span style="font-family: 宋体; color: red">中的版本号和已经安装的控件的版本号，如果浏览器发现控件的版本升级了，就会自动去更新控件。</span> </p>
<p><span style="font-family: 宋体">后续需要发布新版本的</span>ActiveX<span style="font-family: 宋体">控件时，只需要更新对应的</span>cab<span style="font-family: 宋体">文件，并在数据库中修改对应的版本信息，用户在用到该控件时浏览器会自动提示下载更新。</span></p>
<h2><span>2.2 </span><span style="font-family: 黑体">数据库</span></h2>
<p><span style="font-family: 宋体">在数据库中增加一个存放</span>ActiveX<span style="font-family: 宋体">信息的字典表</span>SA_DB_ACTIVEX<span style="font-family: 宋体">，格式如下：</span></p>
<table style="border-bottom: medium none; border-left: medium none; margin: auto auto auto 23.4pt; border-collapse: collapse;background: #e6e6e6; border-top: medium none; border-right: medium none" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 3.15pt">
<td style="border-bottom: silver 1pt solid; border-left: silver 1pt solid; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 72pt; padding-right: 5.4pt; height: 3.15pt; border-top: silver 1pt solid; border-right: silver 1pt solid; padding-top: 0cm" valign="top" width="96">
<p style="text-justify: inter-ideograph"><span style="font-family: 宋体">字段名称</span></p></td>
<td style="border-bottom: silver 1pt solid; border-left: #d4d0c8; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 108pt; padding-right: 5.4pt; height: 3.15pt; border-top: silver 1pt solid; border-right: silver 1pt solid; padding-top: 0cm" valign="top" width="144">
<p style="text-justify: inter-ideograph"><span style="font-family: 宋体">字段说明</span></p></td>
<td style="border-bottom: silver 1pt solid; border-left: #d4d0c8; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 104.45pt; padding-right: 5.4pt; height: 3.15pt; border-top: silver 1pt solid; border-right: silver 1pt solid; padding-top: 0cm" valign="top" width="139">
<p style="text-justify: inter-ideograph"><span style="font-family: 宋体">字段类型</span></p></td>
<td style="border-bottom: silver 1pt solid; border-left: #d4d0c8; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 94.85pt; padding-right: 5.4pt; height: 3.15pt; border-top: silver 1pt solid; border-right: silver 1pt solid; padding-top: 0cm" valign="top" width="126">
<p style="text-justify: inter-ideograph"><span style="font-family: 宋体">备注</span></p></td></tr>
<tr style="height: 3.15pt">
<td style="border-bottom: silver 1pt solid; border-left: silver 1pt solid; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 72pt; padding-right: 5.4pt; height: 3.15pt; border-top: #d4d0c8; border-right: silver 1pt solid; padding-top: 0cm" valign="top" width="96">
<p style="text-justify: inter-ideograph">CODE</p></td>
<td style="border-bottom: silver 1pt solid; border-left: #d4d0c8; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 108pt; padding-right: 5.4pt; height: 3.15pt; border-top: #d4d0c8; border-right: silver 1pt solid; padding-top: 0cm" valign="top" width="144">
<p style="text-justify: inter-ideograph">ActiveX<span style="font-family: 宋体">控件编码</span></p></td>
<td style="border-bottom: silver 1pt solid; border-left: #d4d0c8; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 104.45pt; padding-right: 5.4pt; height: 3.15pt; border-top: #d4d0c8; border-right: silver 1pt solid; padding-top: 0cm" valign="top" width="139">
<p style="text-justify: inter-ideograph">VARCHAR2(32)</p></td>
<td style="border-bottom: silver 1pt solid; border-left: #d4d0c8; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 94.85pt; padding-right: 5.4pt; height: 3.15pt; border-top: #d4d0c8; border-right: silver 1pt solid; padding-top: 0cm" valign="top" width="126">
<p style="text-justify: inter-ideograph"><span style="font-family: 宋体">在</span>Tag<span style="font-family: 宋体">中引用</span></p></td></tr>
<tr style="height: 3.15pt">
<td style="border-bottom: silver 1pt solid; border-left: silver 1pt solid; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 72pt; padding-right: 5.4pt; height: 3.15pt; border-top: #d4d0c8; border-right: silver 1pt solid; padding-top: 0cm" valign="top" width="96">
<p style="text-justify: inter-ideograph">CLASSID</p></td>
<td style="border-bottom: silver 1pt solid; border-left: #d4d0c8; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 108pt; padding-right: 5.4pt; height: 3.15pt; border-top: #d4d0c8; border-right: silver 1pt solid; padding-top: 0cm" valign="top" width="144">
<p style="text-justify: inter-ideograph">ActiveX Classid</p></td>
<td style="border-bottom: silver 1pt solid; border-left: #d4d0c8; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 104.45pt; padding-right: 5.4pt; height: 3.15pt; border-top: #d4d0c8; border-right: silver 1pt solid; padding-top: 0cm" valign="top" width="139">
<p style="text-justify: inter-ideograph">VARCHAR2(64)</p></td>
<td style="border-bottom: silver 1pt solid; border-left: #d4d0c8; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 94.85pt; padding-right: 5.4pt; height: 3.15pt; border-top: #d4d0c8; border-right: silver 1pt solid; padding-top: 0cm" valign="top" width="126">
<p style="text-justify: inter-ideograph"><span style="font-family: 宋体">如：</span>clsid:ACFC1E38-2FA5-4D00-BA69-0EFB62BC96C6</p></td></tr>
<tr style="height: 3.15pt">
<td style="border-bottom: silver 1pt solid; border-left: silver 1pt solid; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 72pt; padding-right: 5.4pt; height: 3.15pt; border-top: #d4d0c8; border-right: silver 1pt solid; padding-top: 0cm" valign="top" width="96">
<p style="text-justify: inter-ideograph">STYLE</p></td>
<td style="border-bottom: silver 1pt solid; border-left: #d4d0c8; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 108pt; padding-right: 5.4pt; height: 3.15pt; border-top: #d4d0c8; border-right: silver 1pt solid; padding-top: 0cm" valign="top" width="144">
<p style="text-justify: inter-ideograph">ActiveX<span style="font-family: 宋体">显示属性</span></p></td>
<td style="border-bottom: silver 1pt solid; border-left: #d4d0c8; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 104.45pt; padding-right: 5.4pt; height: 3.15pt; border-top: #d4d0c8; border-right: silver 1pt solid; padding-top: 0cm" valign="top" width="139">
<p style="text-justify: inter-ideograph">VARCHAR2(256)</p></td>
<td style="border-bottom: silver 1pt solid; border-left: #d4d0c8; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 94.85pt; padding-right: 5.4pt; height: 3.15pt; border-top: #d4d0c8; border-right: silver 1pt solid; padding-top: 0cm" valign="top" width="126">
<p style="text-justify: inter-ideograph"><span style="font-family: 宋体">如：</span>display:none</p></td></tr>
<tr style="height: 3.15pt">
<td style="border-bottom: silver 1pt solid; border-left: silver 1pt solid; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 72pt; padding-right: 5.4pt; height: 3.15pt; border-top: #d4d0c8; border-right: silver 1pt solid; padding-top: 0cm" valign="top" width="96">
<p style="text-justify: inter-ideograph">CODEBASE</p></td>
<td style="border-bottom: silver 1pt solid; border-left: #d4d0c8; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 108pt; padding-right: 5.4pt; height: 3.15pt; border-top: #d4d0c8; border-right: silver 1pt solid; padding-top: 0cm" valign="top" width="144">
<p style="text-justify: inter-ideograph">ActiveX<span style="font-family: 宋体">安装包及版本</span></p></td>
<td style="border-bottom: silver 1pt solid; border-left: #d4d0c8; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 104.45pt; padding-right: 5.4pt; height: 3.15pt; border-top: #d4d0c8; border-right: silver 1pt solid; padding-top: 0cm" valign="top" width="139">
<p style="text-justify: inter-ideograph">VARCHAR2(256)</p></td>
<td style="border-bottom: silver 1pt solid; border-left: #d4d0c8; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 94.85pt; padding-right: 5.4pt; height: 3.15pt; border-top: #d4d0c8; border-right: silver 1pt solid; padding-top: 0cm" valign="top" width="126">
<p style="text-justify: inter-ideograph"><span style="font-family: 宋体">如</span>:/data/KeyCard.cab#version=1,0,0,0</p></td></tr>
<tr style="height: 3.15pt">
<td style="border-bottom: silver 1pt solid; border-left: silver 1pt solid; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 72pt; padding-right: 5.4pt; height: 3.15pt; border-top: #d4d0c8; border-right: silver 1pt solid; padding-top: 0cm" valign="top" width="96">
<p style="text-justify: inter-ideograph">DESCRIPTION</p></td>
<td style="border-bottom: silver 1pt solid; border-left: #d4d0c8; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 108pt; padding-right: 5.4pt; height: 3.15pt; border-top: #d4d0c8; border-right: silver 1pt solid; padding-top: 0cm" valign="top" width="144">
<p style="text-justify: inter-ideograph">ActiveX<span style="font-family: 宋体">描述</span></p></td>
<td style="border-bottom: silver 1pt solid; border-left: #d4d0c8; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 104.45pt; padding-right: 5.4pt; height: 3.15pt; border-top: #d4d0c8; border-right: silver 1pt solid; padding-top: 0cm" valign="top" width="139">
<p style="text-justify: inter-ideograph">VARCHAR2(256)</p></td>
<td style="border-bottom: silver 1pt solid; border-left: #d4d0c8; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 94.85pt; padding-right: 5.4pt; height: 3.15pt; border-top: #d4d0c8; border-right: silver 1pt solid; padding-top: 0cm" valign="top" width="126">
<p style="text-justify: inter-ideograph">&nbsp;</p></td></tr></tbody></table>
<p>&nbsp;</p>
<h2><span>2.3 </span><span style="font-family: 黑体">编写</span>tag<span style="font-family: 黑体">标签</span></h2>
<p><span style="font-family: 宋体">编写</span>ActiveXBean<span style="font-family: 宋体">，包含成员</span>code,prov,style,classid,codebase<span style="font-family: 宋体">及相应的</span>get<span style="font-family: 宋体">、</span>set<span style="font-family: 宋体">方法。</span></p>
<p><span style="font-family: 宋体">在系统初始化时，将数据库中配置的</span>ActiveX<span style="font-family: 宋体">控件信息缓存到一个</span>Map<span style="font-family: 宋体">中，</span>key<span style="font-family: 宋体">为</span>$(code)_$(prov)<span style="font-family: 宋体">，</span>value<span style="font-family: 宋体">为编写标签</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">标签</span>ActiveXTag<span style="font-family: 宋体">，接收参数：</span>id<span style="font-family: 宋体">（必须）、</span>code(<span style="font-family: 宋体">必须</span>)<span style="font-family: 宋体">、</span>style<span style="font-family: 宋体">（可选），并根据传入的参数，生成代码：</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">其中，</span>style<span style="font-family: 宋体">、</span>classid<span style="font-family: 宋体">、</span>codebase<span style="font-family: 宋体">是从</span>ActiveX<span style="font-family: 宋体">缓存中获得。</span></p>
<h2><span>2.4 </span>JSP<span style="font-family: 黑体">代码中引用</span></h2>
<p style="text-indent: 21pt"><span style="font-family: 宋体">通过</span>&lt;xx:activex id='KeyCard1' style=&#8221;&#8230;..&#8221; code='KeyCard'/&gt;<span style="font-family: 宋体">方式进行引用，对于不在页面上显示的控件，</span>style<span style="font-family: 宋体">也可以不用，只要在数据库中配置好即可。</span></p><img src ="http://www.blogjava.net/tiandizhijian/aggbug/393483.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tiandizhijian/" target="_blank">秋天的山谷</a> 2012-12-25 22:58 <a href="http://www.blogjava.net/tiandizhijian/articles/393483.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>