mint-mvc的由来

原创
2014/10/24 15:32
阅读数 1.4K

刚毕业时,我是在一家小外包公司做的,平时开发中用的都是php。毕业之前我用的最多的是java,我怕长期不学java会忘了,再加上工作的内容都是做一些不可持续性的工作,无聊的很。于是我决定找一个有趣,而且又能学习java的项目来做,那么就从mvc入手吧。

我开始想去看spring mvc的源码的,因为网上很多人都说spring mvc的代码值得学习,结果是我才扫了下spring mvc的源码目录我就放弃了——我觉对没耐心看这些东西,最终肯定是半途而废,浪费时间的。

于是我在网上搜“自己实现mvc”,找了好久,觉得一个叫做webwind的java mvc 框架很不错。webwind的作者是廖雪峰——同时也是《Spring.2.0核心技术与最佳实践》的作者。webwind实现上模仿了spring mvc,但是不完全,webwind还借鉴了struts的一些概念,比如webwind里的控制器叫action 而不是 controller,webwind还设计有拦截器(Interceptor)。

webwind并不强大,功能也不太全,因为它不是一个产品,而是一个学习作品,但是它具备了mvc的核心功能。我喜欢它支持restful风格的url,我更喜欢它只有3000多行的代码。webwind3000多行代码我看了1个多月,事后我安慰自己:好歹比玩一个月dota强多了。哈哈···

理解完webwind之后,我觉得其中的其中好多地方可以改进,就做了如下几个修改

  1. 改善了url参数的匹配方式,原来支持9个url参数(1-9),现在支持是个url参数(0-9)。修改之后主要带来两个好处。第一:支持url参数个数增多一个;第二:符合计算机的计数方式,代码中的很多数组不用做特殊的处理,简化了代码. 
  2. 对一些逻辑较复杂的类进行了拆分.
  3.  支持自动获取请求参数并封装到bean内,供action方法使用.支持的类型包括:数组类型,基础类型的包装类,普通model类(包含的属性暂时只支持基础类型及其包装类,而且必须有对应的setter方法).如果一个action方法包含了基础类型(非包装类),该方法就不是合法的action方法,这是为了避免反射调用action方法时基础类型参数不能被赋予null值得权宜之举. 
  4.  可以声明一个action方法只能处理特定方法的请求,只支持GET和POST方法. 

我把修改过的webwind改名叫"mint mvc"(因为我那段时间在用linux的 mint 发行版,而且很喜欢)。写了一篇很不负责任的博客之后,把mint mvc放到osc@git上开源了。开源之后的mint mvc基本上无人问津,再加上我换了一个公司,干的活没有那么无聊了,我就把mint mvc冷落了。

终于有一天,我认识了一个叫黄勇的人,他开发了一个叫smart的java web 开发框架,还为smart写了一系列博客。我非常喜欢他这种热情,也喜欢他的为人-自信、热情、智慧

我也想学习黄勇这种热情,我又想起了之前修改过出来的mint mvc。我觉得以前是为了学习和打发时间而修改代码,现在我何不试着把它做成一个实用的东西呢?

我开始着手修改mint mvc了,这时我又参考了黄勇的smart-mvc,学习了他的很多很好的设计,比如说url匹配方式、简单的orm(mint-mvc没用到orm,orm用到了另外一个工具上)

我觉得不够满意的是:

  1. 在action方法中获取一些常用的参数比较麻烦,比如HttpServletRequest,Session这样的变量
  2. 原有的拦截器(Interceptor)不够灵活和强大
  3. 原来一个action方法上要加太多的annotation
  4. 用guice管理action类的方法太麻烦(主要体现在给guice注册action很繁琐)
  5. 只用到guice的极少功能
  6. 。。。

最终加入如下修改:

  1. 添加方法的内置参数,如果方法中声明了某些类型的变量,那么在action方法被调用时,这些参数被自动初始化
  2. 拦截器可以配置url
  3. 将多个annotation合并
  4. 自己写工具扫描action类
  5. 去除guice
  6. 。。。

现在,我试图把mint mvc用起来。。。

接下来我还要干嘛呢?继续优化mint-mvc、干点活。对了,我还想写一个web ui框架,现在已经写了好几组件,到时候一个个开源出来,不知道你怎么看。

感谢@黄勇 ,@廖雪峰 ,@所有回答了我问题的人 。感谢@温少 的fast-json。

@王爵 我发现你的unique-web也参考了webwind。

项目地址:http://git.oschina.net/895925636/mint-mvc

收录地址:http://www.oschina.net/p/mint-mvc

博客地址:http://www.wemakers.net/home/blog?cate=1001

(完)

展开阅读全文
打赏
1
21 收藏
分享
加载中
水牛叔叔博主

引用来自“苍耳公子”的评论

对磊jfinal如何?
暂时不对磊
2014/10/27 22:49
回复
举报
对磊jfinal如何?
2014/10/27 22:16
回复
举报
支持一个,一起加油啊
2014/10/27 08:40
回复
举报
不错.
2014/10/24 21:50
回复
举报
水牛叔叔博主

引用来自“linapex”的评论

代码请贴上!
代码贴了会有点多,我的系列博文里有教程,osc@git上有全部源代码
2014/10/24 21:17
回复
举报
代码请贴上!
2014/10/24 20:59
回复
举报
zmf
更通俗易懂,赞
2014/10/24 20:43
回复
举报
该评论暂时无法显示,详情咨询 QQ 群:912889742
更多评论
打赏
8 评论
21 收藏
1
分享
返回顶部
顶部