文档章节

mint-mvc的由来

水牛叔叔
 水牛叔叔
发布于 2014/10/24 15:32
字数 1396
阅读 823
收藏 21

刚毕业时,我是在一家小外包公司做的,平时开发中用的都是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

(完)

© 著作权归作者所有

水牛叔叔

水牛叔叔

粉丝 140
博文 80
码字总数 36149
作品 2
珠海
程序员
私信 提问
加载中

评论(8)

水牛叔叔
水牛叔叔

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

对磊jfinal如何?
暂时不对磊
苍耳道人
苍耳道人
对磊jfinal如何?
王爵nice
王爵nice
支持一个,一起加油啊
aspboy
aspboy
不错.
水牛叔叔
水牛叔叔

引用来自“linapex”的评论

代码请贴上!
代码贴了会有点多,我的系列博文里有教程,osc@git上有全部源代码
linapex
linapex
代码请贴上!
zmf
zmf
更通俗易懂,赞
我是lucas
牛逼~ 必须赞一个~
java mvc框架--mint-mvc

mint mvc是一个纯粹的mvc框架,是在servlet之上做了浅层包装而做出来的,它做的事情很简单:接收请求->封装参数->将请求交给开发者这编写的逻辑处理->返回处理结果。 mint-mvc有如下特点: ...

水牛叔叔
2014/10/22
2.2K
0
mint-MVC正式发布,官网正式上线

其实mint-mvc一年前就开发好了,但是一直都是直接丢在git上,也没几个人知道,正儿八经的用户只有自己一个。最近好多抱怨java不适合开发web2.0、难用的帖子,我就想把我开发一系列工具拿出来...

水牛叔叔
2015/05/10
23
0
tomener/TimoPHP

TimoPHP 一个简单、快速、规范、灵活、扩展性好的PHP MVC+框架。 官网:http://www.timophp.com/ 文档:http://www.timophp.com/document/ 我们的目标 做一个轻量级并支持大型应用开发的PHP...

tomener
2016/11/01
0
0
EasyJWeb

EasyJWeb是基于java技术,用于企业级Java Web应用程序快速开发的MVC框架。框架设计构思来源于国内众多项目实践,框架的设计及实现借鉴当前主要流行的开源Web框架,如Rails、 Struts、JSF、T...

匿名
2008/09/17
6.6K
0
MVC框架 EasyJWeb 2.0 发布

EasyJWeb是基于java技术,用于企业级Java Web应用程序快速开发的MVC框架。框架设计构思来源于国内众多项目实践,框架的设计及实现借鉴当前主要流行的开源Web框架,如Rails、 Struts、JSF、T...

小编辑
2011/02/19
3.5K
1

没有更多内容

加载失败,请刷新页面

加载更多

android6.0源码分析之Camera API2.0下的Preview(预览)流程分析

本文将基于android6.0的源码,对Camera API2.0下Camera的preview的流程进行分析。在文章android6.0源码分析之Camera API2.0下的初始化流程分析中,已经对Camera2内置应用的Open即初始化流程进...

天王盖地虎626
8分钟前
0
0
java 序列化和反序列化

1. 概述 序列恢复为Java对象的过程。 对象的序列化主要有两 首先我们介绍下序列化和反序列化的概念: 序列化:把Java对象转换为字节序列的过程。 反序列化:把字节序列恢复为Java对象的过程。...

edison_kwok
20分钟前
0
0
分布式数据一致性

狼王黄师傅
今天
1
0
经验

相信每位开发者在自己开发的过程中,都会反思一些问题,比如怎样提高编程能力、如何保持心态不砍产品经理、996 之后怎样恢复精力……最近开发者 Tomasz Łakomy 将他 7 年的开发生涯中学习到...

WinkJie
今天
4
0
从源码的角度来看SpringMVC

SpringMVC核心流程图 简单总结 首先请求进入DispatcherServlet 由DispatcherServlet 从HandlerMappings中提取对应的Handler 此时只是获取到了对应的Handle,然后得去寻找对应的适配器,即:H...

骚年锦时
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部