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

简介: 最近做几个项目都是 SSM 的,也就是 Spring MVC + MyBatis。Spring MVC 不是说不好,而是覺得整个 Spring 框架太重了,而且受框架限制遇到一些小 case 也不好处理(想着这么顺应或“突破”框架的限制,——有时“原生的”反而好写出来),因此从这一点认知出发,最后决定自己写一个 MVC 框架!而设计的目标就是——提供一个最简单最小巧的 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

目录
相关文章
|
2月前
|
前端开发 Java 程序员
从零基础手写Spring MVC框架,准备好进阶程序员了吗?
我们程序员大部分人都是野路子,不懂什么叫代码规范。写了一个月的代码,最后还得其他老司机花3天时间重构,相信大部分老司机都很头疼看新手的代码。
25 1
|
3月前
|
设计模式 前端开发 JavaScript
浅谈MVC、MVP、MVVM框架模式
浅谈MVC、MVP、MVVM框架模式
30 0
|
3月前
|
Java 数据库连接 Maven
SSM框架整合:掌握Spring+Spring MVC+MyBatis的完美结合!
SSM框架整合:掌握Spring+Spring MVC+MyBatis的完美结合!
|
20天前
|
前端开发 安全 Java
使用Java Web框架:Spring MVC的全面指南
【4月更文挑战第3天】Spring MVC是Spring框架的一部分,用于构建高效、模块化的Web应用。它基于MVC模式,支持多种视图技术。核心概念包括DispatcherServlet(前端控制器)、HandlerMapping(请求映射)、Controller(处理请求)、ViewResolver(视图解析)和ModelAndView(模型和视图容器)。开发流程涉及配置DispatcherServlet、定义Controller、创建View、处理数据、绑定模型和异常处理。
使用Java Web框架:Spring MVC的全面指南
|
27天前
|
前端开发 JavaScript Java
MVC框架:SpringMVC(三)
MVC框架:SpringMVC
30 0
|
27天前
|
JSON 前端开发 JavaScript
MVC框架:SpringMVC(二)
MVC框架:SpringMVC
37 0
|
27天前
|
前端开发 Java 应用服务中间件
MVC框架:SpringMVC(一)
MVC框架:SpringMVC
60 0
|
2月前
|
前端开发 Java 数据库连接
认识Java中最常用的框架:Spring、Spring MVC、Spring Boot、MyBatis和Netty
Spring框架 Spring是一个轻量级的开源框架,用于构建企业级应用。它提供了广泛的功能,包括依赖注入、面向切面编程、事务管理、消息传递等。Spring的核心思想是控制反转(IoC)和面向切面编程(AOP)。
77 3
|
3月前
|
前端开发 JavaScript Java
MVC|JAVA|SSM框架计算机硬件评测交流平台的开发和实现
MVC|JAVA|SSM框架计算机硬件评测交流平台的开发和实现
|
4月前
|
前端开发 JavaScript Java
MVC|JAVA|SSM框架计算机硬件评测交流平台的开发和实现
MVC|JAVA|SSM框架计算机硬件评测交流平台的开发和实现
MVC|JAVA|SSM框架计算机硬件评测交流平台的开发和实现

相关实验场景

更多