BOA服务器(一):简介
在嵌入式设备的管理与交互中,基于Web方式的应用成为目前的主流,这种程序结构也就是大家非常熟悉的B/S结构,即在嵌入式设备上运行一个支持脚本或CGI功能的Web服务器,能够生成动态页面,在用户端只需要通过Web浏览器就可以对嵌入式设备进行管理和监控,非常方便实用。本文主要介绍BOA服务器的工作原理。
文章目录
- 1.嵌入式WEB服务器
- 2.服务器与客户端之间的通信
- 3.表单提交
- 4.HTML网页
1.嵌入式WEB服务器
嵌入式WEB服务器常见的有lighttpd、shttpd、thttpd、boa、mathopd、minihttpd、appweb、goahead等,本文主要介绍BOA服务器。
它是一个非常小巧的服务器,执行代码大约60KB左右,是一个运行于unix或linux下的,支持CGI的、适合于嵌入式系统的单任务的http服务器,源代码开放、性能高。由于它是一个单任务的web服务器,只能一次完成用户的请求,而不会fork出新的进程来处理并发的链接请求。
但是BOA支持CGI,能够为CGI程序fork出一个进程来执行相应的客户请求。它的主要功能是在互联嵌入式设备之间进行信息交互,达到通过网络对嵌入式设备进行监控,并将反馈信息自动上传给主控设备的目的。
它是基于HTTP超文本传输协议的,Web网页是Web服务基本的传输单元。
嵌入式Web服务的工作基于客户机/服务器计算模型,由Web浏览器(客户机)和Web服务器(服务器)构成,也即著名的B/S结构。
运行于客户端的浏览器首先要与嵌入式Web服务器BOA端建立连接,打开一个套接字虚拟文件,此文件建立标志着SOCKET连接建立成功然后客户端浏览器通过套接字SOCKET以GET或者POST参数传递方式向Web服务器提交请求,Web浏览器提交请求后,通过HTTP协议传送给Web服务器。
Web服务器接到请求后,根据请求的不同进行事务处理,返回HTML文件或者通过CGI调用外部应用程序,返回处理结果。服务器通过CGI与外部应用程序和脚本之间进行交互,根据客户端浏览器在请求时所采用的方法,服务器会搜集客户所提供的信息,并将该部分信息发送给指定的CGI扩展程序,CGI扩展程序进行信息处理并将结果返回给服务器,然后服务器对信息进行分析,并将结果发送回客户端在浏览器上显示出来。
2.服务器与客户端之间的通信
服务器客户端之间的通信,是客户端的浏览器和服务器端的http服务器之间的HTTP通信,我们只需要知道浏览器请求执行服务器上哪个CGI程序就可以了,其他不必深究细节,以为这些过程不需要程序员去操作。服务器和CGI程序之间的通信才是我们关注的。
一般情况下,服务器和CGI程序之间是通过标准输入输出来进行传递的,而这个过程需要环境变量的协作方可实现。
- 服务器将URL指向一个应用程序
- 服务器为应用程序执行做准备
- 应用程序执行,读取标准输入输出和有关环境变量
- 应用程序进行标准输出
注:对于Windows系统而言,还可以通过profile文件进行数据传输
更通俗点讲,网页里面有个变量(环境变量),变量里面有个值, 通过某种方式把这个值传到 cgi 程序中, cgi 程序中提取这个变量的值,根据这个值做出相应的处理;那么这个变量是怎么在从网页传到 cgi 程序的呢?
3.表单提交
在HTML中,当客户填写了表单,并按下了发送(submit)按钮后,表单的内容被发送到了服务器端,一般的,这时就需要有一个服务器端脚本来对表单的内容进行一些处理,或者是把它们保存起来,或者是按内容进行一些查询,或者是一些别的什么。没有了 CGI,WEB 的世界就完全失去了它的交互性,所有的信息都变成单向的了,而不能够有任何的反馈。这里就要说到表单了:
表单是html中在网页中主要负责数据采集功能。
一个表单有三个基本组成部分:
表单标签:这里面包含了处理表单数据所用CGI程序的URL以及数据提交到服务器的方法。
表单域:包含了文本框、密码框、隐藏域、多行文本框、复选框、单选框、下拉选择框和文件上传框等。
表单按钮:包括提交按钮、复位按钮和一般按钮;用于将数据传送到服务器上的CGI脚本或者取消输入,还可以用表单按钮来控制其他定义了处理脚本的处理工作。
这些东西只要打开 dreamweaver 随便建个 html 就可以看到它的表单元素; 当你打开一个网页的时候,你输入的文字或者做出的选择,类似等等要提交信息的地方基本上都是属于表单元素; 这些表单元素(表单项)都必须放在表单内, 而整个表单在网页是看不到的,你可以理解它为一个容器,里面装着你要发给服务器的东西。
由于 HTML 只能显示静态网页,无法和服务器活动数据进行交互,所以要通过表单与服务器互动; 就跟你去银行办业务,人家要你在表上填一堆东西,然后把表提交给业务员,那个表就是表单, 网站表单类似这种包含了许多用户填写的信息,提交给服务器,服务器获取填写的信息后执行相应操作。

图为html文件中的一个代码段,这就是表单的提交过程
这里的“submit”即为表单内容,里面的数据会被提交到指定 URL(这个 url 可以是服务器上的一个 cgi程序,此处即为login.cgi)。
URL:统一资源定位符(Uniform Resource Locator,URL)是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。
4.HTML网页
网页是一个纯文本文件,是向浏览者传递信息的载体,以超文本和超媒体为技术,采用HTML、CSS、XML等语言来描述组成页面的各种元素,包括文字、图像、音乐等,并通过客户端浏览器进行解析,从而向浏览器呈现网页的各种内容。做好的网页放在BOA服务器的WWW文件里,客户端浏览器对哪个网页有请求服务器就把哪个页面发送给浏览器。
相关文章:
BOA服务器(一):简介
在嵌入式设备的管理与交互中,基于Web方式的应用成为目前的主流,这种程序结构也就是大家非常熟悉的B/S结构,即在嵌入式设备上运行一个支持脚本或CGI功能的Web服务器,能够生成动态页面,在用户端只需要通过Web浏览器就可以…...
最详细STM32,cubeMX 超声波测距
这篇文章将详细介绍 STM32使用 cubeMX驱动超声波测距 。 文章目录 前言一、超声波模块测距原理 : 二、cubeMX 配置三、实验程序总结 前言 实验材料:STM32F103C8T6开发板, HC-SR04 超声波模块。所需软件:keil5 , cubeM…...
Java实现连接SQL Server解决方案及代码
下面展示了连接SQL Server数据库的整个流程: 加载数据库驱动建立数据库连接执行SQL语句处理结果关闭连接 在连接之前,前提是确保数据库成功的下载,创建,配置好账号密码。 运行成功的代码: import java.sql.*;publi…...
如何用 JMeter 编写性能测试脚本?
Apache JMeter 应该是应用最广泛的性能测试工具。怎么用 JMeter 编写性能测试脚本? 1. 编写 HTTP 性能测试脚本 STEP 1. 添加 HTTP 请求 img STEP 2. 了解配置信息 HTTP 请求各项信息说明(以 JMeter 5.1 为例)。 如下图所示:…...
vue3+vite在线预览pdf
效果图 代码 <template><div class"pdf-preview"><div class"pdf-wrap"><vue-pdf-embed :source"state.source" :style"scale" class"vue-pdf-embed" :page"state.pageNum" /></div…...
Python深度学习实战-基于Sequential方法搭建BP神经网络实现分类任务(附源码和实现效果)
实现功能 第一步:导入模块:import tensorflow as tf 第二步:制定输入网络的训练集和测试集 第三步:搭建网络结构:tf.keras.models.Sequential() 第四步:配置训练方法:model.compile()&#x…...
【前端】Webpack5中Html和CSS的压缩打包
1.Webpack5简介 1.1.Webpack简介 (1)webpack的发展历程 2012.3—webpack(问世) 2014.2—webpack1 2016.12—webpack2 2017.6—webpack3 2018.2—webpack4 2020.10—webpack5(要求node版本10.13) &a…...
postman接收后端返回的文件流并自动下载
不要点send,点send and download,postman接受完文件流会弹出文件保存框让你选择保存路径...
谈谈Net-SNMP软件
Net-SNMP是一个开源的SNMP软件套件,它提供了SNMP代理(snmpd)和SNMP工具(如snmpget、snmpwalk等),可以用于监控和管理网络设备。 Net-SNMP最初是从UC Davis的SNMP软件衍生而来,现在已经成为广泛…...
前端对普通数字数组排序示例
1. arr.sort(fn) // 升序排序arr.sort((a, b) > a - b);// 降序排序arr.sort((a, b) > b - a); 2. 冒泡排序 冒泡排序-升序原理: eg: [1, 6, 7, 9, 10, 3, 4, 5, 2] 1) 先遍历第一遍数组, 前一个数字大于后一个数字, 就交换位置, 最后最大值10放在数组的最后, 此时是…...
SQL server中:常见问题汇总(如:修改表时不允许修改表结构、将截断字符串或二进制数据等)
SQL server中:常见问题汇总 1.修改表时提示:不允许修改表结构步骤图例注意 2.将截断字符串或二进制数据。3.在将 varchar 值 null 转换成数据类型 int 时失败。4.插入insert 、更新update、删除drop数据失败,主外键FOREIGN KEY 冲突5.列不允许…...
无线通信中CSI的含义
在无线通信中,CSI代表"Channel State Information",即信道状态信息。CSI是一种关键的信息,用于评估和描述通信信道的特性,以帮助发送器和接收器在通信过程中做出智能的调整和决策。 CSI包括有关通信信道的以下信息&…...
如何一键核实验证身份证的真伪?
据报道,今年10月10日,广东省佛山市朱某因生活琐事与丈夫发生争吵,民警发现她的身份证有问题。 在民警打算进一步了解情况,查看夫妻二人的身份证件时,朱某的身份证引起了民警的注意。这张身份证表面很光滑,…...
冒泡排序:了解原理与实现
目录 原理 实现 性能分析 结论 冒泡排序(Bubble Sort)是一种简单但效率较低的排序算法。它重复地比较相邻的元素并交换位置,直到整个序列有序为止。虽然冒泡排序的时间复杂度较高,但在小规模数据集上仍然具有一定的实际应用价…...
springboot maven项目环境搭建idea
springboot maven项目环境搭建idea 文章目录 springboot maven项目环境搭建idea用到的软件idea下载和安装java下载和安装maven下载和安装安装maven添加JAVA_HOME路径,增加JRE环境修改conf/settings.xml,请参考以下 项目idea配置打开现有项目run或build打…...
vue3检测是手机还是pc端,监测视图窗口变化
1.超小屏幕(手机) 768px以下 2.小屏设备(平板) 768px-992px 3.中等屏幕(旧式电脑) 992px-1200px 4.大屏设备(现代电脑) 1200px以上 <script setup name"welcome"> i…...
B - Magical Subsequence (CCPC2021哈尔滨)
思路: (1)问题:对于已知数组,每组依次选两个,尽量选更多组,选的每组和相等;(假定和为x) (2)于是问题拆分为两步, x是多少x确定时&a…...
Leetcode刷题详解——x的平方根
1. 题目链接:69. x 的平方根 2. 题目描述: 给你一个非负整数 x ,计算并返回 x 的 算术平方根 。 由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。 **注意:**不允许使用任何内置指数函数和…...
windows安装docker,解决require wsl 2问题
想在windows上安装桌面版docker,上官网下载了安装包,安装完后,启动报错,忘了截图了。 大概意思就是require wsl 2。 于是就是docker FAQ中找相关问题解决方案,点,点,点然后就点到微软了。 ws…...
建立复数类
目录 程序设计 程序分析 系列文章 在课堂示例的基础上,显示复数时如果虚部为0时只显示实部,实部为0时只显示虚部,虚部为负数时以a-bi的形式显示,并为复数类增加减法功能。 程序设计 Work4类: package work;import java.util.Scanner;public class Work4 {private in…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
