我花了很多时间琢磨java的web框架,但很少有完全满意的,也许每个人对框架都有不同的理解和喜好。我写web应用,深感现有框架的不顺手,并且渴望掌握程序的控制权,所以诞生了写一个自己框架的念头。由于学java是半路出家的,基础并不扎实,而且势单力薄,思来想去,只能站在巨人的肩膀上,利用开源代码加以改进。我把我的框架姑且命名为fall,并发布到网络,没有哗众取宠的意思,只希望能有更多的人关注,建议,批评,指教。我想这就是开源的初衷吧
。
fall框架部分实现了jsf1.2、jsp2.1规范,部分抄袭了jsf-ri、seam和tomcat的代码。利用seam的状态管理功能以及实用的组件,构建一个相对较为完善的web框架。fall是web bean组件完善之前的一个过渡尝试。
fall部分实现了jsf1.2规范, 实际上主要是利用jsf的高度可插接机制,以及由于seam前端对jsf的紧密耦合而不得不为。fall摒弃了jsf的ui组件机制,增加了jsp的PageContext做为FacesContext的功能补充,部分实现jsp2.1的渲染,能兼容jsp tag。使用fall需要引入jsf-api1.2.jar,jboss-seam.jar等包。
fall的说明:
servlet容器启动依然由seam监听器完成状态初始化,初始化组件,
FacesServlet做为唯一的servlet,
重写FacesContextFactory,FacesContext等实现,实现PageContext
生命周期简化合并为三个
ApplyRequestValuesPhase
InvokeApplicationPhase
RenderResponsePhase
应用请求阶段会解析请求参数,并应用到model。可以使用jsf的转换器(验证器因为seam组件中一个hibernate validator致命NoClassDefFoundError bug暂时被注释掉了),推荐使用hibernate-validator进行model验证,出错的话根据配置(与页面动作返回null一致)导航。错误信息放到StatusMessages的子类ysq.fall.servlet.FallMessages(对话上下文)中,可以用jsp标签显示。把file参数以ysq.fall.servlet.FileParam实例映射到model。FileParam具有getFileName(),getContentType(),getFileSize(),getFileInputStream()等方法,可以使用hibernate-validator验证。请求参数保存到ysq.fall.servlet.FallParameters(对话上下文)中以便当转换和验证失败时保存表单数据。
注释掉了actionOutcome,actionMethod参数功能。增加actionPage参数(对应一个viewId)。fall将会解析pages.xml文件中与 actionPage 和 请求viewId 对应的page中的页面参数并执行页面动作。
渲染由FallRender实例完成,部分实现了jsp规范中的标签功能(省略了TagFileInfo相关功能,以后补上),PageContext贯穿其中。
纯html加标签、el,实现ajax很自然
拥有seam的页面流,工作流功能(未验证)。
保留seam事务、安全,
保留seam插接能力
...
慎重声明:该框架未经过系统化的测试,不适合直接做为商业应用的框架,只适合交流学习或改进后作为商业框架使用。
web bean展望:
web Bean 出来了,等待着jboss能将seam的很多实用组件单独包装成web Bean。
我在以前的文章中曾提到我的一些框架的思路,我想再在这里写下来
组件的状态:像seam和web bean一样的组件状态管理,当然在应用服务器上实现是最好的
组件:互不干扰,高插接性
总控制器servlet:大大简化代码和配置。
清晰的生命周期:主要是请求参数解析,执行action,调用渲染。
导航组件:高插接性
安全,页面流,工作流等附加功能组件
单独的渲染组件:纯html,可随意插接,支持可插接的el和jstl功能
有疑问请直接跟贴。
下载:http://code.google.com/p/fall-framework/
下载说明:版本为1.0,有两个压缩包,内容都是netbeans工程,一个是dist过的,一个没有dist过。
内部的test文件夹为简单测试,测试环境为tomcat6
相关连接:
http://afadgaeg.iteye.com/blog/297632
http://seam.group.iteye.com/group/topic/8363
http://afadgaeg.iteye.com/blog/287770
http://afadgaeg.iteye.com/blog/260887
1 楼
nmj1987
2009-03-07
佩服,作为学习研究是个好东西,不过这种框架是很难有出头之日的。
2 楼
afadgaeg
2009-03-07
呵呵,我自己用的,我最期待的是jboss能开发更多高质量的web bean 组件包
3 楼
landor
2009-03-08
王侯将相,宁有种乎。 加油
4 楼
afadgaeg
2009-03-08
惭愧啊,我是单独一个人想通过网络创业,以后很长时间可能都要折腾在写网站应用上了,不知什么时候才能重新接触框架源码,加油二字,让我难以自容啊