javaweb自定义MVC框架的设计与实现(1)
来源:互联网 发布:专业房屋设计软件 编辑:程序博客网 时间:2024/06/04 08:43
首先,在开始学习构建一个MVC框架之前,有必要学习一下MVC模型。
MVC模型:
是一种架构型的模式,本身不引入新功能,只是帮助我们将开发的结构组织的更加合理,使展示与模型分离、流程控制逻辑、业务逻辑调用与展示逻辑分离。如下图所示:
web MVC开发模式:
传统的mvc开发模式采用jsp+servlet+javabean的方法。servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数据。 该模式程序各个模块之间层次清晰,控制器(Controller)采用Servlet、模型(Model)采用JavaBean、视图(View)采用JSP,如图
这里重点讨论一下该模式中的控制器。该模式中,控制器由Servlet承担;
Servlet的主要功能有:
- 获取请求数据封装(可以通过BeanUtils实现请求数据封装的优化)
- 调用Service处理业务逻辑(Service层可以通过调用Dao层处理数据)
- 实现请求转发或者重定向(跳转代码写死,不方便扩展)
传统的MVC开发模式的局限性:
Servlet+JSP+JavaBean(Web MVC)架构虽然实现了视图和模型分离以及控制逻辑和展示逻辑分离,但也有一些比较严重的缺点
1、Servlet作为控制器的缺点
此处的控制器使用Servlet,使用Servlet作为控制器有以下几个缺点:
1、控制逻辑可能比较复杂。现在流行的Web MVC框架(如Struts2)都支持"请求参数submitFlag=toAdd,就可以直接调用toAdd方法"这样的处理机制,在Struts2中类似这样的处理机制就称为"动态方法调用"
2、请求参数到模型的封装比较麻烦,如果能交给框架来做这件事情,我们可以从中得到解放。
当有几十个甚至上百个参数需要封装到模型中时,这样写恐怕就痛苦万分了,要写几十次甚至上百次这样的代码,估计写到吐了,所以现在流行的Web MVC框架(如Struts2)都提供了非常方便的获取参数,封装参数到模型的机制,减少这些繁琐的工作。
3、选择下一个视图,严重依赖Servlet API,这样很难或基本不可能更换视图。
例如:使用Servlet API提供的request对象的getRequestDispatcher方法选择要展示给用户看的视图
4、给视图传输要展示的模型数据,也需要使用Servlet API,更换视图技术也要一起更换,很麻烦。
例如:使用Servlet API提供的request对象给视图传输要展示的模型数据
2、JavaBean作为模型的缺点
此处模型使用JavaBean,JavaBean组件类既负责收集封装数据,又要进行业务逻辑处理,这样可能造成JavaBean组件类很庞大,所以一般现在项目都是采用三层架构,而不直接采用JavaBean。
三层架构:表现层+业务逻辑层+持久层
3、视图的缺点
现在被绑定在JSP,很难更换视图,比如Velocity、FreeMarker;比如我要支持Excel、PDF视图等等。
- javaweb自定义MVC框架的设计与实现(1)
- 浅谈MVC框架的设计与实现
- 基于Spring的MVC框架设计与实现
- Javaweb经典的三层框架和MVC设计模式
- web day13 JSTL标签库(c标签,自定义标签),MVC设计模式,JavaWeb经典三层框架
- 如何设计一个JavaWeb MVC框架
- MVC的设计模式在JavaWeb中的实现
- 读《精通Struts:基于MVC的JavaWeb设计与开发》
- JavaWeb的MVC设计模式
- 使用符合MVC设计模式的自定义框架实现加法计算器
- 超轻量级MVC框架的设计和实现 (1)
- 超轻量级MVC框架的设计和实现 (1)
- 超轻量级MVC框架的设计和实现 (1)
- 超轻量级MVC框架的设计和实现 (1)
- 超轻量级MVC框架的设计和实现 (1)
- 超轻量级MVC框架的设计和实现 (1)
- 超轻量级MVC框架的设计和实现 (1)
- 超轻量级MVC框架的设计和实现 (1)
- oracle数据库对象(一)
- Java集群优化——dubbo+zookeeper构建高可用分布式集群
- 织梦自定义专题节点容器模板修正
- 7 Java基础 异常
- 经历了一期的项目洗礼的成长
- javaweb自定义MVC框架的设计与实现(1)
- intent,requesrcode,resultcode开发总结
- 【Python】import class/import module
- netty长连接实例
- NSSet和NSArray的区别
- View 的事件体系
- Spring MVC学习总结(4)——SpringMVC权限管理
- this.options在chrome浏览器提示undefined的解决办法
- Android 问题 - Binary XML file line #36: Error inflating class android.support.v7.widget.RecyclerVie