MVC设计模式在初学java web时就说过了,但是脱离代码去解释设计模式会显得很空。
Jsp中java代码和HTML共存,Sun公司提供了两种jsp model(jsp开发模型):jsp model1和jsp model2。
简而言之,jsp model1使用jsp+java bean的技术,jsp负责显示页面和流程控制,java bean负责封装数据和业务逻辑。
而jsp model2采用jsp+servlet+java bean的技术,jsp model2中,将原model1里的流程控制代码提取到servlet中,从而mvc设计模式在jsp model2中体现出来了,即m对应java bean,v对应jsp,c对应servlet。
注:上面的java bean和平时所说的java bean不太一样,毫无疑问,java bean会提供getter和settter方法获取到class的成员变量,但是jsp model中的java bean不仅做了数据的封装,还包含了一些业务逻辑代码,这就是jsp model中的java bean和我们平常所说的java bean的区别,前者的业务逻辑代码是写在java bean中的,而平时我们所写的java bean一般是没有业务逻辑代码的。(譬如框架开发时所封装的pojo就只有getter和setter方法(pojo和java bean和ejb的区别值得思考))
讨论mvc模式在ssm框架中的实现,我们需要先去说明mvc设计模式和三层架构的概念。
M 即Model,主要负责处理业务逻辑以及数据封装
V 即View,主要负责显示数据(将数据发给用户)和提交数据 (将用户请求发给服务器)
C 即Controller,主要是用于辅助捕获请求并控制请求转发。
而
区分层次的目的是为了 “高内聚,低耦合”。包括
用户界面层/表示层(User Interface)
业务逻辑层(Business Logic Layer)
数据访问层(Data Acess Layer)。
根据两者的概念可知,两者并不相同。三层架构是一种宏观的概念,而 MVC 就是一种比较具体的实现。它们可以同时存在,也可根据情况使用其中一种。之所以我们会混淆,是因为在进行web开发时两者会同时使用。
毫无疑问,Ssm采用三层架构达成了高内聚,低耦合的目的, spring负责业务逻辑层,mybatis负责数据访问层,springmvc负责用户界面层,
而Ssm架构中主要有四个package,DAO,Service,Controller,Pojo,这四个package很难和三层架构产生一一对应的关系,因为spring的依赖注入(即DI,就是@autowire注解)在Service,Controller都有体现。
而mvc设计模式在ssm框架中是如何体现的呢?我们需要考虑的不是mvc模式如何由SSM框架实现,而应该考虑mvc模式如何由SpringMVC实现。
Spring MVC框架与MVC架构模式联系在于:
SpringMVC中并没有涉及有关于Controller接口规范的实现,SpringMVC是通过调用Handler来实现Controller这一层的。
SpringMVC使用了适配器模式,前端控制器使用HandlerAdapter来调用不同的Controller,然后才是Controller调用Model产生数据模型;
产生的数据模型将会再次返回到前端控制器,并由前端控制器决定使用不同的模板引擎将页面进行渲染。