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

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.rhkb.cn/news/463835.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络安全法详细介绍——爬虫教程

目录 [TOC](目录)一、网络安全法详细介绍1. 网络安全法的主要条款与作用2. 网络安全法与爬虫的关系3. 合法使用爬虫的指南 二、爬虫的详细教程1. 准备环境与安装工具2. 使用requests库发送请求3. 解析HTML内容4. 使用robots.txt规范爬虫行为5. 设置请求间隔6. 数据清洗与存储 三…

25国考照片处理器使用流程图解❗

1、打开“国家公务员局”网站,进入2025公务员专题,找到考生考务入口 2、点击下载地址 3、这几个下载链接都可以 4、下载压缩包 5、解压后先看“使用说明”,再找到“照片处理工具”双击。 6、双击后会进入这样的界面,点击&…

Go 语言之搭建通用 Web 项目开发脚手架

Go 语言之搭建通用 Web 项目开发脚手架 MVC 模式 MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。 Model(模型) - 模型代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑&…

江协科技STM32学习- P34 I2C通信外设

🚀write in front🚀 🔎大家好,我是黄桃罐头,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝​…

windows在两台机器上测试 MySQL 集群实现实时备份

在两台机器上测试 MySQL 集群实现实时备份的基本步骤: 一、环境准备 机器配置 确保两台机器(假设为服务器 A 和服务器 B)能够互相通信,例如它们在同一个局域网内,并且开放了 MySQL 通信所需的端口(默认是 …

【MIT-OS6.S081笔记1】xv6环境搭建

最近开始做一个操作系统的神课MIT-OS6.S081,我做的是老版本的2020版本的,环境使用的是VirtualBox的Ubuntu系统,在这里记录一下学习的过程。首先需要搭建一下环境,参考官网Tools Used in 6.S081,这个知乎文章也写得很好…

深度学习基础—语言模型和序列生成

引言 深度学习基础—循环神经网络(RNN)https://blog.csdn.net/sniper_fandc/article/details/143417972?fromshareblogdetail&sharetypeblogdetail&sharerId143417972&sharereferPC&sharesourcesniper_fandc&sharefromfrom_link 上…

kdd比赛方案

解决方案概述 采用两阶段的方法来解决比赛任务。在第一阶段,采用与 SciBERT 集成的跨编码器模型来确定源论文是否是最重要的参考文献之一。在第二阶段,利用了从目标和源论文中得出的特征,以及第一阶段的输出,输入到几个二进制分类…

抖音Ai图文故事号,AI一键生成故事图片变现,涨粉变现超快!

今天分享2个简单好上手,可批量复制,出单超快的Ai项目,那就是AI绘画壁纸号Ai图文故事号。 在抖音、小红书上,壁纸号火的一塌糊涂,新号3天涨粉1500,变现利润超过了4位数 壁纸看起来平平无奇,市场需…

面试题:JVM(三)

1. 面试题 说一说JVM的内存结构是什么样子的,每个区域放什么,各有什么特点?(快手、搜狐) JVM的内存结构,及各个结构的内容。(vivo) 详细介绍一下内存结构(墨迹天气) JVM…

ELK的ElasticStack语法

目录 传送门前言一、索引(数据库)1、创建索引2、获取索引3、删除索引 二、文档(Row行)1、创建文档2、获取文档3、修改文档4、删除文档5、高级查询(精辟)条件查询分页、指定、排序、范围查询全文检索、分组查…

leaflet绘制圆形方案

电子围栏绘制方案: 采用leaflet绘制电子围栏 可以看对应api文档 。原生是英文,所以要重定义,直接覆盖下面的 leaflet.draw-cn.js 文件L.drawLocal = {draw: {toolbar: {// #TODO: this should be reorganized where actions are nested in actions// ex: actions.undo or a…

新能源汽车空调压缩机:科技驱动的冷暖核心

一、新能源汽车空调系统概述 新能源汽车空调系统在车辆中起着至关重要的作用,它直接影响着驾乘人员的舒适度。新能源汽车空调系统主要由制冷系统、加热系统、送风系统、操纵控制系统和空气净化系统等组成。 制冷系统通常由电动压缩机、冷凝器、压力传感器、电子膨…

Javaweb梳理8——数据库设计

Javaweb梳理8——数据库设计 8 数据库设计8.1 数据库设计简介8.2 表关系(一对多)8.3 表关系(多对多)8.4 表关系(一对一) 8 数据库设计 8.1 数据库设计简介 软件的研发步骤 数据库设计概念 数据库设计就是根据业务系统的具体需…

IDEA - 快速去除 mapper.xml 黄色警告线和背景色----简化版

1.打开设置 2.去掉黄色警告线设置 3.去掉背景色设置 4.示范图

vue3中使用vue-diff工具来比较数据差异

1.安装vue-diff npm i vue-diff 2.main.js中全局注册 import VueDiff from "vue-diff"; import "vue-diff/dist/index.css";app.use(VueDiff) 3.使用 <template><div class"contain-page"><el-scrollbar height"100vh&…

w014基于Springboot校园管理系统的设计与实现

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

openGauss数据库-头歌实验1-3 创建和管理模式

一、创建和使用模式 &#xff08;一&#xff09;任务描述 本关任务&#xff1a;基于 openGauss 学习创建模式的相关知识。 &#xff08;二&#xff09;相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;1.openGauss 的常用操作&#xff0c;2.SQL 创建模式相关语…

基于springboot+vue实现的任务管理系统(源码+L文)4-103

第4章 系统设计 4.1 总体功能设计 员工&#xff0c;经理&#xff0c;管理员都需要登录才能进入任务管理系统&#xff0c;使用者登录时会在后台判断使用的权限类型&#xff0c;包括一般使用者和管理者,一般使用者为员工和经理&#xff0c;对员工只能提供任务信息显示查询&…

PlotNeuralNet学习与入门

最近在绘制神经网络结构图&#xff0c;发现了一个开源的工具&#xff1a;PlotNeuralNet Github网址链接&#xff1a; HarisIqbal88/PlotNeuralNet: Latex code for making neural networks diagrams 一些相关的教程&#xff1a; 视频教程链接&#xff1a;【Alu】PlotNeuralN…