一、传统的Model1和Model2
在传统的Model1中,Web由大量JSP和少量用于访问数据库的bean组成,jsp兼顾V层和C层的工作。
在传统的Model2中,servlet负责处理用户请求,调用更深层的javabean进行数据处理,然后将处理过的数据转发给jsp视图,视图进行数据解析和显示。
如图,既然这样,大家看到这里应该能明显地感受到转发和重定向的区别了,它们是两个世界的产物,为了严格区分,我可以这样说(并不专业):转发和重定向完全是两个世界的产物。
转发:C层把M转发给V层,V层进行渲染呈现(实际上JSP在服务器上也是一个Servlet,不懂百度)。转发是服务器内部的操作,与用户八竿子打不着。
重定向:重定向是告诉用户,你重新请求服务器资源吧,我不想返回一个JSP页面给你。
我想起了我做的第一个java online judge网站了,当时全部使用JSP页面完成相应功能,要完成一些编译工作都是调用一些简单的java对象,甚至使用static方法,这不正是Model1吗?因此,Model1是大多数入门者都能想到的java web处理方法吧,我相信大部分入门者都有在jsp里面调用过连接数据库的经历!
在使用model1的你,应该并没有过多地想到过MVC的思想!
后来慢慢开始入门了,别人教了你分层的思想,什么dao,service,servlet,然后开始分层书写,开始学习servlet3.0基于@WebServlet的注解,开始学习了JDBC,开始学习了JSP,然后看书了解了一点JSP的深层知识,然后开始写一个简单的有条理的JAVA WEB网站,恭喜啊!已经开始深入学习Model2了呢!
学完model2之后,你就能够初步理解MVC的真正思想了吧!
学完所谓的 Model2后,我理解了一下上面第一幅图,这样归纳:
JSP属于View层,Servlet属于Controller层,dao,service,entity属于Model层,为什么后面的三个都是Model层?因为我理解的是后三个都是对数据进行处理java代码,所以是model层!
二、web的MVC和早期的MVC思想
web是基于一种啥子模式?请求/响应模式,是不是嘛?也就是说用户不发送请求,视图就不能什么自己?更新自己,是不是嘛?
而传统的MVC程序,当模型层数据发送改变时,可以通知模型层进行相应的改变。
因此,web应用的mvc思想与观察者模式存在一定的相似之处,但又不完全一样。
读到这里,用户只需要明白,传统的MVC思想是不是就是web的MVC思想?不是嘛!web的CVM思想是在传统的MCV思想之上改变了一定的结构嘛!
(MCV MVC CVM CMV,顺序应该没什么影响吧?)