DWS(轉)

来源:互联网 发布:sql注入的方法 编辑:程序博客网 时间:2024/06/06 09:49

 

 现在 Windows 系列的 Web 服务器上运行的大部分 Web-Side Scripts 绝大部分是 Asp, 核心是VBS (Visual Basic Scripts),她功能强大而且很优秀,是 Microsoft 的旗舰产品,可惜脱离不了 IIS 的支撑。其次是Perl、Php、Python、TCL等,因他们与 Unix 有很大渊源, 因此品质优越,也很稳定,他们都是 Open Source 旗帜下的产品。

  不过由于国内仍以 Pascal 和 C 为计算机课的基础教材, 这两种语言在中国有很深的功底和基础至少比 Perl、Php、Python、TCL 等基础扎实,但是随着 Internet 的发展,各种开发工具势必都必须介入其中才能有更大的发展,可惜 Pascal 和 C 是过程式的常规开发工具,其自身的特点限制了其发展空间所以发展及其缓慢。尽管 Delphi 是 Pascal 的超级继承者,不过仍没有嵌入式的 Pascal Script,不然的话,应该比 VBS 好得多.
  尽管缺乏研究资金,不象 Microsoft 那样在庞大的资金和市场的驱动下改造了 Basic; Ackermann,Matthias (瑞士人) 等人还是对 Pascal 进行了改造,让其能在 Web 服务器上能成为 Web-Side Script的一员. 经改造后的 Pascal 语法接近于 Delphi, 是一个超小型的 Pascal+, 其核心模块借助 Delphi的夸平台功力可以运行在 Linux 和 WIN32 环境下。针对具体的实现环境一个是使用 ISAPI 接口在 IIS 下工作,另外一个是在 Apache 的环境下工作。由于契合 Delphi 程度比较高,所于 Delphi 下的大部分组件经过改造都可以工作,不过和 Delphi 一样,控件太多也不是好事,这样会使 IIS ISAPI 模块和 Apache模块变得不稳定。

  这种改造的 Pascal Script 被称为 DWS( Delphi Web Script).

  DWS 有两种工作模式。一种是常规的 PE Standlone EXE: 既可以做成一个 Console EXE 和 GUI EXE,也可以做进任何的 Delphi 程序中。这样的好处是拥有了动态的 Pascal 语法解释能力。当我们在做比较复杂的软件时,可以用他完成客户端变化的各种要求,如计算分析 和 Database 浏览,因为大不份算法一旦编译后就不可能改动,而客户的计算方法和对信息的处理规则也许和你的就根本不一样, DWS 这样的能力与编译后执行的 Delphi 程序毫不逊色,而且这样生产的软件伸缩性和扩展能力是相当强大的。

  这是常规的 DWS (相对于 HTML Script) 的一个例子,这个例子是用 Microsoft COM 的模型执行 Microsoft Word,并在新开的窗口里写入 "Hello World!",然后关闭。

var MsWord : ComVariant;
var Lang : String;
var S : String;

MsWord:=CreateOleObject('word.basic');
MsWord.AppShow;
MsWord.FileNew;
MsWord.Insert('Hello World!');

  可以看出 DWS 没有单元引用(或者是还没有实现),这是他与 Pascal 相同, 却对 Delphi 用户不方便的地方。下面这个例子是标准的 Object Pascal 语法。

type TClassB = class;

type
TClassA = class
FText: string;
FClassB: TClassB;
function GetB: TClassB;
end;

function TClassA.GetB;
begin
Result := FClassB;
end;

type
TClassB = class
FClassA: TClassA;
function GetA: TClassA;
end;

function TClassB.GetA;
begin
Result := FClassA;
end;

var a: TClassA;

a := TClassA.Create;

a.FClassB := TClassB.Create;
a.FClassB.FClassA := TClassA.Create;

a.GetB.GetA.FText := 'Hello';

PrintLn(a.GetB.GetA.FText);

a.GetB.GetA.Free;
a.GetB.Free;
a.Free;


  从这个程序可以发现 DWS 对 Object Pascal 进行了很好的解释。

  DWS 的另外一种工作模式及是 Web Script, 这是为产生动态页面服务的。与 Delphi 类似, DWS 在解释 HTML 语法时,也需要一个 HTML Adapter,不过这个 Adapter 功能却很强大,可以对 DWS 格式的 Script文件加密,也可以解释并执行加密后的 DWS 格式的 Script. 这种加密功能就强大多了,你可以使用一切可以 在 Delphi 上实现的加密算法。如果不借助 ISAPI 和 Delphi 的 Apapche DSO 功能的化,DWS 也可以建成一个独立的 PE EXE,经过一定的改造, 使其接受 #! 的 Apache Web Script 语法, 这样就跟 Perl 一样执行.pl 的 Script 文件了。正如 WINDOWS 上的 Asp、Jsp 有漏洞(Bug)一样,DWS 也不例外,不过在 Apache环境下却出人意料的安全,这可能与 Apache 本身的因素有关系。

  下面是 DWS (HTML Script) 的一个例子

<%
{ Select HtmlAdapter in menu "Adapter" to
compile this script!}
%>
<html>
<head>
</head>
<body>

<%
var x: Integer;
for x := 1 to 2 do begin

Send('Hello Word');
%>
String: <%='Hello World!!'%>
Float: <%= 3.14159265358 %>
Integer: <%= 32768 + 23 %>
Boolean: <%= true or false %>

<%
end;
{$ADAPTER 'HtmlAdapterInclude.dws'}
%>
</body>
</html>
  和 Asp、JSP 一样,DWS 的格式也是嵌入式的 HTML。

  在外包含一个 DWS 文件时要用 $ADAPTER 和 $IN 的语法, 而不是 HTML 语法自身的 <INCLUDE>在字符串输出是使用 Send/Sendln 代替 Write/Writeln 这样做的原因是在 CONSOLE 的函数中没有 HTTPD 的接口。现在很多流行的 Web Script 都是锲入式的 HTML 语法的,具有代表的是 PHP,不过由于 Perl 的灵活性教高,他在IIS 环境下也是直接嵌入的,在 Apapche 环境下需要一个 HTML-Embperl Package 的支持。

  纵观各式 Web-Side Script, Perl 之所以有很大的成功,都是由于所处在 Unix 下,吸收的 C Shell 的精华和Unix 所赋予的聪明和才智,他的正则式表达语法不是 C 和 Pascal 所能比拟的,而 VBS 更是得益于在 Windows 的环境下养成。在很多方面,Pascal 就象一辆只会打固定目标的老式坦克,而 Perl就象一个身副现代武器的生化特种兵,能立体的,全方位的作战.这样不禁让人惋惜 Pascal 的后天不足,真是可惜.

 

附資料下載:

http://dl8.winu.cn/control/dws2src11.zip 

http://dl9.winu.cn/tools/20060115/2006011512223412163.zip

原创粉丝点击