作为一名java工程狮,大家肯定经历过很多面试,但每次几乎都会被问到什么是MVC设计模式,你是怎么理解MVC的类似这样的一系列关于MVC的问题。

【出现频率】

【关键考点】

  • MVC的含义
  • MVC的结构 

【考题分析】 

  在java Web开发中,存在两种普遍的开发模式,通常成为模式1和模式2。模式1使用JSP+JavaBean技术将页面显示和业务逻辑分开,由JSP来实现页面的显示,JavaBean对象来保存数据和实现业务逻辑。客户端直接向JSP发出请求,JSP做出相应的响应,并调用JavaBean对象,所有的数据通过JavaBean来处理,然后再返回JSP,由JSP生成最后的返回结果,模型1的结构图如下所示:

        

在模型一中,JSP往往会嵌入控制请求流程的代码和部分逻辑代码,如果把这部分代码提取出来,由一个单独的角色来承担,该角色也就是控制器,则此时就构成了    模型2,模型2就符合了MVC的设计模式,即模型--视图--控制器Model--View--Controller)。

  MVC的架构的Web程序被分割成若干逻辑部件,使得程序开发编程变的更加容易。它把对象按照功能的不同分割成3个部分,主要目的就是为了将各种对象的耦合度降到最低。被分割成的3个部分为:模型(Model),视图(View),控制器(Controller)

  • 模型(Model):代表了应用程序的数据和处理这些数据的规则。当模型发生变化时,它会通知视图,并为视图提供查询模型相关状态的能力。
  • 视图(View):用来组织模型的内容,它从模型中获取数据,然后将数据展现给客户,该角色往往又JSP承担。
  • 控制器(Controller):负责从客户端接受请求,并把这些请求转换为某种行为。这些行为往往又模型来实现,这些行为完成以后,再选择一个视图来展现给客户。   

  下面简单介绍一下最基础的开发模式(JSP-Servlet)来构建一个MVC架构模式,后来的那些框架都是在此基础上增加的,代替相应的组件实现MVC的设计模式的。

(JSP-Servlet)开发中,由Servlet来充当控制器的角色,它接受请求,根据请求信息的不同将它们分发给合适的JSP页面来作为用户的响应,同时,Servlet还需要实例化一个JavaBean对象,JSP就可以通过使用JavaBean的相关标签(如<jsp:getProterty>)来的到JavaBean的数据,结构如下图所示:

  采用模型2,可以将页面的显示,业务逻辑的处理和流程的控制很清晰的分离出来。JSP负责数据的显示,JavaBean负责业务逻辑的处理,Servlet负责流程的控制。MVC模式使得Web应用程序很容易扩展和维护,因为各个部件的功能不同,可以由不同的人进行开发和维护。例如,前端攻城狮专门负责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处理请求的过程和原理。

                                            

转载于:https://www.cnblogs.com/beautiful-code/p/5281937.html

谈谈JAVA工程狮面试中经常遇到的面试题目------什么是MVC设计模式相关推荐

  1. 解决Java工程URL路径中含有中文的情况

    问题: 当Java工程路径中含有中文时,得不到正确的路径 *** 解决: 这其实是编码转换的问题.当我们使用ClassLoader的getResource方法获取路径时,获取到的路径被URLEncod ...

  2. 产品经理面试中那些不忍直视的奇葩题目,面试官你真是够了!

    咖友提问:产品经理面试中都遇到过哪些非常奇葩的面试题目?各位PM们都遇到过哪些奇葩的面试题目?求分享... 咖 友 如果让你去擦西雅图市的所有窗户,你会收多少钱? 小编点评:你确定你面试的是产品经理岗 ...

  3. 谈谈如何在面试中发掘程序猿的核心竞争力 什么是程序员的核心竞争力?

    谈谈如何在面试中发掘程序猿的核心竞争力 早两天看了知乎日报的这篇文章<什么是程序员的核心竞争力?>,caoz讲的几点是让我感同身受.这让我联想起了给程序猿的面试,其实也就是通过短暂的接触来 ...

  4. 谈谈面试中的自我介绍

    工作这些年,面试过别人,也被别人面试过,就想简单的谈谈面试中的自我. 面试中我最常遇到的就是,我最近在某某公司,然后做XX 项目,用某某技术,  然后就完了. 每当听到这种自我介绍,作为面试官我都有一 ...

  5. 分享一些面试中的经验和心得

    " 本文作者在2019年实习和秋招中面了10多家公司,只吃过一次拒信,拿到的offer中不乏一些竞争非常激烈的外企与国内大厂的ssp,而且开发/算法的offer都有.值得一提的是作者本科并非 ...

  6. 面试中 项目遇见的难点答案_2019 百度、头条、小米、360、网易、拼多多等公司 Android 社招面试心得...

    每到"金三银四"的季节,总人很多人去寻找名叫"面经"一样的东西,其实就是一个个具体的题目,然后临阵磨枪,去"背"答案,如果一直是这样的话,我 ...

  7. 面试中遇到这 3 个SQL问题,最容易掉坑里!

    作者 | Nathan R 译者 | 天道酬勤,责编 | Carol 封图 | CSDN下载自视觉中国 在本文中,作者将介绍来自3个在技术面试中的真实的SQL问题,这些问题都是在实际公司进行技术筛选时 ...

  8. 性格内向不善言辞的求职者在面试中如何展现优势?

    内向的个性让你在面试时老是吃亏吗? 最近有一位毕业三年的咨询者小林,这三年以劳务派遣的方式在事业单位做着办公室助理的工作,已经辞职,准备寻找自己想要的工作,但比较内向,话不多,最近面试之后都杳无音信. ...

  9. 程序员的数学课22 面试中那些坑了无数人的算法题

    前面的课时,我们学习了"代数与统计""算法与数据结构",至今这门课程的主体知识已告一段落,下面我们进入彩蛋环节,我会向你介绍两个应用到数学的场景,第一个是求职面 ...

最新文章

  1. Android 圆角矩形ProgressBar
  2. Keras命名体识别(NER)实战---自然语言处理技术
  3. 专访 Swin Transformer 作者胡瀚:面向计算机视觉中的「开放问题」 原创
  4. 最近安装prestashop遇到莫名其妙的问题。突然毛瑟顿开了,create default language就出现错误...
  5. Android Dialog详解
  6. TimesTen Classic 18c 卸载 (uninstall)全过程
  7. 昂达v819i安装win8.1时报错
  8. Android 蓝牙配对、连接和通信
  9. CRM客户管理系统源码PHP开发搭建
  10. 云计算与云原生 — OpenShift 部署实践
  11. VMware虚拟机备份和恢复
  12. 在北京,有房有车的中年男女最好欺负
  13. pandas 计算累计和及累计占比
  14. 计算机组成原理:系统总线总结
  15. C语言代码质量与架构调整(三)
  16. Python笔记:matplotlib 三维图表绘制方法简介
  17. 第二次作业助教博客 —— 撰写第三周课程总结及实验报告(一)
  18. [059量化交易]python对上市公司股票按价格升序排列
  19. 艺龙h5酒店业务架构问题以及调优策略
  20. 配置Sublime的C语言环境

热门文章

  1. LeetCode 02.两数相加
  2. linux关闭远程服务器,linux – 远程主机关闭SSH连接
  3. 用matlab解一维单势垒波函数,一维多势垒结构准束缚态的MATLAB分析计算
  4. C语言——结构体链表,附完整示例
  5. c语言怎么输入3个数输出最大值
  6. 弱口令扫描工具mysql ftp_基于端口的弱口令检测工具--iscan
  7. python生成uuid_咸鱼高赞回答:有什么相见恨晚的Python技巧,附赠python最新教程...
  8. easyexcel 动态列_easyexcel动态表头列导出SequenceDiagram 阅读源码事半功倍
  9. mac json格式化工具_简洁好用的工具都是相似的
  10. php第一课,[php第一课]php简介