webx执行的流程
首先,根据web.xml文件中的映射,*.htm被映射到Webx Controller Servlet,因此Webx Controller Servlet会被激活来处理这个请求,而Webx Controller Servlet制作了一件事,就是执行pipeline.所谓pipeline即管道,它是由一个或多个“阀门valve”构成的。管道是由PipelineService来创建并管理的。
$screen_placeholder--这个标记将被screen的内容所取代。
$control.setTemplate("")--这个标记竟被control的内容所取代,control是一种可重用的页面片段。
查找布局的规则:
刚才我们创建了default.vm布局。需要强调的是,这个布局不仅仅对hello.vm有效,而且对所有页面都有效。不信的话,你可以在templates/screen目录下创建一个新的screen试试看。不需要重启机器,你就可以看到效果!所有的页面现在都被“框”在这个布局里面了。
加入我的大部分页面的布局是相同的,但是有一两个页面例外,我该怎么办呢?Wbx的布局规则很灵活,足够应付大部分的场景。假如我的screen模板名字为/xxx/yyy/hello.vm,那么webx将依次查找下面的layout模板:
1. /xxx/yyy/hello.vm (如果找不到,尝试下一个)
2. /xxx/yyy/default.vm (如果找不到,尝试下一个)
3. /xxx/default.vm (如果找不到,尝试下一个)
4. /default.vm (如果找不到,尝试下一个)
5. (如果上面所有都找不到,就显示不带layout的screen)
如果你希望对/hello.vm指定layout,你可以在templates\layout目录下,为其特别创建一个和screen同名的layout模板就可以了。Webx假设同一目录下的模板,在功能上是相关的,因此布局也是相似的。因此你不仅可以在layout根目录下设置default.vm,也可以在各级子目录下设置default.vm。
页面驱动:
和其他大所属的Web框架不同,Webx是以页面为驱动的。和普通HTML页面不同的是,WebX页面是真正的动态页面。在Velocity中有许多内置的工具,下面是页面中可用的工具:
工具名 类名 作用域 说明
$arrayUtil ArrayUtil 全局 静态工具类,参见相应类的API文档。
其中最常用的当属$stringUtil和$stringEscapeUtil。
例如:## 判断字符串为空串
#if ($stringUtil.isEmpty($var)) … #end
## 进行HTML编码
<input type=”hidden” name=”myField”
value=”$stringEscapeUtil.escapeHtml
($var)”/> ## 进行JavaScript编
<script language=”JavaScript”>
var myvar="$stringEscapeUtil.escapeJavaScript ($var)";
</script>
$classLoaderUtil ClassLoaderUtil 全局
$classUtil ClassUtil 全局
$enumUtil EnumUtil 全局
$exceptionUtil ExceptionUtil 全局
$fileUtil FileUtil 全局
$localeUtil LocaleUtil 全局
$mathUtil MathUtil 全局
$messageUtil MessageUtil 全局
$objectUtil ObjectUtil 全局
$streamUtil StreamUtil 全局
$stringEscapeUtil StringEscapeUtil 全局
$stringUtil StringUtil 全局
$systemUtil SystemUtil 全局
$control ControlTool Request 创建control,例如:
$control.setTemplate(“header.vm”)
$control.setModule(“myControl”)
$form FormTool Request 处理表单
$page HtmlPageAttributeTool Request 设置页面属性
$rundata RunData Request 取得request、response相关的数据,例如:
$rundata.parameters.id 取得?id=123参数的值
$uri URIBrokerTool Request 生成URL,后文会讲到
所谓全局作用域,意思是这种工具仅当系统启动时被初始化,随后被所有页面重复使用,这种工具必须是无状态的,与全局作用域相对的,是Request作用域。这种作用域的工具会在每次请求时创建和初始化,因此它可以保存与当前请求相关的数据,但这种工具不能被多个请求共享。