用 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
【案例+源码】详解MVC框架模式及其应用
【案例+源码】详解MVC框架模式及其应用
117 0
|
4月前
|
设计模式 存储 前端开发
MVC 框架的主要问题是什么?
【8月更文挑战第30天】
86 0
|
6月前
|
安全 前端开发 测试技术
安全开发-PHP应用&模版引用&Smarty渲染&MVC模型&数据联动&RCE安全&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞
安全开发-PHP应用&模版引用&Smarty渲染&MVC模型&数据联动&RCE安全&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞
|
7月前
|
前端开发 Java Spring
Java Web ——MVC基础框架讲解及代码演示(下)
Java Web ——MVC基础框架讲解及代码演示
66 1
|
7月前
|
前端开发 Java 应用服务中间件
Spring MVC框架概述
Spring MVC 是一个基于Java的轻量级Web框架,采用MVC设计模型实现请求驱动的松耦合应用开发。框架包括DispatcherServlet、HandlerMapping、Handler、HandlerAdapter、ViewResolver核心组件。DispatcherServlet协调这些组件处理HTTP请求和响应,Controller处理业务逻辑,Model封装数据,View负责渲染。通过注解@Controller、@RequestMapping等简化开发,支持RESTful请求。Spring MVC具有清晰的角色分配、Spring框架集成、多种视图技术支持以及异常处理等优点。
89 1
|
7月前
|
前端开发 安全 Java
使用Java Web框架:Spring MVC的全面指南
【4月更文挑战第3天】Spring MVC是Spring框架的一部分,用于构建高效、模块化的Web应用。它基于MVC模式,支持多种视图技术。核心概念包括DispatcherServlet(前端控制器)、HandlerMapping(请求映射)、Controller(处理请求)、ViewResolver(视图解析)和ModelAndView(模型和视图容器)。开发流程涉及配置DispatcherServlet、定义Controller、创建View、处理数据、绑定模型和异常处理。
367 1
使用Java Web框架:Spring MVC的全面指南
|
7月前
|
设计模式 前端开发 网络协议
Java Web ——MVC基础框架讲解及代码演示(上)
Java Web ——MVC基础框架讲解及代码演示
55 0
|
7月前
|
前端开发 JavaScript Java
MVC框架:SpringMVC(三)
MVC框架:SpringMVC
63 0
|
7月前
|
JSON 前端开发 JavaScript
MVC框架:SpringMVC(二)
MVC框架:SpringMVC
66 0
|
7月前
|
前端开发 Java 应用服务中间件
MVC框架:SpringMVC(一)
MVC框架:SpringMVC
103 0