web架构和MVC架构

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。

关于B/S和C/S:

管理软件使用B/S架构,而游戏因为要基于显卡实现绚丽的效果所以使用C/S架构。因为B/S架构便于程序的维护、升级和修改,所以今后B/S还有很大的发展空间。但注意并不是说有浏览器的就一定是B/S架构,比如网页上的小游戏其实是C/S架构,只不过它是边玩边下载,B/S架构和C/S架构最本质的区别在于B/S是一种轻客户端重服务器的架构,它把所有的逻辑,页面素材都放在服务器上,浏览器上的所有东西都是从服务器上下载下来的,所以说,并不是有浏览器的就是B/S架构,应该说满足轻客户端重服务器的这种模式的就是B/S架构,再比如微信小程序虽然没有浏览器,但它是一个B/S架构。

Web架构:

Web架构可以理解为有三种,一种是只有JSP页面,也就是所有的逻辑,业务处理和页面代码都在JSP上,在做一些简单不重要的程序时可以采用这种方式,快捷,但是不利于修改和维护;第二种是有JSP和Servlet,两者进行分工,JSP负责页面代码,Servlet负责逻辑、数据验证和数据库操作;第三种有JSP、Servlet和java类,JSP负责页面代码,Servlet负责数据验证,java类负责做逻辑和数据库方面的操作,这种层次分工最鲜明,便于维护、修改和升级。因为java类不涉及具体的业务,这样只要是相同或类似的功能都可以复制这段java代码,这样可以加快开发的效率。此外,Servlet是需要在web服务器上运行才可以的,如果有一天说不再使用JSP了,那么java类的代码还可以使用,只需要替换JSP和Servlet部分的代码即可,但如果是把代码都写在JSP或JSP和Servlet上,那么要修改就会很困难,甚至于代码就是无用的了,又要从零开始开发。比如我们用JSP、Servlet和java做好了程序,如果此时要求与微信小程序对接,因为微信小程序不需要页面,只需要返回给它一个JSON数据即可,这时我们的JSP和Servlet就不可用了,但是java类还可以保留,我们只需要重写Servlet里面的数据返回JSON数据即可。

MVC架构:

介绍:M指的是模型,V指的是视图,C指的是控制器,注意MVC架构不是三层架构,如果非要分类的话,它顶多算三层架构里面的一层。MVC架构不是B/S架构里面才能用,它最早出现于C/S架构中,MVC架构只是一种解决代码的架构,谁都可以用它,无论是java还是C#,无论是B/S架构还是C/S架构……当然以后做开发我们不可能自己写这个框架,有专门的框架来实现这个架构,如strusts,springMVC等。

原理:

MVC就是用来解决繁乱的网状代码跳转问题的,如下图所示,我们如果有很多个页面间的跳转,就会像下图一样很繁乱:

这样如果有一个页面有代码的改动,那么与之联系的页面也很有可能需要更改,我们还要一一找出来修改,很麻烦,很不好找,而MVC可以帮我们解决这个问题,如下图所示,MVC有一个中转站,所有页面都先连接到这个中转站上,然后要跳到哪个页面上,直接在中转站里找就可以了,这样就方便简洁了很多这里的中转站就是上面所说的控制器。

MVC中的两种模型:

3.1 model 1:视图(V) >>> 控制器(C) >>> 模型(M) >>> 视图(V)

如下图所示:

视图发送请求到控制器,控制器找到模型,模型响应相关页面到视图。如一个登录页面,先发送请求到控制器,这个控制器可以是Servlet做的,也可以是过滤器做的,只要能接收到请求即可,控制器找到相应的模型,也就是java类,当然在这个过程中java类可能会执行连接数据库等一系列操作,然后java类运行完以后返回成功或失败相应对应的页面到视图上。

3.2 model 2: 视图(V) >>> 控制器(C) >>> 模型(M) >>> 控制器(C) >>> 视图(V)

如下图所示:

视图发送请求到控制器,控制器找到模型,模型连接到控制器,告诉它运行的结果,控制器再响应相关页面到视图。还是以登录例题为例:

视图发送请求到控制器,控制器找到对应的模型,模型再连接控制器,告诉控制器成功与失败,控制器就相当于有一个小账本,上面记录着登录请求成功跳转到哪一个页面,失败跳转到哪一个页面,然后再根据这个响应相关的页面到视图。

4.交互模型二例题:

首先要有一个配置文件,此处以JSON为例,配置的JSON文件内容如下:

文件中mvc是数组名,由上图可知数组中只有一组数据,actionName表示来的如果是login就加载下面的className里面的类,如果返回的是ok字符串,就跳到ok.jsp页面,如果返回的是error字符串,就跳到login.jsp页面。

控制器部分的代码:

配置为*.action是想汇总所有的请求,让所有的请求都先进入这个控制器,然后根据配置文件跳页面。首先在初始化方法中加载配置的文件,之所以用service方法是因为控制器会接收所有的请求,这些请求有可能是get请求也有可能是post请求,所以此处为service方法统一接收所有请求。

接口Action的代码:

TestLogin代码:

之所以会申请一个接口Action,是为了在控制器中好加载TestLogin类并接收其返回的字符串,当然也可以不用申请接口的方法,可以用反编译的方法。

login.jsp的代码:

ok.jsp的代码:

运行结果演示:

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180124A0MGGA00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券