用 JAX-RS 和 JSR 371 规范设计一个 MVC 框架(一)开篇

最近做几个项目都是 SSM 的,也就是 Spring MVC + MyBatis。Spring MVC 不是说不好,而是覺得整个 Spring 框架太重了,而且受框架限制遇到一些小 case 也不好处理(想着这么顺应或“突破”框架的限制,——有时“原生的”反而好写出来),因此从这一点认知出发,最后决定自己写一个 MVC 框架!而设计的目标就是——提供一个最简单最小巧的 MVC 框架,花哨的功能一个不要,越简洁越好。花了2天左右时间完成,目前运行良好。

话说大家熟悉的这个 MVC,想必感触良多,Java 所津津乐道的 MVC 框架自打 Struts 开始,从 WebWork 到 Spring MVC 等等都是鼎鼎大名的,如果更细化的表示层模版诸如 Velocity、Tapestry、FreeMaker 更是层出不穷。不过在 AJAX 和 RESTful 接口大行其道的今天,服务端渲染 UI 似乎有所“低调”。于是近几年 MVC 中的 “View” 在服务端并无甚长足发展,连官方的 JSF 也渐有销声落寞的意味。所以我就在想,表示层仅仅简单的 JSP + JSTL 就够了,把复杂酷炫的界面就留给 H5 吧。

Model 这一层,社区的争议声不大。反正就是一个 Bean,或者 POJO 就可以了。当然你可能覺得没那么简单,好比说什么 DTO、VO 等等诸如此类的都属于 Model 意义的推广。大道至简,从结构上我们可以通过 Map 来表征此类抽象(当然也有人把 Model 取消,数据库返回的数据通通用 Map 表示)。

Controller 层正是本文的重点。之前的控制器是要把数据渲染到模版的——现在也是要,但却会简单许多——我说的是 API 接口的方式提供数据。因而 RESTful 方式就很重要了。究其实质,就是怎么把 HTTP URL 的请求与 Java 面向对象的方法对应起来。这样的思路会简单许多,也会自然许多。说点带有个人情绪的话题,在 2016 年的今天研究 MVC,确实有点落伍了。人家的框架的一大堆,个个功能都牛逼烘烘,为啥你还要做轮子呢?——哎,我从 MS ASP 就搞 Web,认死了一条路,不搞好它我就不甘心、不到黄河心不死!当然不是我说能搞的有多好。但我对我自己说,能够把代码在充分可控的范围内,我就舒坦了——本人就是这么覺得的哦!

补充一点,实际情形的系统不会仅仅有 M、V、C 这三种对象这么简单。还有 Service、DAO 层的,但与 MVC 概念并不冲突。

最后说说,所謂 Web 框架,到底搞的对象是什么!?鄙人认为,先决条件有以下两点,只有彻底了解这两点之后,才能做得好的 Web 框架,不然就是“在浮沙筑高楼”!

  • HTTP 协议
  • 紧扣 Request、Response 两大基础对象,明白链式结构是如何传递的

好吧,Let's go, GO GO~~~

首先,这是一个 RESTful 风格的 MVC 框架;其次这是一个纯粹的 MVC 框架,是在 Servlet 之上做了浅层包装而做出来的,它做的事情很简单:接收请求->封装参数->将请求交给开发者这编写的逻辑处理->返回处理结果。具体的类是 MvcDispatcher(点击查看源码),该类是一个前置控制器,是一个标准 Servlet Filter 过滤器,也可以说是一个 Dispatcher 分发器。它用于接收所有的请求,并作出合适的转发,详细一点地说,就是,接收所有的 HTTP 请求,并根据 URL 选择合适的 控制器 Controller 对其进行处理。

另外提一下,环境是采用 Jave EE 版的 eclipse 开发,项目工程是一个 Dynamic web project,采用了 Servlet 3 的一些特性,JDK 要求 v1.7 及以上。

鄙人的这个 MVC 框架,功能简单,但是 MVC 的核心功能基本具备了,很适合想了解 MVC 的学习者。

下一篇:http://blog.csdn.net/zhangxin09/article/details/63277736

时间: 2024-09-20 00:57:44

用 JAX-RS 和 JSR 371 规范设计一个 MVC 框架(一)开篇的相关文章

用 JAX-RS 和 JSR 371 规范设计一个 MVC 框架(二)HelloWorld

先说说用法,也就是 Hello World 了. 配置 引入 JAR 包 哪怕是 Hello World,也离不开前期的配置.首先把 JAX-RS JAR 引入你的 claspath. javax.ws.rs-api-2.0.rev.A.jar 然后还要把 jar 加入 Eclipse 的 Deployment Assembly,不然 Tomcat 会告诉你找不到类. 配置 web.xml 如下,我们加入了全局的过滤器. <?xml version="1.0" encoding=

使用Annotations设计一个MVC框架

设计 当设计一个应用程序时, 清晰的分离该程序的不同逻辑组件, 总是被证明是有益的. 同时也存在许多不同的模式来帮助开发者实现这个目标.其中最有名同时也最常用的自然是Model-View-Controller (MVC)了, 它能够将每个应用程序(或者应用程序的一部分)分成三个不同功能的组件,并且定义了把他们联结在一起的规则.Swing本身就是基于这个模式的,而且每个使用Struts,这个流行的开发Web应用框架的人也都了解隐藏在MVC后面的理论. 这篇文章介绍了怎么样通过使用annotatio

浅谈MVC框架中View层的优雅设计及实例

设计 在基于B/S的应用程序开发中,从基本的技术分工上来说就是两大块,一是软件显示界面,另一个是程序逻辑.在N年前的脚本语言时代,无论是asp.php还是jsp,我们基本是都是把这两者柔和在一起的.尽管我们想方设法做好很多函数或者包含文件来努力达到软件的复用,但仍然无法满足多变的用户需求,这主要是因为以前的纯脚本编码方式无法很好支持及应用面向对象(OO)领域中的强大功能. 在常见的B/S软件项目中,界面的设计包括html界面.Wap界面及其它由文本字符协议为基本表示的界面等.以我们接触最多的ht

设计REST风格的MVC框架

Java 开发者对 MVC 框架一定不陌生,从 Struts 到 WebWork,Java MVC 框 架层出不穷.我们已经习惯了处理 *.do 或 *.action 风格的 URL,为每一个 URL 编写一个控制器,并继承一个 Action 或者 Controller 接口.然而,流行 的 Web 趋势是使用更加简单,对用户和搜索引擎更加友好的 REST 风格的 URL .例如,来自豆瓣的一本书的链接是 http://www.douban.com/subject/2129650/,而非 htt

最应该尽快规范设计的元素:超级链接

链接是最应该尽快规范设计的元素,因为点击链接是互联网使用者最频繁的动作. 我们花了很多精力在对链接本身的展示上,比如现有的四个状态:常态.访问过.鼠标悬停.鼠标点击.但对于点击之后的结果,却缺乏"暗示". 所谓点击之后的结果,最常见的有三种:在新窗口(或新标签)打开新页面.在当前窗口打开新页面.Popup提示信息框. 其实,从视觉设计上把点击之后的结果"暗示"一下,比链接本身的展示还要重要. 不要以为网民都像你一样,知道用快捷键点击就能在新窗口打开,国内60%以上的

规范设计心得:用户是谁,需求又是什么?

后台系统采用一整套UI,为什么会形式各异?能统一并带来更好的体验吗?基于交互设计师自己的内心疑问,我们迫切的产出一套设计规范用于统一后台操作系统,利于用户使用习惯的培养和延续,降低学习成本,提高使用效率,有效提高开发效率,方便功能的优化扩展.基于现有的系统,我们抽丝剥茧,才有了如今的阶段性成果. 用户是谁?需求是什么?交互设计师对于一个项目最基本的了解就是源于这两个问题.我们做这次规范也是如此-- 你知,或者不知;规范就在那里;不悲不喜 用户是谁?我们的系统是给谁用的? 初期是给我们的小二,后期

ejb-请问基于Java EE的构件规范设计开发构件,指的是使用EJB框架开发构件吗?

问题描述 请问基于Java EE的构件规范设计开发构件,指的是使用EJB框架开发构件吗? 我现在要完成的任务是开发一个可重用构件,这个构件要实现的功能是系统中一个数据处理模块.要求在Java EE 支撑平台下开发.我现在不太能理解这个构件的开发过程.查了资料得知javabean和ejb都可以用Java语言开发组件.javabean比较简单是一般和JSP配合的,开发比较小型的组件使用的.EJB更为复杂功能也全面,但是我的这个系统不是分布式的,也不需要与服务器进行交互.用EJB开发是不是有些不机智?

java-JAVA实体类怎么设计,不用框架

问题描述 JAVA实体类怎么设计,不用框架 现有三个表: A表:字段有user_id(主键), userName; B表:字段有commodity_id(主键), user_id(外键:A.user_id), commodity_name; C表:字段有sku_id(主键), commodity_id(外键:B.commodity_id), sku_code; 关系:A,B:一对多,B,C:一对多 现在我要查询数据,查询语句是: select A.*, B.*, C.* from A A lef

如何设计一个好的Windows 8应用

虽然 Windows 8 刚上市只有半个月多一点,但 Windows 8 之父,同时也是 Windows 和 Windows Live 部门的总裁.微软下一代 CEO 热门人选的史蒂芬・辛诺夫斯基却已经离开了微软, Windows 8 的设计语言名称也从最初的 Metro 先是变为 Modern 接着变为 Windows 8 Style,最后变为目前微软中国官方所称的 Microsoft Design(本文依旧延用旧名称 Metro 表示 Microsoft Design Language/St