我写的这个框架大致模仿webwork的原理。我只用过webwork一个框架,当然模仿它了^^
主要是为了学习,苦思冥想写出来了。把它帖出来,大家多给我一些意见。
在我的框架里面出现大量的sophie是我的名字,呵呵,女性写的代码命名也比较女性化吧*^_^*
?
Sophie的web框架
主要思路
Init配置文件-》dispatcher调度-》invocation执行action=》result处理结果,显示页面
?
主要功能部分
1.?????? 调度器,在启动服务的时候调用init方法,初始化action的配置文件。保存servlet的内容到SophieContext 中dispatcher
2.?????? 和resultConfiguration模型,把配置文件中的action信息,封装到一个configration类中。多个action信息组成一个map。每个action的result信息,封装到resultConfiguration中,多个result组成一个map.configuration
3.?????? 类。逻辑的东西可以写在action中。Action类从servlet中分离出来。专注与逻辑本身。提供给框架的使用者。action
4.?????? 保存context的类。里面有个静态的map。SophieContext
5.?????? 执行actionSophieInvocation
6.?????? 处理action执行的结果,根据resultConfiguration里的配置,转向显示页面。sophieResult
7.?????? 标签,可以在页面上用标签调用actionActionTag action
代码详细说明
1)SophieDispatcher是一个servlet,init()方法中初始化一些配置文件。
service()方法中执行action
?
SophieDispatcher 代码
?
2)SophieContext 保存servlet中的信息,如servletContext,requet,response
java 代码
?
3)Configuration, ResultConfiguration两个类是两个model,封装备置文件中action的属性信息
java 代码
?
4)配置文件action.properties
java 代码
- test|com.sophie.action.TestAction||success--/hello.jsp ??
- testInclude|com.sophie.action.TestAction|testParameter|success--/includePage.html??
?
5)action的执行 这里用反射
java 代码
?
7) result类 处理输出
java 代码
1 楼
hgq0011
2007-05-10
LZ还挺有钻研精神的,值得学习。我用过好几个MVC的框架,可就没有自己DIY一个。
2 楼
dovecat
2007-05-10
好长啊。支持下...一会细看
3 楼
zyl
2007-05-10
能先给个类图,或者关系图也行,先从大概上给个轮廓,看代码毕竟有点累
4 楼
ecsoftcn
2007-05-11
<p>赞一个先!</p>
<p>?</p>
<p>不断的模仿、练习必能提高个人的设计水平。</p>
<p>?</p>
<p>为演示Guice框架的使用,我也设计了一个简单的MVC,不过和楼主的相比就逊色很多,有时间我们可以交流一下设计思想,共同提高。</p>
<p><a href='http://www.iteye.com/topic/78365'><font size='4' color='#ff0000'><strong><em>AromaRI</em></strong></font></a></p>
<p>?</p>
<p>不断的模仿、练习必能提高个人的设计水平。</p>
<p>?</p>
<p>为演示Guice框架的使用,我也设计了一个简单的MVC,不过和楼主的相比就逊色很多,有时间我们可以交流一下设计思想,共同提高。</p>
<p><a href='http://www.iteye.com/topic/78365'><font size='4' color='#ff0000'><strong><em>AromaRI</em></strong></font></a></p>
5 楼
一半是鱼
2007-05-11
zyl 写道
能先给个类图,或者关系图也行,先从大概上给个轮廓,看代码毕竟有点累
我不会画类图
给一个文字描述
Sophie的web框架
主要思路
Init配置文件-》dispatcher调度-》invocation执行action=》result处理结果,显示页面
主要功能部分
1. dispatcher 调度器,在启动服务的时候调用init方法,初始化action的配置文件。保存servlet的内容到SophieContext 中
2. configuration和resultConfiguration模型,把配置文件中的action信息,封装到一个configration类中。多个action信息组成一个map。每个action的result信息,封装到resultConfiguration中,多个result组成一个map.
3. action 类。逻辑的东西可以写在action中。Action类从servlet中分离出来。专注与逻辑本身。提供给框架的使用者。
4. SophieContext 保存context的类。里面有个静态的map。
5. SophieInvocation 执行action
6. sophieResult 处理action执行的结果,根据resultConfiguration里的配置,转向显示页面。
7. ActionTag action标签,可以在页面上用标签调用action
6 楼
shaucle
2007-05-11
爱专研技术的MM还真不多. ^_^
你的那个只是个front controller的一部分,
Context和Invocation那部分你可参考xwork部分,如ThreadLocal
而且ww的一大核心是它的interception.
不过代码写得还不错.
你的那个只是个front controller的一部分,
Context和Invocation那部分你可参考xwork部分,如ThreadLocal
而且ww的一大核心是它的interception.
不过代码写得还不错.
7 楼
hgq0011
2007-05-11
你发的EMIAL收到,可能是我这边的网络有些问题,老是发送不成功,所以在这回复你,:)
我刚才抽了点时间仔细的看了你的源码,真的值得学习呀,:)
自己封装那些东西当然不错了,放在一个全局的静态变量中,避免了每次调用都要开辟内存空间。是否可以在调用的时候,判断一下MAP是否生成了,如果生成了就不用去调用那些获取属性文件中的类。
我刚才抽了点时间仔细的看了你的源码,真的值得学习呀,:)
自己封装那些东西当然不错了,放在一个全局的静态变量中,避免了每次调用都要开辟内存空间。是否可以在调用的时候,判断一下MAP是否生成了,如果生成了就不用去调用那些获取属性文件中的类。
8 楼
一半是鱼
2007-05-11
hgq0011 写道
是否可以在调用的时候,判断一下MAP是否生成了,如果生成了就不用去调用那些获取属性文件中的类。
调用那些获取属性文件中的类是在服务启动的时候调用的,
因为是写在servlet的init方法里面,所以只会被调用到一次的:)
我现在觉得SophieDispatcher类里面 service方法中存入静态map里的一些对象,在并发的环境下是会冲突。我现在在考虑怎么改进这块
9 楼
umbrella
2007-05-11
map改用hashtable或用collections.synchroized方法设置下,实在不行用同步锁住。
10 楼
shaucle
2007-05-11
一半是鱼 写道
hgq0011 写道
是否可以在调用的时候,判断一下MAP是否生成了,如果生成了就不用去调用那些获取属性文件中的类。
调用那些获取属性文件中的类是在服务启动的时候调用的,
因为是写在servlet的init方法里面,所以只会被调用到一次的:)
我现在觉得SophieDispatcher类里面 service方法中存入静态map里的一些对象,在并发的环境下是会冲突。我现在在考虑怎么改进这块
ThreadLocal

//from seam
public static void beginRequest(ExternalContext externalContext) {
Contexts.eventContext.set(
//from jsf
public static FacesContext getCurrentInstance()
{
return (FacesContext)_currentInstance.get();
}
11 楼
zyp731
2007-05-22
女人就是女人啊,就爱干一些没用的事.现在已经有好多框架了,为什么还要自己去写呢?而且你写的,肯定不如struts好.有时间可以在公司的架构上下功夫.
12 楼
sunsy
2007-06-26
读书加工作的这几年,还真是头次见这么热衷于技术的MM,支持下。

相关解决方案
- MySql+WebWork+jboss数据库乱码解决办法
- WebWork 提供了两种级别的异常信息,分别是actionError和fieldError
- Webwork 文件上传的有关问题
- webwork+spring+ibatis容易实例
- webwork 批改图片报错
- webwork+spring+hibernate出现 Error listenerStart异常!
- WebWork 二 : Select标签
- Webwork+Extjs怎么实现数据的交互
- freemarke-webwork-spring集成的特性
- webwork 中文乱码有关问题 表单字段验证 标签的用法
- webwork in action 学习札记(一)
- webwork in action 学习札记(二)
- 求教Spring+Webwork+H上的Ajax方法
- WebWork 二 Migration Strategies(转)
- struts2、webwork 循环的应用,实现for功能
- WebWork 应用 ajax 提交
- 小弟我的webwork小例子中总是提示小弟我找不到 /webwork
- webwork+spring+hibernate上用spring aop 做日志
- webwork+cas认证在表单提交后乱码有关问题解决心得
- webwork freemarker 调整后的使用方法
- webwork action传递参数乱码解决方法
- webwork 配置文件讲授
- WebWork.Spring.Hibernate整合开发网络书城-学习遇到的异常
- WebWork.Spring.Hibernate整合开发网络书城-学习遇到的异常2
- WebWork.Spring.Hibernate整合开发网络书城-学习遇到的异常3
- WebWork.Spring.Hibernate整合开发网络书城-学习遇到的异常4
- webwork select标签 关于男女显示有关问题
- Spring+Webwork+iBatis 结合
- webwork.properties的属性配备(转载)
- struts2 struts1 webwork 差别(转)