JavaWeb(六)之MVC与三层架构设计

前言

  这段时间要学习hadoop,但是也希望把自己的web知识复习起来。所以花自己休息的时间把这些web的知识好好的巩固一下!没有什么可以阻挡我前进的脚步。

  首先我们先了解一下:  

    C/S:客户端 / 服务器 (胖客户端)     B/S:浏览器 / 服务器 (瘦客户端)     JavaBean:就是一个普通类(实体bean),包含三样标准:一个无参构造、私有属性、公共的getter和setter方法。

一、javaWeb开发模式之Model1

  其实在前面中javaweb知识中我们主要讲了两大类:一是servlet,二是jsp。   Servlet就是为了解决静态页面的问题,能够实现动态的页面,使维护,开发更加的方便,但是也有缺点,在Servlet嵌入HTML代码实在是太麻烦了,每次都要out.println();输出。   所以就有了Jsp,JSP中的内容就是html,为的就是方便写html,写页面,本质上JSP也是一个servlet,所以在它中也会不可避免的要写一些java代码,也就是脚本,为了不让其那么混乱,就增加了标签,EL表达式来尽量代替脚本。   但是在写一些项目时,还是会很麻烦,原因是业务逻辑代码,与数据库交互的代码,HTML代码这些类别,风格,作用完全不同的都混杂在了一起,造成的结果是代码的维护性,可读性以及扩张性都非常差,比如要改一个需求,   那么必须要把全部代码都看完,理解到,不然你可能会因为修改了一处代码,导致别的地方多处错误,这种设计模式也叫做 模式一(Model 1)。

二、javaWeb开发模式之Model2(MVC)

2.1、概述

  为了改进上面所说的缺点,也就是将业务逻辑代码放一起,显示页面的HTML代码放一起,与数据库交互的代码放一起,这样开发思路更加清晰,维护起来也更加方便,这种就叫做MVC模式。

  M:Model 模型,代表着业务逻辑代码与数据库代码,V:View 对数据的展示代码,比如JSP页面,就是专门用来展示数据,美化页面的 。

  C:Controller 控制,Servlet来充当这一角色,连接着View和Model,从View中获得指令,在从model中通过业务逻辑代码获取需要的数据,然后在通过Servlet去交给View层去显示。也就是MVC三层结构的意义!

  用图分析就是:

  我们打开浏览器,输入网址,就是到服务器中请求页面(JSP也可能是别的),然后显示到浏览器上,然后通过点击JSP页面上的内容,提交请求,到服务器中,也就到了Control(Servlet)这一块,

  Servlet通过分析请求,知道用户需要什么,需要数据,那么就通过Model,从数据库拿到数据,在将数据显示在JSP中,在将JSP发送回浏览器,显示在用户看,

  所以我们经常说,JSP就是View层,给用户看的,Servlet作为控制流程,而编写操作数据库代码,业务逻辑代码就属于Model。这就是MVC的应用。

2.2、分析 

  JSP + Servlet + JavaBean   MVC:开发模式   M: Model模型 JavaBean|四种作用域   V:view视图 JSP   C:Controller控制器 Servlet

三、经典三层架构

  表示层(web层)、业务逻辑层(service层)、数据访问层(dao层),用一张图来描述这其中的关系:

  因为现在只学习Servlet,Jsp,所以在表示层中就放的是Servlet和Jsp了,如果学了3大框架,Struts、Hibernate、Spring、会发现Struts是处理表示层的一个框架,而Hibernate是在dao层的一个框架,spring就是service层了。

  分层思想:强内聚、弱耦合

  实际项目中的包命名结构,其也是按照三层架构思想来进行编写代码:

  分析:(xxx:代表公司名称、yyy:代表项目名称)

      com.xxx.yyy.dao      dao层接口
      com.xxx.yyy.dao.impl    dao层实现
      com.xxx.yyy.service    service层接口
      com.xxx.yyy.service.impl  service层实现      
      com.xxx.yyy.web      web层
      com.xxx.yyy.util      工具包
      com.xxx.yyy.domain    javabean

四、总结

经典三层架构和MVC的关系:

  他们是两个毫无相关的东西,经典三层架构是一种分层思想,将开发模式分为了这三层,每个人根据自己的专长,开发不同的模块,比如,前端工程师,那么就专研表示层即可,想办法如何让页面变的更好看,

  如何吸引别人,而有些专门做数据库工作的人,就可以只关注操作数据库的活,如何让查询更加快速有效,而不必关注数据该如何显示这种问题。这就是分层带来的巨大好处。

  而MVC是一种设计模式,目的是让HTML代码和业务逻辑代码分开,让代码看起来更加清晰,便于开发。  

   如果说他们有关系的话:只能说他们有共同的点,分层,解耦。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏happyJared

Hexo,自定义域名http升级https

  数数手指头,我这基于 Hexo + GitHub Page 搭起来的个人博客也有两个月时间了,之前就想过把 http 升级为 https,无奈因为各种原因也...

2172
来自专栏owent

重写了llvm+clang+libc++和libc++abi的构建脚本

由于之前整理的服务器框架已经完成了,就需要用各种静态分析工具跑一遍。原来的llvm+clang的编译脚本是从GCC那个脚本copy过来然后改的,使用的时候各种问...

972
来自专栏Java技术栈

10个Eclipse珍藏插件推荐

1、Open Explorer 打开资源管理器插件,这是一个从Eclipse里面可以直接定位打开windows资源管理器文件的插件,这个版本的插件在最新的Ecl...

3698
来自专栏程序猿DD

Spring Cloud构建微服务架构:服务容错保护(Hystrix依赖隔离)【Dalston版】

前言在上一篇《Spring Cloud构建微服务架构:服务容错保护(Hystrix服务降级)》中,我们已经体验了如何使用@HystrixCommand来为一个依...

2039
来自专栏冷冷

Consul微服务的配置中心体验篇

Spring Cloud Consul 项目是针对Consul的服务治理实现。Consul是一个分布式高可用的系统,具有分布式、高可用、高扩展性 Consul ...

7096
来自专栏FreeBuf

登录框的另类思考:来自客户端的欺骗

前几天刚见人发了《一个登录框引发的血案》,而常规的爆破有风控和各种变态验证码,或者大型的电商都会用SSO实现登录,密码找回逻辑看似天衣无缝,又或者采用第三方的O...

1430
来自专栏Dawnzhang的开发者手册

spring cloud心跳检测自我保护(EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT

默认情况下,如果Eureka Server在一定时间内(默认90秒)没有接收到某个微服务实例的心跳,Eureka Server将会移除该实例。但是当网络分区故障...

3054
来自专栏IT大咖说

开源中国社区创始人红薯:J2Cache开源中国两级缓存实践

内容摘要 J2Cache 是开源中国开发的一个两级缓存框架,以高性能著称。那么它与同样是缓存框架的Ehcache和redis的区别在哪,又有哪些高性能的体现呢?...

3949
来自专栏DT乱“码”

EhCache和memcached介绍

EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。 Ehcache是一种广泛使用的...

2247
来自专栏小巫技术博客

Bugly使用篇之Java错误堆栈还原

1583

扫码关注云+社区

领取腾讯云代金券