1.什么是mvc
mvc(Model View Controller)这是一张软件设计的框架模式,他采用模型(model)-视图(View)-控制器(controller)的方法吧业务逻辑,数据与界面显示分离,把众多的业务逻辑聚集到一个部件页面<br />注意:MVC不是一种设计模式<br />MVC框架模式是一种复合模式,MVC的三个核心部件分别是<br />1.Model(模型)所有的用户属性,状态,及程序逻辑,独立于视图和控制器<br />2.View(视图)呈现模型,类似于Web程序中的界面,视图会从模型中拿到需要展现的转态以及数据,对于相同的数据可以有多种不同的显示形式(不同的显示视图,简单说就是在不同的界面显示,)<br />3.Controller(控制器) 负责获取用户的输入信息,进行解析并反馈给模型,通常情况下一个视图具有一个控制器
1.2为什么要使用MVC
程序通过将Model和View的代码分离,实现了前后端代码的分离,会带来一下的好处
1:可以使同一个程序使用不同的表现形式,如果控制器反馈给模型的数据发生了变化,那么模型将及时通知有关视图,视图会对应的刷新自己所展现的内容
2.因为模型独立于视图所以模型可复用(一个页面可以用多次),模型可以独立的移植到别的地方技术使用(这个就设计到前端技术的,目前我了解到的el表达式和jstl标签去和视图填充数据)
3.前后端的代码分离,使整个项目开发的分工更加明确,程序的测试更加简洁,提高开发效率,
下图是MVC的各个组件之间的关系以及功能图
其实控制器的功能类似于一个中转站,会决定调用那个模型去处理用户请求以及调用哪个视图去呈现给用户
1.3JavaWeb中MVC模式的应用
在JavaWeb程序中,MVC框架模式是经常用到的,就一个Web程序的结构<br />V:View视图Web程序中指用户可以看到并要与之进行数据交互的界面,比如HTML网页界面,或者某些客户端的界面,用户在视图中进行输出数据以及一系列操作,主要;视图中不会发生数据的处理操作。<br />M:Model模型,进行所有数据的处理工作,模型返回的数据是中立的墨盒数据格式无关,一个模型可以为多个视图来提供数据,所以模型的代码重复性较低。<br />C:Controller控制器,负责接收用户的输入,并且调用模型和视图去完成用户的需求,控制器不会输出也不会做出任何处理,之后接受请求并调用模型构件去处理用户的请求,然后在确定用哪个视图去显示返回的数据
1.4:Web程序中MVC模式的优点
耦合性低:视图(页面)和业务层(数据处理)分离,一个应用的业务流程或者业务规则的改变只需要改动MVC中的模型即可,不会影响到控制器与视图
部署快,成本低:MVC使开发和维护用户接口的技术含量降低。使用MVC模式使开发时间得到相当大的缩减,它使程序员(Java开发人员)集中精力于业务逻辑,界面程序员(HTML和JSP开发人员)集中精力于表现形式上
可维护性高:分离视图层和业务逻辑层也使得WEB应用更易于维护和修改
1.5:Web程序中MVC模式的缺点
调试困难:因为模型和视图要严格的分离,这样也给调试应用程序带来了一定的困难,每个构件在使用之前都需要经过彻底的测试
不适合小型,中等规模的应用程序:在一个中小型的应用程序中,强制性的使用MVC进行开发,往往会花费大量时间,并且不能体现MVC的优势,同时会使开发变得繁琐
增加系统结构和实现的复杂性:对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率
视图与控制器间的过于紧密的连接并且降低了视图对模型数据的访问:视图与控制器是相互分离,但却是联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能
2.Spring MVC框架
现在MVC框架已经有很多了,Struts,Webwork,新兴的MVC框架有Spring MVC,JSF等等,本文主要介绍Spring MVC的设计理念
2.1,Spring MVC简介及特点
Spring MVC采用了松散耦合的可插拔组件结构,比其他的MVC框架更具有灵活性和扩展性,Spring MVC通过使用一套注解,使一个Java类成为前端控制器(Controller),不需要实现任何接口,同时,Spring MVC支持RES形式的URL请求,除此之外,Spring MVC在在数据绑定、视图解析、本地化处理及静态资源处理上都有许多不俗的表现。
Spring MVC围绕DispatcherServlet(前端控制器)为中心展开,DispatcherServlet(前端控制器)是Spring MVC的中枢,和MVC的思想一样,它负责从视图获取用户请求并且分派给相应的处理器处理,并决定用哪个视图去把数据呈现给给用户
Spring MVC特点
1:让我们能非常简单的设计出干净的Web层和薄薄的Web层;
2:进行更简洁的Web层的开发;
3:天生与Spring框架集成(如loC容器、AOP等);
4:提供强大的约定大于配置的契约式编程支持;
5:能简单的进行Web层的单元测试;
6:支持灵活的URL到页面控制器的映射;
7:非常容易与其它视图技术集成,如Velocity.FreeMarker等,因为模型数据不放在特定的API里,而是放在一个Model里(Map数据结构实现,因此很容易被其他框架使用)
8:非常灵活的数据验证、格式化和数据绑定机制,能使用任何对象进行数据绑定,不必实现特定框架的API;
9:提供一套强大的JSP标签库,简化JSP开发;
10:支持灵活的本地化、主题等解析;
11:更加简单的异常处理;
12:对静态资源的支持;支持Restful风格。
2.2Spring MVc请求响应
SpringMVC的请求相应步骤如下
1、用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获
2、DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回
3、DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(…)方法)
4、提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。 在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作
HttpMessageconveter:将请求消息(如Json,xm]等数据)转换成一个对象,将对象转换为指定的响应信息
1.数据转换:对请求消息进行数据转换。如string转换成Integer,Double等2,数据根式化:对请求消息进行数据格式化。如将字符申转换成格式化数字或格式化日期等
3.数据验证:验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中
5、Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象
6、根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet
7、ViewResolver 结合Model和View,来渲染视图
8、将渲染结果返回给客户端