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 服务器将响应发送给客户端。
 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于springboot+vue实现的养老院管理系统(源码+L文+ppt)

基于springbootvue实现的养老院管理系统(源码L文ppt)4-106 养老院系统管理是一个综合性养老在线平台,旨在综合并简化养老机构中的照护流程。该系统集成了多种功能,以支持医生、护士、家属及管理员等不同角色的需求。对于医务人员而…

dify实战案例分享-基于多模态模型的发票识别

1 什么是dify Dify是一个开源的大语言模型(LLM)应用开发平台,旨在简化和加速生成式AI应用的创建和部署。它结合了后端即服务(Backend as Service, BaaS)和LLMOps的理念,使开发者能够快速搭建生产级的AI应用…

QML项目实战:自定义Switch按钮

目录 一.添加头文件 1.QtQuick.Controls 2.1 2.QtGraphicalEffects 1.12 二.自定义Switch 三.标签 四.效果 五.代码 一.添加头文件 1.QtQuick.Controls 2.1 QtQuick.Controls 提供了一组预定义的 UI 控件,这些控件可以用于构建现代、响应式的用户界面。它包…

开源框架Openlayers:就业必学,打造3D互动式地图

OpenLayers是一个开源的WebGIS库,支持多种地图类型,提供丰富的功能和API,支持多种格式,可以进行空间分析和可视化,还可以制作融合图层和定制地图。 在招聘市场中,OpenLayers的地位也是不可小觑的&#xff0…

React系列教程(2)React哲学

豆约翰习惯将掌握某一技术分为5个层次:初窥门径,小试牛刀,渐入佳境,得心应手,玩转自如 本篇属于React框架中的第1层次即初窥门径 我们认为,React 是用 JavaScript 构建快速响应的大型 Web 应用程序的首选方…

无人机声学侦测算法详解!

一、算法原理 无人机在飞行过程中,其电机工作、旋翼震动以及气流扰动等都会产生一定程度的噪声。这些噪声具有独特的声学特征,如频率范围、时域和频域特性等,可以用于无人机的检测与识别。声学侦测算法利用这些特征,通过一系列步…

【C++】继承的理解

1.继承的概念和定义 1.1继承的概念 继承 (inheritance) 机制是面向对象程序设计 使代码可以复用 的最重要的手段,它允许程序员在 保 持原有类特性的基础上进行扩展 ,增加功能,这样产生新的类,称派生类。继承 呈现了面向对象 程序…

车圈大厂9月利润率惨淡收尾,“金九”或变“铜九”

撰文|ANGELICA 编辑|ANGELICA 审核|烨 Lydia 声明|图片来源网络。日晞研究所原创文章,如需转载请留言申请开白。 国庆假期第一天,不少车企就迫不及待晒出假期战报。 按照以往的经验,每年9月…

蓝牙是如何诞生,如何工作,如何发展的?【无线通信小百科】

蓝牙为什么叫蓝牙?深入了解关于蓝牙的一切|无线通信小百科 在前两期文章,我们为大家介绍了无限通信技术是如何工作,如何发展;也为大家讲解了目前主流无线通信模块、SoC方案都有哪些。 无线通信工作原理、发展历程介绍https://blo…

Pytorch cuda版本选择(简洁高效版)

简而言之 Pytorch cuda版本选择 只需要低于cuda驱动版本即可,cuda版本查看是nvidia-smi, nvcc -V 是runtimeapi版本可以不用管 1.只要看cuda驱动版本 安装pytorch 选择cuda版本,只要看你电脑cuda驱动版本即可。 2.选择依据 pytorch中cuda版本只要不高于…

告别复杂协作:Adobe XD的简化替代方案

Adobe XD是一款集成UI/UX设计和原型创建功能的设计平台。它允许用户进行网页、移动应用的设计,以及原型的绘制,并且能够将静态设计转化为动态的交互原型。尽管Adobe XD提供了这些功能,但它依赖于第三方插件,且插件库有限&#xff…

【创新技术】探索Nuvoton NSP2.0:打造高品质语音提示新方案

你还在为寻找低成本高品质的语音播放芯片而困扰吗?面对市面上参差不齐的语音播放芯片,我们一直都在追求性价比,真正的性价比并不单独只是考虑价格,更加考虑播放音效的品质,芯片的抗干扰性能、外围电路的简易程度和开发…

【IC每日一题:CDC多bits跨时钟传输+handShake】

IC每日一题:CDC多bits跨时钟传输handShake 1 八股题:CDC多bits跨时钟传输1.1 慢到快:MUX enbale同步器法1.1.1 分析1.1.2 时序图1.1.3 代码 1.2 快到慢:握手协议1.2.1 原理分析1.2.2 时序图1.2.3 代码题 2 手撕题:使用…

如何将MySQL彻底卸载干净

目录 背景: MySQL的卸载 步骤1:停止MySQL服务 步骤2:软件的卸载 步骤3:残余文件的清理 步骤4:清理注册表 步骤五:删除环境变量配置 总结: 背景: MySQL卸载不彻底往往会导致重新安装失败…

完美解决 vscode 多设备通过ssh登录远程服务器免密登录

文章目录 问题解决分支一:只需一个设备连服务器分支二:需要多台设备连服务器(即分支一成立的情况下,即已经有一个设备连接服务器了)确保权限正确注意 问题 麻烦,每次打开vscode都要输入密码才能连接服务器&…

mac|安装redis及RedisDesk可视化软件

一、安装 通过Homebrew安装 brew install redis 在安装过程可以得到以下信息: 1、启动redis或重新登陆redis brew services start redis 如果只想在前端运行,而不是在后端,则使用以下命令 /opt/homebrew/opt/redis/bin/redis-server /opt…

大学适合学C语言还是Python?

在大学学习编程时,选择C语言还是Python,这主要取决于你的学习目标、专业需求以及个人兴趣。以下是对两种语言的详细比较,帮助你做出更明智的选择: C语言 优点: 底层编程:C语言是一种底层编程语言&#x…

3大关键点教你用Java和Spring Boot快速构建微服务架构:从零开发到高效服务注册与发现的逆袭之路

你好,我是忆~遂愿,全网3w粉丝,《遂愿盈创》社群主理人。 副业启航① | 遂愿盈创(对副业感兴趣免费可入,多种赚钱实战项目等你来,一起探寻副业快速变现的途径;以及对接互联网大厂商务合作&#x…

ubuntu下使用pocketsphinx进行语音识别

文章目录 前言一、pocketsphinx的介绍二、ubuntu下编译三、使用示例1.模型选择2.代码示例3.自定义字典 四、交叉编译总结 前言 由于工作需要语音识别的功能,环境是在linux arm版上,所以想先在ubuntu上跑起来看一看,就找了一下语音识别的开源…

Redis的持久化以及性能管理

目录 一、Redis持久化概述 1.什么是Redis持久化 2.持久化方式 3.RDB持久化 3.1概念 3.2触发条件 3.3执行流程 3.4启动时加载 4. AOF持久化 4.1概念 4.2启动AOF 4.3执行流程 4.4启动时加载 5.RDB和AOF的优缺点 二、Redis性能管理 1.查看Redis内存使用 2…