您的位置:首页 > Web前端 > JavaScript

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

2016-06-20 12:04 429 查看
一、实现Rest Datasnap服务端.

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















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

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



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客户端代码已经写完。运行程序,启动服务器,打开浏览器.





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



三、总结

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

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

3. 这样就完成了一个基本的REST服务端和javascript客户端的功能。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息