六月中就要去阿里巴巴实习了,部门使用的web框架是Webx,喜大普奔的发现Webx是开源的,所以认真学习一下。主要参考指导手册
Webx总体介绍
设计理念
这里有许多框架设计的真知灼见!
一个框架的好坏,往往并不是由他所实现的具体功能好坏所决定的,而是由其所使用的基础框架的好坏所决定的。
现在的软件设计都提倡模块化,扩展性,典型的例子就是Spring框架。
SpringExt
Webx Framework
Webx Framework才真正涉及WEB技术,它只负责一系列基础性的任务,并提供pipeline机制以定制WEB处理流程。
初始化Spring容器
<listener-class>com.alibaba.citrus.webx.context.WebxContextLoaderListener</listener-class>
以WebxContextLoaderListener代替Spring的ContextLoaderListener
初始化日志系统
Webx响应请求
增强request、response、session
调用pipeline进行进一步的处理
详细流程
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="
http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd ">
...
<filter>
<filter-name>webx</filter-name> <filter-class>com.alibaba.citrus.webx.servlet.WebxFrameworkFilter</filter-class> <init-param><param-name>excludes</param-name>
<param-value><!-- 需要被“排除”的URL路径,以逗号分隔,前缀!表示“包含”。例如/static, *.jpg, !/ uploads/*.jpg --></param-value></init-param><init-param><param-name>passthru</param-name>
<param-value><!-- 需要被“略过”的URL路径,以逗号分隔,前缀!表示“不要略过”。例如/myservlet, *.jsp --></param-value></init-param></filter><filter-mapping><filter-name>webx</filter-name><url-pattern>/*</url-pattern></filter-mapping>
...
</web-app>
如上所示,所有的请求都会经过WebxFrameworkFilter的处理
详细处理流程如下图:
如上图所示,具体的处理流程由WebxRootController和WebxController决定。
定制Webx Framework
- 定制WebxRootController
WebxRootController是被所有子应用所共享的逻辑,WebxRootController的默认处理是增强request、response、session等 - 定制WebxController
WebxController和具体的子应用相对应。WebxController默认的逻辑是调用Pipeline的处理
Webx Turbine
页面驱动
约定胜于配置
页面布局
页面一般由Screen、[Controller]、[Layout]部分组成
处理页面的基本流程
<services:pipeline xmlns="http://www.alibaba.com/schema/services/pipeline/valves">
<!-- 初始化turbine rundata,并在pipelineContext中设置可能会用到的对象(如rundata、utils),以便valve取得。 --><