之前的博客上讲了开发板上移植appweb的过程,这篇博客就记录一下如何开发一个典型的基于appweb的mvc架构的网站

1.前言

1.1环境参数

开发板:mini2440  64MB内存 256MB Flash

PC系统:X86 ubuntu10.04  gcc:4.4.3

交叉编译器:gcc  4.4.3

appweb版本:5.0.0-rc1

1.2简介

ESP全称是Embedded Server Page,和jsp(Java Server Pages)很相似,前者支持将C语言嵌套到html中后者支持将Java语言嵌套到html中来实现动态网页。下面摘抄一点官网上的原话:

ESP is the blazing fast "C" language web framework that works at thought-speed.ESP is not a traditional low-level environment. It is a powerhouse MVC framework in a tiny footprint with most things you'd expect from an enterprise web framework including: MVC, scaffolds, templates, WebSockets, integrated databases, database migrations and more.

ESP的document:https://embedthis.com/esp/doc/index.html

AppWeb的document:https://embedthis.com/appweb/doc/index.html

其他工具的网址:https://embedthis.com/products.html

2.一个简单的MVC登录

由于开发的是嵌入式web,每改动一点内容就要重新编译然后再下载到开发板中测试,很是麻烦,所以一般采取的方法是先在PC上开发好,测试好后然后移植到开发板上。所以我们先要在PC上安装AppWeb以及其它工具,然后开发一个web应用,最后移植到开发板上。

2.1向PC上安装AppWeb

下载源码:

去网址:http://appwebserver.org/downloads/appweb/download.esp下载appweb的源码,我下载的版本是appweb5.0
编译:
(i)解压源码文件
(ii)把文件appweb-linux-default-me.h中的#define ME_COMPILER_HAS_SYNC64 1注释掉,不然会报错“undefined reference to `__sync_add_and_fetch_8'collect2: ld returned 1 exit status”
//#define ME_COMPILER_HAS_SYNC64 1
iiimake
make -f projects/appweb-linux-default.mk

编译完后会在../appweb-5.0.0-rc1/linux-x86-default文件下生成目标文件将

(iiii)安装

make –f project/appweb-linux-default.mk install

2.2利用appweb提供的工具建立MVC模板

参考网址:https://embedthis.com/esp/doc/guide/esp/start/mvc-tour.html

这个程序简单,就是输入用户名和密码,如果用户名是“abc”密码是“123”那么页面就跳到loginOK页面,如果不是那么页面就跳转到loginError页面。

目的是熟悉流程和简单地理解appweb,里面没有涉及到数据库,所以MVC中的M就没有很好地体现,主要是V和C,如果要完整的实现可以认真地阅读上面的参考网址。

2.2.1模板生成

(1)$ mkdirmylogin

(2)$cd mylogin

(3)$esp install esp-html-mvc

执行完(3)后会在文件夹里面出现:client  layouts  package.json  paks这几个文件或是文件夹,将package.json中的auth中的内容type删除,不然会报错:esp: Error: Cannot find auth type app

(4)$esp generate controller login
执行(4)的目的是产生controller,执行玩了之后就会发现文件夹里面多了个文件夹controllers,里面已经自动生成了login.c

2.2.2 修改/编写View

(1)修改mylogin/client/index.esp页面为用户名密码形式,这里一定要加这句话<% inputSecurityToken(); %>不然的话错误:

Access Error: 401 -- Unauthorized
Security token is stale. Please reload page.

<html>
<head>
<title>MyLogin</title>
</head><body><h1>MyLogin</h1><form action=/do/login/check method=POST><table><tr><td>Name:</td><td><input type=text name=name size=50 value=""></td></tr><tr><td>Pwd:</td><td><input type=text name=pwd size=50 value=""></td></tr><tr><td align="CENTER"> <input type=submit name=login value="Login"> <% inputSecurityToken();%></td></tr></table></form>
</body>
</html>

(2)在mylogin/client文件夹下建立app/login文件夹,在里面新建两个esp页面,login-ok.esp和login-error.esp

login-ok.esp:

<html>
<head>
<title>OK</title>
</head><body><h1>login OK</h1>
</body>
</html>

login-error.esp:

<html>
<head>
<title>error</title>
</head><body><h1>login Error</h1>
</body>
</html>

2.2.3 修改/编写Controller
这里主要是修改controller文件夹下的login.c,这里 的action的命名是这样的:比如./do/login/check的uri对应的就是login-cmd-check

/*login Controller for esp-html-mvc (esp-html-mvc)*/
#include "esp.h"
static void checkLogin() {cchar *name = param("name");cchar *pwd = param("pwd");if(smatch("abc",name) && smatch("123",pwd)){renderView("login/login-ok");}else{renderView("login/login-error");  }
}
static void common(HttpConn *conn) {
}/*Dynamic module initialization*/
ESP_EXPORT int esp_controller_mylogin_login(HttpRoute *route, MprModule *module) {espDefineBase(route, common);espDefineAction(route, "login-cmd-check", checkLogin);return 0;
}

2.2.3编译

$esp compile

如果没有错误的话,机会生成cache文件,里面的.so文件就是appweb要加载的文件,这里我们可以看到,esp会被“翻译”成c文件,就像jsp会被“翻译”成java文件(servlet)一样

2.2.4配置文件

为了节省空间我把不必要的注释和其它的东西都删除了,如果想看完整版(里面有很多的注释,建议看一下,就去看appweb-5.0.0-rc1/src/server/sample.conf

需要注意的是以下几个:

(1)Listen 4000 监听端口

(2)Documents /home/jxm 这个表示你的web应用所在的目录,比如我的文件夹mylogin就在/home/jxm文件夹下

(3)EspRoute name="login" methods="GET,POST" prefix="^/{controller}(~/{action}~)" target="${controller}-${action}" source="${controller}.c" 这个文件就是配置action的语句,只需要修改name就行,其它的用模板里面的就行

ErrorLog "error.log" size=10MB level=2 backup=5 anew stamp=1hr
Listen 4000Documents /home/jxmAddHandler fileHandler html gif jpeg jpg png pdf ico css js txt ""<if ESP_MODULE>LoadModule espHandler libmod_espAddHandler espHandler espEspUpdate offEspKeepSource onEspApp name=myloginEspRoute name="login" methods="GET,POST" prefix="^/{controller}(~/{action}~)" target="${controller}-${action}" source="${controller}.c"<else>AddHandler errorHandler esp
</if>Cache 1day SessionTimeout 30minsRequestParseTimeout 5secRequestTimeout 10minsInactivityTimeout 1minExitTimeout 30secsLimitWorkers 4MemoryPolicy restartLimitBuffer 32KLimitMemory 100MBLimitCache 10MBLimitCacheItem 200KLimitClients 20LimitChunk 64KLimitConnections 50LimitFiles 0LimitRequestsPerClient 20LimitKeepAlive 200LimitRequestBody 100KLimitRequestForm 32KLimitRequestHeader 32KLimitRequestHeaderLines 64LimitResponseBody 2GBLimitSessions 100LimitUpload 1GBLimitUri 8K

2.2.5启动

$appweb --config sample.conf 2.2.6访问

向浏览器中输入网址:127.0.0.1:4000就会出现登录界面,如果要去掉最上面的“Home”banner,需要将文件夹mylogin/layouts中的default.esp文件删除,然后重新编译再运行

2.2移植到开发版

2.2.1 交叉编译

在编译前建议将cache文件夹删除

$export CC=arm-linux-gcc

$esp --platform../appweb-5.0.0-r1/linux-arm-release(这个路径是你之前交叉编译appweb产生的目录) compile

然后将整个mylogin文件拷贝到开发板中,这里需要注意的是,由于目录变化所以在sample.conf 中的Document的目录也要变

appweb的开发步骤简介相关推荐

  1. 韦东山嵌入式第一期学习笔记DAY_3——7_1_裸机开发步骤简介

    作者:GWD 时间:2019.7.4 一.课程内容: 1.问:windows.linux与arm(linux)建立工程的区别? 答: 2.问:ubuntu环境下编译一个C文件的过程? 答: 1).建立 ...

  2. T100接口开发步骤简介

    T100 WebService Server端开发: 开发流程:1.服务注册:2.服务程序签出:3.服务程序撰写:4.服务程序上传 1.azzi700注册服务规格编号,然后签出就可以写程序了 2.宣告 ...

  3. 国际化的Struts的开发步骤简介

    1.下载struts 可以到http://jakarta.apache.org/struts/index.html下载,下载后解压,把其中的.war文件拷贝到Tomcat的webapps目录下,启动T ...

  4. (Spring程序开发)简介程序开发步骤配置文件相关API

    1Spring简介 1.1 Spring是什么 Spring是分层的Java SE/EE应用full-stack 轻量级开源框架, 以IoC(Inverse Of Control:反转控制) 和**A ...

  5. react项目开发步骤_成为专业React开发人员的31个步骤

    react项目开发步骤 我为达到可雇用水平而进行的每个项目和课程. (Every single project and course I took to reach a hireable level. ...

  6. 构建物联网网络的4个关键步骤简介

    在首次构建物联网网络时经常犯的最大错误是低估了物联网网络设计,运营和管理的复杂性 - 并且相信传统网络技术和参与模型将支持大规模物联网部署的要求. 建立物联网网络并不像听起来那么容易,而且当面对大规模 ...

  7. 虚拟字符设备驱动开发步骤

    目录 前言 字符设备驱动简介 内核驱动操作函数集合(file_operations结构体) 字符设备驱动开发步骤 .ko驱动模块的加载和卸载(module_init驱动入口.insmod驱动加载) 字 ...

  8. 数据库MySQL基础---JDBC开发步骤--JDBC封装工具类--PreparedStatement实现CRUD操作

    JDBC简介 1.JDBC定义Java数据库连接(Java Database Connectivity,简称JDBC):是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询 ...

  9. matlab有限元分析与应用_专栏 | UEL用户子程序开发步骤—有限元理论基础及Abaqus内部实现方式研究系列20...

    作者介绍 snowwave02 博士,高级工程师 snowwave02团队:设计仿真领域的软件开发团队,由软件.机械.物理等专业人员组成,10年以上CAD/CAE软件开发经验,精通Abaqus二次开发 ...

  10. SAP UI5 应用开发教程之八十三 - SAP UI5 的自动化测试套件页面的开发步骤介绍试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 作者简介 Jerry Wang,2007 年从电子科技大学计算机专业硕士毕业后加入 SAP 成都研究院工作至今.Jerry 是 SAP 社区导师,S ...

最新文章

  1. 2. 编程规范和编程安全指南--C/C++
  2. android地图定位
  3. Elasticsearch上手——熟悉基本操作
  4. 重温CLR(十) 字符、字符串和文本处理
  5. python把桢写入txt_ffmpeg 常用参数一览表及python 使用示例
  6. 前端学习(1716):前端系列javascript之页面配置下
  7. freemarker 数组转字符串_TypeScript 实战算法系列(一):实现数组栈与对象栈
  8. 女孩去互联网大厂工作怎么样?
  9. 吴恩达机器学习视频教程(含课程作业源代码和学习笔记)
  10. Oracle 数据库基本知识概念
  11. Javashop开启全新微服务时代
  12. 基于C# WinForms窗体——飞机大战
  13. 请写出至少五个块级元素_以下属于行内块元素的是()
  14. java 九九乘法表 99乘法表
  15. word表格分开快捷键_在Word2010表格的编辑中,快速的拆分表格应按()快捷键。
  16. 几个Gerrit代码检查checkstyle问题总结
  17. VB实现自动生成统计图表
  18. Unity位运算符和Layers
  19. 32位ARM核单片机XL32F003开发板可替代STM32、华大、GD,脚位兼容
  20. 计算机管理 服务无响应,电脑任务栏假死点击没反应的解决方法(win7与xp)

热门文章

  1. 《弃子长安》第六章 九煞夺命
  2. 【科学文献计量】知识单元的频次统计与分布(简单阅览和完整频次统计)
  3. OBIEE,OAS,OAC三者之间的区别
  4. 安卓系统7.1搭建Xposed环境
  5. python 统计excel表格_利用python对excel计数,并输出结果 python返回excel中sheet的数量...
  6. Rust包管理 Crate
  7. 创建列表、删除列表、查看列表长度、列表增加一个元素的几种方法
  8. 树莓派3B 安装 Raspbian 系统,配置环境
  9. 如何搭建IPv6测试你的APP
  10. 仓库盘点好方法,使用安卓盘点机PDA扫描商品条码进行超市盘点