精华内容
下载资源
问答
  • iOS应用发布流程详解

    万次阅读 2016-05-28 17:05:15
    推荐大家先去看《iOS应用分发与内测(一)》《iOS应用分发与内测(二)》《iOS开发Provionsioning Profile解析》这几篇博客,看完以后会对发布App的流程非常熟悉。我先对一些概念做一个讲解:【证书 Certif

           这篇博客将会以一个完整的过程来实现一个iOS App提交审核的过程。在这个过程中,我们会涉及到证书、代码签名、授权文件、真机调试、开发者账号等一些概念,我也会有所解释。推荐大家先去看《iOS应用分发与内测(一)》《iOS应用分发与内测(二)》《iOS开发Provionsioning Profile解析》这几篇博客,看完以后会对发布App的流程非常熟悉。

    我先对一些概念做一个讲解:

    【证书 Certification】

           证书是对电脑开发资格的认证,每个开发者账号有一套。一个证书里面包含私钥和公钥。私钥是保存在你的电脑上的,别人无法得到。公钥是可以从苹果开发者网站下载后得到的。一个证书只有公钥和私钥配对成功后,才能认证身份。比如说,你想要让你的某个朋友的电脑也能使用你的证书真机调试或者发布应用,于是你从你的开发者网站上面下载了证书,让你的朋友在他的电脑上安装,这还不够,因为此时他还只有公钥,你需要从你的电脑上的“钥匙串访问”中导出p12文件(保存了你的私钥),让你的朋友电脑安装,这样他的电脑才有“资格”真机调试。

           当然,证书也分为开发证书(Developer Certification)和发布证书(Distribution Certification)。开发证书可以用来真机测试。发布证书可以制作测试版和发布版的程序。


    【代码签名 Code Signing】

           可能大家学iOS刚开始想要去真机调试的时候,都会去Build Setting里面配置Code Signing这个东西。但是其实我们不知道这个是什么东西。只要在提到上面的证书的时候,才能说得清代码签名。当我们真机调试的时候,程序会进行打包,然后通过Xcode安装到我们的手机上。 也只有在电脑安装了证书之后,Build Setting里面的Code Signing才可以选择,而选择项恰恰就是你安装的证书,是哪些证书呢?你可以去钥匙串访问中看到,两者是一一对应的。用简单粗暴的话说就是:用这个证书来签名你的应用,以验证你这个应用到底有什么权限(真机调试呢还是发布呢),确保了应用的安全性和合法性。
           而目前为止,苹果提供了三种签名方式

    (1)Ad-hoc:可以进行真机调试和内测,只要你知道了那些设备的UDID(设备唯一标识符)即可。

    (2)In-house:企业账号专用。

    (3)App-Store:发布到App Store。


    【授权文件 Provisioning Profile】

           有时候也称为配置文件。授权文件是对iOS设备的授权,文件内主要记录了三样东西:App ID(Bundle Identifier)、设备的唯一标识符(UDID)、和证书。用一句话说就是:使被授权的设备可以安装或调试 授权文件中记录的App ID对应的程序。在开发者网站上创建授权文件的时候会选择App ID,UDID。同样对于两种证书,也有两种配置文件:开发授权文件(Developer Provisioning Profile)和发布授权文件(Distribution Provisioning Profile)。

           在真机调试或者发布的时候,也需要在Build Setting-->Code Signing-->Provisioning Profile选中对应的授权文件。真机调试的过程其实就是一个检查匹配的过程:检查当前App的Bundle Identifier和授权文件中的App ID是否匹配;检查程序的代码签名和授权文件中包括的证书是否匹配;检查当前运行设备的UDID和授权文件中写入的Device ID是否一致;只有成功完成匹配后,才能成功的运行。详细说明请参考《iOS开发Provionsioning Profile解析》。


    【设备唯一标识符 UDID 】

         使用该标识符可以区分每一台唯一的iOS设备。可通过Xcode-->Window-->Device来获取。


    【开发者账号】

           作为一个普通的开发者,还是建议去买一个开发者账号,99美元也不算太贵。在Xcode7之后其实不需要开发者账号就可以免证书调试了。但是发布应用到App Store就必须要账号了。可能我们在公司工作,会有公司的证书,但是我们自己私下开发,就必须要使用自己的账号了。况且要用一些高级的功能,比如推送、应用内购买j就必须要账号了。


    我下面开始来讲解整个发布流程:

    (1)打开钥匙串访问-->证书助理-->从证书颁发机构请求证书,如下图所示:


    在用户电子邮件地址中写入你想要收到的邮件地址,我一般写Apple ID的邮箱,下面的常用名称随意即可,你也可以写入你的名字,最好是英文。下面的CA电子邮件地址默认“必需”不用管。最后选择"存储到磁盘"即可。

    保存到电脑上以后,是如下的一个文件:


    可以看到这是一个CSR文件,也就是证书请求(签名)文件,我们可以这个文件去苹果的开发者网站上请求一个证书。


    (2)进入苹果开发者网站: https://developer.apple.com/  。然后选择Account进入,需要你输入你的Apple ID和密码进入。最近我发现这个页面又发生了改版。进入后如图所示:


    配置证书、授权文件选择左边那个Certificates,Identifier &Profiles .等到可以发布的时候选择右边的iTunes Connect.   现在我们选择左边的Certificates进入:


    左边导航栏列出了我们要配置的所有东西。Certificates就是证书,Idetifiers就是配置我们的App ID,Devices就是添加我们的真机调试设备,最后的Provisioning Profile就是配置授权文件。


    (3)首先配置证书:

    可以看到需要我们上传Certificate Signing Request文件,就是我们刚刚从钥匙串访问中导出的CSR文件,


    如果是要开发证书,就选择Development-->iOS App Development.  如果是要发布证书,选择下面的Pruduct-->App Store and Ad Hoc. 两者的操作其实是一样的,我这里以配置开发证书为例。点击Continue下一步,


    需要我们创建CSR文件,苹果也给出了如何创建CSR文件的步骤,应该和我讲的是一样的,因为我们已经创建好了,所以直接Continue下一步:


    直接选择我们的CSR文件进去即可。Continue下一步即可,


    此时表示证书已经创建完成了,点击Download下载到电脑上。此时的这个开发证书就可以让我们进行真机调试了。我们再进行同样的步骤,在上面选择一个发布证书,创建完成后下载到本地。


    如图,后缀是.cer表示是一个证书,很明显,左边的是开发证书,右边的是发布证书。我们分别双击进行安装。安装完成后,我们可以进入钥匙串访问查看,


    可以看到我们的两个证书都已经成功安装了。


    (4)我们创建一个新项目,作为我们调试和发布的项目,名称为MyFirstApp.  当然,现在这个是个空项目,就算提交审核了也是不会发布的。在这只是做一个演示。一个App发布的最低的要求就是要有icon图标,否则打包是会失败的。所以我需要导入图标。在等下提交审核的时候还需要App在各个屏幕下的截图。对于这两者的资源,都要提前准备好。仅仅作为一个测试,我把这个资源已经准备好了,https://github.com/chenyufeng1991/iOS-ScreenshotsAndIcon-   。对于想快速测试这个流程,又不想麻烦的去生成图标截图的,可以先暂时使用这里面的资源。


    (5)应用开发完成后,我们继续去开发者网站上面配置App ID,选择左侧导航栏-->Identifier-->App  IDs,这里可以看到我们创建的所有的应用的ID .  此时我们新建一个:

    .

    这里主要要填入两个地方,在 App ID Description中填入这个app的简单描述,只要不输入@,&等这些非法字符即可。在下面的Budle ID 中填入你应用的Bundle Identifier,比如我这里的Bundle ID就是:com.chenyufengweb.MyFirstApp.

    最下面你还可以选择需要哪些应用服务,比如推送,Apple Pay,iCloud等服务,如果你的应用使用到,都需要勾选上。点击Continue下一步,


    这一步是让你确认App中包含的信息,确定无误的话点击Register注册这个app。完成后,就可以在列表中看到我们注册完成的应用了,




    (6)现在需要来注册我们需要真机调试的设备了。可以看到这里可以注册的设备有Apple TV,Apple Watch,iPad,iPhone,iPod这几种,表示你的应用可以在这些设备上真机调试。

    .


    Name可以输入这台设备的名称,可以任意取。UDID输入唯一标识符,可以用上面提到的方式去获取。


    可以看到我们注册的开发者账号可以添加各个类型的设备各100台。对于个人开发者来说已经足够了。上面的信息确认无误后,点击Register注册即可。注册完成后,列表中就会显示出该账号下的所有设备:



    (7)最后我们来配置授权文件,点击manually generate profiles手动创建一个授权文件,




    在这里,我们可以看到,授权文件和证书一样,也是分为开发的和发布的。如我上面所说,授权文件会把App ID、设备UDID、证书都打包进来。我这里以开发的为例进行创建。选择iOS App Development,点击Contunue下一步:


    在这一步选择我上面创建的App ID。点击Continue下一步:


    这一步是选择证书,因为是一一对应的,所在在这里只能选择开发证书,而不能选择发布证书,点击Continue下一步,


    这里是要选择真机调试的设备,只有选中的设备才能调试该应用。

    在这一步是为这个授权文件取一个名字,最好在名字里面说明这是开发的还是发布的,便于以后区分。点击Continue下一步。


    创建完成后,点击Download下载。对于发布授权证书,也按同样的方式进行创建。两个文件下载完成后,如下所示:


    直接双击这两个文件,授权文件就会自动安装到Xcode中去。


    (8)来到我们Xcode的项目中,来配置证书和授权文件。

    进入Build Setting-->Code Signing-->Code Signing Identity,在Debug中选择开发证书,在Release中选择发布证书。(想要看电脑上安装了哪些证书,可以去钥匙串访问哦)。

    在下面的Provisioning Profile中选择授权文件,Debug处选择开发授权文件,Release处选择发布授权文件。配置完后如下所示:


    经过以上步骤,我们就可以在指定设备上运行该应用了。


    (9)我们的应用已经开发完毕,现在要提交到App  Store了。要用到的工具就是iTunes Connect. 再次进入苹果开发者网站,点击iTunes Connect.进入:


    进入后的主页面如下,


    可以看到在iTunes Connect.中可以管理我们已经上线或者即将上线的应用。点击进入“我的App”. 然后点击左上角的“+”号创建一个新应用,


    可能你的Name已经被占用了,那就换一个。点击Create创建。

    选择左上角的App Information,这里可以简单配置App的信息,比如右侧的Category,表示你App的分类,比如音乐、购物等等,一级分类是必须选择的。点击右上角Save保存。

    左侧第二个Pricing and Availiablity是一些价格和购买信息,我这里选择免费。点击右上角Save保存。

    第三个1.0 Prepare for Submission则是一些发布的详细信息,首先要有不同屏幕上的五张截屏,如果你的应用不适配到iPad上,那么可以不上传iPad的截图。



    同时可以添加这个应用的描述,关键字,以及支持的网站。下面的Build构建先不用,等下我们会使用Xcode上传的。



    同时还要上传Icon,这里的Icon必须钥匙1024*1024的,以及你应用的分级、和你的地址、联系方法等信息。可以按你的实际情况填写即可。



    最下面的位置需要你提供一个测试账号,也就是使用该账号可以登录你的App,并使用所有的功能,方便为苹果审核。Version Release则是说你想要在审核通过后直接发布还是手动设置时间发布。按你的实际需求设置。然后点击右上角的Save保存。


    (10)在iTunes Connect.上面的设置基本结束了。我们再次回到Xcode中,来打包我们的程序。

    此时需要把你的手机连上Xcode或者在调试设备中选择Generic iOS Device,然后选择Product-->Archive(如果调试设备选择了模拟器,则Archive不可点击)。就会出现如下界面:


    这里就是对你的应用程序进行打包。如果我们仅仅只是想要导出.ipa文件,可以直接选择右侧的Export,然后你可以把这个ipa文件放到其他的内测平台上去分发。由于我们就是直接想发布到App Store上面,并且已经在iTunes Connect.上面做好了设置,所以我们直接点击“Upload to App Store”即可。

    .

    在这过程中,可能会等的比较久。时候还会提交失败,因为可能是你程序中的某些问题,或者提交了同一个版本,如下是因为我重复提交了1.0版本,然后报错了。


    在成功修复后,就可以再次upload了。成功以后出现如图界面:


    此时,我们就把应用成功提交到iTunes Connect.上面了。


    (12)再次来到iTunes Connect.中,找到Build的地方,发现已经跟刚才不一样了。出现了"Select a build before you submit your app",也就是让我们选择一个版本提交。点击后出现如下界面:

    .

    可以看到我们刚刚upload了两个版本。比如我选择2.0(2)进行提交。此时的Build如下:

    .

    然后点击Save保存。最后点击旁边的“Submit for Review”,也就是提交审核。最后还是会出现一个页面让你确认一些信息:


    其中包括加密确认、显示第三方内容、和广告问题。根据实际情况选择提交。提交成功后,上面就出现了Waiting For Review 等待审核的字样:


    等过几天苹果审核通过后,你就能发布这款App了。

          

           看一百遍不如去做一次。流程看起来复杂,但是只要去做一次,就会发现其实还是很有逻辑的。希望大家能发布越来越好玩的App。


    展开全文
  • 详细地介绍了动态口令在银行、证券、办公自动化等系统中的应用。重点说明了动态口令地几中新的应用方式和技术。本文对从事信息安全建设的领导和工程师有指导作用。 主题词:信息安全、身份认证、动态口令 动态口令...
     
    

    内容提要:本文概要地论述了动态口令(动态口令)的基本概念、工作原理和基本技术。详细地介绍了动态口令在银行、证券、办公自动化等系统中的应用。重点说明了动态口令地几中新的应用方式和技术。本文对从事信息安全建设的领导和工程师有指导作用。

    主题词:信息安全、身份认证、动态口令

    动态口令的概念与起源

      身份认证是信息安全体系的重要组成部分,它是保护信息系统安全的第一道大门。它的任务是检验信息系统用户身份的合法性和真实性,并按系统授予的权限访问系统资源,将非法访问者拒之门外。

      身份认证技术分为:常规的“口令”代码认证、动态口令(动态口令)认证、生物技术(指纹、虹膜、面容等)认证、通过第三方发放的数字证书(CA)认证等。其中常规的“口令”代码认证是计算机系统的早期身份认证产品, 因其“口令”的静态特性和重复使用性,存在易窃取、易猜测、易破解等安全缺陷,是一种弱身份认证系统,只能用于安全等级要求较低的信息系统。动态口令认证、生物技术认证和数字证书认证是强身份认证系统,可用于政府、金融、企业等重要信息系统的安全认证。

      针对静态口令认证的缺陷,80年代初,美国科学家Leslie Lamport首次提出了利用散列函数产生一次性口令的思想,即用户每次登录系统时所使用的口令是不同的,且一次有效。1991年贝尔通信研究中心(Bell core)用DES加密算法首次研制出了基于一次性口令思想的挑战/应答式动态口令身份认证系统S/KEY。之后,更安全的基于MD4和MD5散列算法的动态口令认证系统也开发出来。为了克服挑战/应答式动态口令认证系统使用过程烦琐,占用过多通信时间资源的缺点,美国著名的加密算法研究实验室RSA研制成功了基于时间同步的动态口令认证系统RSA SecureID。RSA公司也由此获得了时间同步的专利技术。除RSA公司外,美国的Secure Computing公司和 AXENT(Symantec)公司也是动态口令认证产品的供应商。

      我国的中科院信息安全国家重点实验室(DCS中心)于1998年研制成功具有我国知识产权的动态口令身份认证系统。之后,福建凯特公司、北京捷安世纪科技公司、北京捷安世纪科技有限公司、北京集联公司等开发出了不同型号的动态口令身份认证系统。与此同时,四川安盟公司与美国RSA公司合作,把RSA产品引进了我国。以上产品推动了动态口令在我国的应用。

     

    二、动态口令认证技术的类型与工作原理

      动态口令(Dynamic Password)也称一次性口令(One-time Password)。动态口令是变动的口令,其变动来源于产生口令的运算因子是变化的。动态口令的产生因子一般都采用双运算因子(two factor):其一,为用户的私有密钥。它是代表用户身份的识别码,是固定不变的。其二,为变动因子。正是变动因子的不断变化,才产生了不断变动的动态口令。采用不同的变动因子,形成了不同的动态口令认证技术:基于时间同步(Time Synchronous)认证技术、基于事件同步(Event Synchronous)认证技术和挑战/应答方式的非同(Challenge/Response Asynchronous)认证技术。

      1、时间同步认证技术

      基于时间同步认证技术是把流逝的时间作为变动因子,一般以60秒作为变化单位。所谓“同步”是指用户口令卡和认证服务器所产生的口令在时间上必须同步。这里的时间同步方法不是用“时统”技术,而是用“滑动窗口”技术。图1为客户终端访问系统时,基于时间同步的认证过程。

      ①:客户请求接入应用服务器;

      ②:应用服务器请求认证服务器对客户的身份的合法性和真实性进行认证;

      ③:客户终端弹出身份认证对话框;

      ④:客户在持有的口令卡上键入PIN码(或开机码),激活口令卡;

      ⑤:客户将帐号和口令键入终端的身份认证对话框;

      ⑥:客户终端将帐号和口令通过网络传输给认证服务器;

      ⑦:认证服务器调用客户信息,产生与客户信息和时间相关的随机序列,并与客户输入的口令进行比对,判别客户身份的合法性和真实性;

      ⑧:认证服务器将认证结果报告给应用服务器;

      ⑨:应用服务器根据客户身份的合法性和真实性反馈给客户终端,并决定可以提供服务或拒绝服务。

      2、事件同步认证技术

      基于事件同步认证技术是把变动的数字序列(事件序列)作为口令产生器的一个运算因子,与用户的私有密钥共同产生动态口令。这里的同步是指每次认证时,认证服务器与口令卡保持相同的事件序列。如果用户使用时,因操作失误多产生了几组口令出现不同步,服务器会自动同步到目前使用的口令,一旦一个口令被使用过后,在口令序列中所有这个口令之前的口令都会失效。其认证过程与时间同步认证相同。

      3、挑战/应答认证技术

      挑战/应答(Challenge/Response)方式的变动因子是由认证服务器产生的随机数字序列(Challenge),它也是口令卡的口令生成的变动因子,其认证过程见图2所示:

      ①:客户请求接入应用服务器;

      ②:应用服务器请求认证服务器对客户的身份的合法性和真实性进行认证;

      ③:认证服务器先传送一个随机动态的数字序列(Challenge)给客户终端;

      ④:客户将Challenge数字序列键入口令卡,口令卡产生动态口令;

      ⑤:客户将帐号和口令键入终端的身份认证对话框;

      ⑥:客户终端通过网络将动态口令传输给认证服务器;

      ⑦:认证服务器调用客户信息,产生与客户信息和Challenge数字序列相关的动态口令,并与客户输入的口令进行比对,判别客户身份的合法性和真实性;

      ⑧:认证服务器将认证结果报告给应用服务器;

      ⑨:应用服务器根据客户身份的合法性和真实性反馈给客户终端,并决定可以提供服务或拒绝服务。

    由于每一个Challenge都是唯一的、不会重覆使用,并且Challenge是在同一个地方产生,所以,不存在同步问题。

      上述三种动态口令身份认证方式的性能比较见下表。

    认证方式

    优点

    缺点

    应用环境

    时间同步认证

    简单、易用、易管理、占用网络时间资源少。

    安全性低于挑战/应答方式

    集中管理的系统

    事件同步认证

    简单、易用、易管理;

     

    安全性低于挑战/应答方式;

    口令卡丢失存在安全隐患。

    需要批次作业的系统

    挑战/应答认证

    安全性高、一卡多用。

    操作烦琐、占用网络时间多

    安全性要求高的小系统

      当前,市场上使用最多的是时间同步认证技术,它既能在大型电子商务系统中应用,也能在内部网中应用。为了保证认证服务器 “时钟”的稳定、可靠,不被人恶意修改,保证动态口令算法的安全,北京捷安世纪科技公司为认证服务器专门开发了“时钟/口令卡”。

      由于用户持有口令卡,且只有自己知道的PIN码;由于口令卡产生的新口令,不可预测,并只能使用一次;由于密钥加密存放在服务器和口令卡中,且不在网络中传输,所以,动态口令不怕被人偷看,不怕网络“黑客”的网络窃听,不怕“重放攻击”,不能猜测,不易破解,具有强身份认证的特征,具有较高的安全性和使用的方便性。近年来,随着网络安全事件的大幅度上升,动态口令身份认证系统越来越受到青睐。目前,已有超过一千万人使用名片大小的动态口令卡:企业员工、合作伙伴、客户安全地访问企业内部网;股民放心地进行证券网上委托交易;银行用户方便地进行网上银行交易;电子政务、电子报关、电子报税、社区管理等等。

      动态口令的典型应用

      1、动态口令在内联网中的应用

      北京捷安世纪科技公司研发的《安驿信》动态口令认证系统内联网解决方案,为内联网提供了强身份认证系统,其解决方案如图3所示:

      动态口令认证系统由认证服务器、管理工作站、写卡器、动态口令卡和加载在内联网应用服务器中的认证代理软件组成。认证服务器支持100,000个以上的用户并发同步认证,若用户超过100,000个,系统支持多个认证服务器同时工作。动态口令卡是本地用户和远程用户登录网络的“通行证”。口令卡中装有代表用户身份的密钥,密钥具有唯一性;随机产生的口令,每分钟变化一次,不可猜测,难以破解,抗攻击能力强;系统保证口令使用一次一密,抗重放攻击等。管理工作站提供认证服务器的管理界面,担负认证系统管理任务,包括用户信息管理、口令卡管理、认证日志管理等。

      2、动态口令在网上银行系统中的应用

      网上银行是是借助客户的PC、移动电话、掌上电脑等智能设备,通过Internet向客户提供包括支付在内的金融服务。随着Internet的普及,网络银行的方便、快捷和廉价使其成为银行间竞争的要素之一,越来越受到银行和用户的青睐。然而,网上口令安全问题使得广大银行客户心有余悸。静态口令的安全强度已明显不够,基于PKI体系的CA认证使用比较烦琐,如何兼顾安全与使用方便两方面的要求,是必须解决的问题。北京捷安世纪科技公司《网上银行安全解决方案》(见图4)较好的解决了此问题。

      3、动态口令在证券交易系统中的应用

      现行的证券交易系统对客户身份真实性的认证通常采用“通信口令+交易口令” 的静态口令方式和CA证书的方式。由于“通信口令”和“交易口令”都是静态口令,存在易猜测、易窃取、易破解等安全隐患,CA证书在使用上麻烦,券商和股民都期待着用简单、易用、廉价的强身份认证方式提升交易系统的安全性。

      北京捷安世纪科技公司研发的《JASEC动态口令认证系统》和以动态口令认证为核心的《JASEC网上交易安全系统》可为证券公司提供满足要求的强身份认证和交易信息强加密服务。《JASEC动态口令认证系统》可直接用于电话委托交易和柜台交易,也可用于证券公司内部业务系统。《JASEC网上交易安全系统》可用于网上证券交易。《JASEC网上交易安全系统》由两个部分组成:基于时间同步的动态口令强身份认证系统和基于SSL协议的客户信息加密系统。该产品的技术体制是用动态口令强身份认证取代接入网上证券交易系统的静态口令身份认证系统;用动态口令强身份认证取代证券营业部交易服务器的交易口令认证,保证股民身份的确定性;用安全套接层SSL协议单向证书提供的安全机制,特别是SSL提供的超强加密信道,保证股民交易信息传输的安全性。图5为动态口令在电话委托等柜台交易中的身份认证过程,图6为动态口令及SSL在网上交易中的强身份认证过程。

      3、动态口令在办公自动化(OA)系统中的应用

      办公自动化(OA)系统是政府机关电子政务的重点信息设施,也是现代企业办公的基础环境。信息安全必须内外兼备,强身份认证是OA系统必须具备的功能之一。我国现行的OA系统多数是基于DOMINO/NOTES R5开发的,系统以B/S模式提供服务,其用户身份认证方式采用DOMINO自身所带的静态口令。由于静态口令的弱安全性已经不适应当前的安全需求,OA系统必需建立具有较高安全机制的强身份验证系统,以保证OA系统的应用安全。为适应OA系统强身份认证的需要,北京捷安世纪科技公司开发了适应OA系统西药的强身份认证系统。其结构见图7所示。

    当用户登陆Domino 服务器时,Domino 服务器调用NETSFEAGENT DSAPI过滤器模块。NETSFEAGENT DSAPI过滤器模块提供了Domino 服务器与认证服务器的通讯的函数模块,该模块除实现认证请求与响应外,还实现用户主机系统与身份认证服务器通信格式的统一。NETSFEAGENT DSAPI过滤器接受调用请求后,能自动决定把请求发往认证服务器或后备服务器,认证服务器通过安全算法来验证用户是否具有合法身份,并返回认证信息给NETSFEAGENT DSAPI过滤器模块。如果用户认证通过,即可获得访问Domino 服务器的OA应用。如果用户未通过认证,返回认证失败信息,拒绝用户连接。具体结构如图8所示。

    动态口令身份认证系统除了上述典型应用之外,凡是使用“口令”进行身份认证的地方,均能使用动态口令。例如:动态口令与防火墙结合,实现防火墙的强身份控制;动态口令与VPN网关结合,建立安全隧道;动态口令与Web服务器结合,控制与互联网的接入;动态口令与E-mail服务器结合, 避免系统资源通过E-mail服务器外传等等。

    四、 动态口令身份认证应用与技术发展

    1、消息传递的动态口令——“移动口令”的产生与使用

    在2001年之前,动态口令身份认证系统对用户身份地验证均依赖于用户注册时发放给的动态口令卡。成百万、上千万的动态口令卡难以保证故障概率为零,动态口令卡一旦失效,用户将无法接入信息系统;动态口令的算法在动态口令卡生产时确定下来后,不能更改,不能排出被人破译的可能性;动态口令卡使用电池供电,电池寿命一般为2年,到时必须更换电池,也给用户使用带来不变;动态口令卡的丢失也是不安全的因素等等。在动态口令认证系统中能否抛弃动态口令卡,成了大规模推广动态口令的关键技术问题。为此,一些公司开发了基于USB接口的口令钥匙。口令钥匙只是动态口令卡的变型,它只解决了供电问题,但未解决钥匙的口令算法、可靠性和丢失钥匙带来的安全问题。北京捷安世纪科技公司另辟溪径,将动态口令地生产由分散变为集中,使用移动通信网络短消息传递动态口令,用户从手机直接获得动态口令,即“移动口令”。“移动口令”彻底地抛弃了动态口令卡或口令钥匙为个人生产动态口令的方式,是动态口令发展史上的一次革命。所谓“移动口令”是经移动通信网络传输的动态口令,该口令随手机而移动。使用移动口令的动态口令身份认证系统的体系结构见图9所示。

    为了保证用户使用移动口令的安全,用户在使用移动口令前,需要经过互联网进行注册。注册的过程见图10所示。

     

    移动口令的注册过程是:

    ①:用户登录移动口令注册服务网站;

    ②:通过Web服务器进入移动口令注册服务操作界面;

    ③:用户输入ID和手机号码,并传递到Web服务器→网站应用管理服务器;

    ④:网站应用管理服务器为该用户产生注册用的初始口令,并将该初始口令通过移动互联网传递给注册用户的手机;

    ⑤:用户在弹出的第二个注册页面上输入:{用户ID+手机号码+初始口令},并传递到Web服务器→网站应用管理服务器, 进行确认;

    ⑥:网站应用管理服务器经确认后,将结果返回给注册用户。

    ⑦:经确认的用户,在弹出的第三个注册页面上输入用户的详细信息:{用户姓名+用户帐号+帐号口令+身份证号码+通信地址+邮政编码},并传递到Web服务器→网站应用管理服务器保存;

    ⑧:网站应用管理服务器将注册结果返回给注册用户。注册成功后,用户即可使用移动口令。

    2、 动态口令应用的新领域——商品防伪中的动态口令

    长期以来,商品防伪技术的重点是利用现代科技手段提高商品防伪标识的抗复制能力,产生了以物理技术为基础的激光全息、光学可变薄膜、超微棱衍射图案、热色液晶等防卫技术;以印刷技术为基础的凹版印刷、彩虹印刷、多色迭印、折光潜印、隐形图像等防伪印刷技术。防伪标识地制作技术越复杂,制作防伪标识的投入越大,给企业带来很大负担,降低了商品的市场竞争能力。

    近年来 ,以信息网络技术为基础的“数码防伪”异军突起,出现了电话防伪查讯、计算机防伪查讯等。“数码防伪”是将信息编码理论与信息网络相结合,实现对商品真伪识别。

    在信息安全领域,动态口令用来识别信息系统用户身份的合法性,即对人的身份进行识别。那么,动态口令能否用来识别商品、票证、设备的真伪呢?回答是肯定的。北京捷安世纪科技公司开发了“短信防伪认证系统”,用于商品和票证的防伪认证。北京捷安世纪科技公司开发的“短信防伪认证系统”是将动态口令、移动短消息服务和Internet结合起来,实现使用手机或计算机对商品的防伪认证。短信防伪认证系统的结构见图11 所示。

    短信防伪认证系统由商品防伪码产生器、商品防伪认证服务器、商品防伪服务网站组成。其中商品防伪码产生器产生商品的序列号和与其对应的防伪口令。商品的序列号为明码印刷,防伪口令为掩膜印刷。系统支持同一商品的多次认证,首次认证使用商品上印刷的口令,后续的认证口令由认证服务器在前次认证返回信息中提供。本系统具有以下特点:

    短信防伪认证系统由商品防伪码产生器、商品防伪认证服务器、商品防伪服务网站组成。其中商品防伪码产生器产生商品的序列号和与其对应的防伪口令。商品的序列号为明码印刷,防伪口令为掩膜印刷。系统支持同一商品的多次认证,首次认证使用商品上印刷的口令,后续的认证口令由认证服务器在前次认证返回信息中提供。

    l防伪口令具有唯一性,即防伪标识物上印刷的防伪口令和多次认证使用的口令是一件产品一个编码,不可重复,编码的生成是随机的,保密性强;

    l防伪口令使用一次性,一经验证,即行作废;

    l使用方便,消费者无论何时何地均可通过手机或网络终端输入商品的序列号和防伪编码,系统自动鉴别,及时响应;

    l并发认证能力强,同一个系统支持多个厂商、多种产品同时认证;

    l防伪认证标识印刷简单,投入少。

    3、 动态口令在网络设备认证中的应用

    堡垒最容易从内部攻破。大量的信息安全案件证明有有意泄露内部网络的登录口令、端口号码和设备地址,利用互联网的开放性和信息系统的安全缺陷,进行内外勾结作案是信息犯罪的重要方式。随着电子政务的发展,大量的内部网络将要适度开放,内部网络中的敏感信息要实行严格的身份验证和授权控制。目前的身份认证/数字簽名是验证使用电脑(或終
    端)的人。对内外勾结窃取口令后在外部作案,身份认证是无能为力的。但是,设备认证可以解决这个问题。

    所谓设备认证。即将电脑或终端设备的专有信息,例如计算机的硬盘号码、CPU号码、网卡的MAC地址号等进行组合、编码、切块,分散存储于硬盘中,当设备要入网时,自动将存储在硬盘中的身份信息进行组合,送往设备认证中心进行设备的身份认证。若设备身份合法,再对使用设备的人进行身份认证。

    为了增强设备认证的强度,不仅提取设备的专有信息,并对专有信息进行编码。还必须引入动态口令的可变因子,保证设备的身份认证口令是动态可变的。这个口令不仅与设备的硬件设备有关,也与动态口令算法有关。若想窃取设备的认证口令除非将计算机的硬盘、网卡、CPU等都取走,还必须将动态口令的算法软件也窃取,这对于管理严格的信息系统是难以办到的。一旦出现此种问题,也容易破案。

     
    展开全文
  • 该表达验证的功能如下: ...2、用户离开表单输入控件时会自动校验,如果校验非法,该控件的边框底色会变红 3、如果在保存按钮上注册检查所有表单输入控件的代码,则会在点击按钮保存时检查所有输入表

    该表达验证的功能如下:

    1、针对每个表单输入控件,用户可设置自定义级别和基本级别的匹配表达式和相应的提示信息;

    2、用户离开表单输入控件时会自动校验,如果校验非法,该控件的边框底色会变红

    3、如果在保存按钮上注册检查所有表单输入控件的代码,则会在点击按钮保存时检查所有输入表单控件,校验不合法的底色变红,

          焦点自动定位到第1个输入非法的表达控件,也不会触发回发事件。

    4、鼠标放在输入非法的表达控件上,会在输入控件的下方显示输入提示信息。

    优势:1、验证表达式和提示信息可以通过服务器端属性注册实现,便于程序员使用,也便于扩展到从数据库获取设置信息;

    2、替代使用aspnet提供的表达验证控件,既可以减少验证控件对布局的影响,因为验证和输入控件集成,增加了可维护性。

    页面表单验证代码:

    注:BaseRegExp为基本验证表达式,OrgRegExp为组织级正则表达式,EntRegExp为企业级验证表达式。一般的应用只要BaseRegExp即可.

    (function(){
        var InvalidationCheck = function(){

        //输入匹配检测
        function CheckValidation(input,regexp)
        {
            if(!input)
            {
               input = "";
            }
            var theMatch =input.match(regexp);
            if(theMatch)
            {
               return true;
            }
            else
            {
               return false;
            }
        }

       //创建或获取提示框,如果表单控件的输入不合法,一是该控件的边框颜色会变,而是鼠标经过时会提示规则信息,对客户比较友好。
        function CreateMsgDiv(msg)
        {
            var theDiv = $('#MyMessageDiv');
            if(theDiv.length<=0)
            {
               theDiv = $("<div id='MyMessageDiv' class='MyTooltip' style='display:block'>"+msg+"</div>");
            }
            return theDiv;
        }
        //获取元素的位置.
        function GetElementPos(el)
        {
            var op = el[0];
            var theX = op.offsetLeft;
            var theY = op.offsetTop;
            while(op =op.offsetParent)
            {
               theX += op.offsetLeft;
               theY += op.offsetTop;
            }
            return [theX,theY];
        }
        //获取输入规则信息,用于提示用户.
        function GetInputRegulation(obj)
        {
           var theRet = obj.attr("inputregmsg");
           return ((theRet==null)?"":theRet);
        }

       //设置表单输入控件的状态,true表示输入合法,false表示输入非法.
        function SetInputState(obj,state)
        {
            if(state==false)
            {
               obj.attr("inputstate","false");
            }
            else
            {
               obj.attr("inputstate","true");
            }
        }

      //获取表达输入控件状态.
        function GetInputState(obj)
        {
           return (obj.attr("inputstate") != "false")?true:false;
        }

       //保存表单控件的样式,一旦输入合法后可恢复

        function SetOldClassName(obj)
        {
           var theOldStyle = obj.attr("oldclassname");
           if(theOldStyle==null)
           {
              var theClass = obj.attr("className");
              if(!theClass)
              {
                 theClass="";
              }
              obj.attr("oldclassname",theClass);
           }
        }

        //获取当前样式类名
        function GetCurrClassName(obj,IsValid)
        {
          var theStyle = null;
          if(IsValid==true)
          {
              theStyle = obj.attr("oldclassname");
              if(!theStyle)
              {
                theStyle ="";
              }
          }
          else
          {
              theStyle = "InputIsInvalid";
          }
         
          return theStyle;
        }

       //设置当前显示样式.
        function SetCurrDisplayStyle(obj,IsValid)
        {
           obj.attr("className",GetCurrClassName(obj,IsValid));
        }

       //检查所有表单控件,适用于保存按钮.
        function CheckAllInput()
        {
            var theFirstInvalidObj = null;  
            //处理输入框
            var inputs = $(':text:enabled,textarea:enabled,select:enabled');
            for(var i=0;i<inputs.length;i++)
            {
               //获取OrgRegExp
               var theCurrInput =$(inputs[i]);
               var theCurrOK = true;
               SetOldClassName(theCurrInput);
               var theOrgRE = theCurrInput.attr("OrgRegExp");
               if(theOrgRE)
               {
                   theCurrOK = CheckValidation(theCurrInput.val(),theOrgRE);
                   SetCurrDisplayStyle(theCurrInput,theCurrOK);
                   if(theCurrOK==false)
                   {
                      SetInputState(theCurrInput,false);
                      if(!theFirstInvalidObj)
                      {
                         theFirstInvalidObj = theCurrInput;
                      }
                      continue;
                   }
               }
               //获取基本的校验表达式
               var theBaseRE = theCurrInput.attr("BaseRegExp");
               if(theBaseRE)
               {
                   theCurrOK = CheckValidation(theCurrInput.val(),theBaseRE);
                   SetCurrDisplayStyle(theCurrInput,theCurrOK);
                   if(theCurrOK == false)
                   {
                      if(!theFirstInvalidObj)
                      {
                         theFirstInvalidObj = theCurrInput;
                      }
                   }
               }
               SetInputState(theCurrInput,theCurrOK);
            }

            //获取第一个输入非法的表单控件,默认会自动定位到该控件.
            return theFirstInvalidObj;
        }
        this.ShowTooltipMsg =function(event)
        {
           var obj = $(this);
           if(GetInputState(obj)==false)
           {
              var Msg = GetInputRegulation(obj);
              if(Msg)
              {
                 var theDiv = CreateMsgDiv(Msg);
                 theDiv.appendTo('body');
                 var thePos = GetElementPos(obj);
                 theDiv.css("left",thePos[0] + event.offsetX + "px");
                 theDiv.css("top",thePos[1] +23+ "px");
              }
           }
        }
        this.HiddenTooltipMsg =function(event)
        {
           var obj = $(this);
          if(GetInputState(obj)==false)
          {
            var theDiv = $("#MyMessageDiv");
            if(theDiv.length>0)
            {
               $("body")[0].removeChild(theDiv[0]);
            }
          }
        }
        this.DoValidationAlbert =function()
        {
            var theFirstObj = CheckAllInput();
            if(theFirstObj)
            {
               try
               {
                  theFirstObj.focus();
               }
               catch(ex)
               {
               }
               return false;
            }
            return true;
        }
        this.CheckInputValidation=function()
        {
               //获取OrgRegExp
               var theCurrInput =$(this);
               var theCurrOK = true;
               //设置旧的样式类.
               SetOldClassName(theCurrInput);
               var theOrgRE = theCurrInput.attr("OrgRegExp");
               if(theOrgRE)
               {
                  theCurrOK = CheckValidation(theCurrInput.val(),theOrgRE);
                   SetCurrDisplayStyle(theCurrInput,theCurrOK);
               }
               if(theCurrOK==false)
               {
                  SetInputState(theCurrInput,false);
                  return;
               }
               //获取基本的校验表达式
               var theBaseRE = theCurrInput.attr("BaseRegExp");
               if(theBaseRE)
               {
                   theCurrOK = CheckValidation(theCurrInput.val(),theBaseRE);
                   SetCurrDisplayStyle(theCurrInput,theCurrOK);
               }
               SetInputState(theCurrInput,theCurrOK);
        }
        this.Init = function()
        {
           $(':text:enabled,textarea:enabled,select:enabled').mouseenter(this.ShowTooltipMsg)
          .mouseleave(this.HiddenTooltipMsg)
          .mousemove(this.ShowTooltipMsg)
          .keypress(this.HiddenTooltipMsg)
          .blur(this.CheckInputValidation);
          $(document.forms[0]).submit(this.DoValidationAlbert);
        }
      }
      $InputCheck = new InvalidationCheck();
    })();
    用法:要运行该代码,需要JQuery库。如果不需要中间回发,只需要调用Init初始化一下,验证正则表达式可通过服务器端服务控件注册属性的方式加入。

    如果需要回发,则控件事件触发函数挂接,需要在服务器端来完成。

    如果利用服务器控件,有两种方法完成验证表达式和提示信息的方式:一是通过对控件注册属性来完成,一是可以简单继承一下控件,将需要的信息作为服务器控件的属性,并输出到客户端属性。我个人偏向于后一种方法,因为这样,程序员既可以通过所见即所得的方式使用,而且这些验证信息可以从数据库读取,适合规模应用,而且事件的注册也可以在控件中自动完成,免除客户端注册或者手工设置的麻烦。

    展开全文
  • 前言: 本文写于2014年2月,五年弹指一挥间,近期整理发表,本文出自门心叼龙的博客,属于原创类容,侵权必究。转载请注明出处。...1.1.2 基于WebGIS的车联网平台应用介绍 3 1.2 论文的主要研...

    前言:

    本文写于2014年2月,五年弹指一挥间,近期整理发表,本文出自门心叼龙的博客,属于原创类容,侵权必究。转载请注明出处。https://blog.csdn.net/geduo_83/article/details/85855412

    1 绪论 3

    1.1 课题研究背景及意义 3

    1.1.1 课题研究背景 3

    1.1.2 基于WebGIS的车联网平台应用介绍 3

    1.2 论文的主要研究内容 3

    1.3 论文内容及组织结构 4

    2 相关概念技术介绍 4

    2.1 车联网介绍 4

    2.1.1 概述 4

    2.1.2 国内车联网发展/研究/应用介绍 5

    2.1.3 国际车联网发展/研究/应用介绍 6

    2.2 GIS和WebGIS技术介绍 7

    2.2.1 GIS和WebGIS 7

    2.2.2 WebGIS特点 7

    2.2.3 应用前景 8

    2.3 GIS软件基本介绍 9

    2.3.1 Map 9

    2.3.2 Layer 9

    2.3.3 Feature 9

    2.3.4 GML 9

    2.4 第三方图商接口介绍 9

    2.4.1 高德MAP 9

    2.4.2 四维 10

    2.4.3 其他 10

    2.5 开源软件技术 10

    2.5.1 SSH框架 11

    2.5.2 WCF 13

    2.6 本章小结 16

    3 基于WebGIS的车联网平台应用建模 16

    3.1 平台概述 16

    3.2 需求分析 16

    3.2.1 系统要求 16

    3.2.2 性能要求 16

    3.2.3 输入输出要求 17

    3.3 系统体系模式 17

    3.4 系统总体结构图 19

    3.5 主要性能及质量指标 20

    3.6 系统特色 20

    3.7 本章小结 21

    4 基于WebGIS的车联网平台的设计与实现 21

    4.1 软件设计思想 21

    4.2 坐席平台流程 23

    4.3 体系结构 23

    4.3.1 坐席中心 23

    4.3.2 车载设备 24

    4.3.3 GSM无线通信网络 24

    4.3.4 语音平台 24

    4.3.5 客户关系管理 25

    4.3.6 用户自服务管理 25

    4.4 环境及配置选型 25

    4.4.1 开发环境 25

    4.4.2 操作系统 25

    4.4.3 Web服务器 25

    4.4.4 核心数据库 26

    4.5 系统的软件配置 26

    4.6 系统的硬件配置 26

    5 关键技术研究 27

    5.1 数据库关键技术 27

    5.1.1 数据库结构 27

    5.1.2 数据库存储 27

    5.1.3 数据库备份 28

    5.2 展示层关键技术 29

    5.2.1 地图客户端 29

    5.2.1.1 概述 29

    5.2.1.2 创建地图 30

    5.2.1.3 地图插件 30

    5.2.1.4 地图事件 30

    5.2.1.5 事件监听器 31

    5.2.1.6 访问用户界面事件参数和this 31

    5.2.1.7 覆盖物 32

    5.2.1.7.1 概述 32

    5.2.1.7.2 标注 32

    5.2.1.7.3 点标注 32

    5.2.1.8 POI搜索 33

    5.2.1.9 周边查询 33

    5.2.1.10 查询范围 33

    5.2.1.11 地理编码 33

    5.2.1.11.1 地理编码 34

    5.2.1.11.2 逆地理编码 34

    5.2.2 坐席客户端 34

    5.2.3 手机客户端 35

    6 平台应用研究 38

    6.1 如何构建应用 38

    6.2 应用使用实例 38

    6.2.1 信息展示 38

    6.2.2 Psap查询 40

    6.2.3 地图显示 40

    6.2.4 周边查询 41

    7 总结与展望 42

    7.1 成果 42

    7.2 展望未来 42

    绪论

    1.1 课题研究背景及意义

    1.1.1 课题研究背景

      继互联网、物联网之后,“车联网”又成为未来智能城市的另一个标志,随着我国经济的飞速发展,汽车作为一种便捷的交通工具,日益进入人们生活当中,车辆、船只和其他地面移动物体迅速增加,但随之而产生的城市交通问题日益严重,驾驶员在夜闻或在生疏地带、或发生了交通事故则无法确认自己的方位甚至迷路,己成为严重影响许多城市发展的主要问题,为这些地域扩大、机动性强的移动目标提供有效的监控、紧急救援和提供各种信息服务成为越来越迫切的现实需求。基于此我们针对这个问题,进行了相关研究。

    1.1.2 基于WebGIS的车联网平台应用介绍

      基于WebGIS的车联网系统是构建于Internet上的一个大型公共的车辆动态信息服务平台,它同时融合了GPS卫星定位技术、GSM数字移动通信技术、GIS地理信息系统技术、软话机技术以及Internet技术等多种目前世界上先进的科技成果,为在路途中的车辆进行监控、实时救援及信息查询提供了完整的解决方案。整个系统由车载GPS终端、GSM通信网络、后台服务、坐席中心、语音平台、客户关系管理系统、用户自服务系统、WebGIS平台八大部分组成。
      基于WebGIS在车联网的应用系统建设,有利于提供各种便捷的信息服务、导航服务、救援服务、预防和减少交通事故,促进社会的信息化、自动化建设等相关产业的发展、提高道路网的通行能力和提高汽车运输生产率和经济效益。

    1.2 论文的主要研究内容

      论文的主要研究内容:
    (1)GIS软件的基本介绍。
    (2)按照软件工程的方法,对车辆救援平台进行需求分析。
    (3)研究平台的体系结构,以及各层之间是如何通信。
    (4)研究地图服务的原理以及如何将服务应用于平台之中。
    (5)结合实际项目,使用车辆救援平台构建一个实际的应用。

    1.3 论文内容及组织结构

      本文共分7章,具体内容安排如下:
      第1章:绪论。介绍本文的研究背景意义。
      第2章:相关概念技术介绍。介绍了GISWEBGIS的概念以及GIS重要元素的概念,还介绍了一些GIS中的常用技术。
      第3章:平台需求分析。从功能和性能的角度分别做了需求分析,给出了系统的功能结构图,并且介绍了每项功能。
      第4章:平台的设计与实现。分析了平台的体系结构,给出了平台的体系结构图,阐述了各个模块是如何实现的。
      第5章:关键技术的研究。分别从数据层、服务层和客户端介绍了平台所使用的关键技术,详细介绍了平台实现的原理。
      第6章:总结与展望。对论文工作加以总结,指出了平台存在的不足以及今后的工作方向。

    相关概念技术介绍

    2.1 车联网介绍

    2.1.1 概述

      车联网,是指装载在车辆上的电子标签通过无线射频等识别技术,实现在信息网络平台上对所有车辆的属性信息和静、动态信息进行提取和有效利用,并根据不同的功能需求对所有车辆的运行状态进行有效的监管和提供综合服务。汽车数字化标准信源技术是基于RFID开发的涉车信息资源的应用技术,该项目是由国家公安部组织研发,经国家科技部认证后列为2007国家科技支撑计划重点专项中进行的应用示范工程(项目编号为2008BAF31B00)。汽车数字化标准信源技术的开发将推进车联网RFID产业化进程。
      从网络上看,车联网系统是一个端管云三层体系:
      第一层(端系统):端系统是汽车的智能传感器,负责采集与获取车辆的智能信息,感知行车状态与环境;是具有车内通信、车间通信、车网通信的泛在通信终端;同时还是让汽车具备IOV寻址和网络可信标识等能力的设备。
      第二层(管系统):解决车与车(V2V)、车与路(V2R)、车与网(V2I)、车与人(V2H)等的互联互通,实现车辆自组网及多种异构网络之间的通信与漫游,在功能和性能上保障实时性、可服务性与网络泛在性,同时它是公网与专网的统一体。
      第三层(云系统):车联网是一个云架构的车辆运行信息平台,它的生态链包含了ITS、物流、客货运、危特车辆、汽修汽配、汽车租赁、企事业车辆管理、汽车制造商、4S店、车管、保险、紧急救援、移动互联网等,是多源海量信息的汇聚,因此需要虚拟化、安全认证、实时交互、海量存储等云计算功能,其应用系统也是围绕车辆的数据汇聚、计算、调度、监控、管理与应用的复合体系。
      相关概念:
    ITS即智能交通。是将先进的传感器技术、通信技术、数据处理技术、网络技术、自动控制技术、信息发布技术等有机地运用于整个交通运输管理体系而建立起的一种实时的、准确的、高效的交通运输综合管理和控制系统。
    RFID,是Radio Frequency Identification的缩写,即射频识别。它通过射频信号自动识别目标对象并获取相关数据,识别工作无须人工干预,可工作于各种恶劣环境。RFID技术可识别高速运动物体并可同时识别多个标签,操作快捷方便。基本的RFID系统由标签(Tag)、阅读器(Reader)、天线(Antenna)RFID技术有着广阔的应用前景,物流仓储、零售、制造业、医疗等领域都是RFID的潜在应用领域,另外,RFID由于其快速读取与难以伪造的特性,一些国家正在开展的电子护照项目都采用了RFID技术。RFID具有车辆通信、自动识别、定位、远距离监控等功能,在移动车辆的识别和管理系统方面有着非常广泛的应用。

    2.1.2 国内车联网发展/研究/应用介绍

      在国内,简单的车联网应用早已在物流业出现,技术主线是GPSGRS。十多年前物流行业就开始推进车辆物联网监控与配送路径实时优化,推广物流配送的可视化管理。1999年物流行业开始探讨GPS技术和物流可视化管理的结合。2001年,开始探索GPS在货运监控和连网上管理的应用,那时出现了很多的网络配货平台,通过GPS系统对车辆进行跟踪。因为车辆通过网络可以实时可视化,可以实时在线管理,这些都可以称为车联网早期的应用。2003年出现了网上配货系统。2004年,GPS、感知技术、定位技术和互联网技术初步结合,实现了对移动中的运输车辆进行联网、跟踪、定位、调度、配货的智能管理,初步具备了车联网的本质特征。但是,那时的技术路线和应用案例还没有纳入到车联网的范围。直到2006年才基于RFIDEPCGPSGRS的结合提出了车联网的概念。
      从09G-BookOnstar引入中国,09年被业界定位成中国的Telematics元年以来,汽车信息化的概念就从来没有停止过,甚至越来越热,汽车行业没人不提Telematics,眼下的汽车产业,Telematics代表着先进,代表着高端,代表着创新,中国的汽车业仿佛从09年开始已然进入了T时代。T的热度在2010年逐渐被一个新的名词所取代,这就是车联网。
    200912月北京九五一九零信息技术有限公司,顺应时代发展潮流,根据自己已有的95190 Telematics 服务系统平台(以下简称95190TP)制定了一套终端设备与服务平台之间的通信协议(NTSP),支持不同厂家、不同类型、不同商业模式的通信导航终端设备接入本平台、享受服务。该协议可以作为设备开发及生产的依据,95190TP是综合GPS(全球卫星定位系统)、GIS(地理信息系统)、无线通信、INTERNETCALLCENTER、信息资源搜索与整合等多项技术,向汽车用户提供安全安心、智能导航、信息服务、车载通信、在线娱乐等等综合服务,是目前国内专业、商业化Telematics服务的支撑运营平台。
      在2010年上海世博会期间,上汽通用汽车馆播放了一部科幻影片《2030》,讲述了通用汽车对20年后汽车生活的展望。在片中,车辆在智能交通网络指挥下有序地行驶,车内触屏终端随时收取交通信息及咨询,汽车自动寻找停车场以及充电站进行充电。更重要的是,它提供了前所未有的交通安全保障,将汽车司机发生交通事故的概率降低为零。
    20101028日在无锡举行的中国国际物联网(传感网)大会传出消息,汽车移动物联网(车联网)项目将列为我国重大专项第三专项的重要项目,并且相关内容已上报国务院,一期拨款有望达百亿级别,预期2020年实现可控车辆规模达2亿。车联网这个名词在物联网的大背景下应运而生,车联网的概念通过这次大会逐渐被放大,现在不管是Telematics还是GPS运营,都被纳入到车联网这个范畴中了。越来越多的汽车厂商和通信行业合作研究,车联网技术被越来越多的人熟知。
    20101112日至27日广州亚运会期间,80多台安装着G-BOS设备的苏州金龙智慧客车投入服务,这是亚运历史上首次出现3G客车。标志着车联网技术正式走向社会视野。 现阶段,车联网在物流行业也有两个比较典型的应用,一个是可视化运输管理与在线智能配货;另一个是行车管理与监控。国内的黑匣子可以进行联网形成智能终端系统,对车辆定位、货物追踪、行驶行为、驾驶行为、车速控制、车辆状况、耗油分析等进行联网监控。
    2011315日,大唐电信与长春一汽旗下的启明信息技术股份有限公司携手共建联合实验室,研究下一代通信服务与汽车电子产品的融合,开发有自主知识产权的高性能、低功耗汽车电子产品,标志着我国车联网从概念阶段正式走向应用阶段。
    2011329日, 2011中国车联网产业发展论坛在广州隆重举行,共同探讨见证科技推动生产力、车联网产业上下游资源无缝对接这一主题。针对车联网时代消费者到底需要什么样的后台服务应用车载应用和服务有哪些盈利模式我们如何把握住这轮商机如何打通产业链以及IT、通信、物联网、互联网、汽车影音资源整合等议题进行深入讨论。来自电信运营商、汽车电子厂商、服务提供商的专家以及汽车车主从各个角度讨论未来车联网的发展方向,包括电信运营商如何为车载终端提供通信服务、车联网一站式软硬件方案以及车联网增值服务等。
      通用汽车产品采用的是Onstar系统,它通过全球卫星定位系统和无线通信技术为汽车提供安全信息服务,包括自动撞车报警、道路求助、远程车辆解锁以及全程音控导航服务等。
      丰田公司的G-BOOK基于消费者会员的公共建设信息服务系统,通过车上无线通讯终端来提供互助信息服务。其特色在于数据通讯模块(DCM)及最新网络服务的安全数字卡运用。用户只需轻轻一按按钮DCM,即可享受高速通讯,下载电影、音乐、电脑游戏等;而且在网络中断情况下,DCM具有自动联机功能。当文字资料通过G-BOOK传输到车载终端,用户可以聆听到近似于人声的信息。

    2.1.3 国际车联网发展/研究/应用介绍

      在国际上,美国的IVHS、日本的VICS等系统通过车辆和道路之间建立有效的信息通信,实现智能交通的管理和信息服务。RFID技术近年来在物流与供应链管理领域以及交通运输领域智能化管理中得到了应用,如智能公交定位管理和信号优先、智能停车场管理、车辆类型及流量信息采集、路桥电子不停车收费、高速公路多义性路径识别及车辆速度计算分析等方面取得了一定的应用成效。
      摩根士丹利研究部近日(2013.11.)发布了一份名为自动驾驶汽车(Autonomous Cars):自动驾驶车,汽车产业新范儿的报告。10个全球研发团队经过了几个月采访未来学家、汽车行业高管和业外潜在颠覆者。该报告预示着由于几乎完全消除汽车交通事故,将大大减少人类死亡和痛苦,由于降低医疗成本、减少拥堵、节省燃油和提高生产力,仅在美国每年可节省1.3万亿美元——GDP的比例约为8%现在我们清楚地看到,不仅是自动驾驶汽车真实的,但他们很可能会比大多数人想象的更早来到我们身边 报告说。 自动驾驶汽车路线图:基本的自动驾驶能力今天已经实现,半自动驾驶能力在未来12-18个月内实现,全自动驾驶能力(已经有原型机)商业化在2020年实现。
    V2X通信是自动驾驶汽车的关键技术,自动驾驶车辆需要可靠的传感器来发挥自己的潜力V2X(车辆与车辆、车辆到基础设施)通信技术公司Cohda Wireless首席执行官保尔-盖利说。
    V2X是一个无线传感器系统,使车辆与其他周围的车辆分享他们的传感器数据。作为标准传感器,如雷达、光学、超声波和激光雷达所有都是视线,他们只能检测到可见的风险。
      非视觉传感器360度感知可以检测到隐藏于视觉外的威胁,因此它可以扩展感知范围,超出了驾驶员视野。 V2X系统可靠性很重要,譬如两辆车行驶在一条直路上,当两辆车相互接近时存在死角,在丘陵的坡峰,在高速公路上行驶,或当车车之间有卡车行驶。
      摩根士丹利的报告还指出,自动驾驶能力可能会改变汽车业的基本面,如车的价值 从硬件转移到软件、组件,以及,新玩家进入市场,并迫使现有选手彻底改造自己或放弃份额。恩智浦半导体高级副总裁、汽车娱乐业务部总经理托斯滕-雷曼表示。
      思科系统公司产品管理总监安德烈亚斯麦说“‘物联网何以改变我们的生活,V2X技术是一个很好的例子 CohdaV2X解决方案使车辆相互沟通,让司机和最终自动驾驶车一些额外的预警时间,可以防止迫在眉睫的撞车事故, 他说。   美国安全试验示范计划(SPMDSafety Pilot Model Deployment )有2800辆车安装了V2X设备。密歇根大学交通研究所( UMTRI 2013.6.进行摩托车导入车联通信研究,作为美国安全试验示范计划(US Safety Pilot Model Deployment)一部分,以确定轿车、卡车和公共汽车如何采用V2V(车对车)通信技术,与摩托车互动。 UMTRI与摩托车制造商本田和宝马合作,在密歇根州安阿伯引入摩托车到车联环境中进行概念性验证,在项目的研究领域完成2项任务。连接的摩托车将参与摩托车通信可行性的测试和摩托车到车辆( M2V )通信性能测试。据美国国家公路交通安全管理局(NHTSA )的数据,摩托车事故占所有公路死亡人数的5 ,但80%的事故导致人身伤害或死亡,相比之下,汽车占20 。车联网技术还解决了这些易受伤害的道路使用者,这点非常重要。摩托车在美国运输部的整体安全策略中占重要位置。
      该V2V连接车辆设备是由Cohda提供,内含恩智浦软件定义的无线电芯片RoadLINK芯片组和运行车联通信的Cohda固件,卫星导航精确定位模块为NV08C V2V通信,即使在城市环境中建筑阻挡司机在路口看见对方,车辆能够互相通信。在这些安全苛刻场景,车联技术可喜扩展到弱势道路使用者,如摩托车手和行人。

    2.2 GIS和WebGIS技术介绍

    2.2.1 GIS和WebGIS

    GIS是在计算机硬、软件系统支持下,对现实世界(资源与环境)各类空间数据及描述这些空间数据特性的属性进行采集、储存、管理、运算、分析、显示和描述的技术系统,它作为集计算机科学、地理学、测绘遥感学、环境科学、城市科学、空间科学、信息科学和管理科学为一体的新兴边缘学科而迅速兴起和发展。
    WebGISIntemetGIS结合的产物,GIS通过WWW功能得以扩展,真正成为一种大众使用的工具。从WWW的任意一个节点,Internet用户可以浏览WebGIS站点中的空间数据、制作专题图,以及进行各种空间检索和空间分析,近些年互联网的飞速发展让GIS朝着WeGIS的方向过渡。

    2.2.2 WebGIS特点

    (1)基于Web标准。TCP, HTTP, Html, XML
    (2)平台无关。通常,无论客户机是何种操作系统,只要支持通用的Web浏览器,用户就可以访问WebGIS数据和服务。
    (3)分布式。全球化的Client/ServerGIS数据和服务分布在Internet的不同服务器上,当需要时进行集成。
    (4)互操作。数据在不同的WebGIS之间无缝传输,一个应用系统可以调用另一个系统的功能,来完成逻辑上的统一的任务。
      与传统的GIS相比,webGIS有以下优点:
    (1)更广泛的访问范围。客户可以同时访问多个位于不同地方的服务器上的最新数据。这一特有的优势大大方便了GIS的数据管理,使分布式的多数据源的数据管理和合成更易于实现。
    (2)平台的独立性。无论服务器或客户机是何种机器,无论WEBGIS服务器端使用何种GIS软件,由于使用了通用的WEB浏览器,用户可以便捷地访问WEBGIS数据,在本机或某个服务器上进行分布式部件的动态组合和空间数据的协同处理与分析,实现远程异构数据的共享。
    (3)系统成本大大降低。普通GIS在每个客户端都要配备昂贵的专业GIS软件,而用户使用所需要的通常只是一些最基本的功能,这实际上造成了极大的浪费。WEBGIS在客户端通常只需使用WEB浏览器(有时还要加一些插件),其软件成本与全套专业GIS软件相比明显要节省得多。另外,由于客户端的简单性,节省的维护费用也不容忽视。
    (4)更简单的操作。要使GIS为广大的普通用户所接受,而不仅仅局限于少数受过专业培训的专业用户,就要降低对系统操作的要求。通用的WEB浏览器无疑是降低操作复杂度的最好选择。
    (5)灵活高效的计算模式。传统的GIS大都使用文件服务器结构的处理方式,其处理能力完全依赖于客户端,效率较低。当今一些高级的WEBGIS能充分利用网络资源,将基础性、全局性的处理交由服务器执行,而对数据量较小的简单操作则由客户端直接完成。这种计算模式能灵活高效地寻求计算负荷和网络流量负载在服务器端和客户端的合理分配,是一种较理想的优化模式。

    2.2.3 应用前景

    WebGIS使GIS应用走向公众,通过网络可以将空间信息传至千家万户,如美国纽约州某县通过电视有线网,向公众发布城市和土地等信息。香港旅游局也正在着手建立香港旅游信息系统,该系统的基础数据直接来源于香港地政署的大型空间数据库,旅游信息则由旅游协会(TA)提供。计划首先在尖沙嘴等旅游热点安装触摸屏,游客可以通过它直接了解香港地理环境和查询旅游信息。
    WebGIS的数据传输量很大,目前Internet的速度还不能完全满足需求。MapGuide的插件大约为1M,使用28.8K的调制解调器(MODEM)也至少需要6分钟才能从服务器上下载过来。不过,网络技术日新月异,56KMODEM已经开发出来。19972月,美国总统克林顿提出建立快1000倍的第二代互联网络,让12岁以上的青少年人人都上互联网。微软正在实施的一项计划中准备发射840多颗人造地球卫星,这些卫星将用于取代光纤进行Internet数据传输。可以预见,随着Internet技术的发展,WebGIS应用终将走上普通人的办工桌、走进千家万户的家用电脑,与Internet本身一样成为人们日常生活必不可少的实用工具。 
    WebGIS还可以应用于Intranet建立企业/部门内部的网络GIS,可以在科研机构、政府职能部门、企事业单位得到广泛应用。WebGIS提供了一种易于维护的分布式GIS解决方案。尽管目前的WebGIS软件提供的空间分析功能很难满足专业应用的需要,但是随着技术的发展,WebGIS终将取代传统的GIS 

    2.3 GIS软件基本介绍

    GIS软件常用的基本概念和类,在本文后面还会经常使用到,虽然不同的GIS软件实现原理不尽相同,但是一般都会用到这些概念和类,现在一一加以介绍

    2.3.1 Map

    MapGIS里最重要的类,可以说各种操作都是围绕Map展开的。Map就像一个空白的画布,图层都是一层一层加上去的,M印和地图控件相关联,可以在Map上监听各种事件以响应各种操作。

    2.3.2 Layer

    Laver是图层,例如500kv输电线路是一个图层,220kv输电线路又是另一个图层,这两个都是线图层,500kv变电站是一个点图层。对应前面的两种空问数据类型,前面提到的几个图层是矢量图层,除了矢量图层以外GIS还有栅格图层,也称之为瓦片图层,是由大小相等的图片拼接而成的图层,一般作为底层图层第一个加到Map里面。不同类型的图层继承了父类Layer,然后自己又有各自的属性和方法。地图正是这些图层一层一层的加到Map上然后展现出来的。

    2.3.3 Feature

      一般,GIS软件中的Feature指一个地理要素,例如一棵树、一条河流或者一片污区都是一个FeatrueFeatme会加到Layer中被Laver统一管理,例如500kv线路的图层就有很多500kv线路Feature加到里面。Feature一般具有两方面的属性,一方面是与地理信息相关的,例如一个变电站的位置,以及这个变电站以何种符号显示,另一方面是自身的一些和地理信息无关的属性,例如变电站的变电站名称、电压等级等属性。

    2.3.4 GML

    GML(Geography Markup Language)即地理标识语言,它由OGC(开放式地理信息系统协会)1999年提出。GMLxML的一个子集,专门用于地理信息领域,用于描述地理数据。

    2.4 第三方图商接口介绍

    2.4.1 高德MAP

      高德地图(Amap) 是国内一流的免费地图导航产品,也是基于位置的生活服务功能最全面、信息最丰富的手机地图,由国内最大的电子地图、导航和LBS服务解决方案提供商高德软件提供。高德地图采用领先的技术为用户打造了最好用的活地图,不管在哪、去哪、找哪、怎么去、想干什么……一图在手,统统搞定!省电省流量更省钱,堪称最完美的生活出行软件!
      它具有一些特点:1、最专业的地图导航,地图数据覆盖中国大陆及香港澳门,遍及337个地级2857个县级以上行政区划单位;导航支持GPS、基站、网络等多种方式一键定位;2、最全面的生活信息〗美食、酒店、演出、商场等各种深度POI点达2600多万条,衣食住行吃喝玩乐全方位海量生活信息可供搜索查询;3、最智能的出行指南自动生成最短”“最快”“最省钱等多种路线规划以供选择,可根据实时路况选择最优公交/驾车出行路线。

    2.4.2 四维

      四维地图是北京导航地图厂商四维图新研制的一种导航地图。四维地图的基础数据是国家测绘局的,路线很齐全,基本上乡村的一些小公路都有收集;但也有些县城数据不是很完整,据全球权威行业研究机构In-Stat数据监测结果显示,四维地图继连续四年车载导航市场份额超过70%之后,2007年在中国便携式导航市场份额超过35%,在中国导航地图市场的领导地位日趋稳固。目前,四维地图已服务于丰田、日产、本田、通用、卡迪拉克、别克、大众、奔驰、沃尔沃、现代等全球10大主流汽车品牌,大部分国内高端车型(丰田雷克萨斯、日产英菲尼迪、本田讴歌、通用卡迪拉克、别克林荫大道等等)都选择了四维地图;并成为诺基亚、宇达电通(Mio)、任我游(合众思壮|Garmin)、宇龙、天派等全球主流便携式导航设备的独家内嵌式导航地图。在互联网和LBS位置服务领域,不仅百度、QQMSN、搜狐、雅虎、携程等上千家门户和专业网站使用了四维地图,中国移动、中国联通等运营商也一致使用了四维地图。并且也是中国首家支持动态交通信息发布及导航应用的地图企业。

    2.4.3 其他

      图吧地图是国内最大的在线电子地图及无线地图服务提供商,专业为为互联网和手机用户提供地图搜索位置查询和公交驾车线路等交通规划服。
      凯立德在GIS应用领域,利用独创的空间信息处理技术,以数据可视化、思维可视化帮助客户全面了解地理信息的价值,并做出有远见的决策。按照国际软件工程标准,凯立德开发了具备自主知识产权的地理信息系统平台I-Spatial、电子政务平台X-Bridge,并在此基础上开发了国土资源管理信息系统、城市规划管理信息系统等系列软件产品;在地理信息数据化基础之上,凯立德率先将业务范围从政府决策支持、行业应用延伸到个人GPS导航应用,继续引领产业发展。

    2.5 开源软件技术

      本平台采用了多个开源的软件框架,在此基础上进行了修改和扩充,客户端采用SSH开源客户端软件,服务器端采用了WCF。下面对这几个开源软件和框架做一一介绍。

    2.5.1 SSH框架

    1.Struts是一个MVC框架,通过配置文件很好的实现了模型与视图的分离,Struts应用包括3个组件:
      控制器组件(ActionServlet和自定义Action);  
      模型组件(普通接口和JavaBean);  
      视图组件(ActionFormStruts标签);  
    Struts MVC设计模式可以使我们的逻辑变得很清晰。
    Struts的工作流程:
      在web应用启动时就会加载初始化ActionServlet,ActionServletstruts-config.xml文件中读取配置信息,把它们存放到各种配置对象当ActionServlet接收到一个客户请求时,将执行如下流程.
    (1)检索和用户请求匹配的ActionMapping实例,如果不存在,就返回请求路径无效信息
    (2)如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中
    (3)根据配置信息决定是否需要表单验证.如果需要验证,就调用ActionFormvalidate()方法
    (4)如果ActionFormvalidate()方法返回null或返回一个不包含ActionMessageActuibErrors对象就表示表单验证成功
    (5)ActionServlet根据ActionMapping所包含的映射信息决定将请求转发给哪个Action,如果相应的 Action实例不存在,就先创建这个实例,然后调用Actionexecute()方法
    (6)Actionexecute()方法返回一个ActionForward对象,ActionServlet在把客户请求转发给ActionForward对象指向的JSP组件
    (7)ActionForward对象指向JSP组件生成动态网页,返回给客户;  
    2.Spring 是一个轻量级框架,提供依赖注入容器,AOP实现,DAO/ORM支持,Web集成等功能。依赖注入需要先明确关联组件的接口,然后使用这写接口编写程序,在运行前将接口的实现组装到程序中运行。AOP的目的是从系统中分离出方面,独立于业务逻辑实现,在程序执行时织入程序中运行。Spring IOCAOP可以使我们的产品在最大限度上解藕。 
    spring工作原理
    (1)spring mvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。
    (2)DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller
    (3)DispatcherServlet请请求提交到目标Controller
    (4)Controller进行业务逻辑处理后,会返回一个ModelAndView
    (5)Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象
    (6)视图对象负责渲染返回给客户端
    Spring框架是一个分层架构,由7个定义良好的模块组成。Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式, 组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下:
     核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 IOC)模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
     Spring 上下文:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDIEJB、电子邮件、国际化、校验和调度功能。
     Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOPSpring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。
     Spring DAOJDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。
     Spring ORMSpring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDOHibernate  iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。
     Spring Web 模块:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。
     Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSPVelocityTilesiText  POI
    Spring 框架的功能可以用在任何 J2EE 服务器中,大多数功能也适用于不受管理的环境。Spring 的核心要点是:支持不绑定到特定 J2EE 服务的可重用业务和数据访问对象。毫无疑问,这样的对象可以在不同 J2EE 环境 Web  EJB)、独立应用程序、测试环境之间重用。
    IOC  AOP
      控制反转模式(也称作依赖性介入)的基本概念是:不创建对象,但是描述创建它们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务。容器(在 Spring 框架中是 IOC 容器) 负责将这些联系在一起。
      在典型的 IOC 场景中,容器创建了所有对象,并设置必要的属性将它们连接在一起,决定什么时间调用方法。下表列出了 IOC 的一个实现模式。
    3.Hibernate 是一个基于JDBC 的持久化解决方案,是一个优秀的"对象-关系映射框架。持久化就是将程序中数据在瞬时状态和持久状态间转换的机制。
    Hibernate 就是在 JDBC的方式上进行封装,以简化JDBC方式繁琐的编码工作,将对象保存到数据库也不用编写长长的SQL语句,只需要执行简单的 session.save(Object) 就行了,当然需要配置对应的配置文件。采用Hibernate作为持久层技术的最大的好处在于:可以完全以面向对象的方式进行系统分析、系统设计。 
    DAO模式需要为每个DAO组件编写DAO接口,同时至少提供一个实现类,根据不同需要,可能有多个实现类。用Spring容器代替DAO工厂通常情况下,引入接口就不可避免需要引入工厂来负责DAO组件的生成。Spring实现了两种基本模式:单态模式和工厂模式。而使用Spring可以完全避免使用工厂模式,因为Spring就是个功能非常强大的工厂。因此,完全可以让Spring充当DAO工厂。 
      由Spring充当DAO工厂时,无须程序员自己实现工厂模式,只需要将DAO组件配置在Spring容器中,由ApplicationContext负责管理DAO组件的创建即可。借助于Spring提供的依赖注入,其他组件甚至不用访问工厂,一样可以直接使用DAO实例。 
    4.SSH是典型的J2EE三层结构,分为表现层、中间层(业务逻辑层)和数据服务层。三层体系将业务规则、数据访问及合法性校验等工作放在中间层处理。客户端不直接与数据库交互,而是通过组件与中间层建立连接,再由中间层与数据库交互。 
      表现层是传统的JSP技术,自1999年问世以来,经过多年的发展,其广泛的应用和稳定的表现,为其作为表现层技术打下了坚实的基础。中间层采用的是流行的Spring+Hibernate,为了将控制层与业务逻辑层分离,又细分为以下几种:
    Web层,就是MVC模式里面的Ccontroller),负责控制业务逻辑层与表现层的交互,调用业务逻辑层,并将业务数据返回给表现层作组织表现,该系统的MVC框架采用Struts 
    Service层(就是业务逻辑层),负责实现业务逻辑。业务逻辑层以DAO层为基础,通过对DAO组件的正面模式包装,完成系统所要求的业务逻辑。 
    DAO层,负责与持久化对象交互。该层封装了数据的增、删、查、改的操作。 
    PO,持久化对象。通过实体关系映射工具将关系型数据库的数据映射成对象,很方便地实现以面向对象方式操作数据库,该系统采用Hibernate作为ORM框架。 
    Spring的作用贯穿了整个中间层,将Web层、Service层、DAO层及PO无缝整合,其数据服务层用来存放数据。 

    2.5.2 WCF

    1.概念 
    WCF是基于Windows平台下开发和部署服务的软件开发包。WCF为服务提供了运行时环境(Runtime Enviroment),使得开发者能够将CLR类型公开为服务,又能够以CLR类型的方式使用服务。创建服务不一定需要WCF,但使用WCF可以使得创建服务的任务事半功倍。WCF是微软对一系列产业标准定义的实现,包括服务交互、类型转换、封送(Marshaling)以及各种协议的管理。WCF还为开发者提供了大多数应用程序都需要的基础功能模块。如:托管(Hosting),服务实例管理(Service Instance Management)、异步调用、可靠性、事务管理、离线队列调用(Disconnected Queued Call)、安全性等。WCF的大部分功能都包含在一个单独的程序集System.ServiceModel.dll中,命名空间为:System.ServiceModel 
    2.服务 
      服务是一组功能的集合,服务可以是本地的,也可以是远程的,可以有多个参与方使用任意技术进行开发。服务与版本无关,甚至可以在不同的时区同时执行。服务内部包含了语言、技术、平台、版本、框架的诸多概念,服务之间的交互只允许制定的通信模式。服务的客户端只是使用服务功能的一方。  
    WCF中的所有消息都是SOAP消息。消息与传输协议无关。因为服务的创建对外界而言是不透明的,所以WCF服务通常以公开元数据(Metadata)的方式描述可用的功能以及服务可能采用的通信方式。一个非WCF客户端可以将元数据作为本地类型导入到本地环境中,WCF客户端也可以导入非WCF服务的元数据,然后以本地CLR类与接口的方式进行调用。 WCF不允许客户端直接与服务交互。客户端总是使用代理(Proxy)将调用转发给服务。代理公开的操作与服务相同,同时还增加了一些管理代理的方法。WCF允许客户端跨越执行边界与服务通信。在同一台机器中,客户端可以调用同一个应用程序域中的服务,也可以在同一个进程中跨应用程序域中调用,甚至跨进程调用。客户端也可以跨越IntranetInternet的边界与服务交互。
    3.位置透明度
    WCF与其他分布式技术一样要求客户端保持一致的编程模型,而不用考虑服务的位置,但实现方式却不同。即使对象是本地的,WCF仍然使用远程编程模型的实例化方式,并使用代理。由于所有的交互操作都经由代理完成,要求相同的配置与托管方式,所以对于本地和远程方式而言,WCF都只需要维持相同的编程模型。这使得开发者不会因为服务位置的改变影响客户端,同时还大大简化了应用程序的编程模型。
    4.地址
    WCF的每一个服务都有一个唯一的地址Address。地址包含两个重要元素服务位置与传输协议Transport Protocol。服务位置包括目标机器名、站点或网络、通信端口、管道或队列以及一个可选的特定路径或者URI 
    五种传输样式HTTPTCPPeer network(对等网IPC基于命名管道的内部进程通信MSMQ 
    http://localhost:8001/ 
    net.tcp://localhost:8002/Myservice
    net.pipe://localhost/Mypipe
    net.msmq://localhost:8002/MyService 
    5.契约
    WCF所有的服务都公开为契约Contract。契约与平台无关。 
      四种契约: 
      服务契约(Service Contract):服务契约描述了客户端能够执行的服务操作。
      数据契约(Data Contract):数据契约定义了与服务交互的数据类型。 
      错误契约:(Fault Contract):错误契约定义了服务抛出的错误。 
      消息契约:(Message Contract:消息契约允许服务直接与消息交互。 
      服务契约
    ServiceContract特性公开了CLR接口(或类)作为WCF契约。WCF契约与类型的访问限定无关,因为类型的访问限定属于CLR的概念。 
    OperationContract特性公开了WCF服务契约中的方法,此特性只能被应用在方法上,而不允许应用到同样属于CLR概念的属性、索引器和事件上。WCF只能识别作为逻辑功能的操作(Operation)。 
    契约操作不允许使用引用对象作为参数,只允许使用基本类型或数据契约。 
    服务的类要避免使用带参数构造函数,因为WCF只能使用默认构造函数。同样,虽然类可以使用内部的属性、索引器、静态成员等,但WCF客户端却无法使用它们。   
    7.托管Host 
    WCF服务类不能凭空存在每个WCF服务都必须托管HostingWindows进程中该进程被称为宿主进程Host Process。单个宿主进程可以托管多个服务,而相同的服务类型也能够托管在多个宿主进程中。 
    三种托管方式: 
    IIS:只适用于HTTP协议,优势是宿主进程可以在客户端提交第一次请求的时候自动启动。 
    WASvistawindows激活服务。WASIIS的主要区别是WAS并不局限于HTTP,它可以支持所有可用的WCF传输协议。 
      自托管:自己编写Console或者WinformWindows服务等进行宿主进程的生命周期管理。进程必须在客户端调用之前运行。宿主进程必须在运行时显式的注册服务类型,同时打开宿主。 
    ServiceHost类用来创建宿主。每个ServiceHost实例都与特定的地服务类型有关如果宿主进程需要运行多个服务类型则必须创建与之匹配的多个ServiceHost实例主线程可以调用OpenClose方法控制宿主。打开宿主时,将装载WCF运行时,启动工作线程监控传入的请求。由于引入了工作线程,因此可以进程的主线程在打开宿主之后执行阻塞(blocking)操作。
      我们也可以针对相同的类型注册多个宿主,只要这些宿主使用不同的基地址。 
    ServiceHost实现了ICommunicationObject接口。如果打开或关闭宿主的操作耗时比较长可以采用异步方式调用BeginopenBeginclose方法。 
    8.绑定 
      单个服务可以支持各个地址上的多个绑定,WCF定义了9种标准邦定。
    9.终结点(endpoint 
    WCF用终结点表示这样一种组成关系。终结点就是地址、契约、绑定的混成品。地址定义了服务的位置,绑定定义了服务通信的方式,契约则定义了服务的内容。每一个终结点都包含了这三个元素,而宿主则负责公开终结点。从逻辑上讲,一个接口就相当于一个终结点。每个服务必须至少公开一个业务终结点,每个终结点有且只能拥有一个契约。服务上的所有终结点都包含了唯一的地址,而一个单独的服务可以公开多个终结点。这些终结点可以使用相同或不同的邦定,公开相同或不同的契约。每个服务提供的不同终结点之间绝对没有任何关联。 
    可以通过管理方式Administratively使用配置文件或者通过编程方式Programmatically配置终结点。 
    10、元数据交换 
      服务有两种方案可以发布自己的元数据。一种是基于Http-Get协议提供元数据。另一种是使用专门的终结点MEX
    11.客户端编程 
      若要调用服务的操作客户端首先需要导入服务契约到客户端的本地描述Native Representation中。如果客户端使用WCF,调用操作的常见方法是使用代理。代理是一个CLR类。如果服务支持多个契约,客户端则需要一个代理对应多个契约类型。代理不仅提供了与服务契约相同的操作,同时还包括管理对象生命周期的方法,以及管理服务连接的方法。代理完全封装了服务的每个方面:服务的位置、实现技术、运行时平台、通信传输。
    12.客户端配置 
      客户端信息与从服务的终结点获取的信息完全相同。可以通过管理方式和编程方式实现客户端配置。建议永远不要用SvcUtil工具生成配置文件。因为它会自动的为关键的邦定节设置默认值,反而导致了整个配置文件的混乱。 
    WCF提供了配置文件编辑器SvcConfigEditor
    13.代理 
      代理类派生自ClientBase<T>类。ClientBase<T>类通过泛型类型参数识别代理封装的服务契约。此类中的Channel属性类型就是泛型参数的类型。ClientBase<T>的子类通过Channel调用它指向的服务契约的方法。Channel对象就是相当于服务契约的代理对象,通过它,就可以调用服务契约的相关方法。最佳的做法是在客户端调用代理完毕后要关闭代理。因为关闭代理会终止于服务的会话,关闭连接。 
    14.调用超时 
    WCF客户端的每次调用都必须在配置的超时值内完成。无论何种原因,一旦调用时间超出该时限,调用就会被取消,客户端会收到一个TimeOutException异常。可以通过修改bindingSendtimeout属性来修改超时值。 
    15.编程方式配置和管理方式配置 
      两种技术各有所长,相符相成。管理配置方式允许开发者在部署服务之后,修改服务与客户端的主要特性,而不需要重新编译或重新部署。主要缺陷是不具备类型安全,只有在运行时才能发现配置的错误。 如果要求配置的决策完全是动态的,就可以采用编程配置的方式。他可以在运行时基于当前的输入或条件对服务的配置进行处理。

    2.6 本章小结

    本章对WebGIS的一些基本概念、GIS系统上的一些基本元素的概、第三方图商、开源软件技术作了介绍。目的在于使读者能够了解一些GIS上的术语和技术的大概原理,方便理解后面的内容。

    基于WebGIS的车联网平台应用建模

    3.1 平台概述

      基于WebGIS的车联网平台主要由安装在每个辆车上的移动车载终端、坐席中心、以及无线通信网络这几部分组成,是集GPS技术、GIS技术和无线通信技术于一体的综合车辆服务系统。其原理是坐席中心根据移动车辆发生碰撞后接收到的GPS定位信息进行处理,利用GIS技术显示受监控车辆的位置,并能根据需要,对受控车辆进行报警救援和POI查询服务,通过电话与用户建立语音通道,从而实现双向通信,为用户提供安全、便捷的救援服务保障和其他的一些便捷查询服务、导航服务。
      该系统应具备根据具备车辆属性信息查询、以及驾驶员的信息查询的功能,经纬度定位车辆具体位置信息、周边查询、查询公安报警电话、医疗电话的功能,还有具备GIS软件的一些基本功能鹰眼、POI搜索、客户关系管理系统、用户自服务管理系统等功能。

    3.2 需求分析

    3.2.1 系统要求

    ①实用性
      最大限度满足用户的需求,做到灵活实用是系统建设的最高要求,也是系统设计的基本出发点。实用性要求做到:便于用户应用,便于系统管理,便于数据更新和系统升级,具有简单明了的人机交互方式、优化的系统结构和完善的数据库系统,以及灵活简便的用户界面和及时向用户提供有效的帮助信息。
    网络化
      采用BrowseServer架构的系统更适合Internet时代的需要。用户可以轻松地通过Internet进行多方面交流。
    ③经济性
      系统建设要求在实用的基础上做到最经济,以最小的投入获得最大的效益。在软硬件配置、系统开发和数据库建立上都充分考虑到经济原则。

    3.2.2 性能要求

    ①系统操作的简单实用性
      该系统用户为坐席人员,对计算机和GIS知识了解不多,因此系统的操作应尽可能简单实用。
    ②必要的纠错性
      系统出现故障时应给出明确的出错提示及解决方法。
    ③系统的安全性
      系统的运行要保证数据的安全性和准确性。因此需要建立一些安全保护机制以免数据被其他用户非法使用和遭受人为的破坏,如构筑防火墙,来防止Internet的用户对企业内部信息的窃取以及外界病毒的侵入;对系统的不同用户设置不同的访问和处理权限。
    ④系统响应的快速性
      坐席中心作为整个系统的一个重要部分,起着承上启下、内外衔接的作用。作为客户服务的窗口,监控中心要能及时处理大量用户的业务请求,这些在车辆救援中心受理的业务请求如何得到准确、及时、快速的处理,是体现系统响应速度和解决客户问题效率的关键。为了更好地与用户之间进行交互.服务器端应用应提高服务器处理大量请求时的响应速度。

    3.2.3 输入输出要求

    ①系统输入数据简单方便。
    ②系统输入数据既有安全保护,叉可以动态修改。
    ③系统输出的数据格式符合标准要求,输出操作简洁快速。

    3.3 系统体系模式

      本系统采用先进的三层B/S 体系结构。三层B/5(Browser/ Server)模式在逻辑上将应用功能分为三层客户显示层、业务逻辑层、数据层。三层模式具有良好的灵活性、安全性和可扩展性,成为真正意义上的瘦客户端,从而具备了很高的稳定性和执行效率。它可以将服务集中在一起管理,统一服务于客户端,从而具备了良好的容错能力和负载平衡能力,相比传统的C/S模式是建立企业级车辆救援平台的最佳选择。
      随着Internet越来越广泛的应用,一种新兴的体系结构BrowserServer应运而生,并获得飞速发展,成为众多厂家争相采用的新型体系结构。本质上,BrowserServer也是一种ClientServer结构,一种由传统的二层ClientServer结构发展而来的三层ClientServer结构在Web上应用的特例。在BrowserServer的系统中,用户可以通过浏览器向分布在网络上的许多服务器发出请求。BrowserServer结构极大的简化了客户机的工作,客户机上只需安装、配置少量的客户端软件即可,服务器将担负更多的工作,对数据库的访问相应用程序的执行将在服务器上完成。
      在BrowserServer三层体系结构下,表示层(Presentation)、功能层(Business Logic)、数据层(Data Service)被割成三个相对独立的单元。
      第一层表示层:Web浏览器。在表示层中包含系统的显示逻辑,位于客户端。它的任务是flqWeb浏览器向网络上的某一web服务器提出服务请求,Web服务器对用户身份进行验证后用HTTP协议把所需的主页传送给客户端,客户机接受传来的主页文件,并把它显示在Web浏览器上。
      第二层功能层:具有应用程序扩展功能的web服务器在功能层中包含系统的事务处理逻辑,位于web服务端。它的任务是接受用户的请求,首先需要执行相应的扩展应用程序与数据库进行连接,通过SQL等方式向数据库服务器提出数据处理申请,而后等数据库服务器将数据处理的结果提交给Web服务器,再由Web服务器传送回客户端。
      第三层数据层:数据库服务器。在数据层中包含系统的数据处理逻辑,位于数据库服务器端。它的任务是接受web服务器对数据库操作的请求,实现对数据库查询、修改、更新等功能,把运行结果提交给web服务器。
      三层的BrowserServer体系结构是把二层ClientServer结构的事务处理逻辑模块从客户机的任务中分离出来,由单独组成的一层来负担其任务,这样客户机的压力大大减轻了,把负荷均衡地分配给了Web服务器,于是由原来的两层的ClientServer结构转变成三层的BrowserServer结构BS体系结构从根本上改变了CS体系结构的缺陷,是应用系统体系结构深刻的变革,它具有如下突出优点:
    ①客户端不再负责数据库的存取和复杂数据计算等的任务,只需要其进行显示,充分发挥了服务器的强大作用,这样就大大的降低了对客户端的要求,降低了投资和使用成本。
    ②易于维护、易于升级。维护人员不再为程序的维护工作奔波于每个客户机之间,而把主要精力放在功能服务器上。由于用户端无需专用的软件,当企业对网络应用进行升级时,只需更新服务器端的软件,减轻了系统维护与升级的成本与工作量。
    ⑧用户操作使用简便。BS结构的客户端只是一个提供友好界面的浏览器,通过鼠标即可访问文本、图像、声音、电影及数据库等信息,用户无需培训便可直接使用,利于推广。
    ④更适合于网上发布信息。BS结构使用的是IntcmetWeb技术,因而更适合网上信息的发布,拓展了传统的数据库应用的功能,更适合Intemet时代的需要。
      而ClientServer结构存在诸多不足,主要体现在:
         一程序开发量大。由于存在许多不同的客户端都要访问数据库,且通常用户接口和应用程序都集中在客户端,所以对不同客户端要开发不同的程序,极大的增加了编程的工作员。
      客户端负担重。应用程序集中在客户端,随着应用系统的功能越来越复杂,客户端的应用程序也变得越来越庞大,为了提高性能,需要不断提高客户机的配置,又加重了投资的成本。
      移植困难、新技术不能轻易应用。一个软件平台及开发工具一旦选定,不可能轻易更改。
      系统维护困难。一旦系统程序要进行修改和升级,则需要更新所有客户端的程序,增大了系统的正常维护升级工作。

    3.4 系统总体结构图


         以上为整个系统结构图,整个平台主要工作原理如下:
    1.用户通过网站/APP将必要的车辆信息(车辆VINMAC地址)与用户个人信息/社交信息等录入构建的用户/车辆/社交数据库中
    2.CRM系统可以通过API接口管理车辆/用户/社交信息(执行增删改查操作)
    3.用户车机与手机通过蓝牙连接,当发生事故时手机向back-end中的短信/数据网关发送报警信息
    4.报警数据经过解码模块将VEDS数据解码,通过数据网关接调用API接口将数据录入到报警事故数据库中,短信网关将二进制的短信经过转化模块后调用接口录入数据。
    5.接口API的作用是对用户/车辆/社交等信息进行增删改查操作的。并将报警信息推送给通知服务器。
    6.通知服务器获取消息后将通过长连接形式通知到座席客户端
    7.座席客户端中内嵌了ocx报警控件与通知服务器进行长连接的通讯
    8.当用户车辆发生报警时,电话接入呼叫中心,话务员查询出用户信息进行通话,报警信息会自动弹出显示用户所在位置及车辆信息,同时backend后台将调用短信接口将短信通知到该用户社交信息中朋友/亲属的手机上,同时通过第三方的云平台将事故信息推送给用户朋友/亲属。
    9.话务员在座席系统上根据用户事故位置查询PSAP库,选择施救机构
    10.话务员发起三方通话,发起与警方用户间的通话。
    11.警方/医疗机构救援后,话务员保存服务记录,服务结束。

    3.5 主要性能及质量指标

    (1)技术指标
    ①系统能达到较快的响应速度,数据库连接的使用效率较高。
    ②采用应用服务器、负载均衡技术使得服务器端处理能力可方便扩充。
    (2)可靠性
    ①所有软件和业务数据均保存在后台服务器和数据库中,可靠性极高。
    ②集中管理的应用服务器、数据库服务器被安黉在专门的机房内,机房具备高可靠的电力供应和良好的环境条件。
    ③服务器具有成熟的备份技术,必要时可进行异地同步备份。
    ④服务器端宽带接入互联网骨干,保证网络连接的可靠性。
    (3)安全性
    ①安装专业防火墙以保证网络安全。
    ②系统具备完善的用户权限管理功能,用户使用和访问被授权的功能和数据。
    (4)经济性
      接个系统的部署、升级、维护、数据备份等只需要在服务器上完成.客户端无需任何安装和调试,从而极大降低了系统的安装实施和FI常维护成本,使系统具有优秀的可维护性和极低的维护成本等优点。

    3.6 系统特色

      位于GPS车载终端的GPS接收机实时采集车辆当前的位置信息以及速度、方向和时间等相关信息,发生碰撞后,按信令协议处理后,生成短消息数据包,该数据包经GSM通信模块发往移动GSM通讯中心。移动GSM通讯中心将此数据包按控制信令处理,传送给SMS短消息处理中心。通过与坐席监控系统相连接的专线将数据送到坐席系统监控平台上,监控中心将收到的坐标数据及其它数据还原后,与GIS系统的电子地图相匹配,并在电子地图上直观地显示车辆实时坐标的准确位景,在电子地图上清楚而直观地掌握车辆的动态信息(位置、状态等)
      该系统具有如下特色:
      利用GPS和电子地图可以显示车辆位置,在全球任何位置均可进行车辆的位置救援监控工作,充分保障了WebGPS所有用户的要求都能够得到满足。
      功能多,定位速度快,能够任意放大、缩小、还原显示图形。
      信息传输采用GSM公用数字移动通信网,具有保密性高、大、抗干扰能力强,漫游性能好、移动业务数据可靠等优点。

    3.7 本章小结

      本章对WebGIS在车联网应用平台进行了需求分析,其中包括系统要求、性能要求、输入输出要求、功能设计、主要性能和指标、系统特色等进行了阐述。

    基于WebGIS的车联网平台的设计与实现

    4.1 软件设计思想

      坐席中心在实现信息的浏览、查询上采用了BS模型,该模型包括用户服务层、应用服务层和数据服务层。与传统的两层结构相比,增加了应用服务层,用于处理复杂的应用逻辑、数值计算、数据分析等与用户界面和数据存储无关的工作。在三层结构中,许多与应用相关的工作从客户端抽取出来,放入独立的应用服务器中。因此,用户界面、应用处理、数据库管理分为了三部分,每部分完成其特定的功能,可分别由不同的专业人员进行开发和管理。坐席中心的软件开发针对的是基于服务器端应用开发,着重于对处于中间层的应用逻辑的处理。根据应用的需要,开发采用了如下的设计思想:
      完全采用面向对象的分析、设计和开发技术,使系统功能可灵活扩展,适应变化。采用全Java技术开发,一次编码,到处运行,支持真正的跨平台计算:灵活使用各种最新Java技术,既保证系统的实用性,又保证运行的高效率。
    (1)JAVA特性
      近年来IntemetIntranet技术的迅猛发展和基于HTTP协议的Web技术的广泛应用,极大地改变了传统的工作模式和生产方式,使更大范围内的资源共享和协同工作成为可能。在InternetIntranet上,以Web技术为核心可以构成一个与用户平台无关的统一而简单的交流方式,把已有的和未来的有关数据库、多媒体、安全设施等各种技术纳入以Web为核心的浏览器/服务器(BS)模式中,使浏览器成为人们交流的万能工具,以任务为中心组织信息交流变得更加容易。在现有各种基于Web技术的应用系统的丌发方案中,由于Java语言先天就是Internet互联网蓬勃发展的产物,因而具有其它任何开发平台所无法比拟的优势。
    Java语言由Sun Microsoft公司开发,是一种面向对象和平台无关的编程语言。SunJava描述为一种具有简单性、面向对象性、动态性、分布性、可移植性、多线程、平台无关性、高性能、健壮性和安全性的语言ll
      简单性
      一方面,Javac++衍生而来,其基本特征、程序结构和语言风格等与C++十分类似;另一方面Java又比C++简单,它抛弃了C++中的一些不是绝对必要的功能,如头文件、预处理器、指针、结构、隐式的类型转换等,并且通过实现自动垃圾收集大大简化了内存管理的工作。因此Javac++更容易学习,其程序的可读性也更强。
      面向对象
    Java是一种完全面向对象的程序设计语言,它除了数值、布尔和字符三个基本数据类型外的其它类型都是对象,Java的程序代码以类的形式组织,由类来定义对象的各种状态和行为,Java抛弃了c++中的非面向对象特性,如结构和函数调用,Java也不再支持全局变量。在Java中,如果不创建新类就无法创建程序,Java程序在运行时必须先创建一个类的实例,然后才能提交运行。Java同样支持继承特性,但Java只支持类的单重继承,即每个类只能从一个类中继承。其它一些面向对象的语言,如C++支持多重继承,但这会引起混乱并使语言变得复杂。
      机器无关的字节码编译Java的编译器将Java程序编译为字节码,字节码十分类似于机器指令,但字节码又不是为某个特定的机器定义的,因此一般不能在某个具体的平台上执行,而需要由Java运行系统的解释器来解释执行。Java程序的执行需要经过两个步骤:首先由编译器将Java程序编译为字节码,然后由Java运行系统解释执行字节码。
      结构中立
    Java语言的设计不针对某种具体结构。为了做到结构中立,除了上面提到的编译生成机器无关的字节码外,还制定了完全统一的语言文本,如Java的基本数据类型不会随目标机的变化而变化,一个整型总是32位,一个长整形总是64位。像CC++这样的现代程序设计语言并不满足这一点,不同的编译器和开发环境之问总会有一些细微的不同。为了使Java的应用程序不依赖于具体的系统,Java语言环境还提供了用于访问底层操作系统功能的类组成的包,当程序使用这种包时,可以确保它能运行在各种支持Java的平台上。
      支持语言级多线程
      计算线程的前提下与系统进行交互。多线程程序设计通常是困难的,其原理在于同一时间内可能发生许多事件,而且它们的顺序不是确定的。在Java中提供了一套方便的同步机制,其基本原因是CARHoare提出并在许多新型操作系统中得到广泛使用的管程和I临界区保护规则。Java将这些原理集成到了语言中,使这些规则的使用更加方便。如果底层的操作系统支持多线程,Java的线程通常被映射到实际的操作系统线程中,这意味着在多机环境下,用Java写的程序可以并行执行。
      自动内存管理
      在Java中,程序员不需要关心内存管理的问题,Java系统内嵌了自动垃圾收集功能,通过扫描内存,能自动地释放不再使用的内存块,这就使Java程序的编写变得简单了,而且减少了程序中因内存管理问题而出错的可能性。
      稳固性
      在PC机上编写程序经常会遇到由于程序中的错误而使计算机崩溃的情况。Java程序也会产生错误,但Java在发生错误时,程序并不中断,而是抛出一个异常,并自动寻找相应的异常处理方法。这种异常处理是新型操作系统的错误处理方法,Java将异常处理引入到语言中,使程序员能用统一的方法处理各种错误。Java引入了内存保护机制,Java程序只能修改被许可部分的内存的值。Java取消了指针操作,从而消除了复写内存单元或破坏有用数据的可能性。
      分布性
    Java是面向网络的程序设计语言。一方面,Java提供了适合于Intemet环境的对象连接机制、程序组织方式和名字空间;另一方面,Java通过提供支持TCPIPwww等的网络包,使用户能方便地访问其URL地址上的资源。
      安全性
      在分布式环境中,安全性是一个十分重要的问题。Java为了使自己适合于分布式应用的开发,在语言的设计之中考虑了安全性问题。Java在语言和运行环境中引入了多级安全措施。
      动态特性
    Java的动态特性是其面向对象设计的延伸。Java程序的基本组成单元是类,而Java的类又是运行时动态装载的,这使得Java可以在分布环境中动态地维护应用程序及其支持类库之间的~致性,而不像c++那样,每当其支持类库升级之后,相应的应用程序都必须重新编译。
      高性能
      一般情况下,可移植性、稳定性和安全性总是以牺牲性能为代价,解释型语言的执行效率远远低于编译型语言的速度,但Java语言很好地解决了这个问题。它在实现了可移植性、稳定性和安全性等特性的同时,又有高性能。Java编译生成的字节码与机器码十分接近,而且Java还有两种提高性能的措施,即及时编译(在执行前将字节码编译为机器码)和链入C代码。
      出于它所具有的这些特点和优点,使得它已经成为跨平台应用开发的一种规范,在世界范围内广泛流行。由于Java程序运行在Java虚拟机环境中,它不依赖于特定的系统,所以编程人员只需一次性丌发一个通用”的最终软件即可在多个平台环境中使用,这将大大加快软件产品的开发。
     

    4.2 坐席平台流程

    4.3 体系结构

    4.3.1 坐席中心

      坐席中心是整个系统的核心,根据系统的规模可设计成分布坐席中心。坐席中心同时也是通信枢纽,负责与GPS车载设备的信息交互和各个分中心的网络互连,完成各种信息的分类、记录和转发,以及分中心之间业务信息的流动,同时对整个网络状况进行监控管理。坐席中心采用呼叫中心技术、无线数据通信和无线语音通信,结合GIS技术和GPS车载设备,通过呼叫应答、调度派单的形式,实现车辆救援的智能调度,达到强化车辆救援管理,提高调度效率,降低运营成本的目的。坐席中心同时接收GPS车载设备上传的车辆信息,提供跟踪定位、监听录音和远程控制等措施,坐席中心也是行车数据存储、回放、分析的平台。

    4.3.2 车载设备

    GPS车载设备由GPS接收单元、GSM无线通信单元、控制单元、记录单元以及天线等组成。GPS车载设备通过GSM无线通信网络与坐席中心进行双向信息传输:它接收GPS定位信号,对车辆的状态进行检测,并将状态数据传送到坐席中心,同时接收坐席中心的调度信息或控制数据,并对车辆进行控制;同时车载设备将车辆行驶状态数据实时记录在数据库中供后期处理。

    4.3.3 GSM无线通信网络

    GSM无线通信网络是GPS车载设备与坐席中心信息交互的通道,其将GPS定位信息、求救、服务请求等信息准确及时地传回坐席中心;将中心的应答、服务、控制等信息准确及时地传给移动端。

    4.3.4 语音平台

      语音平台作为整个车联网平台非常重要的一个组成部分,它主要包含了一下几个部分:
      自动呼叫分配器(ACD 主要负责根据一定的分配算法,将用户打入的电话合理地分配给后台的座席处理人员。例如,可以采用平均分配算法或基于服务技能算法等。自动呼叫分配设备系统性能的优劣直接影响到语音平台的效率和顾客的满意度。ACD一般包括两个功能模块,即排队模块和呼叫分配模块。排队模块可以实现留言排队、重要客户优先排队等增强排队功能,此外,还可以在客户排队时向客户其通知排队状态,如目前在队列中的位置、预计等待时间等。呼叫分配模块可以将座席人员按技能和技术熟练程度进行详细分组,并与CTI路由模块结合,实现专家话务员选择,保证客户得到最合适的座席人员的服务,对于重要客户还允许其直接呼叫座席人员。 
      交互式语音应答(IVRInteractive Voice Respond )为接入到语音平台的用户提供语音导航、语音应答和录音功能。用户接入系统后,IVR根据客户服务中心的业务流程对客户进行引导,以方便用户进行业务选择;对于查询或咨询类业务,IVR可以通过预先录制的语音文件再配合文字语言转换(Text To Speech)软件对客户进行解答;当系统资源忙时,IVR可以引导用户留言。此外,一些比较先进的IVR系统还具备有语音信箱、电子邮件和自动语音识别(Automatic Speech Recognition)的能力。IVR实际上是一个自动的业务代表,它可以取代或减少人工座席的操作,提高效率、节约人力、实现24小时服务。同时也可以方便用户,减少用户等候时间,降低电话转接次数等。
    CTI服务器(Computer Telephony Integration)提供交换机和计算机互通的联络接口,使得计算机可以根据交换机提供的主叫号码等信息,智能地接通相应的坐席,并将用户的资料在电话接通的同时,显示在座席人员的计算机屏幕之前,实现Screen-Pop的功能,可以为用户提供更好的服务。 CTI服务器是语音平台的核心,它为语音平台业务的实现提供软件控制和硬件支持。

    4.3.5 客户关系管理

      系统管理员可以对所有的车辆、用户、社交信息进行增删改查的操作。

    4.3.6 用户自服务管理

      用户对自己的车辆信息、个人信息进行管理,拥有对车辆信息、和个人基本信息所进行的增删改查、注册新用户、修改原密码、注销该用户等权限。

    4.4 环境及配置选型

    4.4.1 开发环境

      前台
    A.开发语言:Java(JDK1.5)
    B.技术架构:Struts2+Spring2.5
    C.开发工具(软件):My Eclipse 10.6apache-tomcat-5.5SVN代码管理工具 

      后台
    A. 开发语言:C#
    B. 技术架构:framework4.0+wcf
    C. 开发工具:Microsoft Visual Studio 2010MsSQL2008IIS6.0

    4.4.2 操作系统

      在对当前较流行的三种网络操作系统UNIXNetwareWindowsNT研究分析的基础上,结合本项目的具体实际情况,选择了Microsoft Window 2008 Server作为本系统的网络操作系统,它是支持Web应用程序开发的基本平台及环境,其图形用户界面友好、操作方便、灵活,并已得到广泛认同。

    4.4.3 Web服务器

      服务器是Web环境中重要的部分,主要处理Internet接入服务请求,提供Internet用户接入查询地图及查询车载台位置服务,真正实现客户端,服务器端。Tomcat服务器是一种用得很广泛的Web服务器,它是一个开放源代码的免费的产品。Tomcat源自于Apache软件基金会Jakarta项目,作为一个开放源码的软件,Tomcat不仅能独立成为一个Web服务器,还能与其它的主流的Http服务器(如IISApache)一起工作,其它Http服务器处理静态的网页,而Tomcat处理动态的ServletJSP请求,且运行稳定、可靠、效率高,且具有良好跨平台性和稳定性,因此选用其作为web服务器。

    4.4.4 核心数据库

      核心数据库使用SQL SERVER 2008,它在下述指标上具有优点,和实际应用相符;
    ①具有良好的分布式处理和分布式存储的性能,支持数据异地处理和异地存储,同时在访问方式上具有良好透明性;
    ②具有严格的用户授权和身份认证功能,不同领域的数据处理有专门授权,访问数据时实行身份认证,合乎权限的用户方能存储数据;
    ③具有方便的数据备份、数据检测和数据恢复手段;
    ④具有和WEB服务器合二为一的无缝连接性能;
    ⑤数据可以很方便地从原来的FoxproAccess等数据库升级而来,不必重新输入。

    4.5 系统的软件配置

    (1)Web服务器软件配置
      操作系统:Microsoft Window 2003 Server
    Web发布及站点管理:Tomcat
    (2)数据库服务器软件配置
      操作系统:Microsoft Window 2003 Server或更高版本
      数据库管理:Microsoft SQL Server 2008
    (3)浏览工作站软件配置
      操作系统:Microsoft Window 982000或以上
      浏览器:Microsoft Intemet Explorer 60或以上
     

    4.6 系统的硬件配置

    服务器端:品牌服务器、CPU:双核2.66GHz或以上、内存:4G 、硬盘: 200G以上 
    客户端:CPU:双核2.66GHz或以上、内存:1G 、硬盘: 100G以上 
    串网络配件:网络交换设备,如交换器、HUB、路由器

    关键技术研究

    5.1 数据库关键技术

    5.1.1 数据库结构

    5.1.2 数据库存储

      目前,数据可以多种形式存储,如文件的形式,另外就是用数据库存储数据,本平台使用的数据库是MsSQL2008
    SQLServer是一种网络数据库管理系统,它在USB/S双层结构中位于服务器端(亦称后端),用于存储数据、提供数据和管理数据,是整个应用系统的数据库引擎,能够满足客户端连接数据库和存取数据的需要。
      在SQLServer中,表是由行和列组成的,每列称为一个字段,每一行称为一条记录。表中的每个字段都属于某种数据类型。SQLServer是一种大型数据库管理系统,可以存储大量各种类型的数据。在SQLServe:中的提供了较多的数据类型,满足客观实际的的需要。对数据类型的选择和输人,有其规律性。
      随着SQLServer数据库管理系统功能的不断增强、性能的不断完善,在数据库技术中,注意数据类型的选择策略,运用好大数据量的存储技术,掌握其大数据量存储规律,将各类数据尤其多媒体数据完全由数据库管理系统统一存储和管理,只有这样,才能最大限度地发挥数据库管理系统的强大功能。

    TBL_RegisterUserTmp:用户注册获取验证码表
    TBL_RegisterUser:注册用户信息登记表
    TBL_EmergencyContacts:用户信息表对应的每一个用户的紧急联系人表TBL_VEDSEA信息http方式上传GPS位置点信息登记表
    TBL_EAInfoGPSEA信息短信方式上传GPS位置点信息登记表
    TBL_EaTask:任务表
    TBL_CallRecord:通话记录表
    TBL_ServiceRecord:服务记录表
    TBL_ConsultInfo:咨询信息表

    5.1.3 数据库备份

    SQLServer提供了4种备份选项,选项的可用性由数据库恢复模型决定。

    (1) 完全备份
      完整备份此时间点所有的数据。
    (2) 差异备份
      保存上一次完整备份之后改动的所有数据页。
    (3) 事务日志备份
      备份日志中的所有事务。
    (4)文件和文件组
      简单恢复模型下的典型备份计划
      简单备份计划适用于对实时数据敏感性不高,数据更新量不大的数据库系统,对计算机系统资源要求较低。由于使用简单恢复模型在发生故障时可能会丢失较多数据和全部日志,所以不推荐在有线电视用户管理系统等重要数据库系统中使用。
     

    5.2 展示层关键技术

    5.2.1 地图客户端

    5.2.1.1 概述

    WebGIS我们调用的高德地图JavaScript API ,它是一套用JavaScript 语言编写的应用程序接口,您可以通过各种API接口向地图添加内容,创建功能丰富、交亏性强的地图应用。高德地图JavaScript API 提供了大量的实用工具和富有特色的插件功能,并提供了搜索和路线规划等服务。 高德地图JavaScript API 提供了各种类型的控件,为了保证API的迅捷性,所有控件均以插件的形式提供给用户使用。高德地图JavaScript API目前提供的插件类有:
      地图工具条插件 AMap.ToolBar )包括缩放控件,用户可控制缩放按钮是用滑动滚动条还是+/-按钮形式,方向键盘控件、自动定位控制。添加后默认位亍地图左上角。
      地图鹰眼插件 AMap.OverView )加载此控件后,会在地图右下角显示一个地图简略的概觅,用亍在更广阔的区域反映当前的地图视口 反映当前的地图视口 反映当前的地图视口 反映当前的地图视口 ,支持用户控制此鹰眼是打开状态还是关闭状态。添加乊后默认位亍地图右下角。鹰眼图也是一张地图,只不过它的范围是最大的范围,而且不能缩放、平移。通过移动鹰眼图上的小方框可以快速的将地图定位到小方框所在的地理位置鹰眼图的实现原理:和大地图一样首先设置好Map,只需要加范围就是全图最大的地理范围,不过在其中只加入一个瓦片图层,而载第0级的瓦片,也就是一张瓦片就够了。当鼠标点下时,使得小方框可以被拖动;当鼠标释放点击时,小方框不再能被拖动。计算出小方框中心点在ovMap中的实际地理位置,然后将外面的大地图通过moVeTo函数移动到这个地理位置即可。这样就实现了通过鹰眼图快速地将地图定位到一个指定的地理位置
      地图比例尺插件 AMap.Scale)用亍显示地图比例关系,添加后默认位于地图左下角。
     

    5.2.1.2 创建地图

    var opt = {level:13, center:new MMap.LngLat(cx||116.397428, cy||39.90923), doubleClickZoom:true, scrollwheel:true};
    var mapObj = new MMap.Map("mapDiv", opt);

    5.2.1.3 地图插件

      在初始化一幅地图之后,可能想要通过删除、添加或修改用户界面行为 或控件来调整 或控件来调整地图 。这时,需要调用相关插件来设置想显示在地图上的控件,可以通过Map对象的plugin方法在地图上添加插件,通过以下代码添加工具条、鹰眼、比例尺插件

    mapObj.plugin(["MMap.ToolBar", "MMap.OverView", "MMap.Scale","MMap.MouseTool"], function () {
    
       //添加工具条   
       tool = new MMap.ToolBar();
       tool.autoPosition = false;
       mapObj.addControl(tool);
       view = new MMap.OverView();
       mapObj.addControl(view);
       //比例尺插件
       scale = new MMap.Scale();
       mapObj.addControl(scale);
       //鼠标工具 
       mouseTool = new MMap.MouseTool(mapObj);
     });

    5.2.1.4 地图事件

      浏览器中的JavaScript是事件驱动的,这表示 JavaScript通过生成事件来响应交互, 通过生成事件来响应交互, 通过生成事件来响应交互, 通过生成事件来响应交互, 通过生成事件来响应交互, 通过生成事件来响应交互, 并期望程序侦听感兴趣的事件。 例如,在浏览器中用户鼠标左键点击地图时,浏览器会触发发点击事件,对此事件感兴趣的用户 可会点击事件注册监听器。当点击事件触发时,用户可以在监听器中接收 到这个事件 ,并执行自定义的行为,例如显示点击处的经纬度坐标信息。高德地图 JavaScriptAPI 拥有一个自己的事件模型,程序员可监听地图API对象的自定义事件,这些事件是独立的,并且与标准DOM事件不同。

    5.2.1.5 事件监听器

      高德地图JavaScript API通过bind()方法绑定对象和事件,您可以通过该方法来监听对象的事件,例如AMap.Mapclick,dblclick等事件。在用bind()方法绑定乊后,当这些事件被触发时,监听凼数可以获取到相应的事件参数event,该参数中包含鼠标所对应的地理位置的经纬度坐标。 使用bind()方法来监听事件,有三个参数,一个对象,一个待监听事件和一个指定事件发生时调用的凼数。 如下所示,mapObj是一个地图对象,click是待监听的鼠标左键单击事件,function()凼数是当单击事件发生时调用的凼数。当用户点击地图时,会弹出一个对话框显示You clicked me!”。

    mapObj = new AMap.Map("map"); 
    function eventHandler() { 
    alert("You clicked me!"); 
    } 
    mapObj.bind(mapObj, "click", eventHandler);

    5.2.1.6 访问用户界面事件参数和this

      通常情况下,用户界面事件会传递事件参数,您可以通过事件监听器访问这些参数,这些参数会注明事件发生时用户界面所处的状态。例如,用户界面click事件,监听函数会得到一个事件对象event,在event的属性中可以获取有关该事件的详细信息,例如经纬度属性,该属性指出了用户在地图上点击位置的经纬度。同时在监听函数中this.obj会指向触发该事件的DOM元素。 可以访问事件侦听器的事件参数,这与访问对象属性的方法一样。以下示例介绍了如何为地图添加事件侦听器,以及如何在用户点击地图时,在所点击的位置处创建一个标记。

    var lnglat;  
    mapObj.bind(mapObj,"click",function(e){  
    lnglat=e.lnglat; 
    var marker = new AMap.Marker({  
    id:"m123",  
    position:e.lnglat,  icon:"http://119.167.194.139:9090/webapi/static/Images/marker_sprite.png", offset:{x:8,y:34}});  
    mapObj.addOverlays(marker);  
    mapObj.setCenter(lnglat); 
    });

    5.2.1.7 覆盖物

    5.2.1.7.1 概述 

      所有叠加或覆盖到地图的内容,我们统称为地图覆盖物。如标注、矢量图形元素(包括折线和多边形和圆)、信息窗口等。覆盖物拥有自己的地理坐标,当您拖动或缩放地图时,它们会相应的移动地图API提供了如下几种覆盖物: 
    Marker 标注表示地图上的点,可自定义标注的图标。 
    Label 表示地图上的文本标注,您可以自定义标注的文本内容。 
    Polyline 表示地图上的折线。 
    Polygon 表示地图上的多边形。多边形类似亍闭合的折线,另外您也可以为其设置填充颜色。 
    Circle 表示地图上的圆
    dow 表示信息窗口,也是一种特殊的覆盖物,它可以展示更为丰富的文字和多媒体信息。需要注意的是,同一时刻只能有一个信息窗口在地图上打开。 
    可以使用addOverlays()方法向地图添加覆盖物,使用removeOverlays()方法移除覆盖物,注意此方法不适用于InfoWindow 

    5.2.1.7.2 标注

      标注表示地图上的点。您可以使用默认点标注在地图上显示一个标注,也可以使用Icon类来构造复杂的点标注,如修改图标的显示,设置点标注的大小,设置点标注的鼠标滑过和滑出的状态等。

    5.2.1.7.3 点标注

      点标注用于标识地图上的位置。API提供了默认图标样式,类名为AMap.Marker,其构造函数的参数为MarkerOptions,用来设置点标注的经纬度位置、偏移量、图像、显示内容、图标的热点区域、图标是否可拖动、图标旋转、图标是否可见。您也可以通过Icon类自定义标注图标。 在创建一个点标注之后,可以使用地图对象的addOverlays()方法将其添加到地图上。 
      以下示例介绍了在地图指定位置添加一个默认点标注: 
    var marker = new AMap.Marker({id:"m", position: new  AMap.LngLat(116.40632629394531, 39.90394233735701), 
    offset: new AMap.Pixel(-8,-34), icon: "http://code.mapabc.com/images/lan_1.png" });
      自定义构造MMap.Marker对象mapObj.addOverlays(marker); 加载覆盖物 position属性用于为点标注设置位置。 offset属性用于设置偏移量,将其设置为(0,0)offset: new AMap.Pixel(0,0);则点标注图标左上角跟position对齐,如A图所示。如果将偏移量设置为(-8,-34) offset: new AMap.Pixel(-8,-34);偏移量向上向左为负数,向下向右为正数,点标注图标中心点position对齐

    5.2.1.8 POI搜索

    AMap.PoiSearch提供兴趣点搜索服务,Amap.PoiSearch的构造函数的参数是可选的,是PoiSearchOption类型的对象,可以对搜索目标库、搜索的数据类别、搜索范围、查询范围、每页显示结果数量等进行设置。在构造一个兴趣点搜索对象之后,可以调用该搜索对象的各种方法进行搜索,例如Poi查询、根据中心点关键字进行周边查询、根据中心点经纬度迚行周边查询、根据PGUID(全局索引库ID)查询兴趣点的详细信息等兴趣点相关搜索服务、拉框查询关键字等。 在北京搜索关键字为中关村的代码如下: 

    var poiSearchOption = { srctype: "POI", type: "", number:10, ,batch: 1, range: 3000,ext:"" }; 
    var poiSearch = new AMap.PoiSearch(poiSearchOption); 
    poiSearch.byKeywords("中关村","010", function(result) { 
    //输出查询结果 
    });

    5.2.1.9 周边查询

      当需要查询某个中心点周边一定范围内的Poi信息时,可以使用周边查询API。周边查询API有两种类型:根据中心点关键字查询和根据中心点经纬度查询,这两种方法的参数不一样: 中心点经纬度查询,需要中心点坐标(AMap.LngLat类型),查询关键字,回调函数三个参数poiSearch.byCenPoi(centXY,keywords, cenPoiSearch_func); 中心点关键字查询,需要中心点关键字,查询关键字,查询地区,回调函数四个参数

    poiSearch.byCenKeywords(CentKeyword, keywords, city,cenKeywordSearch_CallBack);

    5.2.1.10 查询范围

      当用户需要查询某个多边形范围内的Poi时,可以使用范围查询服务。 指定范围查询需要指定组成多边形的点坐标数组查询关键字回调函数三个参数 poiMSearch.byRegion(array, keywords, searchResult_CallBack);

    5.2.1.11 地理编码 

      地理编码能够将地址信息和地理坐标点信息进行相互转化,包括将地址信息转换为地理坐标点的编码和将地理坐标点转化为地址信息的逆地理编码。 高德地图JavaScript API提供了Geocoder类进行地址解析,您可以使用geocoderOption来设置各个参数选项,例如查询的范围,交叉口数量,线记录数,返回的兴趣点数量等。 var geocoderOption = { range:300, crossnum:2, roadnum :3, poinum:2 }; var geocoder = new AMap.Geocoder(geocoderOption);

    5.2.1.11.1 地理编码

      地理编码是将地址信息转换为地理坐标点信息,你可以使用此项功能在指定位置添加一个点或是定位地图上的某个位置。geocoder.geocode("北京市海淀区苏州街3",function(data){ console.log(data); //输出地理编码的结果 });

    5.2.1.11.2 逆地理编码

      逆地理编码又称位置描述或地址解析,即从已知的经纬度坐标到对应的地址描述(如省市、街区、楼层、房间等)的转换。 geocoder.regeocode(new AMap.LngLat("116.3591194152832","39.972121232368345"), function(data){ console.log(data); //输出逆地理编码的结果 } );

    5.2.2 坐席客户端

      坐席客户端采用Struts + Spring + Hibernate轻量级架构系统可以改变应用程序设计的耦合度和灵活性可以允许层替换而不影响到其它层的代码可以方便地处理容器级的服务,减轻开发者处理复杂问题的负担依据车辆救援服务系统的特点和系统需求对整个系统进行逻辑分层有利于系统的开发、维护以及后续新功能的扩充这里软件的逻辑分层指的是在单个的软件模块中完成相对独立的特定的功能.在系统的框架设计中采用MVC ( Mode-lV iew-Controller) 设计模式整合Struts+Spring+Hibernate轻量级框架将整个系统分为四层表示层( Presentation Layer)、业务逻辑层( Business Layer)、数据持久层( Persistence Layer)和域模块层( DomainM odel Layer), 其中,Struts实现表示层, Spring实现业务逻辑层, Hibernate实现数据持久层具体做法是用面向对象的分析方法根据需求提出一些模型将这些模型实现为基本的Java对象然后编写基本的DAO(Data Access Object) 接口并给出HibernateDAO实现采用Hibernate架构实现的DAO类来实现Java 类与数据库之间的转换和访问最后由Spring完成业务逻辑集成SSH 框架的系统结构如图所示



    集成SSH框架的系统结构图
    (1)表示层
      表示层用来收集用户信息以及为用户展现内容利用Struts来完成表示层的处理其主要功能为为用户管理请求和响应(HttpServletRequestHttpServletResponse), 提供ActionForm来封装与用户互动的数据元素提供一个控制器( Contro-ller)代理调用业务逻辑和其它上层处理处理从其它层掷出给一个Stru ts Action 的异常为显示提供一个模型执行用户接口验证(Validate)等。
    (2)业务逻辑层
      系统的核心之一完成整个系统的各个业务处理为表示层和数据持久层提供业务处理接口,Spring来实现. Spring所提供的依赖注入(DI)和控制反转(IoC) ,使它可以轻松地完成上下两层的接口服务其主要功能为处理应用程序的业务逻辑和业务验证管理事务预留和其它层交互的接口管理业务逻辑层对象之间的依赖增加在表示层和数据持久层之间的灵活性使它们互不直接通讯从表示层中提供一个上下文( Context)给业务逻辑层获得业务服务( Business Services),管理从业务逻辑到数据持久层的实现等。
    (3)数据持久层
      数据持久层负责数据的持久化工作. Hibernate框架为Java 提供了对象关系持久化( Object-to-relat ionalPersistence)机制和查询服务其通过HQL的面向对象的查询语言或者使用条件表达, API来完成数据的持久化工作其主要功能为保存、更新、删除储存在数据库中的信息。BS坐席通过在页面上嵌入OCX控件,并在web页面上用javascript操作控件对象的相关方法和事件来实现话务的操作,比如常用的呼叫,转移,咨询等操作。

    5.2.3 手机客户端

      本系统的设计中手机客户端多处需要与服务器进行数据传输。为了减轻客户端的数据处理任务,提高响应效率,在设计时本文通过调用服务端提供的Web Services的方式获取服务端数据。Web servicesWeb服务,基础架构由客户端和Web服务器组成,是一种基于SOAP协议的远程调用标准。通过WebService可以将不同操作系统平台,不同语言、不同技术整合到一起。
      简单对象访问协议(Simple Object Access ProtocolSOAP)是一种基于 XML 的协议,可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议(HTTP),简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME),基于通用传输协议是 SOAP的一个优点。它还支持从消息系统到远程过程调用(Remote Procedure CallRPC)等大量的应用程序。SOAP提供了一系列的标准,如WSRMWS-Reliable Messaging)形式化契约确保可靠性与安全性,确保异步处理与调用;WS-SecurityWS-TransactionsWS-Coordination等标准提供了上下文信息与对话状态管理。
      但是在Android SDK 中并没有提供调用Web Services 的库。因此, 为了实现在Android 平台上访问Web Services 的功能需要借助第三方类库来实现。Android 平台上常用的用来访问Web Services 的软件包是ksoap2androidksoap2adroid 是一个开源项目,为Android平台提供给了一个轻量级的而且高效的SOAP 库。利用ksoap2android Android 平台上调用Web Services的步骤如下:
    (1)设定Web Services 的命名空间和调用的方法名称,关键的代码如下:
    SoapObject req  new SoapObject(nameSpacemethodName);
    其中,nameSpace 参数表示的是要调用的Web Services的命名空间的一个String 类型变量, 该参数开源从Web ServicesWSDL 文档中获得;methodName 参数表示要调用的Web Services 的方法名称的一个String 类型变量。
    (2)设定方法的参数值(可选的,如果调用方法无参数,就可省略):
    reqaddProperty(paramvalue)
    (3)生成调用方法的SOAP 请求信息。该SOAP 请求信息利用SoapSerializationEnvelope 对象描述:
    SoapSerializationEnvelope ssEvelope  new SoapSerializationEnvelope(SoapEnvelopeVER11)
    ssEvelopebodyOut  req
    SoapSerializationEnvelope 对象的创建需要通过SoapSerializationEnvelope 类的构造方法设置SOAP 协议的版本号。SOAP 协议的版本号是根据Web Servioces 的版本号决定的。另外,创建SoapSerializationEnvelope 对象时,需要设置SoapSerializationEnvelope 类的bodyOut 属性,属性值为第一步创建的SoapObject对象。
    (4)创建HttpTransportSE 对象。利用HttpTransportSE 类的构造方法设置Web Services WSDL URL,代码如下:          
    HttpTransportSE trans  new HttpTransportSE(URL)
    (5)使用call 方法调用Web Services,代码如下:
    transcall(null, ssEvelope);
    (6)使用getResponse 方法获得Web Services 的返回结果,代码如下:
    oapObject soapResult  (SoapObject)ssEvelopegetResponse();
      相对而言,SOAP协议属于复杂的、重量级的协议,当前随着Web2.0的兴起,表述性状态转移(Representational State TransferREST)逐步成为一个流行的架构风格。REST是一种轻量级的Web Service架构风格,其实现和操作比SOAPXML-RPC更为简洁,可以完全通过HTTP协议实现,还可以利用缓存Cache来提高响应速度,性能、效率和易用性上都优于SOAP协议。REST架构对资源的操作包括获取、创建、修改和删除资源的操作正好对应HTTP协议提供的GETPOSTPUTDELETE方法,这种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。REST架构尤其适用于完全无状态的CRUDCreateReadUpdateDelete,创建、读取、更新、删除)操作。
      基于REST的软件体系结构风格(Software Architecture Style)称之为面向资源体系架构(Resource-oriented ArchitectureROA)。按照REST原则设计的软件、体系结构,通常被称为REST式的RESTful),在本文中以下称之为RESTful Web服务,以便于和基于SOAPWeb服务区别。 这种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。  

    代码举例:

    final String SERVER_URL = "http://192.168.1.1/PosWebServices/WebUI.asmx"; // 定义需要获取的内容来源地址
    URL url = new URL(SERVER_URL);
    URLConnection con = url.openConnection();
    
    //一些请求设置
    con.setDoOutput(true);
    con.setRequestProperty("Pragma:", "no-cache");  
    con.setRequestProperty("Cache-Control", "no-cache");
    con.setRequestProperty("Content-Type", "text/xml");
    OutputStreamWriter out = new OutputStreamWriter(con.getOutputStream());
    out.write(new String(xmlInfo.getBytes("UTF-8")));   //这里可以发参数的,字符串应该是XML格式的
    out.flush();
    out.close();
    //取返回值
    BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));
    StringBuilder sBuilder = new StringBuilder();
    String line = "";
    for(line = br.readLine(); line != null; line = br.readLine()) {
    sBuilder.append(line);
    }


      与传统Web服务相比,REST技术还具有很多优点:
    (1)无需引入SOAP消息传输层,轻量级和高效率的HTTP可直接披应用。
    (2)灵活性和易用性,无需建屯庞大的XML消息。只需建范一个网址字符串来访IhJ REST服务。可以轻易地在任何编程语言中实现,尤其是住JavaScript中。使用SOAPJavaScriptWeb服务非常繁琐,但使用RESTJavaScriptWeb服务就非常简单。
    (3)可以不使任何编程语占就能访问服务,而只要使用Web浏览器或类似如ArcGIS Explorer的地理浏览器。
    (4)更好的性能和缓存支持。RESTWeb服务可以利用高速缓存控制头,从而减少带宽的需求。使用REST可以改善响应时间和改进用户

    体验。
    (5)可扩展性和无状态性。每个请求都是独立的,一旦被调用,服务器不保留任何会话,这样就可以更具响应性。通过减少事件后通讯状态的维护工作,提高了服务器的可扩展性。
    (6)易于被索引和发现。REST网址能够被如GoogleYahooMSN的搜索引擎索引,这使得它们更容易地被发现。不通过单独的资源发现机制就可以发现网址,例如通用描述,发现和集成机制(UDDI)
      服务器端采用J2EE,客户端采用JSPFlexJavaFXAIR等可以直接调用Servlet,其他的实现技术基本上不能直接调用,但是无论是那种客户端,对于基于SOAPWeb服务或者基于RESTful Web服务务都是支持的,如AJAX XMLHttpRequestFlexHTTPService等。

       

    平台应用研究

    6.1 如何构建应用

    以福特POC车辆救援项目为例使用平台构建相应的应用,本人主要负责该项目的主要功能开发,本章使用该平台重新构建这个应用,步骤如下:
    1.配置软件环境
    a.操作系统使用WindowsServer2008企业版
    b.安装MyEclipse8.6以上版本
    c.安装jdk1.5
    d.安装Tomcat5.5
    2.将平台代码导入MyEclipse
    3.修改相关配置文件
    a.appconfig.xml文件修改pasap连接信息
    b.application.xml修改数据库连接信息
    c.logBack.xml日志路径修改
    d.CallLisener.java修改语音控件注册路径
    4.项目打包部署
    a..删除eap.jar,log4j.jar
      通过以上几个步骤就快速的构建了一个车辆救援项目的应用

    6.2 应用使用实例

    6.2.1 信息展示

        本节展示通过基于WebGIS的车联网平台构建的应用“福特POC车辆救援服务项目”的效果。
      总界面:

    EA报警信息:
      经度、纬度、定位状态、定位时间(有短信通道和TP两种通道获取的数据)

      用户信息:
      来电、姓名、药物历、健康保险

      车辆信息:
      来电号码、车牌号、车型、VIN号、车辆年型、道路救援信息、款型

     

    6.2.2 Psap查询

      根据用户来电时所得到的经纬度信息去查询相应城市的psap信息

     

    6.2.3 地图显示

      根据来电时所得到的经纬度信息在地图上显示事故发生的详细位置
    事故点显示:区域信息 描述信息 道路信息 POI信息

     

    6.2.4 周边查询

      周边查询:

    总结与展望

    7.1 成果

      本文致力于基于WebGIS车辆救援平台的研究与实现,实现了一个基于WebGIS的车辆救援系统,本系统采用了采用了商用的GIS软件进行了二次开发,能够实现对车辆的救援、定位、监控,整个系统在服务器上进行了部署测试,系统响应快,体验丰富,达到了预期目标,是一个可运行、实用的系统。
      论文的主要成果如下:
      (1)基于WebGIS在车辆救援平台课题研究背景和意义、国内外研究动态。
      (2)研究了车联网国内外发展状况、WebGIS的特点和目前的发展。
      (3)分析了基于WebGIS车辆救援平台功能需求、介绍了相关功能。
      (4)为了验证相关的功能需求,实现了一个基于WebGIS的车辆救援系统,并且对展示层的相关技术进行了深入的剖析和研究。

     

    7.2 展望未来

      车联网技术是高科技时代的产物,它是符合这个时代的发展的,虽然现在很多难关和技术在现阶段段都没有攻克,但是未来的城市交通正因为有了车联网的存在而更加智能化。车辆在智能交通网络指挥下迅速而有序地穿梭移动,即便是盲人,也能自如地驾驶;汽车不再油,绿色充电站遍布城市的大街小巷,人们可以随时为爱车充电。车联网技术将重新定义汽车NDA。借助无线通讯,城市内车与车之间,车与建筑物之间,以及车与城市基础设施之间实现互联互通。这就如同一个蝙蝠定位系统,在接收到局部信息后,迅速地传递到范围更广的网络中,帮助交通系统将车流分配到不同的区域内。 再加上高智能的车辆驾驶系统,车辆如深海中的鱼群快速地游动却彼此永不相撞。未来汽车所具备的3D智能导航系统,就像一个智能机器人,能与交通设施、其他车辆进行信息交流,自动引导汽车行驶,不需人驾驶。通过车联网技术实现了高效、节能、零事故、零拥堵、自动驾驶的愿景。
      除此以外,人们还可以在车上进行网购,了解新车的消息,节约时间和成本,不用在为停车的事担心。当驾驶员疲倦驾驶时,通过方向盘监测驾驶者脉搏,发现驾驶员疲劳驾驶时,便启动警告系统。最初只是摇晃驾驶座位,当驾驶者仍无反应时,系统就会自动熄灭而强行停车。
      车联网是一种全新的网络应用是物联网技术在智能交通领域中的应用体现,是新一代智能交通系统的核心基础。未来的车联网改变了我们的生活方式,提高我们的生活质量,也给众多领域带来福音。从车联网技术的产生到现阶段的发展,可以称得上是迅速的,也正是基于各种技术的发展。车联网这个新兴产业的发展前景固然令人向往,但是需要更多力量的帮助,包括跨产业的通力合作;需要政府的重视,在政策上给予支持和引导;需要城市规划者和基础设施专家的努力;需要汽车制造企业的长远眼光和开放心态,做好产品的研发和市场策划;需要信息技术服务企业的共同参与,建立更加扎实的信息基础设施,为信息的采集、传递、处理做好准备。

    参考文献

    [1]车联网_什么是车联网(IOV) .电子发烧友网[引用日期2014-02-08]
    [2]基于无线传感器网络的智能交通系统设计-中国科技博览-2011年第8
    [3]刘吉夫,张福平,杨雪超。 WebGIS及其应用[J]. 江西气象科技, 2003, 26(1)
    [4]贺媛媛,张颖。 WebGIS 的发展现状及前景[J]. 石家庄铁路职业技术学院学报, 2008, 7(1)
    [5]刘建华,杨士航.《浅谈车联网技术发展与应用前景》[J].《中国高新技术企业》,2010年第28

     

     

    展开全文
  • iOS应用崩溃日志

    千次阅读 2016-04-10 11:23:37
    iOS设备上的应用闪退时,操作系统会生成一个崩溃报告,也叫崩溃日志,保存在设备上。 崩溃日志上有很多有用的信息,包括应用是什么情况下闪退的。通常,上面有每个正在执行线程的完整堆栈跟踪信息,所以你能从中...
  • IAP-应用内购买

    千次阅读 2013-08-20 01:52:24
    Cleared for Sale(等待销售): 一定要选取此项,否则的话,测试时会发生非法产品ID的错误。 Language to Add(增加的语言): 选一项。下列两项将出现: Displayed Name(显示名称): 用户看到的产品名称。比如...
  • Android应用程序资源的编译和打包过程分析

    万次阅读 多人点赞 2013-04-15 00:57:14
    Android系统当前定义了两个资源命令空间,其中一个系统资源命令空间,它的Package ID等于0x01,另外一个是应用程序资源命令空间,它的Package ID等于0x7f。所有位于[0x01, 0x7f]之间的Package ID都是合法的,而在这...
  • Android 应用和系统优化V1.2

    千次阅读 2017-09-15 22:29:47
    如果是在开启应用后才开启此功能,记得先把应用结束后重新启动)在设置 ->开发者选项->GPU呈现模式(不同设备可能位置或者叫法不同)中打开调试后可以看见如下图(对settings当前界面上下滑动列表后 的图表):   ...
  • 2月15日,CSDN 联合PyCon中国、wuhan2020、xinguan2020 等力量,举办以「抗击疫情,开发者在行动」为主题的2020 Python开发者日·线上技术峰会,围绕Python在疫情中的具体落地应用与项目,为广大Python开发者、爱好...
  • 我们接下来从安全性,性能,功能,可移植性的角度分别分析Android系统为应用程序提供的支撑。 回顾前情: Android应用程序开发以及背后的设计思想深度剖析(1) Android应用程序开发以及背后的设计
  • Cortex-M3和Cortex-M4 Fault异常应用之一 ----- 基础知识

    万次阅读 多人点赞 2013-03-07 11:21:48
     Cortex-M内核实现了一个高效异常处理模块,可以捕获非法内存访问和数个程序错误条件。本应用笔记从程序员角度描述Cortex-M Fault异常,并且讲述在软件开发周期中的Fault用法。 2. 简介  Cortex-M3(以下...
  • 区块链+各行业应用案例

    万次阅读 多人点赞 2019-07-25 22:03:44
      中国电子商务区块链规范发展中心的成立将在当前区块链行业快速发展的形势下,着力开展区块链技术规范、区块链企业经营规范、行业发展规范方面的研究和培训教育工作。中心依托“课题组”强大的资源优势,进一步...
  • 近年来,随着国家对金融市场管控政策的不断调整以及互联网金融的快速发展,非法集资的犯罪手段和...微信公众号ID | datayuancn 本篇案例为数据猿推出的“金融科技价值—数据驱动金融商业裂变”大型主题策划
  • 《Dojo构建Ajax应用程序》连载一

    千次阅读 2009-05-06 23:16:00
    本文内容来自于本人翻译的《Dojo构建Ajax应用程序》一书,该书由机械工业出版社出版。 以下为该书封面(点击图片可以进入到china-pub上该书的页面): 以下为该书的目录: 202第一部分Dojo指南.1a1c1ac111c111a1...
  • 当然,在使用这种方式实现程序间通信的时候,需要考虑检查一下来源 URL 的合法性,防止一些非法的调用造成用户的损失。 结语 通过自定义协议地支持,可以将 iOS 程序的一些功能和服务提供给外部程序,也...
  • Web应用安全权威指南 笔记

    千次阅读 2014-10-24 18:53:15
    Web应用安全权威指南 跳转至: 导航、 搜索 p41 每次会话认证完成后更改下一次的会话IDp44 Cookie Monster Bug:应该指定a.co.jp的却指定成co.jpphp.ini:session.cookie_httponly=on(JS不能访问...
  • Servlet——Session(2)之简单应用

    千次阅读 2016-05-11 15:20:01
    本文介绍了使用Session技术的三个简单例子,防止用户非法登录到某个页面,验证输入的验证码是否正确,以及简易的购物车。
  • Competition1——智能交通场景应用

    千次阅读 多人点赞 2021-01-20 21:18:35
    1——智能交通场景应用1. YOLOv3 + Deepsort2. 提取背景.py3. 车道线标定.py4. 车牌识别模块4.1 车牌信息择优迭代5. 车辆非法越线检测6. 车辆斑马线不礼让行人检测7. 总结 个人博客在这呢????fuhao7i Blog 视频讲解...
  • 注意,写入的字符串一定是trigger文件已经存在的,否则会提示参数非法。写入心跳触发器示例: echo heartbeat > /sys/bus/platform/devices/leds-gpio/leds/red/trigger 此时板子上红灯应会闪烁。 再次查看: ...
  • Android白虹剑之EditView之非法输入

    千次阅读 2013-06-14 00:41:09
    类似于Java EE应用前端程序校验用户输入的内容是否符合当前表单对应输入域所支持数据类型。下面给出该情景的案例: 一、案例技术要点 EditText布局设置 android:digits:接收输入字符为数字、小写字母。 ...
  • Android应用开发详解

    千次阅读 2014-12-05 21:35:38
    我们先会简单介绍一下Android里的应用程序编程,然后以这些应用程 序在运行环境上的需求来分析出,为什么我们的Android系统需要今天这样的设计方案,这样的设计会有怎样的意义, Android究竟是基于怎样的考虑才变成...
  • Modbus应用协议详解

    千次阅读 多人点赞 2019-03-18 16:54:49
    Modbus应用协议缩略语协议描述服务器正常响应服务器异常响应三种PDUmb_req_pdumb_rsp_pdumb_excep_rsp_pdu数据编码Modbus数据模型Modbus模型实现的实例 缩略语 协议描述 Modbus是一个请求/应答协议,并且提供功能码...
  • 上篇“【物联网(IoT)开发】Arduino 入门 ...本文将介绍如何开发一个应用程序,以便使用适用于物联网 (Internet of Things, IoT) 的技术。我们的应用程序通过串口收集数据,将其存储在一个 Web 服务器上,然后在网页
  • Cognos应用

    千次阅读 2007-12-07 04:55:00
    结果可选择保存在另一个表单中,也可以替换当前表单的内容。 5. 怎么从java访问PowerPlay 从VB中可以用 Set ppApp = CreateObject("CognosPowerPlay.Application"  和 Set ppRep = CreateObject("CognosPowerPlay...
  • PPPoE与802.1X在校园网中的应用分析

    千次阅读 2012-08-17 17:05:36
    转自:http://www.autooo.net/classid123-id54221.html ...本文分析了两种协议在实际应用中的特点以及在部署过程中可能引发的安全问题,结合校园网络的特点,提出两种协议在校园网络中的部署建议。 PPPoE和802.1X的分析
  • 初步过了一下,很多地方写得还是比较深入的,先转载,后面再仔细看看。...我们先会简单介绍一下Android里的应用程序编程,然后以这些应用程 序在运行环境上的需求来分析出,为什么我们的Android系统需要今天这样的设
  • 软件安全测试之应用安全测试

    万次阅读 2015-03-02 21:26:51
    SSL(Secure Socket Layer) 位于应用层和传输层之间,它可以为任何基于 TCP 等可靠连接的应用层协议提供安全性保证。 SSL 协议实现的安全机制包括: 1、 数据传输的机密性:利用对称密钥算法对传输的数据进行加密...
  • 区块链各行业应用案例

    千次阅读 2020-07-05 20:59:38
    这意味着,在全球范围内,中国人民银行将成为首个研究数字货币及真实应用的中央银行。 数字货币是电子货币形式的替代货币,作为一种金融工具,已被世界很多国家认可。此次央行推动的基于区块链的数字票据交易平台...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 42,704
精华内容 17,081
关键字:

当前应用id非法