spring mvc(1) 为什么要使用mvc
在使用spring mvc之前,我们首先要理解我们为什么要使用spring mvc。关于这个问题我们可以看一下java web的简单发展过程。
1. servlet 开发阶段
上世纪90年代,随着Internet和浏览器的飞速发展,基于浏览器的B/S模式随之火爆发展起来。sun提出了Servlet体系,这个体系使得使用java程序员也能开发基于B/S架构的WEB应用程序,使用Servlet类将HTTP请求和响应封装在标准JAVA类中来实现各种WEB应用方案。
使用Servlet的一个问题是页面的输出通过Servlet类返回,这使得开发无法方便的做到各种页面效果和丰富多彩的风格。
于是sun借鉴asp推出了jsp
2.jsp 开发阶段
推出了jsp后,JAVA程序员也能象ASP的程序员那样将服务端代码添加在已经由美工设计好的静态页面上,经过一个JSP容器对JSP文件进行自动解析并转换成Servlet类来交给WEB服务器运行。jsp理解就是先设计显示页面,再将显示页面转成servlet输出。
使用jsp提高了开发效率,但还是存在一些问题:首先页面中有大量的java逻辑代码,前端美工在维护是不得不考虑这些逻辑代码,而java程序员在维护java代码是不得不考虑前端的显示逻辑。
于是sun推出了mvc模式
3.mvc开发阶段
mvc模式将程序分为三个模块:数据模块(model)、业务逻辑模块(controller),显示模块(view)。业务逻辑模块(controller)接受请求,处理业务逻辑,最终生成数据(model),显示模块(view)接受数据(model)渲染页面展示,最终返回显示内容。
spring mvc的本质也就是将业务逻辑处理和显示渲染分离开来,通过数据模块进行关联。
题外话
早期WEB应用程序页面的现实主要通过服务器返回显示页面,浏览器只负责渲染。但随着前端技术的发展尤其是js、ajax、jquery等技术的发展。这些前端技术基本上已经承担了页面显示和控制的功能,而后端只负责业务逻辑和返回显示数据,这种模式下view和controller就已经分离。spring mvc随着版本的迭代,也发送了很多变化,现在的spring mvc框架,除了原本的mvc分离目的外,相对servlet还是提供了很多有用的功能,便于开发。
spring mvc(1) 为什么要使用mvc的更多相关文章
- 2017.3.31 spring mvc教程(八) <mvc:annotation-driven />所做的工作
学习的博客:http://elf8848.iteye.com/blog/875830/ 我项目中所用的版本:4.2.0.博客的时间比较早,11年的,学习的是Spring3 MVC.不知道版本上有没有变 ...
- ASP.NET MVC 5 02 - ASP.NET MVC 1-5 各版本特点
参考书籍:<ASP.NET MVC 4 高级编程>.<ASP.NET MVC 5 高级编程>.<C#高级编程(第8版)>.<使用ASP.NET MVC开发企业 ...
- System.Web.Mvc.dll在各个版本MVC中的文件位置
the default folder would be like the following: MVC 5 C:\Program Files (x86)\Microsoft ASP.NET\ASP.N ...
- MVC自学系列之三(MVC视图-Views)
View的约定 1.根据约定,Views目录下包含着每一个与Controller同名但是没有像Controller后缀的文件夹:因此对于控制器HomeController就对应在views目录下有个目 ...
- 像asp.net Mvc一样开发nodejs+express Mvc站点
像asp.net Mvc一样开发nodejs+express Mvc站点 首先,我是个c#码农.从事Mvc开发已然4个年头了,这两年前端MVC的兴起,我也跟风学了一些,对前端的框架也了解一些,angu ...
- Best MVC Practices(最优的MVC布局)
Best MVC Practices 最优的MVC布局策略 Model View Controller 1.数据层 2.视图层 3.控制器层 Although Model-View-Controlle ...
- 005. Asp.Net Routing与MVC 之三: 路由在MVC的使用
上次讲到请求如何激活Controller和Action,这次讲下MVC中路由的使用.本次两个关注点: 遗留:ModelBinder.BindModel的过程 MVC中路由的使用 MVC 5中的Acti ...
- 《ASP.NET MVC企业实战》(三)MVC开发前奏
在上一篇“<ASP.NET MVC企业级实战>(二)MVC开发前奏”中跟随作者大概了解了一些C#3.0和3.5中的新特性.本篇继续以这样的方式来学习C#中的一些特性. 一.C#3. ...
- 《ASP.NET MVC企业实战》(二) MVC开发前奏
在上一篇“<ASP.NET MVC企业级实战>(一)MVC开发前奏”中记录了作者介绍的一些比较实用的VS使用方法以及C#2.0中添加的新特性.本篇继续大概了解之后版本的一些新特性. ...
随机推荐
- C# IObservable与IObserver观察者模式
C#中提供了IObservable<T>接口和IObserver<T>接口来实现观察者模式,IObservable<T>相当于Subject(主题)接口,下面我们就 ...
- 编译原理根据项目集规范族构造LR(0)分析表
转载于https://blog.csdn.net/Johan_Joe_King/article/details/79058597?utm_medium=distribute.pc_relevant.n ...
- Magento 2 Factory Objects
In object oriented programming, a factory method is a method that’s used to instantiate an object. F ...
- 产品经理培训教程视频大全与模板Axure rp9与8视频教程元件库模板
注意:请仔细阅读购买,一旦发货百度网盘链接不能退~ 自动发邮件到买家留言处的邮箱,或注册淘宝时的邮箱自动通过旺旺给您发货还可以访问网页提取链接自助提取(复制到浏览器): http://4k5.cn/V ...
- Python | 多线程死锁问题的巧妙解决方法
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Python专题的第25篇文章,我们一起来聊聊多线程开发当中死锁的问题. 死锁 死锁的原理非常简单,用一句话就可以描述完.就是当多线程 ...
- 字段在class文件中的存在形式——FieldInfo
每个字段(Field)都有field_info结构所定义,一个class文件中,不会有两个字段同时具有相同的名字和描述符 name_index:值为一个整数(常量池表中的有效索引),例如name_in ...
- markdown 语法总结(一)
1.标题 代码 注:# 后面保持空格 # h1 ## h2 ### h3 #### h4 ##### h5 ###### h6 ####### h7 // 错误代码 ######## h8 // 错误 ...
- Android Studio从Eclipse导项目
要是你只下了Android Studio 就不能用Eclipse导出gradle项目了 可以直接使用Android Studio导入模块,在Android Studio里Project算Eclipse ...
- Fragment的跳转
1. 设置主Fragment 其它fragment得到它就可以了. 1 val ft = fragmentManager?.beginTransaction() 2 val maiFrgmt = Ma ...
- 使用grep命令查找文件中符合”.stg.“行
某目录下有个test.txt,内容如下: www.stg.comwwstgcom 如果我这样去查找: $ grep '.stg.' test.txtwww.stg.comwwstgcom 发现第二个匹 ...