REST Datasnap服务端与javascript客户端实现

时间:2021-01-23 16:13:34

一、实现Rest Datasnap服务端.

Delphi提供了快捷方式,可以很快地建立一个Rest Datasnap服务端。

REST Datasnap服务端与javascript客户端实现

REST Datasnap服务端与javascript客户端实现

REST Datasnap服务端与javascript客户端实现

REST Datasnap服务端与javascript客户端实现

REST Datasnap服务端与javascript客户端实现

REST Datasnap服务端与javascript客户端实现

REST Datasnap服务端与javascript客户端实现

每一步选择的含义请查看我的另一篇文章 Datasnap初步二

生成的WebModuleUnit1中包含了如下控件:

REST Datasnap服务端与javascript客户端实现

DSServer1, DSServerClass1 是实现Datasnap服务器功能; DSAuthenticationManager1是为服务器增加登陆验证功能;

DSHTTPWebDispatcher1是实现Datasnap和REST之间的通道。

WebFileDispatcher1是实现REST HTTP服务器的功能。

ServerFunctionInvoker和ReverseString是网页产生控件,用于产生两个样例网页代码.

DSProxyGenerator1和DSServerMetaDataProvider1是用来生成javascript的调用代码,为javascript客户端服务。


这个例子里,我们不采用系统自动生成的样例,而是手动生成一个javascript调用代码。


二、javascript客户端

1. 在ServerMethodsUnit1中加入一个被javascript客户端调用的函数 MyTest. 修改后的ServerMethodsUnit1的代码如下:

unit ServerMethodsUnit1;


interface


uses System.SysUtils, System.Classes, Datasnap.DSServer, Datasnap.DSAuth;


type
{$METHODINFO ON}
  TServerMethods1 = class(TComponent)
  private
    { Private declarations }
  public
    { Public declarations }
    function EchoString(Value: string): string;
    function ReverseString(Value: string): string;
    function MyTest(Value: string):string;
  end;
{$METHODINFO OFF}


implementation




uses System.StrUtils;




function TServerMethods1.MyTest(Value: string): string;
begin
  Result := 'This is a Test:'+Value;
end;


function TServerMethods1.EchoString(Value: string): string;
begin
  Result := Value;
end;


function TServerMethods1.ReverseString(Value: string): string;
begin
  Result := System.StrUtils.ReverseString(Value);
end;
end.


2. 生成一个MyTest.html文件,在里面加入调用MyTest的javascript代码。


<html>
<head>
<title>DataSnap REST Project</title>
<link rel="stylesheet" type="text/css" href="css/main.css" />
<script type="text/javascript" src="js/base64.js"></script>
<script type="text/javascript" src="js/json2.js"></script>
<script type="text/javascript" src="js/serverfunctionexecutor.js"></script>
<script type="text/javascript" src="js/connection.js"></script>
<script type="text/javascript" src="js/ServerFunctions.js"></script>
<script type="text/javascript">


   function serverMethods()
   {
 return new TServerMethods1(connectionInfo)
   }


   function onMyTestClick()
   {
     var valueField = document.getElementById('valueField');
var s = serverMethods().MyTest(valueField.value);
valueField.value = s.result;
   }


</script>
</head>
<body>
    <div>
<input id="valueField" class="loginField" type="text" value="Test" />
    <button onclick='javascript:onMyTestClick();'>MyTest</button>
</div>


</body>
</html>


3. 在WebModuleUnit1中加入一个TPageProducer控件,命名为MyTest, HTMLFile属性设置成MyTest.html文件。


4. 修改WebModuleUnit1的初始化网页代码如下:即服务端的默认网页为MyTest.html网页。


procedure TWebModule1.WebModuleDefaultAction(Sender: TObject;
  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
  if (Request.InternalPathInfo = '') or (Request.InternalPathInfo = '/')then
    Response.Content := MyTest.Content
  else
    Response.SendRedirect(Request.InternalScriptName + '/');
end;


至此,javascript客户端代码已经写完。运行程序,启动服务器,打开浏览器.

REST Datasnap服务端与javascript客户端实现


REST Datasnap服务端与javascript客户端实现

点击MyTest按钮,调用MyTest函数.

REST Datasnap服务端与javascript客户端实现


三、总结


1. 在ServerMethodsUnit1中定义服务端要被客户端调用的函数.

2. 按需要生成自定义的javascript客户端文件,放入templates目录下,MyTest.html里是最基本的代码,客户端的网页界面及其他功能都可以在这个基础上扩展。

3. 这样就完成了一个基本的REST服务端和javascript客户端的功能。