做为一名java工程狮,你们确定经历过不少面试,但每次几乎都会被问到什么是MVC设计模式,你是怎么理解MVC的相似这样的一系列关于MVC的问题。前端
【出现频率】java
【关键考点】面试
【考题分析】 编程
在java Web开发中,存在两种广泛的开发模式,一般成为模式1和模式2。模式1使用JSP+JavaBean技术将页面显示和业务逻辑分开,由JSP来实现页面的显示,JavaBean对象来保存数据和实现业务逻辑。客户端直接向JSP发出请求,JSP作出相应的响应,并调用JavaBean对象,全部的数据经过JavaBean来处理,而后再返回JSP,由JSP生成最后的返回结果,模型1的结构图以下所示:设计模式
在模型一中,JSP每每会嵌入控制请求流程的代码和部分逻辑代码,若是把这部分代码提取出来,由一个单独的角色来承担,该角色也就是控制器,则此时就构成了 模型2,模型2就符合了MVC的设计模式,即模型--视图--控制器(Model--View--Controller)。session
MVC的架构的Web程序被分割成若干逻辑部件,使得程序开发编程变的更加容易。它把对象按照功能的不一样分割成3个部分,主要目的就是为了将各类对象的耦合度降到最低。被分割成的3个部分为:模型(Model),视图(View),控制器(Controller)。架构
下面简单介绍一下最基础的开发模式(JSP-Servlet)来构建一个MVC架构模式,后来的那些框架都是在此基础上增长的,代替相应的组件实现MVC的设计模式的。app
(JSP-Servlet)开发中,由Servlet来充当控制器的角色,它接受请求,根据请求信息的不一样将它们分发给合适的JSP页面来做为用户的响应,同时,Servlet还须要实例化一个JavaBean对象,JSP就能够经过使用JavaBean的相关标签(如<jsp:getProterty>)来的到JavaBean的数据,结构以下图所示:框架
采用模型2,能够将页面的显示,业务逻辑的处理和流程的控制很清晰的分离出来。JSP负责数据的显示,JavaBean负责业务逻辑的处理,Servlet负责流程的控制。MVC模式使得Web应用程序很容易扩展和维护,由于各个部件的功能不一样,能够由不一样的人进行开发和维护。例如,前端攻城狮专门负责JSP页面,充分发挥她们的美术和设计才能,后台攻城狮负责业务逻辑的实现。jsp
Struts1框架是如何体现MVC模式的
虽然struts1如今基本因为使用不方便基本已被struts2所替代,但许多老的项目仍是用struts1写的,因此有必要对struts1的框架了解一下,毕竟它曾经也驰骋疆场数载呢,如今依然在某些项目中还能看到它的身影。
struts1的控制器(Controller)由ActionServlet、Action和struts-config.xml组成。ActionServlet是struts的入口,全部的请求都会经过它来处理,而后由它来决定相应的Action来处理请求。Action表明了一次动做,如用户注册、购买商品等,开发者的业务逻辑代码也会在这里添加。配置文件struts-config.xml是对整个struts的配置,包括ActionServlet应该将请求转发给那个Avtion,Action负责处理完成以后,又该由那个JSP文件做为响应等。
struts1的模型(Model)主要由ActionForm来实现,它有一点相似于JavaBean,包含了若干可读可写的属性,用于保存数据,也有数据验证的功能。通常来讲,一个Action会配备一个ActionForm。
struts1的视图(View)主要由JSP来实现。JSP显示的数据能够来自ActionForm,也能够是Action保存在做用范围(request,session,application)的数据。固然,使用struts自带的标签能够起到最大的简化做用。
使用struts1开发Web应用程序之后,开发者的思考方式须要作一下改变,Action、ActionForm和JSP是一个总体了,每个HTTP请求都须要它们三者协做来完成。JSP表明用户能够看到的东西,ActionForm表明的是数据,Action表明的是业务逻辑。下图所示的是struts1的MVC各个组成部分,以及它们是如何一块儿协调工做的。
以上就是struts1最核心的设计思想,开发人员大多数的时候只须要完成文件配置和Action,将大多数精力集中在Action中的业务逻辑实现上面。若是业务上有改动,只须要修改action便可,若是显示上有变化,也只须要修改JSP,二者实现了耦合,互不影响。下面这个图大概讲解一下Struts处理请求的过程和原理。