WebX框架解析及使用教程
WebX框架是阿里巴巴集团开发的,它建立在SpringEx的基础上,具有超强的扩展能力。
结果:自动搜索/WEB-INF目录下的XML配置文件,并创建级联的Spring容器。
/WEB-INF/webx.xml->/WEB-INF/web-app1.xml->/WEB-INF/webx-app2.xml
添加方式:
四、Webx响应请求
Webx响应请求的流程:
(1)WebxFrameworkFilter接收请求
(2)WebxRootController创建和处理request context,路由到子应用,并提供处理异常、开发模式功能。
(3)WebxController进行apps' pipeline
当一个HTTP请求到达时,WebxFrameworkFilter接收请求的模板配置(/WEB-INF/webx.xml)如下:
为什么使用filter而不是servlet?如果webx发现某个请求不应该由webx来处理,就会把控制“返还”给原来的控制器,而Servlet不具备“返还控制”的机制。
RequestContext对象的标准模板如下:
五、Webx Turbine
它的基本准则是:约定胜于配置,即:工程师只需要根据一定的规则,将模板放在指定的目录、按照预定的方式命令module(也就是screen、action、control等),就不再需要额外的配置。
Turbine的基本页面组成为:
(1)Screen:代表页面的主体
(2)Layout:代表页面的布局
(3)Control:代表嵌在screen和layout中的页面片段
页面布局图如下:
六、Webx Turbine处理页面的基本流程
Webx Turbine的处理流程被定义在pipeline中,pipeline推荐的配置如下:
流程具体解读如下:
(1) 分析URL::用户访问的主页target
(2) 进入choose,进行多重分支选择
(3)performAction执行action
(4) performTemplateScreen查找并执行screen
假设target为xxx/yyy/zzz,那么Webx Turbine查找screen模块的顺序为:
Screen.xxx.yyy.zzz
Screen.xxx.yyy.Default
Screen.xxx.Default
Screen.Default
(5) 渲染模板
首先映射成screen template,以及映射成layout template
假设target为xxx/yyy/zzz,那么Webx Turbine会查找下面的screen模板:/templates/screen/xxx/yyy/zzz。Screen模板如果未找到,就会报404 Not Found错误。 找到screen模板以后,Webx Turbine还会试着查找下面的layout模板:
/templates/layout/xxx/yyy/zzz
/templates/layout/xxx/yyy/default
/templates/layout/xxx/default
/templates/layout/default
Layout模板如果找不到,就直接渲染screen模板;如果存在,则把渲染screen模板后的结果嵌入到layout模板中。
页面授权:根据登录用户的权限,阻止或许可用户访问特定的页面。
日志和审计:记录和检查用户访问WEB应用的情况。
图片转换:改变图片的格式、精度、尺寸等。
页面压缩:压缩页面内容,加快下载速度。
本地化:显示本地语言和风格的页面。
XSLT转换:对XML内容进行XSLT转换,使之适用于多种客户端。
高速缓存:高速缓存页面,提高响应速度。
使用方法:
Webx提供了Request Contexts服务以及Pipeline作为对Filter功能缺陷的补充,作用分别如下:
(1) Request Contexts:负责访问和修改request和response,但不负责改变应用执行的流程
(2) Pipeline:提供应用执行的流程,但不关心和request和response
八、Spring中依赖注入的限制
小作用域的对象不能被注入到大作用域的对象。你不能把request和response作用域的对象注入到singleton对象中。前者在每次WEB请求时,均会创建新的实例,每个线程独享这个request/session作用域的对象;后者是在Spring初始化或第一次使用时被创建,然后被所有的线程共享。假如把某个request/session作用域的对象意外注入到singleton对象中,将可能产生致命的应用错误,甚至导致数据库的错乱。
在Webx中,这样做是可以的!奥秘在于Request Contexts服务对上表所列的这些短期对象作了特殊的处理,使它们可以被注入到singleton对象中。事实上,被注入的只是一个“空壳”,真正的对象是在被访问到的时候才会从线程中取得的。
九、buffered缓存response中内存的实现原理
Webx支持用layout/screen/control等部件共同构成一个页面。其中,每个layout可包含一个screen和多个control,每个screen可包含多个control,每个control还可以在包含其他的control。
一般页面比如通过out.println("
hello world
");就直接输出了,为了还能分开然后再一起显示呢。例如,一个screen中包含了一个control,那么screen可以获得它所调用的control的完整的渲染内容。
这个玄机就是靠来实现的。改变了response的输出流,包括output stream和writer,使写到输出流中的内容被暂存在内存中。当需要时,可以取得缓存中的所有内容。
Buffered机制会延迟服务器对用户的响应,所以某些场景需要关闭该服务。
十、表单验证的模板
该文件form.xml位于WEB-INF的每个子目录中,用于表单的验证
十一、Eclipse中开发Webx应用
(1)Webx工程目录结构
src\main:存放开发代码
src\test:存放开发自测代码,如单元测试代码
main\java:存放java代码
main\resources:存放资源定义文件
main\webapp:web应用配置文件
webapp目录包含(举例):
1)子应用模板目录admin、home、store、user,每个模板目录又由layout、control、screen三个子目录组成,包含对应的模板文件(.vm文件)
2)通用模板目录common
3)WEB-INF目录
这是java web应用必备的配置目录,包含了web.xml(java web应用必备的配置文件)、webx.xml(webx配置文件)、日志配置文件(log4j.xml、logback.xml)、子应用配置文件(webx-admin.xml、webx-home.xml、webx-store.xml、webx-user.xml);另外还有对应每个子应用的文件夹,用于存放form定义文件(form.xml)和访问权限定义文件(access.xml);common文件夹中的pipeline.xml和pipeline-exception.xml定义了相关的管道操作流程。
(2)页面获取JAVA层的数据PullTool
在velocity模板中使用pulltool方便我们进行页面输出内容的控制,组织页面的展示,或者是直接取得web层相关的一些对象,直接在vm中调用。由页面拉动业务逻辑,获取并控制需要展示的内容,而非应用程序推动push,这符合webx的页面驱动的模式。
1)是否启动pull服务:
在webx.xml文件中进行总的控制
2)指定获取数据的JAVA处理模块
指定了获取的数据位于com.xx.web.ui.module.*
3)在/xx/templates/screen下创建testMain.vm(M需要大写)文件,内容如下:
4)在/src/main/java/com/web/ui/module/screen下创建文件TestMain.java(webx会自动匹配同名的文件),内容如下:
package com.yunos.tv.openbase.web.ui.module.screen;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.alibaba.citrus.turbine.Context;
public class TestMain {
public void execute(HttpServletRequest request, HttpServletResponse response, Context context) throws Exception{
context.put("name", "Hugh");
}
}
form.xml文件:
WebX框架解析及使用教程相关推荐
- Webx框架:Spring Schema 和 Spring Ext
webx诞生的原因是当时市面上没有好用的web框架.如今的Web框架有非常多.然后它们背后的思想都是相似的,并且越来越趋同. Spring Schema 在传统的spring中,配置bean时须要手动 ...
- Java Spring框架入门详解教程【多测师_何sir】
Spring框架入门详解教程 spring概述 spring结构 spring IOC spring DI spring概述 Spring是一个非常活跃的开源框架, 它是一个基于IOC和AOP来构架多 ...
- webx 框架入门一
来阿里实习一个多月了,被拉着直接上新项目.由于新项目要使用webx,webx框架是淘宝的框架,比较厚重又复杂,但是性能毋庸置疑(毕竟每年双十一都挺过来了).由于webx文档较少,基本都是阿里内部使用. ...
- AlexeyAB DarkNet YOLOv3框架解析与应用实践(六)
AlexeyAB DarkNet YOLOv3框架解析与应用实践(六) Tiny Darknet 听过很多人谈论SqueezeNet. SqueezeNet很酷,但它只是优化参数计数.当大多数高质量的 ...
- AlexeyAB DarkNet YOLOv3框架解析与应用实践(五)
AlexeyAB DarkNet YOLOv3框架解析与应用实践(五) RNNs in Darknet 递归神经网络是表示随时间变化的数据的强大模型.为了更好地介绍RNNs,我强烈推荐Andrej K ...
- AlexeyAB DarkNet YOLOv3框架解析与应用实践(四)
AlexeyAB DarkNet YOLOv3框架解析与应用实践(四) Nightmare 从前,在一所大学的大楼里,西蒙尼亚.维达第和齐瑟曼有一个很好的主意,几乎和你现在坐的大楼完全不同.他们想,嘿 ...
- AlexeyAB DarkNet YOLOv3框架解析与应用实践(三)
AlexeyAB DarkNet YOLOv3框架解析与应用实践(三) ImageNet分类 您可以使用Darknet为1000级ImageNet挑战赛分类图像.如果你还没有安装Darknet,你应该 ...
- AlexeyAB DarkNet YOLOv3框架解析与应用实践(二)
AlexeyAB DarkNet YOLOv3框架解析与应用实践(二) 版本3有什么新功能? YOLOv3使用了一些技巧来改进训练和提高性能,包括:多尺度预测.更好的主干分类器等等.全部细节都在我们的 ...
- AlexeyAB DarkNet YOLOv3框架解析与应用实践(一)
AlexeyAB DarkNet YOLOv3框架解析与应用实践(一) Darknet: C语言中的开源神经网络 Darknet是一个用C和CUDA编写的开源神经网络框架.它速度快,易于安装,支持CP ...
- yolov3(三:算法框架解析)
应用见: https://blog.csdn.net/Darlingqiang/article/details/103889245 https://blog.csdn.net/Darlingqiang ...
最新文章
- 如何读取jar包外的properties和log4j.properties等配置文件
- Flash as3 以鼠标点为中心缩放效果
- [css] 写出在不固定宽高的元素在固定高度的情况下水平垂直居中的方法
- phpcmsV9 如何开启“会员注册” - 教程篇
- Linux下的防火墙管理(包含图形和命令、伪装和转发)
- 【动态规划】多重背包问题:P1077摆花
- 微信小程序 自定义顶部导航栏标题 navigationStyle
- 记录jquery的ajax
- 用python建立三元一次方程_python简单的三元一次方程求解实例
- python中英文混输对不齐_python如何处理中英文混排最长公共前缀问题
- 2019年中秋读者福利,你中奖了吗??
- Linux获取管理员权限的相关命令
- 基于栈的字节码解释执行引擎图解
- 打印5列五颗星_可打印丨50组“数学顺口溜”+大九九乘法口诀表!给孩子收藏!...
- 初学者小白怎么画猫咪主题插画?该怎么去注意其中的细节?
- 三星n8000平板_三星n8000拆机方法介绍【图解】
- 解空间树及其相关算法
- hihoCoder #1498 : Diligent Robots【数学】
- 读书笔记--一个人的朝圣
- SayAsYouWish:Fine-grained Control of Image Caption Generation with Abstract Scene Graphs ---- 论文阅读笔记