为何没有人用DELPHI IDHTTP + WEB做三层应用

---恢复内容开始---

为何没有人用DELPHI IDHTTP + WEB + MYSQL(或其他数据库)做三层应用,我个人觉得这样做也不错。不过这样写需要开发人员懂的范围相对广一些,对于初入门的朋友来说,可能有点困难。需要对PHP或其他WEB框架有所认识,了解并懂得如何使用JSON。

现在JSON应用得这么广泛,DELPHI也支持(XE10肯定支持,其他版本不清楚,请自行测试)。

ThinkPHP是一个挺成熟的PHP框架,用它来做WEB层(服务层)是不错的选择,当然可以用其他的,例如JAVA或ASP.NET。

至于数据库,做任意一个都可以。

这个例子用到了的工具有PhpStudy,notepad++,SQLyog,Delphi XE 10

数据库为MySQL,用它的原因是ThinkPHP对MySQL支持比较好。而且用php的大多都是搭配使用MySQL

WEB框架用的是ThinkPHP

先上效果图:

一、读取

点击以上按钮,程序将通过IdHttp1控件,向web服务器post一个请求,该请求将返回一个json字符串,程序将json字符串解释将赋值到对应的Edit控件上。

效果图下图:

注:读者自行将“1”和“可乐”中的“”符号去掉即可。

二、修改

点击上图中的按钮,程序将把商品编号为1的价格改为10

程序将通过IdHttp1控件,向web服务器post一个请求修改价格的,参数为商品的ID和价格,该请求将返回一个json字符串,如果成功将弹出一个对话框,如下图:

读取按钮的代码

procedure TForm1.Button1Click(Sender: TObject);

var

ResponseStream: TStringStream;

ResponseStr : string;

Url:string;

jsonObject: TJSONObject; // JSON类

RequestList : TStringList;     //请求信息

begin

RequestList := TStringList.Create;

//以列表的方式提交参数

RequestList.Add(‘type=getGoodsById‘);

RequestList.Add(‘goodsid=1‘);

Url:=‘http://192.168.1.200:81/bwq_test/index.php/Mobile/Index/jiekou‘;

ResponseStream := TStringStream.Create(‘‘);

IdHttp1.ReadTimeout := 3000;

IdHttp1.Post(Url,RequestList,ResponseStream);

//获取网页返回的信息

ResponseStr := ResponseStream.DataString;

//网页中的存在中文时,需要进行UTF8解码

ResponseStr := UTF8Decode(ResponseStr);

label_jsonStr.Caption:=ResponseStr;

jsonObject := TJSONObject.ParseJSONValue(Trim(ResponseStr)) as TJSONObject;

Edit_id.Text:=jsonObject.Values[‘id‘].ToString;

Edit_name.Text:=jsonObject.Values[‘name‘].ToString;

Edit_price.Text:=jsonObject.Values[‘price‘].ToString;

end;

修改按钮的代码:

procedure TForm1.Button2Click(Sender: TObject);

var

ResponseStream: TStringStream;

ResponseStr : string;

Url:string;

jsonObject: TJSONObject; // JSON类

RequestList : TStringList;     //请求信息

return_code,return_message:string;//返回的代码,0为OK

begin

RequestList := TStringList.Create;

//以列表的方式提交参数

RequestList.Add(‘type=updateGoodsPrice‘);

RequestList.Add(‘goodsid=1‘);

RequestList.Add(‘price=‘+Edit_newPrice.Text);

Url:=‘http://192.168.1.200:81/bwq_test/index.php/Mobile/Index/jiekou‘;

ResponseStream := TStringStream.Create(‘‘);

IdHttp1.ReadTimeout := 3000;

IdHttp1.Post(Url,RequestList,ResponseStream);

//获取网页返回的信息

ResponseStr := ResponseStream.DataString;

//网页中的存在中文时,需要进行UTF8解码

ResponseStr := UTF8Decode(ResponseStr);

label_jsonStr.Caption:=ResponseStr;

jsonObject := TJSONObject.ParseJSONValue(Trim(ResponseStr)) as TJSONObject;

return_message:=jsonObject.Values[‘message‘].ToString;

ShowMessage(return_message);

end;

两者其实大同小异,都是利用了IdHttp的post功能和对json的利用。

至于服务器端的PHP代码是:

<?php

//header("Content-type: text/html; charset=utf-8");

namespace Mobile\Controller;

use Think\Controller;

use Think\Model;

class IndexController extends Controller {

public function jiekou()

{

if($_GET["type"]=="test")

{

$AAA=$_GET["sss"];

echo $AAA;

}

if($_POST["type"]=="test")

{

echo "test_POST......123";

}

$action_name=$_POST["type"];

//根据ID获取商品资料

if($action_name=="getGoodsById")

{

$goodsid=$_POST[‘goodsid‘];

$m_goods = M(‘goods‘);// 实例化Data数据模型

$list_goods = $m_goods->where("id=".$goodsid)->select();

$result=$list_goods[0];

echo json_encode($result);

}

//修改商品的价格

if($action_name=="updateGoodsPrice")

{

$m_goods = M("goods");

// 要修改的数据对象属性赋值

$data[‘price‘] = $_POST["price"];

$i=$m_goods->where(‘id=‘.$_POST["goodsid"])->save($data); // 根据条件保存修改的数据

$result;

if($i<>0)

{

$result[‘code‘]=$i;

$result[‘message‘]=‘success‘;

}

else

{

$result[‘code‘]=0;

$result[‘message‘]=‘faile‘;

}

echo json_encode($result);

}

}

}

---恢复内容结束---

时间: 2024-10-05 04:58:46

为何没有人用DELPHI IDHTTP + WEB做三层应用的相关文章

Delphi IdHttp组件+IdHttpServer组件实现文件下载服务

http://blog.csdn.net/xxkku521/article/details/16864759 Delphi IdHttp组件+IdHttpServer组件实现文件下载服务 2013-11-21 18:15 2624人阅读 评论(0) 收藏 举报  分类: DELPHI(10)  版权声明:本文为博主原创文章,未经博主允许不得转载. [delphi] view plain copy uses idhttp,IdHTTPServer; //idhttp组件提交下载请求 procedu

我没发现Mvc里的 web.config 有什么用。

实验过程 由于 Mvc2+ 引入 Area ,导致文件夹结构发生变化. Mvc下的 web.config 所在的位置是: ~/Areas/MySystem/Views/Web.config 对应的请求的URL是: ~/MySystem/Home/Index 这时, 在根目录下添加 AppSetting 项: <add key="AdminUserId" value="LhlcAdministator"/> 在 ~/Areas/MySystem/Views

好事者试验:在纽约街头摔倒有没有人扶?

好事者试验:在纽约街头摔倒有没有人扶? http://beijing.edeng.cn/xinxi/179429292.html http://beijing.edeng.cn/xinxi/179429293.html http://beijing.edeng.cn/xinxi/179429296.html http://beijing.edeng.cn/xinxi/179429295.html http://beijing.edeng.cn/xinxi/179429302.html http:

Delphi XE 10 跨平台三层数据库应用教程

Delphi XE 10 跨平台三层数据库应用教程 前言: Delphi XE 开始越来越庞大,比经典的Delphi7难用,但依然是目前所有跨平台开发工具中开发效率最高.最容易上手的,其快速设计RAD理念是无与伦比的符合人性(什么?是懒惰). 目前网上XE10类似教程很少,而且学习途中遇到一些问题就难以继续了,经本菜鸟千辛万苦的求索,特推出Delphi XE 10系列教程. 三层数据库应用是目前最简单.方便.易扩展的架构,而跨平台应用又是所谓的“互联网+”最需要的,下面的教程分服务器端和客户端两

Delphi IDHTTP用法详解

[delphi] view plaincopyprint? 一.IDHTTP的基本用法 IDHttp和WebBrowser一样,都可以实现抓取远端网页的功能,但是http方式更快.更节约资源,缺点是需要手动维护cook,连接等 IDHttp的创建,需要引入IDHttp procedure InitHttp(); begin http := TIdHTTP.Create(nil); http.ReadTimeout := 30000; http.OnRedirect := OnRedirect;

OSChina 周四乱弹 —— 没女朋友,还不让做春梦?

愚人节过去了,有多少同学偷偷摸摸地向女神表白了?你们又收到了多少张好人卡?如果在愚人节还没有人跟你表白,小小编觉得你这一年也不会有什么桃花运了. @EvaKing:好吧,转发. OSC 就在主页上懂了那么一点点手脚就把你吓成这样 @红薯没我帅:@红薯   赔我笔记本电脑打开osc页面掉下来了,吓我一跳,害我把豆浆喷到键盘上了,短路烧掉了昨晚加班敢的代码没提交,老大说等下找我-你赔我电脑 电脑烧掉不要紧,只要梦想在,你就拥有全世界 @Force武装卫队:愚人节计划 群发"亲爱的借我100块钱付个车

delphi idhttp 实战用法

以delphi xe2 自带indy(10.5.8.0)组件为例,分享实战中遇到的问题及解决方法. Idhttp 重要属性 HTTPOptions := []; 属性设为空,禁止idhttp自动为post的TStringList参数编码,因为自动编码使用的是HttpApp单元下的HttpEncode, 但此函数有误,未将+,$,@这3个符号编成UrlCode.请自行改造此函数然后使用. HTTPOptions := [hoNoParseMetaHTTPEquiv]; 当遇到Get某个网页,idh

delphi idhttp 实战用法(TIdhttpEx)

以delphi XE8 自带indy(10.5.8.0)组件为例,分享实战中遇到的问题及解决方法. TIdHttpEx 用法实例01[多线程获取网页](包含完整源码) 实例02(如何Post参数,如何保存与提取Cookie)待写 TIdHttpEx 已实现了对GZIP的解压,对UTF-8编码解码等 本文包含以下几个单元 uIdhttp.pas (TIdHttpEx) uIdCookieMgr.pas (TIdCookieMgr) uOperateIndy.pas 操作 TIdhttpEx 全靠它

手头没证书,如何给https做代理?NGINX TCP转发

线上的一个海外充值接口(https)经常因我朝网络问题中断,想借助hk的机器做个https反向代理又没证书. 一开始 一开始想到的办法是借助NGINX的tcp转发进行代理: 编译NGINX时加入 --with-stream选项, upstream backend { server xxxxxx.com:443 ; } server { listen 443; proxy_pass backend; proxy_connect_timeout 15s; proxy_timeout 15s; pro