Web Broker(Web服务应用程序)入门教程(1)

news2024/11/6 10:33:42

1、介绍

Web Broker 组件(位于工具面板的“Internet”选项卡中)可以帮助您创建与特定统一资源标识符(URI)相关联的事件处理程序。当处理完成后,您可以通过编程方式构建 HTML 或 XML 文档,并将它们传输给客户端。

通常情况下,网页的内容来源于数据库。您可以利用 Internet 组件自动管理数据库连接,使得单个 DLL 或 SO 文件能够处理多个同时进行的、线程安全的数据库连接。

本系列的后续部分将详细解释如何使用 Web Broker 组件来创建一个 Web 服务器应用程序。
2、利用 Web Broker 构建 Web 服务器应用程序
Web Broker 组件(在工具面板的“Internet”标签下)使您能够创建与特定统一资源标识符(URI)相关联的事件处理程序。处理完成后,您可以编程生成 HTML 或 XML 文档,并将其传输给客户端。

在 Windows 上使用 Web Broker 架构创建新的 Web 服务器应用程序:

1). 选择File > New > Other
2). 在“新建项目”对话框中,选择 Delphi 下的“Web”标签,并选择“Web Server Application”。
3). 出现一个对话框,您可以从中选择 Web 服务器应用程序的类型:
   - Stand-alone application:为显示表单的 Web 服务器应用程序开发设置环境。
   - Stand-alone console application:为开发 Web 服务器控制台应用程序设置环境。
   - ISAPI dynamic link library:将您的项目设置为 DLL,并包含 Web 服务器所期望的导出方法。它会向项目文件添加库头文件,以及项目文件的 uses 列表和 exports 子句所需的条目。
   - Apache dynamic link module:将您的项目设置为 DLL。Apache Web 服务器应用程序是 Web 服务器加载的 DLL。信息传递给 DLL,处理后由 Web 服务器返回给客户端。
   - CGI stand-alone executable:将您的项目设置为控制台应用程序,并添加项目文件 uses 子句所需的条目。

在 Linux 上使用 Web Broker 架构创建新的 Web 服务器应用程序:

1. 选择 File > New > Other
2. 在“新建项目”对话框中,选择 Delphi 下的“Web”标签,并选择“Web服务器应用程序”。
3. 出现一个对话框,您可以从中选择 Web 服务器应用程序的类型:
   - 独立应用程序:为显示表单的 Web 服务器应用程序开发设置环境。
   - Apache 动态链接模块:将您的项目设置为 SO。Apache Web 服务器应用程序是 Web 服务器加载的 SO。信息传递给 SO,处理后由 Web 服务器返回给客户端。
   - CGI 独立可执行文件:将您的项目设置为控制台应用程序,并添加项目文件 uses 子句所需的条目。

2.1 Web 应用程序对象(Web Application Object)
为您的 Web 应用程序设置的项目中包含一个名为 Application 的全局变量。Application 是 TWebApplication 的一个派生类,适用于您正在创建的应用程序类型。它在 Web 服务器接收到 HTTP 请求消息时运行。

警告:在项目 uses 子句中,不要在 CGIApp、ApacheApp、ApacheTwoApp 或 ISAPIApp 单元之后包含 Forms 或 QForms 单元。Forms 也声明了一个名为 Application 的全局变量,如果它出现在 CGIApp、ApacheApp、ApacheTwoApp 或 ISAPIApp 单元之后,Application 将被初始化为错误类型的对象。

    Application->Initialize();
    Application->CreateForm(__classid(TForm1), &Form1);
        Application->Run();

2.2 web模块(web Module)

Web 模块(Web.HTTPApp.TWebModule)是 System.Classes.TDataModule 的一个衍生类,可以像数据模块一样使用:它为 Web 应用中的业务规则和非可视组件提供集中控制。

您可以添加任何内容生成器到您的应用中,以生成响应消息。这些可以是内置的内容生成器,比如在多层数据库应用中作为客户端的 Web 服务器。

除了存储非可视组件和业务规则,Web 模块还充当 Web 调度器,将传入的 HTTP 请求消息匹配到生成这些请求响应的动作项。

如果您已经有一个数据模块,其中包含了您希望在 Web 应用中使用的许多非可视组件和业务规则,您可以用现有的数据模块替换 Web 模块。只需删除自动生成的 Web 模块,并用您的数据模块替换它。然后,向您的数据模块添加一个 Web.HTTPApp.TWebDispatcher 组件,这样它就可以像 Web 模块一样调度请求消息到动作项。如果您想要改变选择动作项以响应传入 HTTP 请求消息的方式,可以从 Web.HTTPApp.TCustomWebDispatcher 派生一个新的调度器组件,并将其添加到数据模块中。

您的项目中只能包含一个调度器。这可以是创建项目时自动生成的 Web 模块,或者是您添加到替换 Web 模块的数据模块中的 TWebDispatcher 组件。如果在执行过程中创建了第二个包含调度器的数据模块,Web 服务器应用将会引发运行时错误。

注意:您在设计时设置的 Web 模块实际上是一个模板。在 ISAPI 和 NSAPI 应用中,每个请求消息都会生成一个单独的线程,并且为每个线程动态创建 Web 模块及其内容的单独实例。

警告:在基于 DLL 或 SO(针对 Linux 平台)的 Web 服务器应用中,Web 模块被缓存以供后续重用,以提高响应速度。调度器及其动作列表的状态在请求之间不会重新初始化。在执行过程中启用或禁用动作项可能会导致在该模块用于后续客户端请求时出现意外结果。
 

3. Web Broker 应用程序的结构

当 Web 应用程序接收到一个 HTTP 请求消息时,它会创建一个 Web.HTTPApp.TWebRequest 对象来表示这个 HTTP 请求消息,以及一个 Web.HTTPApp.TWebResponse 对象来表示应该返回的响应。然后,应用程序将这些对象传递给 Web 调度器(可以是 Web 模块或 TWebDispatcher 组件)。

Web 调度器控制着 Web 服务器应用程序的流程。调度器维护着一个动作项(TWebActionItem)的集合,这些动作项(action items)知道如何处理特定类型的 HTTP 请求消息。调度器识别出合适的动作项或自动调度组件来处理 HTTP 请求消息,并将请求和响应对象传递给识别出的处理器,以便它执行任何请求的操作或制定响应消息。

动作项负责读取请求并组装响应消息。专门的内容包括生成器组件协助动作项动态生成响应消息的内容,这些内容可以包括自定义 HTML 代码或其他 MIME 内容。内容包括生成器可以利用其他内容包括生成器或 THTMLTagAttributes 的派生类来帮助它们创建响应消息的内容。

如果您正在创建一个实现 Web 服务的服务器,您的 Web 服务器应用程序可能包括一个自动调度组件,该组件将基于 SOAP 的消息传递给一个解释并执行它们的调用器。在尝试了所有动作项之后,调度器调用这些自动调度组件来处理请求消息。

当所有动作项(或自动调度组件)通过填写 TWebResponse 对象完成响应创建后,调度器将结果返回给 Web 应用程序。然后应用程序通过 Web 服务器将响应发送给客户端。
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2234214.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis高级篇之缓存一致性详细教程

文章目录 0 前言1.缓存双写一致性的理解1.1 缓存按照操作来分 2. 数据库和缓存一致性的几种更新策略2.1 可以停机的情况2.2 我们讨论4种更新策略2.3 解决方案 总结 0 前言 缓存一致性问题在工作中绝对没办法回避的问题,比如:在实际开发过程中&#xff0c…

Vue2进阶之Vue3高级用法

Vue3高级用法 响应式Vue2:Object.definePropertyObject.definePropertythis.$set设置响应式 Vue3:Proxy composition APIVue2 option API和Vue3 compositionAPIreactive和shallowReactivereadonly效果toRefs效果 生命周期main.jsindex.htmlLifeCycle.vue…

Unity3D学习FPS游戏(10)子弹攻击敌人掉血(碰撞检测)

前言:前面最然创造出带有血条的敌人,但子弹打中敌人并没有效果。所以本篇将实现子弹攻击敌人,并让敌人掉血。 子弹攻击敌人掉血 整体思路目标补充知识-碰撞检测 准备工作刚体和碰撞器添加添加刚体后子弹代码优化补充知识-标签系统Tag添加 碰…

AMD显卡低负载看视频掉驱动(chrome edge浏览器) 高负载玩游戏却稳定 解决方法——关闭MPO

问题 折磨的开始是天下苦黄狗久矣,为了不再被讨乞丐的显存恶心,一怒之下购入了AMD显卡(20GB显存确实爽 头一天就跑了3dmark验机,完美通过,玩游戏也没毛病 但是呢这厮是一点不省心,玩游戏没问题&#xff0c…

服装品牌零售业态融合中的创新发展:以开源 AI 智能名片 S2B2C 商城小程序为视角

摘要:本文以服装品牌零售业态融合为背景,探讨信息流优化和资金流创新的重要作用,并结合开源 AI 智能名片 S2B2C 商城小程序,分析其如何进一步推动服装品牌在零售领域的发展,提高运营效率和用户体验,实现商业…

【数据库】elasticsearch

1、架构 es会为每个索引创建一定数量的主分片和副本分片。 分片(Shard): 将索引数据分割成多个部分,每个部分都是一个独立的索引。 主要目的是实现数据的分布式存储和并行处理,从而提高系统的扩展性和性能。 在创建索…

语言模型的评测

语言模型的评测 内在评测 在内在评测中,测试文本通常由与预训练中所用的文本独立同分布的文本构成,不依赖于具体任务。最为常用的内部评测指标是困惑度(Perplexity) 困惑度是衡量语言模型对测试文本预测能力的一个指标&#xf…

Golang | Leetcode Golang题解之第535题TinyURL的加密与解密

题目: 题解: import "math/rand"type Codec map[int]stringfunc Constructor() Codec {return Codec{} }func (c Codec) encode(longUrl string) string {for {key : rand.Int()if c[key] "" {c[key] longUrlreturn "http:/…

德国卡赫携丰硕成果七赴进博会

第七届中国国际进口博览会于11月5日在国家会展中心(上海)正式拉开帷幕。作为全球最大的清洁设备和清洁解决方案提供商,“全勤生”德国卡赫连续七年参展,并携集团旗下子品牌HAWK霍克一同亮相技术装备展区3号馆,更带来多…

IT架构管理

目录 总则 IT架构管理目的 明确组织与职责 IT架构管理旨在桥接技术实施与业务需求之间的鸿沟,通过深入理解业务战略和技术能力,推动技术创新以支持业务增长,实现技术投资的最大价值。 设定目标与范围 IT架构管理的首要目的是确立清晰的组织…

Rust项目结构

文章目录 一、module模块1.文件内的module 二、模块化项目结构1.关于module2.各个模块之间互相引用 三、推荐项目结构1.实例 参考 一、module模块 1.文件内的module 关键字:mod 引入模块中的方法 usemod名字:方法名usemod名字.*写全路径 二、模块化…

HiveSQL 中判断字段是否包含某个值的方法

HiveSQL 中判断字段是否包含某个值的方法 在 HiveSQL 中,有时我们需要判断一个字段是否包含某个特定的值。下面将介绍几种常用的方法来实现这个功能。 一、创建示例表并插入数据 首先,我们创建一个名为employee的表,并插入一些示例数据&am…

408——计算机网络(持续更新)

文章目录 一、计算机网络概述1.1 计算机网络的概念1.2 计算机网络体系结构1.3 总结 二、物理层2.1 物理层的基本概念2.2 物理层的基本通信技术2.3 总结 三、数据链路层3.1 数据链路层基础概论3.2 数据链路层的通信协议 一、计算机网络概述 1.1 计算机网络的概念 计算机网络的定…

正反shell反弹的区分

在shell反弹中我们会根据参照物的不同来区分正反shell反弹。 本次我们需要使用win和kali进行实验: 在shell反弹中我们需要在win上面安装netcat(瑞士军刀)用于可以执行监听指令。 下载指导链接https://blog.csdn.net/qq_40359932/article/d…

CSS的配色

目录 1 十六进制2 CSS中的十六进制2.1 十六进制颜色的基本结构2.2 十六进制颜色的范围2.3 简写形式2.4 透明度 3 CSS的命名颜色4 配色4.1 色轮4.2 互补色4.3 类似色4.4 配色工具 日常在开发小程序中,客户总是希望你的配色是美的,但是美如何定义&#xff…

Java 基于SpringBoot+Vue 的公交智能化系统,附源码、文档

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

qt QFile详解

1、概述 QFile类是Qt框架中用于读取和写入文本和二进制文件资源的I/O工具类。它继承自QFileDevice类,后者又继承自QIODevice类。QFile类提供了一个接口,允许开发者以二进制模式或文本模式对文件进行读写操作。默认情况下,QFile假定文件内容为…

react jsx基本语法,脚手架,父子传参,refs等详解

1,简介 1.1 概念 react是一个渲染html界面的一个js库,类似于vue,但是更加灵活,写法也比较像原生js,之前我们写出一个完成的是分为html,js,css,现在我们使用react库我们把html和js结…

Qt学习笔记第41到50讲

第41讲 UI美化遗留问题解决 如上图所示目前记事本的雏形已现,但是还是有待优化,比如右下角的拖动问题。 解决方法: ①首先修改了Widget类的构造函数。 Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) {ui->s…

Linux(VMware + CentOS )设置固定ip

需求:设置ip为 192.168.88.130 先关闭虚拟机 启动虚拟机 查看当前自动获取的ip 使用 FinalShell 通过 ssh 服务远程登录系统,更换到 root 用户 修改ip配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33 重启网卡 systemctl restart network …