webx诞生的原因是当时市面上没有好用的web框架。现在的Web框架有很多,然后它们背后的思想都是相似的,而且越来越趋同。
Spring Schema
在传统的spring中,配置bean时需要手动去指定具体的实现类是什么,参数有哪些。这样开发者需要记住具体的实现类、参数名称、含义等,会带来很大的记忆负担。为了解决这个问题,SpringSchema出现了。它的解决办法是将所有的参数转换成标签。标签是可以通过XML Schema定义的。这样只需要记忆标签的名字即可。标签的名称一般都很短,因此减轻了开发者的负担。
在传统的Spring中,可能一个组件需要像下面这样配置。它使用了property、map、entry等标签,这些标签都不是重点,重点在于name、key、value-ref这些属性。
<bean id="resourceLoadingService" class="com.alibaba...ResourceLoadingServiceImpl"> <property name="mappings"> <map> <entry key="/file" value-ref="fileLoader" /> <entry key="/webroot" value-ref="webappLoader" /> </map> </property> </bean>
为了解决这个问题。SprintExt引入了Spring Schema。组件的配置就成了下面这样。标签的名称都是重点。还有一个好处就是,标签的格式可以在XML Schema中定义,能使IDE更加智能。
<resource-loading id="resourceLoadingService" xmlns="http://www.alibaba.com/schema/services/resource-loading"> <resource pattern="/file"> <file-loader basedir="${user.home}" /> </resource> <resource pattern="/webroot"> <webapp-loader /> </resource> </resource-loading>
SpringExt
SpringExt扩展了Spring Schema,它能让XML文件提供更多的扩展性。
SpringExt中有几个重要的概念:
- 扩展点:相当于标签的命名空间。
- 捐献:相当于命名空间的具体实现。
- 组件:组件可以被别的模块扩展,也可以扩展别的模块。比如ResourceLoadingService就是一个组件,这个在后面还会有介绍。
Webx容器。它完全兼容Spring的容器,因此语法和Spring完全一样。Webx框架在启动时自动加载WEB-INF/webx.xml和WEB-INF/webx-*.xml文件。其中webx-*.xml是子容器,它们都继承了webx.xml。
日志。日志的配置需要在web.xml中加入一个listener:
<listener> <listener-class>com.alibaba.citrus.logconfig.LogConfiguratorListener</listener-class> </listener>
页面驱动。在传统的开发流程中,视觉设计师设计出模板之后无法直接看到效果,需要等到Action代码编写完成才能看到。而页面驱动的理念中,视觉设计师在做完页面之后可以直接看到效果,而且可以在页面中直接使用框架提供的一些工具,比如页面跳转,验证登陆等。webx框架还提供了一系列工具,名为pull tools,它可以在页面中被调用,而且可以按需加载。比如表单的工具就是一种 Pull tools,可以用表单工具判断一个字段是否正确,错误消息是什么。
规则映射。在webx中,URL首先解析成Target,Target再由Pipeline进行解析。Pipeline解析可以得到模板名。模板名可以是Layout,可以是Module。一个Layout中可以包含Control和Screen。Control可以有多个,Screen只能有一个。Control相当于页面中的一个控件。