IntraWeb开发学习笔记(五)

最近有些朋友来信问到在Apache环境下开发IntraWeb应用程序的问题,因为涉及的内容比较多,每次回复起来特别的麻烦,所以,在这一期学习笔记里面,我将为大家着重介绍一下在Apache环境下的IntraWeb的开发与发布问题。

21IntraWebApache开发问题

首先要对Delphi7进行修改,使之适应于Apache.v. 2.0.45 Apache的最新版本可在这里下载。关于Apache的安装就不多说了,如果机器已经配置了IIS服务,可更改WEB服务端口为8080。安装完成如果能顺利启动Apache服务的话,在浏览器窗口键入http://localhost:8080/index.html.en,如出现说明文件,则说明Apache已经顺利启动了。

Apache是一个非常优秀的WEB服务器软件,在全球的装机量据统计占到50%以上,其安全性、可靠性、灵活性及速度均有不凡的表现。Delphi7Apache提供了完备的支持,不过由于最新版本的Apache对接口进行了修改,所以,需要对Delphihttpd2.pas文件进行一点修改才成。这个具体的修改过程,Xalion已在其文章《使Delphi 6.0 支持 Apache 2.0进行了详细的说明,并且已经提供了修改好的文件下载,点击这里下载该修改包,将该包解压到Delphi7Lib目录下,并删除掉这个三个文件的.dcu,编译你的程序,则会对这三个文件重新编译的。

1、新建IntraWeb应用,并选择其中的Apache 2.x Shared Module,Delphi7会为你自动生成一个框架文件:

library Project1;

uses
  IWInitApacheTwo,
  ApacheTwoApp,
  ServerController in 'ServerController.pas' {IWServerController:TIWServerControllerBase},
  Unit 1 in 'Unit1.pas' {IWForm1: TIWFormModuleBase};

{$E so}

{$R *.RES}

exports
  apache_module name 'IWDSO2Project_module';

begin
  IWRun;
end.

{$E so}编译选项是生成*.so文件,默认的情况下,生成的文件名为IWDSO2Project_module.so,你也可以根据需要对这个文件名进行任意的更改。比如,我们将其改为Test_module

2、选择IWForm1放入一个IWLabel,并更改其文本属性为“Apache2演示。按下Ctrl+F9编译,在当前目录下会产生一个Project1.so文件。

3、打开Apache安装目录下conf\httpd.conf配置文件,找到LoadModule区段,加入如下的语句:

LoadModule Test_module "D:/Borland/Delphi7/Projects/Project1.so"

LoadModule分两部分,一是你设定的export的名称,在这里是Test_Module,二是生成的物理文件,亦即工程文件名+".so",可以使用物理路径,如果不想使用物理路径,可以Project1.so文件拷贝到Apache安装目录下的modules下,并修改其为modules/Project1.so

需要注意的问题有几点:一是大小写,二是要将LoadModule语句加入到LoadModule区段的顶部,三是路径必须是反斜线。

4、另外要添加Location内容如下:

<Location /Test>
  SetHandler Project1-handler
</Location>

关于Location你可以设定任意的名称,需要注意的是SetHandler要设定的处理句柄必须是Project1,而且是严格区分大小写的。

5、重新启动Apache服务。

6、打开浏览器,键入http://localhost:8080/TestTest要保证与Location设定的内容相匹配,则应该可以看得到运行结果

22IntraWeb.v.5.1版本的一些新的变量。

这些变量大多集中在WebApplication对象中,附上一段小代码,编译后,你也可以在你的机器上试试(实在没什么可写的了,有凑字之嫌,大家批评)。

procedure TIWForm1.IWButton1Click(Sender: TObject);
var
 s:String;
begin
s:='<table width="80%" border="0" align="center" cellspacing="1" bgcolor="#0033FF">'+
  '<tr bgcolor="#FFFFFF">'+
  ' <td class="SubTitle">Accept</td>'+
  ' <td>'+WebApplication.Request.Accept+'</td>'+
  '</tr>'+
  ' <tr bgcolor="#FFFFFF">'+
  ' <td class="SubTitle">Authorization</td>'+
  ' <td>'+WebApplication.Request.Authorization+'</td>'+
  ' </tr>'+
  ' <tr bgcolor="#FFFFFF">'+
  ' <td class="SubTitle">CacheControl</td>'+
  ' <td>'+WebApplication.Request.CacheControl+'</td>'+
  ' </tr>'+
  ' <tr bgcolor="#FFFFFF">'+
  ' <td class="SubTitle">Connection</td>'+
  ' <td>'+WebApplication.Request.Connection+'</td>'+
  ' </tr>'+
  ' <tr bgcolor="#FFFFFF">'+
  ' <td class="SubTitle">Content</td>'+
  ' <td>'+WebApplication.Request.Content+'</td>'+
  ' </tr>'+
  ' <tr bgcolor="#FFFFFF">'+
  ' <td class="SubTitle">ContentEncoding</td>'+
  ' <td>'+WebApplication.Request.ContentEncoding+'</td>'+
  ' </tr>'+
  ' <tr bgcolor="#FFFFFF">'+
  ' <td class="SubTitle">ContentType</td>'+
  ' <td>'+WebApplication.Request.ContentType+'</td>'+
  ' </tr>'+
  ' <tr bgcolor="#FFFFFF">'+
  ' <td class="SubTitle">From</td>'+
  ' <td>'+WebApplication.Request.From+'</td>'+
  ' </tr>'+
  ' <tr bgcolor="#FFFFFF">'+
  ' <td class="SubTitle">Host</td>'+
  ' <td>'+WebApplication.Request.Host+'</td>'+
  ' </tr>'+
  ' <tr bgcolor="#FFFFFF">'+
  ' <td class="SubTitle">DerivedFrom</td>'+
  ' <td>'+WebApplication.Request.DerivedFrom+'</td>'+
  ' </tr>'+
  ' <tr bgcolor="#FFFFFF">'+
  ' <td class="SubTitle">Request.InternalPathInfo</td>'+
  ' <td>'+WebApplication.Request.InternalPathInfo+'</td>'+
  ' </tr>'+
  ' <tr bgcolor="#FFFFFF">'+
  ' <td class="SubTitle">Request.InternalScriptName</td>'+
  ' <td>'+WebApplication.Request.InternalScriptName+'</td>'+
  ' </tr>'+
  ' <tr bgcolor="#FFFFFF">'+
  ' <td class="SubTitle">Request.PathInfo</td>'+
  ' <td>'+WebApplication.Request.PathInfo+'</td>'+
  ' </tr>'+
  ' <tr bgcolor="#FFFFFF">'+
  ' <td class="SubTitle">Request.PathTranslated</td>'+
  ' <td>'+WebApplication.Request.PathTranslated+'</td>'+
  ' </tr>'+
  ' <tr bgcolor="#FFFFFF">'+
  ' <td class="SubTitle">Request.ProtocolVersion</td>'+
  ' <td>'+WebApplication.Request.ProtocolVersion+'</td>'+
  ' </tr>'+
  ' <tr bgcolor="#FFFFFF">'+
  ' <td class="SubTitle">Request.Referer</td>'+
  ' <td>'+WebApplication.Request.Referer+'</td>'+
  ' </tr>'+
  ' <tr bgcolor="#FFFFFF">'+
  ' <td class="SubTitle">Request.RemoteAddr</td>'+
  ' <td>'+WebApplication.Request.RemoteAddr+'</td>'+
  ' </tr>'+
  ' <tr bgcolor="#FFFFFF">'+
  ' <td class="SubTitle">Request.RemoteHost</td>'+
  ' <td>'+WebApplication.Request.RemoteHost+'</td>'+
  ' </tr>'+
  ' <tr bgcolor="#FFFFFF">'+
  ' <td class="SubTitle">Request.URL</td>'+
  ' <td>'+WebApplication.Request.URL+'</td>'+
  ' </tr>'+
  ' <tr bgcolor="#FFFFFF">'+
  ' <td class="SubTitle">Request.UserAgent</td>'+
  ' <td>'+WebApplication.Request.UserAgent+'</td>'+
  ' </tr>'+
  ' <tr bgcolor="#FFFFFF">'+
  ' <td class="SubTitle">Request.TranslateURI("http://www.sina.com.cn/")</td>'+
  ' <td>'+WebApplication.Request.TranslateURI('http://www.sina.com.cn/')+'</td>'+
  ' </tr>'+
  ' <tr bgcolor="#FFFFFF">'+
  ' <td class="SubTitle">Request.ScriptName</td>'+
  ' <td>'+WebApplication.Request.ScriptName+'</td>'+
  ' </tr>'+
  ' <tr bgcolor="#FFFFFF">'+
  ' <td class="SubTitle">Request.Title</td>'+
  ' <td>'+WebApplication.Request.Title+'</td>'+
  ' </tr>'+
  '<tr bgcolor="#FFFFFF">'+
  ' <td class="SubTitle">系统路径</td>'+
  ' <td>'+WebApplication.ApplicationPath+'</td>'+
  '</tr>'+
  '<tr bgcolor="#FFFFFF">'+
  ' <td class="SubTitle">WebApplication.AppID</td>'+
  ' <td>'+WebApplication.AppID+'</td>'+
  '</tr>'+
  '<tr bgcolor="#FFFFFF">'+
  ' <td class="SubTitle">WebApplication.SessionTimeStamp</td>'+
  ' <td>'+WebApplication.SessionTimeStamp+'</td>'+
  '</tr>'+
  '<tr bgcolor="#FFFFFF">'+
  ' <td class="SubTitle">WebApplication.UserCacheDir</td>'+
  ' <td>'+WebApplication.UserCacheDir+'</td>'+
  '</tr>'+
  '<tr bgcolor="#FFFFFF">'+
  ' <td class="SubTitle">WebApplication.IP</td>'+
  ' <td>'+WebApplication.IP+'</td>'+
  '</tr>'+
  '<tr bgcolor="#FFFFFF">'+
  ' <td class="SubTitle">WebApplication.AppURLBase</td>'+
  ' <td>'+WebApplication.AppURLBase+'</td>'+
  '</tr>'+
  '</table>';

  IWText1.Lines.add(s);
end;

程序当中用到了一个CSS表,你可以打开窗体的ExtraHeader属性,输入如下的CSS定义:

<style type="text/css">
<!--
td {
 font-family: "Tahoma", "宋体";
 font-size: 12px;
}

.SubTitle {
 font-weight: bold;
 color: #FF0000;
 background-color: #FFFF99;
}
-->
</style>

编译成功后,点击按钮,会激活这段代码,为你取出系统变量,可以在IISApacheStandAloneService等几种不同的模式下运行,看一看结果,比较一下,也许会有一些收获的。我想。

你可能感兴趣的:(职场,休闲)