Webx 浅析



Webx 浅析。

Webx是什么?

在本文中的Webx都是指webx3.0.11。

从本质上讲,Webx可以做为一个spring容器来使用,只要是spring允许的一切,webx都能做。Webx的特色功能还是在web上面,不仅仅是作为spring容器来使用,而是一套完整的扩展性强的MVC框架。

一、框架选型

Webx以spring框架为核心,webx3.0.11的框架结构是这样子,spring3.0.7,包含的spring模块有:core,aop,mvc,jdbc,orm,transaction。日志模块依赖slf4j和logback。模板引擎默认依赖3种做为展现层使用:velocity,freemark,jsp。json框架使用fastjson。还有很多其他框架的依赖。

框架选型是Webx的基础,在架构选型的基础上,Webx以Spring为中心,将其他框架的功能进行封装,以服务的形式展现给开发者,只需要配置webx.xml,就可以使用SpringExe功能。

从Web开发的角度看Webx,那一定会用到展现层的技术,在这里Webx是集成了Servlet,但在这里已经不直接使用Servlet页面做开发了,而是配置screen,用Filter拦截请求,有对应的Java类进行逻辑处理,并响应页面信息。在这里,响应的信息也可以使用模板语言设计响应页面,Webx默认使用velocity模板做界面渲染,而不是JSP。

简单的说,Webx = Spring + 服务组件 + Velocity。

二、主体功能

从Web应用的角度开看Webx容器,在web的xml里面配置的中,应用初始化伴随着两个东西的初始化,一个是日志系统,另外一个是Spring容器。这两个功能则承载着Webx的主体功能。

三、日志系统

日志系统有两种搭配,推荐使用的搭配是sfl4j + logback,还有一种搭配是sfl4j + log4j。这两个框架对比那个相对比较好呢?官方上讲,logback延续了log4j,logback的作者也是log4j的作者,功能上延续了log4j并对它做了增强,并且完全拥抱sfl4j,它被作者认定为log4j的继任者。

但是考虑到log4j在目前是使用量,webx也提供了sfl4j + log4j的方案。毕竟如果已有的应用大量使用log4j,要用户切换到logback上是要花费相当的代价的,为了更好的兼容性,webx依然提供了log4j的选择。

四、SpringExt

Spring无疑使Webx的大靠山,依托于Spring,Webx设计了以IOC容器为中心的服务体系,几乎Webx的所有功能都是暴露成服务Bean,也就是Webx的服务组件。在Bean的基础上,所有的服务都是可配置的,开发者要做的不再是看Java dog文档写调API写代码,而是配置webx.xml,用配置替代代码。


这样做的好处是,降低了用户的使用门槛。如果是代码编程的话,开发者要关心对象在哪里初始化,在什么时候释放资源,在应用的什么地方切入API,而这些细节是固定的,不需要用户关心。而Webx的服务其实已经实现了,用户在webx.xml中只需要配置相关的参数就可以很好的使用服务功能。当然配置也有它的缺点,比如当配置出现错误的时候难以定位和调试,配置意味着服务的功能是比较固定了,如果服务没有提供扩展,那主体功能就是无法修改的。

服务组件是Webx的亮点,主体功能都是以服务组件的形式暴露出来,有模板组件,管道组件,邮件组件,表单组件,上传组件,等等,这些组件服务只需要为webx.xml中配置,就可以使用。

由于组件量大,而且配置细节相当多,但是相关的参数说明在文档中和代码中都没有体现,那具体的配置怎么查呢?笔者发现,每一个组件会对应一个xsd文件,在这个xsd里面有详细的注释来说明每一个参数的配置,以及配置所提的具体功能。

五、MVC

依托于Spring,webx制定了一些约定的东西来简化应用开发的工程,提高应用开发的效率。

以module为一个独立模块,从资源上面讲分为.vm的模板资源和Java资源,两者之间可以互相映射也可以独立存在,一般Java类作为控制器,.vm模板资源作为展现层,这是纵向角度。

横向角度剖析有3中资源。第一,Screen可访问页面,一个screen映射一个URL;第二,Layout界面布局,充当一个HTML框架来被使用,使用在Screen中;第三,Control界面组件,可被重用的界面代码,可包含在Screen和Layout中。

MVC的实现在建立在RequestContext和Pipeline的基础上的。RequestContext负责Request,Response,Session 参数的传递和修改。

Pipeline负责控制流程。

从生命周期的顺序上面看,RequestContext在Pipeline前面,RequestContext的上下文参数和变量处理完成之后,再由Pipeline进行判断和校验,最后根据结果进行重定向。

六、模板引擎

和JSP比较,模板语言有两个优点。第一,更严谨的展现层和业务逻辑层分离。JSP页面是可以插入Java源代码的,这样做相对于展现层中耦合业务逻辑,不符合MVC的原则。第二,对界面设计人员更友好。比较严谨的分离更有利于前段开发者直接在.vm文件上面写CSS和JS代码。还有一点是,省略了JSP编译成Servlet类,模板语言的性能更忧。略有不足的是,现在很多IDE还没有一个比较好的Velocity的编辑器插件,使得开发人员要在最原始的文本编辑器上面写代码,没有语法提示和语法高亮。

模板引擎是在挂接在RequestContext的处理链中,由BufferedResponseImpl包裹HttpResponse,将模板的处理结果输出到内存中,最终由Servlet响应给用户。

总结,依托Spring自身强大的功能和对第三方框架友好的兼容性,立足于自主的MVC结构和大量的服务组件以及外围功能,提供给开发者更严谨的展现和逻辑分离以及更高的渲染性能,Webx无疑是一个优秀的框架。