文章目录

  • 1.Embedded Javascript
  • 2.User’s Guider学习
    • 2.1. Request Routing
    • 2.2.Route Processing
    • 2.3. Request Handlers

1.Embedded Javascript

查看了https://www.embedthis.com/goahead/doc/users/jst.html 官方的User Guider,发现GoAhead使用一种Embedded JavaScript 去支持动态网页。该脚本是Javascript的子集,因为可能嵌入式WebServer不能支持全部的javascript特性。
GoAhead javascript 支持如下Javascript元素

  • Javascript Templates (JST)
    JST Handler(JST 句柄)
    一个JST文件后缀为.jst。然后被jst句柄处理。JST句柄执行JST脚本,然后用处理后的内容替换脚本。用户见到的是一个HTML网页,但是是由JST句柄生成的。
  • JST Delimiters(JST定界符)
    在JST文件中,使用<% and %>界定符。
    Today is <%write (“Hello”+”world”); %>, 网页输出时,< >尖括号内的内容会被Hello World代替
  • Scripting Execution(脚本执行)
    当用户浏览器请求JST文件时,JST句柄被执行,去响应该请求。当从文件系统中读取JST文件时,采用的单遍扫描模式(one-pass operation). 文件中的文本内容将直接拷贝到客户端(其实就是浏览器),如果找到带有JST界定符,界定符里的内容会被执行被将执行结果返回到客户端。该进程直到文件的末尾。
  • 标准函数(Standard Functions)
    JST 定义了一个标准函数:write. 该函数直接写数据到客户端,当JST脚本文件中的界定符内为该函数时。
  • 定义JST函数(Defining JST functions)
    新的JST函数通过websDefinejst创建。并且和一个C函数绑定(This binds a C function to a javascript functions).

    定义后,JST 网页就可以使用新的data( )函数
    Today’s data is:<% date( ); % >

2.User’s Guider学习

2.1. Request Routing

Overview
强劲的route 引擎,由一系列在route.txt文件中生产的配置构成route.该文件在GoAhead启动时被加载。当接收到客户端的请求,router测试多种路由,并选择最优的路由去处理请求。在处理过程中,路径也许会被重定向或重写。


典型的,在route.txt中存在多种routes.在请求URL之前,配置文件中的路径顺序被测试,去匹配URI格式。总是存在一个catch-all 的路由,去处理请求,当所有之前的路由失败的情况下。

  • Route Configuration
    在route.txt中通过”route” directives定义了相关的路径。

    每一行定义了一个新的路径。当route 指令有多个可选的参数时,每条route 会议’uri’关键字打头。如果客户端URI请求不带有route中的URI前缀,该route 将被跳过。
  • Route Ordering
    当定义了许多条route在route.txt中,router会顺序去测试每一条路径。因此顺序非常重要。具有相同前导字符串的路径,较长的URI放在前面。
  • Route KeyWords.
    一条路由指令,由一系列keywords = value pairs决定。所有的routes都必须包含’uri’关键字,其他关键字可选。如下为支持的关键字:
  • Keyword Value Separators
    有些关键字可能包含多个值(abilities, extensions, methods).在这种情况下,value通过’|’或’,’分隔开。当所有的values都生效规定使用’,’。当只需要其中之一的values生效,则使用’|’。特别的,abilities使用’,’进行分隔,extensions和methods使用’|’。

2.2.Route Processing

处理一个请求,GoAhead 路由引擎检查每一条配置的routes, 从而决定与请求最匹配的路径。因此路由顺序特别重要,每一条路由将被测试。如果某一条路径匹配失败,该路径被丢弃转向下一条路径。

  • Routing Steps
    – Protocol Matching – 测试请求协议是否匹配
    – Method Matching – 测试请求方法是否匹配
    – Extension Matching—测试请求扩展名是否匹配
    – URI Matching –测试请求URI是否匹配

  • Protocol Matching
    可选步骤。

  • Method Macthing
    可选步骤

  • Extension Macthing
    可选步骤。路径能被配置为只匹配特定文件的扩展。扩展匹配会测试实际的请求文件名,在支持路径扩展前。默认情况下。路径支持所有扩展。

  • URI Matching
    强制。

  • Route Example

  • Redirecting Requests
    将旧的文件重定向至新的文件

  • Redirecting HTTP to SSL
    重定向所有的连接通过SSL

  • Controlling Access with Digest Authentication
    Digest 认证

  • Enable the TRACE and OPTIONS methods
    TRACE和 OPTIONS方法默认关闭,以增强安全性。不能对所有的routes开发,只能对特定的route开放。

  • Define a New Extension
    为了确保带有文件扩展的内容的请求由特殊的Handler去处理, 可以使用externions和handler关键字:

  • Catch-All Route

2.3. Request Handlers

GoAhead Handlers

用户可以扩展自定的handler去处理Http请求,从而处理自己想要的内容。详情内容请查看Developer’s Guide内的Creating Handlers内容。

  • Request Processing
    – 当接收到客户端请求,GoAhead解析HTTP 头然后由GoAhead路由决定最优路径。一条route包含全部的信息,这些信息能决定如何处理一个请求,包括请求处理程序和请求认证。GoAhead按顺序匹配route,然后选择最先匹配到的route。
    – 选择route的最后一步是调用理想的处理程序的match( )回调函数。如果match返回true,该处理程序则被选中。如果返回flase, 该handler随同该route会被跳过,然后route 选择处理流程将继续执行。

  • Standard Handlers
    GoAhead有一套处理程序处理标准的内容

  • Action Handler
    Action 处理程序将URLs映射到简单的C函数。提供C函数服务的处理程序绑定到URLs。举例:配置URLs的action 处理程序,通过以’/action’为开头

    查看GoActions获取更多信息

  • Continue Handler

  • File Handler

  • JST Handler
    为动态内容相关的Javascript templates服务的处理程序。详见 Javascript Templates.

    当请求的URI 扩展为asp/jst时,会使用JST 处理程序。注意:可以创建多重routes ,这些routes使用相同的处理请求程序。

  • Redirect Handler
    处理route重定向。重定向处理,将处理客户端的请求导向其他内容。登录认证时导向login,logout,logged页面。

    HTTP请求使用SSL.

  • Upload Handler
    上传处理程序。该处理程序是一种特殊的情况,会过滤上传的文件。不是一个“终端”处理程序(not a “terminal” handler),可以和其他处理程序一起应用。Upload 处理程序自动配置,不需要在路由表中定义。

GoAhead_UserGuide_1相关推荐

最新文章

  1. 2022-2028年中国儿童保健品行业市场研究及前瞻分析报告
  2. SILK 的 Delay Decision 和 Dither
  3. java集合类——Stack栈类与Queue队列
  4. java日期大小比较(亲测)
  5. 拼多多11.11:无定金、不预售,“好牌子、好实惠”底价直降
  6. android之XmlSerializer序列化XML(写入) android之XmlSerializer序列化XML(写入)...
  7. Androrid Studio Debug Warning:debug info can be unavailable
  8. 使用R包qpdf用一行代码将多个pdf合并为一个pdf
  9. 哪些版本linux支持arm,腾讯QQ Linux版本正式回归 支持x64 ARM64 MIPS64架构
  10. spark安装以及hive on spark和spark on hive 的配置
  11. Unity中实现列表中元素随机排序
  12. 五笔字型初学者常见问题答疑
  13. 吴翰清:云计算安全是“皇帝的新装”么?
  14. 键盘没有Home键和End键的完美解决办法
  15. 幻方解法之horse法生成奇阶幻方
  16. Java基础知识(八) Java平台与内存管理
  17. 2019CVPR单目深度估计综述
  18. KUKA youbot机械臂与Moveit工具包(2)
  19. 知识总结--性能优化总结(摘录+转载)
  20. IDEA中java文件出现小黄色的J

热门文章

  1. 用MSYS2安装mingw
  2. Echarts不显示X轴Y轴网格线
  3. 使用PyQT进行可视化编程
  4. 微信公众号支付,iframe跨域
  5. 第106篇 Compound 中的 Governance
  6. PCB相关知识-PCB各层的用途
  7. 各种音视频编解码学习详解 h264 ,mpeg4 ,aac 等所有音视频格式
  8. “数学界的诺贝尔奖”出炉,4人获奖
  9. 诺贝尔经济学奖计算机,诺贝尔经济学奖获得者克鲁格曼曾经指出:在经历数千年之后,现代社会运用大型计算机,对成千上万的因素进行...
  10. Editor.md安装使用(markdown)