Appweb+ESP学习笔记
1.Appweb简介
Appweb HTTP Web服务器是最快的小型Web服务器。这是一个高性能,紧凑的嵌入式网络服务器,具有模块化,安全的核心。它支持广泛的功能集合,包括:HTTP/1.1,TLS/SSL,CGI, PHP,ESP,虚拟主机,摘要式身份验证等。Appweb支持动态web应用程序框架,如ESP和PHP。它也支持像CGI这样的旧网页制作策略。主要包含的一些组件如下:
● HTTP web server程序和库
● HTTP client程序和库
● 管理和监视进程
● ESP web框架
● 可选的CGI、Ejscript、ESP和PHP模块
● SSL/TLS支持包
● 文档和源码
特性:
● 快速开发。Appweb 提供最简单、最低消耗的开发 web 应用方法,它包含了嵌入式 web 应用开发所需的全部特性,极大的缩短了开发时间。
● 最小的资源需求。Appweb 非常简洁和快速,只需要极小的系统资源,最小只需 2MB 的存储空间,运行时最少只需 1MB 内存。
● 可定制的开发环境。Appweb 高度模块化,你可以只选择所需的特性,并且支持运行时模块加载和编译时控制。
● 安全可靠。支持 SSL/TLS,提供最基本的验证,沙盒限制,访问和错误日志。
● 性能。事件驱动的多线程核心提供了最快的响应。
● 标准化。Appweb 支持 HTTP/1.0 、HTTP/1.1 、CGI/1.1 、SSL RFC 2246 、HTTP RFC 2617 。
● 可移植。Appweb 支持 Linux 、Windows 、Mac OSX ,支持 ARM 、MIPS 、i386/X86/X86_64 、PowerPC 等。
地址:
Appweb的Document:https://www.embedthis.com/appweb/doc/
ESP的Document: https://www.embedthis.com/esp/doc/
Appweb官方下载地址:https://www.embedthis.com/appweb/download.html
Appweb的Github下载地址: https://github.com/embedthis/esp/releases
ESP官方下载地址: https://www.embedthis.com/esp/download.html
ESP的Github下载地址: https://github.com/embedthis/esp/releases
为了了解更多Appweb信息,可以查看下列链接
- Appweb Design Goals
- Appweb Target Uses
- Appweb Internals
- Appweb Architecture
- Appweb Web Site
- Appweb Download
- Embedthis Web Site
2.ESP简介
ESP是一个Web框架,可以使创建快速,动态的Web应用程序和Web站点变得更加简单。 ESP应用程序使用C语言进行服务器端编程,从而可以轻松访问系统或硬件数据。 结果是快速和响应的Web应用程序。
ESP不是传统的低级环境。 这是一个微不足道的MVC框架。 ESP具有您通常从企业Web框架期望的所有功能。 ESP也是很好的发展。 如果网页或控制器被修改,则代码被透明地重新编译并重新加载。 这为Web应用程序提供了“脚本式”灵活性的无与伦比的性能。
ESP Web 框架提供了一套完整的组件,包括:
● HTTP Web服务器
● 模块-试图-控制器框架
● C控制器的动态加载器
● 在Web页面中使用嵌入的C代码模板化
● 应用程序和支架生成器
● web sockets
● 嵌入式数据库
● 数据库迁移
● 广泛的程序api
● 库的扩展包
● 完整部署web应用程序的工具
1)ESP 模式
ESP支持几种设计模式:
● Stand-alone ESP web pages (独立的ESP web页面)
● Web Services via ESP Controllers (通过ESP控制器的web服务)
● ESP Model-View-Controller applications ( MVC ) (ESP的模型-视图-控制器应用程序)
● Single Page Applications ( SPA ) (单页应用程序)
Ⅰ. Stand-alone ESP web pages(独立的ESP Web页面)
ESP页面是一个标准的HTML网页,带有嵌入式C代码,可在运行时执行以创建动态客户端响应。 页面通常具有“.esp”扩展名,并可以使用ESP布局页面在一个地方定义应用程序的外观和风格。 C代码嵌入在<%内容%>标记之间。 例如:
Ⅱ. Web Services via ESP Controllers ( 通过ESP控制器的Web服务)
ESP特别适合高性能的Web服务。 ESP允许将URL直接绑定到C函数。 当请求URL时,执行相应的C函数(通常称为动作)来动态地产生响应。 这些操作通常分组为一个可加载的ESP控制器文件。 一个简单的上传控制文件upload.c,例如:
分析其中的关键字段 int esp_controller_espapp_upload();由esp+controller+app名字+控制器名字组成,另外一个关键espDefineAction(route, "upload/doUpload", doUpload);其中"upload/doUpload"比较关键,由控制器名字+URI组成,URI为html 表单action字段自己定义的请求路由,如
表单中的action URI就是doUpload,那么当表单请求的时候,会自动加载控制器(/controllers/upload.c)文件,执行doUpload函数。renderView("upload/upload");重定向到upload文件夹下的upload.esp页面。
Ⅲ.ESP Model-View-Controller applications(ESP的模型-视图-控制器应用程序)
模型 - 视图控制器应用程序(也称为MVC应用程序)是组织大型Web应用程序的成熟范例。 在这种模式中,它是管理包括数据库在内的应用程序状态的“模型”。 “控制器”响应输入,然后调用相关的“视图”来生成用户界面。 它最初是在70年代开发的,最近更适合于Web应用程序,并被Ruby on Rails等框架所普及。 ESP使用与嵌入式旋转相同的范例。
ESP支持MVC应用程序,并提供esp应用程序生成器来创建MVC应用程序和框架。 ESP支持两种类型的MVC应用程序:
● Server-side MVC Applications ( 服务器端MVC应用程序)
ESP通过提供使用Expansive网站生成器( Expansive )来实现服务器端MVC应用程序。 Expansive提供开发时间脚本,布局页面和部分页面,以支持在将动态数据传递到客户端之前轻松地将动态数据插入到网页中。 通过使用主布局页面来实现共同的外观。
● Single Page Applications (单页面应用程序)
单页应用程序将整个Web应用程序作为一个页面提供,然后根据需要在后台逐步下载资源和数据。 通过这种模式,客户端通过客户端的JavaScript框架(如Aurelia)来定义整个用户界面。 服务器提供初始页面加载和正在进行的数据。 这种方法可以提供更加灵敏和流畅的用户体验,而不会由于页面重新加载而导致延迟。 ESP非常适合SPA应用程序,可以为这些应用程序提供所有必需的资源和数据。
2)ESP Web框架
ESP Web框架主要的部分如下:
● HTTP Web Server
● ESP Pages
● ESP Controllers
● ESP Models
● ESP Compilation
● ESP Generator
● ESP API
3)HTTP Web 服务器
ESP包括在Appweb中使用了多年的Embedthis HTTP引擎。 这是一个高性能,基于事件的多线程HTTP引擎。 它完全支持HTTP / 1.1扩展WebSockets,会话,SSL,安全限制和防御性对策。
ESP页面提供MVC框架的“视图”部分,负责生成用户界面。 他们提供:
● 嵌入式c语言代码用于HTML响应
● 便利例程的ESP API库,用于管理Web请求,会话状态和呈现输出
4)ESP 页面指令
ESP支持以下特殊的序列用于Web页面
更多详细信息指令,查看 ESP Page Directives。
5)ESP Controllers (ESP控制器)
ESP控制器是为了管理资源或资源组而绑定到特定URL的C函数的集合。 通常,控制器将使用RESTful路由将URL映射到特定的操作。
一个控制器通常编码在一个源文件中,尽管它可以引用任何外部库。 当接收到控制器中的任何操作请求时,控制器将被动态编译,保存和加载。 如果源代码被修改,则控制器将被重新编译并重新加载。 或者,可以使用esp命令预编译控制器(esp compile或者appweb-esp -r compile),以便在生产中的目标系统上不需要编译器。 编译的控制器作为共享库保存在缓存目录中。
● Actions
当ESP接收到服务请求时,请求被解析,然后分派给控制器中的一个特定的功能,称为一个action。 action功能的工作是
① 响应请求
② 将响应视图回送给客户端
action如何响应请求取决于请求参数,查询信息,表单参数以及其他HTTP和应用程序状态信息。 下面是一个示例动作函数,它根据用户提交的表单数据更新数据库表格中的“params”。( 目前官网给的renderView()为renderView("post-edit"),在appweb-6.1.1版本中并不通用,下面为appweb-6.1.1示例代码 )。
一个action函数可以通过调用render()方法( render methods )来显示数据,它可以通过重定向方法( redirect method )将客户端重定向到新的URI。
如果操作方法没有明确地render任何数据,则ESP将呈现与操作功能同名的ESP网页。 该网页可以完全访问控制器和请求状态。 这是控制器响应请求的常见模式,ESP视图页面将响应格式化到客户端。
6)ESP Models and Databases(ESP模式和数据库)
● Embedded Database Interface (嵌入式数据库接口)
ESP支持用户可选数据库之上的嵌入式数据库接口(EDI),例如:SQLite或MDB。 MDB数据库是一个很小的内存数据库,非常适合嵌入式应用程序。 SQLite是嵌入式应用程序的完整SQL实现。 MDB是最小和最快的,但功能最少。
● Migrations(迁移)
ESP生成器程序可以创建数据库migration模块。 这些是创建和修改数据库表的小程序。 迁移对创建数据库和测试数据非常有用。
7)ESP API
ESP Web框架有一套广泛的API来涵盖所有可能的设计需求。 它还定义了一个表达简洁的简短API,使常见任务变得简单。 有关更多详细信息,请参阅ESP API Referenc。
ESP使用垃圾收集器,因此您永远不需要释放在网页或控制器中分配的ESP内存。 这导致更安全,可靠的Web应用程序。