博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
003-Lift基础
阅读量:7215 次
发布时间:2019-06-29

本文共 1934 字,大约阅读时间需要 6 分钟。

hot3.png

  1. Lift基础 ==============

本章讲简要Lift项目的目录结构和构建它所需要的一些基础配置

进入Lift

首先看看一个简单的Lift应用的目录结构:

.├── main│   ├── resources│   │   └── props│   ├── scala│   │   ├── bootstrap│   │   │   └── liftweb│   │   └── code│   │       ├── lib│   │       └── snippet│   └── webapp│       ├── images│       ├── templates-hidden│       └── WEB-INF

Lift处理请求的第一步的拦截HTTP,这由一个 net.liftweb.http.LiftFilter 来处理。只需要在 web.xml 的配置下就可以了。

在Lift中,程序是从 bootstrap.liftweb.Boot.boot() 开始启动的。而在 webapp/templates-hidden 目录下放置的是页面模板代码。

Boot类

启动Lift应用时,如果在接收请求处理前想做一些事情。比如建立站点菜单SiteMap, URI rewrite, 自定义分发(dispatch),classpath搜索等,Lift Servlet会先执行 bootstrap.liftweb.Boot 类中的 boot 方法。当然,也可以在 LiftFilterbootstrap 启动参数中指定自己的 Boot 实例,如:

... filter setup here ...
bootloader
yangbajing.setup.MyBoot

需要注意的是 MyBoot 必须是 Bootable 的子类并实现其 boot 方法。该方法运行一次,要以把 其它类库的初始化调用放在此处。

Class查找

Boot类中将设置在何处查找View、Snippet及Comet。 LiftRules.addToPackages 方法将告诉Lift 在哪些包下查找指定类。若指定 yangbajing.learn 包,Lift将在 yangbajing.learn.snippet 中查找Snippet,在 yangbajing.learn.view 中查找Comet,在 yangbajing.learn.comet 中查找Comet。

Lift中的主要对象

这里先简要说说在Lift编程中经常使用的几个对象

  1. S对象

net.liftweb.http.S 对象表示当前请求的状态(Stateful),用于获取客户端的请求信息和发送给客 户端的响应信息。也用于通知、cookie管理、本地化/国际化和重定向。

  1. SHtml

net.liftweb.http.SHtml 对象的主要用途是定义生成HTML的函数,可用于生成表单(form)中的一般 元素,以及Ajax和JSON元素。

  1. LiftRules

net.liftweb.http.LiftRules 对象用于处理几乎所有的Lift全局配置。

渲染流程

Lift把HTTP请求转换到响应的的流程简单如下:

  • 完成所有配置好的URI重写
  • 执行符合匹配的自定义dispatch分发函数,分为有壮态和无状态的分发
  • 完成Comet和Aajx请求的自动处理
  • 守成SiteMap的安装和匹配。SiteMap不仅提供全站点的菜单,也提供安全控制。URI重写和其它自定义功能
  • 定位用于请求的HTML模板,有3个机制:
    1. 检查 LiftRules.viewDispatch RulesSeq 看是否有自定义的分发规则
    2. 如果没有匹配的 viewDispatch,定位匹配的模板文件
    3. 如果没有定位到匹配的模板文件,尝试基于隐式分发定位一个View
  • 处理模板文件,包括插放其它模板文件,合并<head />内容,执行snippet方法

通知、警告和错误信息

给用户以反馈信息很重要,应用需要能够通知用户错误消息,警告用户潜在问题……当系统状态改变时通知客户。 Lift为这些消息处理提供了统一的模型,包括静态内容和Ajax、Comet调用。

URI重写

分发函数

HTTP重定向

Cookie

Session和Request状态

转载于:https://my.oschina.net/yangbajing/blog/108340

你可能感兴趣的文章
Scala学习笔记-12
查看>>
eq与gt的妙用
查看>>
哈哈哈
查看>>
projectEuler pro10
查看>>
聚焦“云开发圆桌论坛”,大前端Serverless大佬们释放了这些讯号!
查看>>
数学模板
查看>>
c#中英文混合字符串截取指定长度
查看>>
.NetCore应用多个target framework
查看>>
pdfminer获取整页文本
查看>>
windows服务器多端口Redis安装步骤
查看>>
第二次作业心得
查看>>
爬虫——请求库之requests
查看>>
android子线程更新UI,与主Thread一起工作
查看>>
50行实现简易HTTP服务器
查看>>
细讲递归(recursion)
查看>>
进程和进程间通信
查看>>
微处理器的两种结构比较
查看>>
ORACLE EXPIRED(GRACE)
查看>>
Markdown应用样例
查看>>
多文本框的值得存放和赋值
查看>>