最近有些朋友来信问到在Apache环境下开发IntraWeb应用程序的问题,因为涉及的内容比较多,每次回复起来特别的麻烦,所以,在这一期学习笔记里面,我将为大家着重介绍一下在Apache环境下的IntraWeb的开发与发布问题。
21、IntraWeb的Apache开发问题
首先要对Delphi7进行修改,使之适应于Apache.v.
Apache是一个非常优秀的WEB服务器软件,在全球的装机量据统计占到50%以上,其安全性、可靠性、灵活性及速度均有不凡的表现。Delphi7对Apache提供了完备的支持,不过由于最新版本的Apache对接口进行了修改,所以,需要对Delphi的httpd2.pas文件进行一点修改才成。这个具体的修改过程,Xalion已在其文章《使Delphi 6.0 支持 Apache 2.0》进行了详细的说明,并且已经提供了修改好的文件下载,点击这里下载该修改包,将该包解压到Delphi7的Lib目录下,并删除掉这个三个文件的.dcu,编译你的程序,则会对这三个文件重新编译的。
1、新建IntraWeb应用,并选择其中的Apache 2.x Shared Module,则Delphi7会为你自动生成一个框架文件:
library Project1; uses {$E so} {$R *.RES} exports begin |
{$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> |
关于Location你可以设定任意的名称,需要注意的是SetHandler要设定的处理句柄必须是Project1,而且是严格区分大小写的。
5、重新启动Apache服务。
6、打开浏览器,键入http://localhost:8080/Test,Test要保证与Location设定的内容相匹配,则应该可以看得到运行结果
22、IntraWeb.v.5.1版本的一些新的变量。 这些变量大多集中在WebApplication对象中,附上一段小代码,编译后,你也可以在你的机器上试试(实在没什么可写的了,有凑字之嫌,大家批评)。 procedure TIWForm1.IWButton1Click(Sender: TObject); IWText1.Lines.add(s); 程序当中用到了一个CSS表,你可以打开窗体的ExtraHeader属性,输入如下的CSS定义: <style type="text/css"> 编译成功后,点击按钮,会激活这段代码,为你取出系统变量,可以在IIS、Apache、StandAlone、Service等几种不同的模式下运行,看一看结果,比较一下,也许会有一些收获的。我想。
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>';
end;
<!--
td {
font-family: "Tahoma", "宋体";
font-size: 12px;
}
.SubTitle {
font-weight: bold;
color: #FF0000;
background-color: #FFFF99;
}
-->
</style>