IntraWeb开发学习笔记(一)
作者:bnPYSse(原创) |
特别感谢Xalion对于Web开发的一系列文章,如果没有他的鼓励,恐怕也不会有这篇文章了。如需转载,请标明出处。如需交流,请联系我:邮箱 随着Internet/Intranet的快速发展,在现在的开发领域中,这是一个对所有程序员都十分诱人的领域,而Delphi的方便宜用更使大家愿意选择这一工具开发InterNet/IntraNet应用。Delphi7当中集成了IntraWeb开发工具,在学习和使用这个工具的时候,有一些心得体会,在这里写出来,如有错误和不对的地方,请指出来,愿与所有对它感兴趣的朋友共同探讨和学习。 |
1、关于IntraWeb的开发模式 |
IntraWeb有两种开发模式,它的作者称之为:AppMode和PageMode,即应用模式和页模式。AppMode,也称WebApplication(或者叫StandAlone),是其开发者着重推荐的,也是IntraWeb将来的发展方向,PageMode,亦即传统的Delphi下开发InteNet的WebBroker的方式。应当说,两种不同的开发模式,各有优缺点,AppMode快速简便,而PageMode灵活性更强一些。 AppMode的开发应用方向是Web应用,而不是传统的网站建设。AppMode内建Internet浏览器,服务器端不需要Web应用服务器就能很好的工作。解决了Web应用程序开发中Client/Server的交互问题,可以不使用Cookie(这一点我还没有很好的理解,^_^)。AppMode下开发的程序做为NT的一个服务在Server上启动,Client在浏览器中象使用一个普通的应用程序一样来完成数据库操作、表单提交、查询等工作,应当说IntraWeb在开发Web应用方面完成了一个独创性的工作。 AppMode方式并不是非常适全做网站的开发工作。 |
2、IntraWeb应用程序的发布 |
这好象是大家比较关心的问题,做好了东西总得放到网站上去呀,不然怎么用呢?它的应用程序发布也分两类,AppMode开发的东西比较好办,在Server端(必须是管理员身份登录的),进入Command窗口,运行c:>ApplicantionName -install,Application 做为NT下的一个服务被启动,然后客户端直接在浏览器中键入:http://www.yourDomain.com:xxxx/就可以启动(或者用http://www.yourDomain.com:xxxx/start),xxxx是你开发程序时在ServerController中设定的端口号(为避免与服务器提供的WEB服务冲突,一般不能设为80端口) 对于在页面模式下开发的应用来说,将生成的动态链接库及附加文件上传到具有执行权限的目录中即可。 |
3、IntraWeb的开发步骤 |
对于AppMode来说,开发一个Web应用程序与开发普通的App应用没有什么两样。新建一个应用程序,红色的代表标准的应用,绿色的自动生成一个数据管理模块。然后要选择一个目录,因为IntraWeb的应用要生成一些Cache及需要的模板、CSS样式表等内容,您可以建一个独立的目录用于存放这些内容。
这是比较常见的IntraWeb应用开发的模式,下面我想着重谈一谈PageMode的开发应用。 1、建立一个PageMode,需要用到Delphi新建模块中的WebServerApplication,然后Delphi帮你生成一个标准的DLL模板(当然,我指的是在ISAPI/NSAPI模式下的) 2、建立一个新的PageForm,此处一定要分清楚,ApplicationForm是用于在AppMode下开发用的Form,而PageForm才是用于传统的WebBroker模式下的Form 3、这里要在PageForm手工加入一些模块用于程序的处理,主要有以下这些:IWApplication(应用程序处理)、IWTemplateProcessHTML(如果你用到模板的处理的话)、IWLayoutManager(如果想交互式建立Web组件的话)、IWHTMLControl(用于IntraWeb的Html组件处理)等。 4、在webModule模块中的Implenmention的Uses子句中加入你要使用的PageForm模块。在webModule的Form中加入TIWPageProducer(用于处理PageForm)及TIWModuleController(用于Web控制)。 5、在WebModule的Form中单击右键,新建Action,并设定该Action的PathInfo和Producer(设定为风才刚才加入的TIWPageProducer),譬如:设定PathInfo:='/main'。 6、对于IWPageProducer建立它的OnGetForm事件处理,并加入如下的语句:vForm:=TFormMain.Create(AWebApplication); 至此,一个简单的应用就完成了,你可以在Delphi7中按下Ctrl+F9键,生成一个Dll文件,拷贝到具有执行权限的Web目录下,在浏览器中键入:http://localhost/myweb/project1.dll/main,就可以运行了(myWeb是你在IIS中建立的Web目录)
|
4、IntraWeb的安装中出现的问题 |
大家可能都从Delphi窑洞,下载了较新版本的IntraWeb,当前最新的版本(Ver.5.00.56)可以从For Delphi7、For Delphi5&Delphi6)(告诉你一个好消息的是,可是用v.5.00.55版的注册机!)。 在安装新版本后要,可能会出现Entry Point could not be located错误,这是因为你运行库还是老版本的缘故,请按以下步骤处理: 1、首先关闭Delphi7 2、卸载IntraWeb 3、搜索硬盘当中的*intraweb*.bpl和*intraweb*.dcp,一般是在Windows的系统目录里有运行库文件,而在Delphi目录里有设计时文件,确保将这些文件全部删掉。 4、重新安装IntraWeb。因为安装过一次以后,会在注册表里产生一个注册码,再一次用注册机生成注册码,并用IWRegister.exe进行注册以后,会在LibD7目录下的IWLicenseKey.pas文件里生成两个注册码(中间以“+”联接),删掉其中的一个,不然,运行后会产生错误。 另外,对于Delphi6的用户,必须确保UpdatePack2被安装,不然编译后会产生“"InGlobal" was compiled with a different version of System.rtl ”错误。 |
5、IntraWeb应用程序的卸载问题 |
也是分两大类,一类是AppMode下开发的应用程序,首先要在服务管理器里面停止该程序的运行,然后在命令行状态下键入:c:>ApplicationName -uninstall,最后删除该程序即可。对于在PageMode开发的DLL来说,需要在服务管理器里面,找到组件服务,关闭它就可以。 |
6、在使用ADO或其他COM组件的时候,出现“CoInitialize must be called”错误。 |
这是一个比较常见的错误,请在IWServerController中设置ComInitiaLization属性为ciMultiThreaded,而缺省的设置为ciNone。 |
7、如何将我的StandAlone Application转换成ISAPI应用?(转自其官方网站) |
1、改变Program 子句为 library. 2、改变 IWInitStandAlone 为IWInitISAPI. |
先到这里吧,下一期我想将关于JavaScript及某些IntraWeb组件的应用心得写出来,如果你有什么好的建议,可以联系我。谢谢大家! |