老铁们,大家好,相信还有很多朋友对于mvc设计模式的运行原理和mvc实现原理的相关问题不太懂,没关系,今天就由我来为大家分享分享mvc设计模式的运行原理以及mvc实现原理的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!
java web是什么原理
如果你是70、80后的程序员,你一定要看一看这篇文章,保证满满的回忆。如果你是90后,那你更要看看这篇文章,因为你能找到javaweb发展的历史。
言归正传,Java语言能长期霸占语言排行榜一个重要的原因就是强大的web开发能力,web开发是java的基石(在EJB推出的时候当时的Sun用基石来描述EJB),所以了解javaweb开发原理是非常重要的。如果仅仅跟大家聊javaweb开发原理未免有点单薄,今天我将把javaweb开发包含的主体内容跟头条的读者一起分享一下(一直计划写关于javaweb的文章,一直也没时间写,今天就当时开个头吧)。
Web开发的历史web开发的历史其实并不久远,要搞清楚javaweb开发的特点(主要是优点),首先要了解web开发的历史(简单的回归一下)。早期的web是非常简单的结构,用户发出请求(request),服务器给出回应(response),这个时期的web应用,我们称为website(网站),特点是一些列静态内容的集合。看一个图示:
图中的服务器保持了一系列html脚本来响应用户的请求,可以说这个时期的web应用还是比较简单的,但是却确立了两个重要的对象:一个request(代表请求),另一个是response(代表回应)。如果把web开发的历史比喻成一部美国大片的话,那么request和response绝对是这部大片的那女主角,而且每一部都是不可或缺的主角(简单的说就是死不了)。
看到这个图,不知道第一批从事web开发的80后是否和我一样,已经有点感触了,当年为了搞清楚这个结构,曾经连续多少个通宵做实验(实验环境比较恶劣)。没关系,这仅仅是个开始,我想当你看完这篇文章的时候,你会泪流满面的(相信我)。为了配合一下这张结构图,我配一张图片(当年的我):
在web发展过程中,有一个小插曲,就是在website向webapplication发展的过程中,出现了一个小“玩意儿”,就是applet,很多人了解java都是从使用javaapplet开始的(70,80后那一批程序员)。当时风靡校园(我当时在读大一)的网易聊天室,哎呀那个火啊(大家回忆一下你在学校机房上网时的兴奋),这个聊天室就是采用了applet构建的,当时applet给静态页面一个动态交互的可能,着实火了一段时间。现在知道applet的程序员,你已经暴露年龄了。看一张图片吧:
我想这个时候,泪点低的70、80后已经有点湿润了吧。湿润的,自觉在这里停留一分钟,对着屏幕来张合影,发个朋友圈。
过了这个插曲,真正的三层web开发来了,一个里程碑式的web处理方式CGI,看一张图:
CGI的推出,使得web开发正式进入了动态处理时代,服务器能与客户有真正意义上的交流了,有能存储数据的数据库了,虽然CGI的使用周期并不长,但是一定要纪念一下它,毕竟它是里程碑式的变革。javaweb技术正是踩着CGI的肩膀来到了广大程序员的面前,javaweb解决了CGI的性能问题。CGI是以进程为单位管理请求的,而javaweb则是以线程为单位,处理能力更强,占用的资源更少,这个核心的组件就是Servlet。看一组资源占用图,先看CGI的:
再看一下javaweb中的servlet资源图:
孰优孰劣一目了然,Servlet解决相同数量的请求,却占用较少的系统资源,这就是为什么广大程序员抛弃了CGI转向javaweb的原因。
另外,开发一个Servlet并不复杂,看一个Servlet编写的HelloWorld应用:
这个代码结构是不是很亲切,是不是很有Coding的感觉,其实Servlet就是个java类而已,只不过增加了几个限制而已,所以开发一个Servlet并不复杂。然后就是把它部署到web服务器上(Tomcat这个老人家现在身体依然硬朗!),然后就等待客户的请求就可以了。这是Servlet的三层部署图:
javaweb开发的技术体系还包括javabean和jsp,采用MVC结构来组合这三个技术是javaweb开发的基础内容,先看一下MVC的功能图:
再看一下组合使用Servlet+javaBean+JSP的Model2开发结构:
这个结构是标准的Javaweb开发结构,现在是不是很少能看到这么“干净”的描述图了?以上就是标准的javaweb开发的历史描述,当然这并不是说这些内容已经过时了,反而它一直是官方的标准解决方案。只不过web发展迎来了另一个阶段,繁荣的开源架构时代来了。。。
开源框架时代这个时代的典型代表就是Struts、Spring和Hibernate,简称SSH。
严格的说,这部分内容并不是官方解决方案,但是这些方案却得到了广大程序员的拥护,一方面原因是EJB的方案太重了,另一方面开源架构使用起来非常方便和灵活,所以从03年以后这些开源框架得到了普通的使用。
下面我简单描述一下这三个框架:
Struts基于MVC结构的解决方案,分为struts1(已经淘汰了,用过Struts1的程序员已经老了)和struts2两个版本,和Python一样,这两个版本不兼容,目前Struts2的最新版本是2.5.14.1,简单的说Struts就是构建了现成的MVC框架,程序员往这个框架里加代码就可以了,使用起来非常方便。
Hibernate框架完成了面向对象与面向关系的映射,让java程序以面向对象的方式操作面向关系的数据库。整体结构基于DAO进行扩展,很多操作只需要配置一下就可以了,极其方便。
Spring提供了javaBean的容器,池化了javabean,提高了性能,而且核心代码不到2M,小巧且强大。
关于这三个框架我在头条将写专门的文章介绍,今天就不再进行扩展了。
今天看到这个问题,有感而发,原来我们80后真的老了,80后的程序员,看到这篇文章,有没有所感触?关注我吧,我们一起回忆,再一起继续奋斗!
mvc框架的原理详解
mvc框架是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范。
mvc框架用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。
mvc框架被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
mvc框架开始是存在于桌面程序中的,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。
比如一批统计数据可以分别用柱状图、饼图来表示。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新。
mvc框架是XeroxPARC在二十世纪八十年代为编程语言Smalltalk-80发明的一种软件设计模式,已被广泛使用。
后来被推荐为Oracle旗下Sun公司JavaEE平台的设计模式,并且受到越来越多的使用ColdFusion和PHP的开发者的欢迎。
mvc框架是一个有用的工具箱,它有很多好处,但也有一些缺点。
如何设计程序架构
代码复用
无论是开发哪种软件产品,成本和时间都是最重要的。较少的开发时间意味着可以比竞争对手更早进入市场。较低的开发成本意味着能够留出更多的营销资金,覆盖更广泛的潜在客户。
其中,代码复用是减少开发成本最常用的方式之一,其目的非常明显,即:与其反复从头开发,不如在新对象中重用已有的代码。
这个想法表面看起来很棒,但实际上要让已有的代码在全新的代码中工作,还是需要付出额外努力的。组件间紧密的耦合、对具体类而非接口的依赖和硬编码的行为都会降低代码的灵活性,使得复用这些代码变得更加困难。
使用设计模式是增加软件组件灵活性并使其易于复用的方式之一。但是,这可能也会让组件变得更加复杂。
一般情况下,复用可以分为三个层次。在最底层,可以复用类、类库、容器,也许还有一些类的“团体(例如容器和迭代器)”。
框架位于最高层。它们能帮助你精简自己的设计,可以明确解决问题所需的抽象概念,然后用类来表示这些概念并定义其关系。例如,JUnit是一个小型框架,也是框架的“Hello,world”,其中定义了Test、TestCase和TestSuite这几个类及其关系。框架通常比单个类的颗粒度要大。你可以通过在某处构建子类来与框架建立联系。这些子类信奉“别给我们打电话,我们会给你打电话的。”
还有一个中间层次。这是我觉得设计模式所处的位置。设计模式比框架更小且更抽象。它们实际上是对一组类的关系及其互动方式的描述。当你从类转向模式,并最终到达框架的过程中,复用程度会不断增加。
中间层次的优点在于模式提供的复用方式要比框架的风险小。创建框架是一项投入重大且风险很高的工作,模式则能让你独立于具体代码来复用设计思想和理念。
扩展性
需求变化是程序员生命中唯一不变的事情。比如以下几种场景:
你在Windows平台上发布了一款游戏,现在人们想要MacOS的版本。你创建了一个使用方形按钮的GUI框架,但几个月后开始流行原型按钮。你设计了一款优秀的电子商务网站,但仅仅几个月后,客户就要求新增电话订单的功能。每个软件开发者都经历过许多相似的故事,导致它们发生的原因也不少。
首先,在完成了第一版的程序后,我们就应该做好了从头开始优化重写代码的准备,因为现在你已经能在很多方面更好的理解问题了,同时在专业水平上也有所提高,所以之前的代码现在看上去可能会显得很糟糕。
其次,可能是在你掌控之外的某些事情发生了变化,这也是导致许多开发团队转变最初想法的原因。比如,每位在网络应用中使用Flash的开发者都必须重新开发或移植代码,因为不断地有浏览器停止对Flash格式地支持。
最后,可能是需求的改变,之前你的客户对当前版本的程序感到满意,但是现在希望对程序进行11个“小小”的改动,使其可完成原始计划阶段中完全没有提到的功能,新增或改变功能。
当然这也有好的一面,如果有人要求你对程序进行修改,至少说明还有人关心它。因此在设计程序架构时,有经验的开发者都会尽量选择支持未来任何可能变更的方式。
spring mvc原理详解
SpringMVC运行原理
1.客户端请求提交到DispatcherServlet
2.由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller
3.DispatcherServlet将请求提交到Controller
4.Controller调用业务逻辑处理后,返回ModelAndView
5.DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图
6.视图负责将结果显示到客户端
mvc设计模式的运行原理的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于mvc实现原理、mvc设计模式的运行原理的信息别忘了在本站进行查找哦。