003-Lift基础

  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>
    ... filter setup here ...
    <init-param>
        <param-name>bootloader</param-name>
        <param-value>yangbajing.setup.MyBoot</param-value>
    </init-param>
</filter>

需要注意的是 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
  • 处理模板文件,包括插放其它模板文件,合并内容,执行snippet方法

通知、警告和错误信息

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

URI重写

分发函数

HTTP重定向

Cookie

Session和Request状态

你可能感兴趣的:(003-Lift基础)