Intraweb使用手册中文版_第1页
Intraweb使用手册中文版_第2页
Intraweb使用手册中文版_第3页
Intraweb使用手册中文版_第4页
Intraweb使用手册中文版_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、什么是 intraweb intraweb 是一个创建基于web应用程序的具有革命性意义的新方法,在早期版本的intraweb 的用最简单的方法创建 web解决方案的基础上,intraweb 扩展了它的技术,提供了一个杰出的工具,用来高速、简易地创建 internet,intranet 以及 extranet 应用程序。许多基于 web的开发工具都要求开发者有cgi 脚本的知识, 同时也要求开发者要有状态跟踪以及复杂的客户端配置。 intraweb 避免了这些。通过使用delphi 中的组件,简单的创建一个应用程序项目,之后,注册到服务器上,客户就可以利用兼容html 4的任何一种浏览器来访问

2、这个应用程序。这些浏览器包括最新版的 netscape 以及 internet exploer 等等。利用intraweb 开发的 web应用程序在这些浏览器上都通过了测试。利用 intraweb 开发,不需要写任何的html 、cgi 或是 javascript 代码,所有的代码都在delphi 中完成了。为了让应用程序有更好的灵活性,利用 intraweb 开发的应用程序也可以以独立的可执行程序的方式像其它的桌面应用程序一样来运行,也提供了相应的调试能力。intraweb是怎样工作的?intraweb很像是普通的应用程序,唯一不同的是它的用户界面是用浏览器代替了通常的windows界面,当

3、把应用程序安装到web 服务器上之后, 用户马上就可以通过它的网络地址来开启它,应用程序会马上建立使用者的用户信息,这样就可以避免丢失用户信息或者与其它的使用者发生使用混乱。每一个用户的使用信息都会由程序自动创建和跟踪,并且对于开发者来说,是透明的。 其它的开发语言, 像 isapi,cgi,asp处理这些问题的能力都不是很好。intraweb 设计成一套能创建基于web 的各种类型应用程序的开发工具,不论是一个简单的数据输入界面,投票或是一个更复杂的让已访问过的客户能顺利登录的应用程序,intraweb 都能胜任。intraweb用户手册系统要求客户要运行用intraweb开发的应用程序,

4、唯一的要求就是要有一个能兼容html4.0浏览器, 用 intraweb及 html4 和 javascript 开发的程序都通过了广泛的测试,它支持 mozilla,netscape 6 或更高版本 ,internet exploer 4.0 或更高版本。备注:如果你想你的应用程序支持netscape 4, 你就要使用我们继续给予支持的intraweb4 的版本来开发。html4 intraweb 使用 html 4 和样式单来完成页面元素及其它元素的布置,要使用模板或page mode都需要使用到样式单。javascript javascript 的使用可以提供更多的客户端特性,javas

5、cript 也允许 intraweb 来控制浏览过程以及一个已经生成的页面,只有在application mode,javascript 才是必需的。browser specific feathers 尽宇航局 html 和 javascript 的标准已经制定了, 但是在许多地方, 不同的浏览器之间仍然存在许多差异,intraweb 能自动调整这些差异,intraweb充当了一个html 和 javascript代码的生成器。 intraweb甚至动态地知道每一个浏览器在运行时所存在的每一个bug. 另一方面,intraweb 输出给每一个浏览器的代码都是经过优化的,请查阅browser i

6、mplementations这一章节,获取更多的信息。安装 intraweb 安装在 delphi 的安装过程中, intraweb 将会自动整合到delphi 中, 三个新的包含intraweb 组件 tab 会在 delphi可视化组件工具中自动创建,其中一个包含了非数据库类型的组件,另外的两个包含一个数据库访问类型的组件和控制组件。一个新的名为intraweb的 tab 也会在 delphi 的储存器中创建,所有的intraweb 应用程序都将通过包含在这些tab 中的组件和模块来完成。intraweb的安装会把一些文件拷贝到windowssystem目录以及所有delphi 环境变量中

7、所需要的子目录下,同时,也创建了一个在程序组中通过开始菜单来访问的快捷方式,文档也会被放在这个程序组中。卸载要卸载intraweb ,和其它的windows应用程序一样,选择控制面板里的“添加/删除应用程序”来卸载intraweb 。安装 license keys 对于注册用户, 能过与试用版用户一样的方法来下载license keys , 如果你安装的是试用版本, 那么 license keys 的安装完全是为了能使用注册程序,这个程序可以通过intraweb 程序组中的图标来运行。重新考虑用户界面许多我都尝试把他们的用户程序设计成像普通的windows 应用程序一样,如果你也是这样的话,你

8、会发现你所设计的界面工作得并不是很好,想像一下,创建一个就像是一个dos 应用程序一样的用户界面,那将会是多麻烦的一件事,不要仅仅考虑在web上的用户界面是怎么样的,你还要再想想在设计web 界面时所发现的局限性。dbgrids 就是一个例子, 在一个普通的delphi 应用程序中, 它被用于在一个grid 中显示成千上万的数据记录,在 web 中,那将会是一个非常大的html文档,而且在用户加载的时候,是非常慢的。当一个开发者意识到这个事实情况的时候,他们经常会使用“ next” 和 “ previous” 按钮以便于让dbgrid 能局部地显示,但是,这样做会让占用更多的服务器内存,消耗更

9、多的服务器资源,同时,作为提供数据来源的数据库也会回为内存大量的占用而变得越来越慢,试着想想一些普通的delphi应用程序的作法,重新考虑一下在web上的用户界面。当然,利用创建一个空的grid 同时用一个搜索功能来解决也是通常用来缓解上述问题的办法之一,通过让用户提供他所要筛选的数据参数,就能从成千上万的数据中筛选出十几个,或仅仅是几百个记录,这不但是降低网络带宽占用的好办法,同时,它也可以说是提供了一个很好的用户界面,并且,同时也最小化地读取数据库。允许用户输入搜索条件仍然有可能产生就像上面提到的得到成千上万记录的可能性,为了避免这种情况的产生, tiwdgbrid有一个 rowlimit

10、 属性,它默认值是0,也就是说它默认是被禁止的。你可以给它设置一个最大值, 这样, 不管查询出多少记录,返回给用户的记录数也不会超过你在rowlimit中所设置的最大值,你可以查阅其它的技术参考来证实这一点。许多的搜索引擎也都限制了最大返回结果数,这不仅仅是为了节省网络带宽,在大多数情况下,数据的精确程度是伴随着数据量的减少而增加的,如果不是这样的话,那么返回给用户大量的记录,他们还是会想方设法地去筛选的。如果你还是决定用next/previous选项来使用“paged grid ”技术以减少传递的数据数,你也可以通过设置tiwdbgrid的 “s tartfirst”属性成“false ”

11、,把 rowlimit 属性设置一个最大值来决定一次传给用户的数据记录数,这样,在数据显示之前,你也可以通过next/previous 来移动数据记录。创建一个新的应用程序写你的第一个应用程序所有的intraweb应用程序都应该通过新建项目中的intraweb tab来创建,点击file - new ,选择intraweb tab ,选择stand alone application, 一个对话框会提示你输入你要把由delphi 自动创建的文件应该被放在计算机的什么地方。这将为一个新的intraweb stand alone application创建一个框架, 它把一些开发所需的文件复制到项

12、目所在的文件夹,并且创建了一个模板文件以及一个空白的form, 尽管现在的项目已经可以编译和运行了,但是它实际上还不能做任何事情。一个标准的调试form 将显示一些关于iw 和相关菜单项的信息, 选择“运行菜单,运行这个程序,将自动打开一个浏览器显示一个空白的页面,这是因为主form 中没有包括任何组件或功能项。program iwproject; uses iwinitstandalone, servercontroller in servercontroller.pasiwservercontroller: tdatamodule, iwunit1 in iwunit1.pas formm

13、ain:tiwformmain; $r *.res begin iwrun(tformmain, tiwservercontroller); end. 上面的代码显示了这个项目文件中的内容,它包含一个用来运行程序的叫做iwrun 的过程。procedure iwrun(amainformclass: tiwformmoduleclass;aservercontrollerclass: tiwservercontrollerbaseclass); iwrun 接受两个必须的参数 (指定 main form class和 server controller class) 和一个可选的参数 (ser

14、ver type)。intraweb 用户手册正如我们以前提到过的,一个新的项目是创建任何一个intraweb应用程序的开始,就像其它的delphi 项目一样,一个main intraweb from会被自动创建,并做为一个新程序的主界面,为了证明iw 开发的强大能力及简易性,下面我们举一个小例子。1 打开刚才创建的那个默认的iwform(iwunit1.pas)。2 分别在这个form 中放入iwbutton, iwedit, iwlabel。3 把下面的代码放入iwbutton 的 onclick事件中:procedure tiwformmodule.iwbutton1click(send

15、er: tobject); begin iwlabel1.caption := iwedit1.text; end; 完成后,编绎运行程序,为了测试它,按f9 键。默认的浏览器将自动打开并显示主界面。输入一些文字到文本框中,然后点击按钮,输出结果将显示到label 上。虽然,我们这个例子不像发明火箭那样激动人心,但是,它确实表明我们全部使用标准的delphi 语句,并没有写一句html 代码,我们之所以要选择这个例子,是因为它很简单,它证明我们用intraweb来开发web 应用程序确实就像我们用delphi 开发普通的应用程序一样,一样的方法,一样的属性,一样的事件,等等都可以用同样的方法。

16、然而在开发完善的数据库应用程序时,intraweb 却更强大。要获取更多的关于开发intraweb应用程序的例子,请访问http:/ with forms 在程序中,我们要介绍的是都要包含的单元intraweb form ,所有的intraweb from都可以通过“file-new-intraweb form” 来创建,所有在 intraweb 中使用的form 必须是一个专门的intraweb form ,标准的 delphi form是不能在 intraweb 应用程序中使用的, 一个新的 unit 创建时, 可用的 form 会显示在屏幕上,使用 intraweb form和与使用普通

17、的delphi form有一点不同, 简单的说就是intraweb 的 form要使用show方法来显示,换句话说,也就是在intraweb 开发中, showmodal方法是不被支持的。更多的信息你可以参考demos. images and graphics intraweb 通过 templates来支持图像,包括tiwimage, tiwdbimage and tiwimagefile。在 intraweb中,你可以使用许多种方法来支持图像,同时,它们也有一些基本的方法。templates 在 templates中使用图像也就是将图像插入到html 中去,但是任何图像文件都必须在file

18、s 文件夹中,或者是一个标准的web 服务器中。tiwimage tiwimage被使用在创建动态的图像上,每当要显示一个图片时,图片都会被转换成jpg 格式,这样,图片是做为应用程序中功能的一部分来使用的。你可以参考关于动态交互式图片的演示程序来获得更多的信息。如果你使用的是静态的图片,你可以使用tiwimagefile. tiwdbimage tiwdbimage 从数据库字段中自动把图片转换为jpg 格式,它的使用就像普通的tdbimage 一样,它提高了从数据库中把图片输出到浏览器上的开发效率。tiwimagefile tiwimagefile提供了从磁盘上的一个文件中显示图片的能力,

19、因为它不会转换图片模式,tiwimagefile是一个比 tiwimage更有效率的显示图片的组件,如果你仅仅是完整地显示一个静态的图片,你应该经常使用 tiwimagefile。tiwimagefile也提供了设计时显示图片的能力,你可以在设计form 的同时显示图片,然而,这个图片只是纯粹地显示, 图片信息不会储存在form 中, 只有当程序在运行时, 图片才会被 load 到 form 中。 filename指定了要显示的图片的完整路径。在运行时,路径将会被省略,只有文件名会被使用,所以,在选择时,要显示的图片应该在files 目录下。gif support intraweb 支持 gi

20、f 的显示,然而,安装程序将没有默认的安装gif 的支持,就参考intraweb faq来获得臬安装和使用gif 文件的信息。其它的文件其它的文件,例如图片、下载的文件等等都可以通过指定主程序所在的相对路径来访问,创建一个files目 录 , 把 所 有 的html对 象 都 放 到 这 个 目 录 下 , 在html页 面 中 , 你 就 可 以 通 过 使 用img src= ./files/image.jpg这样的形式来访问。请确认,在浏览器中你要使用/ 而不是来访问,在ie 中,这种错误会自动被改正,但是在其它的浏览器中却不会被自动改正。通常,这种方法不仅限于对图片的显示,也可以用在其

21、它所有的文件格式中。访问的文件都会被浏览器缓存,如果你希望创建一个不会被浏览器缓存的文件链接,那么,你可以用./filesnc/来代替 ./files/。文件将会从一个同样的目录来访问,但是不会被浏览器缓存。其它的formproperties 请仔细地查看那些经常会被开发都忽略的form 的属性,这些属性可以控制例如html 的输入及其它更多的。server controller 每一个应用程序都包含一个servercontroller单元,这个单元包含了会影响应用程序在全局范围中的动作及行为的属性,它也包含了能在应用程序中定义的事件。datamodules 如果你要使用datamodules

22、,请参考一下fishfactdm 演示,有一点要提醒的是,如果你在设计时链接了一个 datasource ,就像在 fishfactdm里一样,你的datamodules必须被一个webapplication所拥用,这在 fishfactdm中是通过设置datamodules s owner 到 session data s owner 的 webapplication variable来实现的,如果做了这一步,那个form 在属性中是不可读的,并且,所有的form 都将会被链接到第一个也就是同一个datamodule extanding intraweb 自定义组件 (custom comp

23、onents) 所有的intraweb组件都是用一个开放的api 来写的,这将允许你更容易的将你自已写的组件增中到intraweb 里,这就像是其它的delphi 所做的一样。嵌入纯 html 通过使用tiwtext ,你可以不编写一个组件就把你自己的html 语句嵌入到intraweb中,简单地把一个tiwtext 组件拖放到你的form 里,设置 rawtext 属性为 true , 并且把 wantreturns设置为 false , 最后,把你需要的html 语句放到lines 属性里,你的html 将会成为你输出的form 的一部分。html templateshtml templa

24、tes( 可以参考一下其它地方的template) 用于增加一些复杂的html 到你的应用程序中用来定义你的应用程序的外观。你可以看看layout manager部分来获得更多的信息。form managerment 介绍在一个 intraweb 应用程序中管理form 就像在普通的delphi 程序中一样简单,但也有一点限制。限制1 只有一个 form 是可见的,这是因为在实际情况中,浏览器里只能显示一个form. 2 模式的 forms 是不能使用的, 然而,因为在浏览器中一次只能显示一个form , 所以实际上所有的form都是模式的。3 所有的 form 都必须是 owned by w

25、ebapplicaton. 使用方法form list intraweb保留了一个forms 的列表做为用户session 的一部分,它就像是时装店里的新上架商品一样,最近显示的form 将会被保留在最顶端,当一个form 被隐藏时或被释放时,这个列表用来确定应该激活哪一个 form ,如果没有明确的通过.show 方法来提出应该显示哪一个form. 通常, form list从来不会直接与用户进行交互,而是通过call 的方法来确定显示哪一个form ,但是,在有的情况下, form list必须与用户进行交互,在这些情况下,tiwapplication包含了一系列的方法来实现与用户的交互,

26、这在帮助文档里都有说明。showing forms 显示一个 form 通常的语句格式如下:第一次看来,这有点让人迷惑,但是它是以下格式的略缩:除了它在这里是一个webapplication这外,就像是通常的应用程序一样,不同的是,普通的应用程序在调用了 call 之后, form 是马上就显示,在intraweb 中,当 call 调用一个form 之后,只是纯粹地指定了哪一个 form 是在一个事件退出之后下一个活动的form ,也仅仅当一个事件被执行之后form 才会显示。destorying forms 一个普通的应用程序中,当一个 form 不在需要的时候, 它能通过使用 .free

27、 或.destroy 方法来 destory 掉,在 intraweb应用程序中,有一点相似,但是,你不能直接调用.free或.destroy方法,你必须调用一个.release方法, .release方法并没有真正地destory 这个 form, 这个 form 直到退出了事件并且把控制权还给 intraweb 的时候才会真正地destory .这是因为 .release是 form 本身在事件中调用的, 尽管这并不是经常发生。当 relase 被调用的时候, 就像一个普通的应用程序一样,当前活动的form 变成前一个被destory 的 form,如果你不想用户回到上一个form, 你就

28、必须调用 .show 方法来激活另一个form ,可以在 .release将程序控制权还给intraweb 之前或之后调用.show 方法。当一个form 被释放后,所有对这个form list的参考都会被删除,如果在这些form 在 hidden 或 release 的时候没有调用 .show 方法,将改变form 的序列。hiding froms 在普通的应用程序中可以不调用.hide 方法来 destory 一个 form , 同样的功能也可以在intraweb 中调 .hide方法来实现, .hide方法可以在调用.release方法时隐藏一个form而不必destroy它。调用 .r

29、elease时, .hide 删除了所有的关于对这个form list 的引用,但是并没有destory 它,正因如此,如果你想在以后还想继续使用这个form ,你必须保留一个对这个form 的引用,换句话说,也就是这个form 变成孤立的了。passing data between forms 像普通的应用程序一样,数据可以在form 之前传递,因为form 的信息可以做为form class的一个变量储存在内存中。 作为一个试例, 你要定义两个form , tformmain和 tformdialog.tformmain是主 form并且包含一个butoon 和一个 edit box 。t

30、formdialog包含一个 memo field和一个 label 。当用户在主窗体中点击按钮时, 主窗体的 edit box 中的文字会被加到dialog form 的 memo field 中去, 同时,dialog form也会被显示, dialog form也同时显示了它已经被显示了多少次,并且允许用户返回到主窗体中去。iwlink1 onclick这个事件以链接的形式与标识caption 为” quit ” 相关,当用户点击这个链接时, 简单地终止了这个应用程序。oncreate oncreate事件将会在这个form 被创建时调用,在这个事件中创建了别一个form, 同时,这个f

31、orm 的引用也做为 form 的 member v ariable 储存起来了,以便于再次调用。butnok onclickonclick事 件 中 将 会 检 查edit box中 是 否 有 数 据 , 如 果 没 有 数 据 存 在 , 那 么 程 序 将 调 用webapplication.showmessage向用户显示一些信息,当释放messagebox后, form 将会再次显示,如果用户已经输入了数据,那么,using fdialogform( 在当前form的 oncreate事件中创建 )将会显示,editbox 中的数据会被加到memo field中,tformdial

32、og的 member variable会更新,调用 .show 方法显示这个 form, 就像你看到的,数据在两个不同的form 中被传递了,如同普通的delphi 应用程序一样。complete demo 你可以看看formdata.dpr这个 demo 来获得完整的示例。state management inherent state 标准的 web 开发工具都有一个自动的session management,但仅仅意味着它会为你跟踪session 的信息,你仍然不得不在页面之间处理这些状态信息,或者在不同的状态对象中处理这些信息,状态对象通常也局限于字符串和那些字符串中整理出来的数据,这不

33、利于处理更复杂的数据类型。intraweb 在这方面有了一定的改善,它是一种固有的状态管理。你倒底是在说什么呀?新的词语?不,问问你自己吧,你是怎样在普通的delphi程序中管理这些状态的呢?什么?你不需要管理?正是这样,在intraweb 中你确实也需要管理这些。限制global variables 全局变量通常不会使用,如果你需要使用全局变量来指定每一个用户session都要用到的变量,我们下面将会提到的。如果你需要对所有的用户session都使用一个变量,那你就用一个全局变量吧,然而,intraweb 是一个线程化的环境,你必须指定一个属性来保护当前访问的变量。threadvars th

34、readv ars 在 intraweb应用程序中永远不会被使用到,除非某种临时的储存的使用。intraweb是基于http 的表态访问的,这在本质上就意味着所有的线程都没有指定给某一个特定的用户,并且用户是在http 请求和线程中转移的。safe storage form/datamodule members 因为 intraweb form和 datamodules是持续的,就像普通的delphi 程序一样,你能以member v ariables 和属性的方法来储存信息,这些信息能在form 自身需要时或在接收来自其它form 的时候储存在内存里。user session user se

35、ssion( 在 session management部分将会更多的介绍)包含一个 .data 属性,它能控制到一个对象的reference. 当你需要储存一个用户的特定信息时,你可以把信息储存在.data属性里,它接受即时的tobject ,并且能在session释放的时候自动destory 。最简单的方法就是创建一个对象,把你要的fields加到里面,创建一个对象时, 当 session创建时,把 session 储存在这个session 的 data 属性里。phonetics示例演示了一个较为完整的例子。当创建一个新的intraweb 项目时,一个shell 的用户 session 对

36、象也会在servercontroller里被自动创建了,一个缺省的servercontroller看上去就像这个样子:tusersession是一个空的session 对象,你可以把members, properties and methods加到上面,为每一个 session 创建一个 tusersession的同时,它也会被创建到onnewsession事件中。以 function named usersession也是已经存在的用来简单访问对象的方法,所以, 如果你把 tusersession的声明改成以下的样子:你可以访问这些属性,在你的代码中就像这样:如果你不再需要一个用户的sess

37、ion了,你可以在代码里终止它,当然,它不是必须的,这在一个缺省的template 里是作为一个部分自动存在的。tusersession的 class type 可以是任何类型的,在一个由datamodule生成的项目中, tusersession是tcompnonet的派生,而不是这里显示的tobject 。tcomponent允许 session own component例如datamodule 允许简单地清除。(cleanup). 复杂的 state 和后退按钮许多人很快会发现,当然使用intraweb 开发里,浏览器里的后退按钮没有用了,缺省的intraweb 禁止了后退按钮,点击它

38、时,不会有任何事情发生,请注意,这仅仅适用于application mode,在 page mode里,后退按钮是有用的,这个限制是因为intraweb为了使用复杂的状态才会有的。scenario-normal appplication 试想一个普通的程序设计成运行在用户本地计算机上,它有五个不同的form , 并且为了满足forms multiple instances of that form may be created different data(例如属性对话框显示了不同对象的不同属性)。试想一下现在在任何时候,不需要警告或是提示你,用户能在程序里访问任何一个form 。但不仅仅访问

39、任何一个form, 他们还能访问任何一种过去的状态,甚至是访问一个已经从内存对象中移除的form 。在他们访问那个 form 的时候,他们还能与之交互,怎样的一个程序会这样呢?这里有一些,但不是全部的问题:form 所依赖的数据在数据库中的数据已经在数据库中不存在了,因为用户已经删了。form 所依赖的数据在数据库中正被改变,并且用户可能正定位到一个非法的数据内存中的对象已经被改变了,或者不再存在了。在非 intraweb 系统中的后退按钮不是由 intraweb 开发的系统通常支持后退按钮,然而,它会处于这样一些情况:_ stateless they are completely state

40、less and reconstruct state between each page. this is usually very inefficient on the server side for weblications and puts considerably extra load on databases because data is read and written unnecessarily._ state streaming these types stream the state into and out of each web page. this consumes

41、bandwidth and slows down page accesses. they also cannot use complex data, or usage of complex data causes the same problems described prior. even applications that support the back button, such problems are still encountered. however because they allow old data to be posted they must check the data

42、 to see if the requested operations can be performed. this adds significantly to the amount of user code except in the simplest of systems. such systems are typically not weblications, but individual dynamic pages. intraweb is not alone 如果你试过许多的在线bank 应用程序或是定购系统,他们中许多都有同样的限制,但运行得都不是很好,大多数的系统允许你后退,但是

43、会告诉你你所请求的页面是一个过期的内容,这是一种很不友好的界面,并且会让那些非技术出身的用户感觉迷惑。用后退按钮来访问历史数据在有限的环境下,后退按钮在application mode下是被支持的,它支持访问历史数据。这就意味着,后退按钮将可用,让用户返回历史数据。然而,如果用户如果尝试在历史页里与数据进行交互操作时,就会失败。如果用户尝试这样的操作,那就会出现一个警告:在这个警告页显示之后,页面将返回到用户通过后退按钮访问的页面之前的那个页面。这个功能通过设置server controller中的 .historyenabled属性来实现。这个警告也可以关闭,要这样做,可以在server c

44、ontroller中把 .showresyncwarning属性设为 false ,如果这样做的话,用户将不会看到警告页面,而是直接转到当前页面。session management webapplication object tiwapplication 指的是一个intraweb apllication,tapplication是一个标准的delphi 应用程序。 就像近来,tiwapplication不是一个可视化的组件,它不会出现在属性对话面板中,因此,没有公开它的属性,然而,它也有一些公开的属性和方法可以通过代码在iwapplication中访问,针对每一个用户的session ,t

45、iwapplication对象都会创建。它会重新提供用户一个” application ” 或是一个 ” session ” 。session 的生命期用户 session 是由 intraweb 自动管理的,当一个新的session开始时, intraweb 会自动创建一个新的实例给用户并且跟踪它,它能被用来获得用户的信息,控制用户信息或者储存一些典型的信息。对于开发者,不需要实现session的管理,或者跟踪用户。只有当 tiwapplication的 terminate 方法被调用或者它超时,才会终止一个session ,否则它将一直存在,如果在特定的时间内,一个用户没有访问应用程序,这

46、个用户的session将会被 destory ,缺省的超时期是 10 分钟,但是在servercontroller里,通过设定session timeout属性,你可以改变这个时间。session implementation session是由intraweb自动管理的。 session是保存在服务器的内存里的,同时会防止用户人为的修改session的数据,每一个session id 都是由安全的方法来创建的,所以不可预见,同时不容易被修改,通常情况下,每一个session都是绑在用户的浏览器上的,并且如果另一个浏览器被检测到试图访问一个同样的 session ,那么会得到一个错误。要获得更

47、好的安全性,可以设置servercontroller的 restrictips 属性。这会检查用户的ip 地址,如果ip 地址改变了,那么服务器将拒绝该session的访问。这个选项缺省是设为 false 的,它只有在控制intranets 或是 extranets 的用户时才会被设为true。这是因为,一些代理服务器比如microsoft isa proxy server在实现 http 请求的时候会改变ip 地址,这会造成给intraweb 多个 ip 地址。缺省的, session id 是嵌入到每一个html 页面并且由每一个http 请求来跟踪的,这允许一个单一的用户在一个应用程序中

48、拥有多个session ,但是这样不方便的地方是,一旦用户开始使用程序,那他就不能离开程序和返回它。因为这一点,使用session id 来跟踪任何非applicatoin的页面时,必须新开一个窗口,除非是等到终止应用程序时再运行。session tracking 可以被设置为使用cookies 而不是嵌入到html 页面中,你可以设置servercontroller里的 session trackingmethod属性为 tmcookie来实现。这会让intraweb 使用 cookies来跟踪用户的session ,优点是用户可以随便地在程序内与程序外移动。缺点是许多用户都disabled

49、 了 cookies 并且在一个应用程序中,用户只能有一个session 。accessing the session 应用的应用程序可以通过很多种方法来访问。webapplication property of the form你可以简单地使用引用了form 的 webapplication属性来定义所有的事件和方法。这将满足近期来几乎所有的情况。然而,值得注意的是这个属性中不容易理解的是global procedures, tframes, datamodules and non intraweb classes. webapplication property of a control

50、在写一个用户controls的时候,基本的intraweb control也包含了一个能使用的webapplication属性。rwebapplication rwebapplication是一个特殊的全局变量,它能被用在当一个form 或是一个 control reference不再有效时访问当前用户session 。这在 datamodules,tframess, global procedures and non intraweb classes时会非常有用。 rwebapplicatoin是一个threadv ar,在开发者使用它时,没有什么预告的警告,要引用rwebapplicati

51、on你需要加一个iwinit 到你的usese clause 。storing additiong data addition data能被储存在 .data 属性里,在 state management 部分我们已经提到了。session related events server controller有一些与session management相关的方法,are fired for session createion and destruction. onnewsession onnewsession在一个新的用户session创建的时候就被取消了,它传递进来两个参数,asession和v

52、mainfrom 。asession是一个对新创建的session 的引用,能被用在查询用户信息或是修改储存在.data 属性的对象中的用户信息时。 vmainform就像一个定义的参数一样被传递,它如果在项目文件(dpr )中没有设定缺省的主窗体的话, 那么它就会被初始化为nil,vmainform可以从 start url 传递的参数中或是通过其它的规则来修改它,要指定一个交替的主窗体,只要简单地创建它,并且马上把它返回给vmainform参数。onclosesession oncloseseesion在一个用户session 要终止的时候会被调用。它不会在一个webapplication

53、的 form 关闭或是一个session超时的时候被调用。memory consumption 每一个 session 所消耗的基本内存是非常小的,通常情况下这不是一个主要要考虑的问题。实际的占用的大小可以通过一个session到另一个session 时改变,但是,占用的基本内存除了储存在.data 属性中的任何一个用户数据之外,通常不会超过1024bytes 。reference 要获得更多的方法和属性的信息,你可以看看intraweb 帮助文件中关于tiwapplication的介绍。debugging 当你在 standalone方式开发时,调试就像开发其他的delphi 应用程序一样,设置断点、监视、运行之类的。debug output 当你的程序运行在standalone模式时, 你可以返回一个调试结果来看看session 的创建、 消亡以及 http请求,你可以把调试输出打开,从文件菜单中选择“ show debug information” ,或者点击工具条上的图标。detecting error on startup 如果在运行一个程序时碰到了错误,那么intraweb会终止这个程序,并且会把错误的log 存成一个 .err文件,一个以应用程序名加上.err 结尾的日志文件将会创建,如果你在运行一个程序的时

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论