自定义MVC(导成jar包)+与三层架构的区别+反射+面试题

简介: 自定义MVC(导成jar包)+与三层架构的区别+反射+面试题

1.什么是MVC?👀👀👀☪往下看


MVC全名:Model View Controller,其中Model(模型层)、View(视图层)、Controller(控制层)

它是一种软件设计典范,用于业务逻辑处理、数据、界面显示分离,



常用模式:🤩🤩🤩

model1:jsp+jdbc

model2:mvc


三层架构和MVC的区别?( •̀ ω •́ )✧😺😺😺

三层架构是一个经典的分层思想,将开发模式分为三层,每个人专注自己擅长模块即可

MVC是一种设计模式,其目的是让html和业务逻辑分开


三层架构:请看下去,看到这里已经很棒了🐱‍🐉🐱‍🐉🐱‍🐉🐱‍🐉🐱‍🐉🐱‍🐉🐱‍🐉🐱‍🐉🐱‍🐉🐱‍🐉🐱‍🐉🐱‍🐉

首先来说,三层架构与MVC的目标一致:都是为了解耦和、提高代码复用。MVC是一种设计模式,而三层架构是一种软件架构。


三层架构分为:表现层(UI)(web层)、业务逻辑层(BLL)(service层)、数据访问层(DAL)(dao层) ,再加上实体类库(Model)


1.实体类库(Model),在Java中,往往将其称为Entity实体类。数据库中用于存放数据,而我们通常选择会用一个专门的类来抽象出数据表的结构,类的属性就一对一的对应这表的属性。


·一般来说,Model实体类库层需要被DAL层,BIL层和UI层引用。马上不枯燥了😘😘😘😘😘😘


2.数据访问层(DAL),主要是存放对数据类的访问,即对数据库的添加、删除、修改、更新等基本操作


·DAL就是根据业务需求,构造SQL语句 ,构造参数,调用帮助类,获取结果,DAL层被BIL层调用


3.业务逻辑层(BLL)        →快了😎😎😎😎😎😎


·BLL层好比是桥梁,将UI表示层与DAL数据访问层之间联系起来。所要负责的,就是处理涉及业务逻辑相关的问题,比如在调用访问数据库之前,先处理数据、判断数据。


BLL层只被UIL层引用


用户表现层(UIL),就是用户看到的主界面。


       各层引用关系如下图所示:



MVC与三层架构的对应关系,图示如下:


2.MVC结构?


   V(视图层)--》 JSP


   C(控制层)--》 Servlet/Action


   M(模型层)--》 Dao、Entity


   1)实体域模型(entity层)

   2)过程域模型(dao层)


注:1)不能跨层调用;

      2)只能由上往下进行调用;View -> Controller -> Model


3.自定义MVC工作原理图


 *.action           调度           截取*(请求路径名) 处理具体业务逻辑

  JSP -----------> Servlet(中央控制器)--------------------->Action(子控制器)--->Model(Dao、DB)



4.MVC实现


案例1:


    1)创建抽象类Action,定义抽象方法execute(处理具体逻辑)

    2)创建HelloAction并继承抽象类Action,重写execute方法

    3)在ActionServlet中定义私有Map(根据不同请求路径名调用不同逻辑处理Action类)        🎉🎉🎉🎉🎉🎉

    4)在ActionServlet中的init方法初始化Map集合

   map.put('请求路径','逻辑处理Action类')

    5)在ActionServlet中的doPost方法中处理请求


  案例2:    


  演示完成的MVC流程,form表单提交数据,进行逻辑处理后将结果返回页面显示

    1)在ActionServlet中的init方法中添加

   map.put('/AddAction',new AddAction());

    2)创建AddAction继承抽象类Action,重写execute方式,处理逻辑后,返回结果


通过XML对自定义MVC框架进行3步增强

一、反射增强第一步:

   1)config.xml建模


    2)获取Action配置信息


    3)反射机制实例化Action子控制器


    4)将请求委托给子控制器处理并返回结果码


    5)根据返回结果码进行页面跳转

     重定向/转发


二、反射增强第二步: 将一组相关的操作放到一个Action中(反射调用方法)

    1)创建DispatcherAction类

    DispatcherAction extends Action          ✨✨✨✨✨✨✨✨

 

    2)根据请求参数获取方法名,利用反射机制调用方法

    参数名:methodName:add/minus/mul/div


    3)创建CalAction类(CalAction提供一组加减乘除的方法)        😉😉😉😉😉😉😉😉

    CalAction extends DispatcherAction

     提供一组与execute方法的参数、返回值相同的方法,只有方法名不一样


三、反射增强第三步:利用ModelDriver接口对Java对象进行赋值(反射读写方法)

   1)利用反射机制对Java对象进行属性赋值

    简化调用:BeanUtils.populate(calBean, parameterMap);


    2)ModelDriver接口返回的对象不能为空        😺😺😺😺😺😺😺😺


    注1:Action多例模式?因为Action的属性要用来接收参数


下面是附送大家的面试题

get和post的区别?😄😄

1.Get是不安全的,因为在传输过程,数据被放在请求的URL中;Post的所有操作对用户来说都是不可见的。 2.Get传送的数据量较小,这主要是因为受URL长度限制;Post传送的数据量较大,一般被默认为不受限制。


StringBuilder和StringBuffer和String的区别?

第一个StringBuilder,第二个String,第三个StringBuffer。这三个的区别:StringBuilder

线程不安全,但是在使用拼接的时候速度会很快

String

在每次new的时候会产生新的节点,但是在jdk8之后使用拼接是跟StringBuilder一样的效果

StringBuffer

线程安全,但是速度慢        👌👌👌👌👌👌


相关文章
|
存储 SQL 关系型数据库
MySQL进阶突击系列(03) MySQL架构原理solo九魂17环连问 | 给大厂面试官的一封信
本文介绍了MySQL架构原理、存储引擎和索引的相关知识点,涵盖查询和更新SQL的执行过程、MySQL各组件的作用、存储引擎的类型及特性、索引的建立和使用原则,以及二叉树、平衡二叉树和B树的区别。通过这些内容,帮助读者深入了解MySQL的工作机制,提高数据库管理和优化能力。
|
9月前
|
存储 算法 架构师
阿里面试:PS+PO、CMS、G1、ZGC区别在哪?什么是卡表、记忆集、联合表?问懵了,尼恩来一个 图解+秒懂+史上最全的答案
阿里面试:PS+PO、CMS、G1、ZGC区别在哪?什么是卡表、记忆集、联合表?问懵了,尼恩来一个 图解+秒懂+史上最全的答案
|
10月前
|
人工智能 前端开发 Java
DDD四层架构和MVC三层架构的个人理解和学习笔记
领域驱动设计(DDD)是一种以业务为核心的设计方法,与传统MVC架构不同,DDD将业务逻辑拆分为应用层和领域层,更关注业务领域而非数据库设计。其四层架构包括:Interface(接口层)、Application(应用层)、Domain(领域层)和Infrastructure(基础层)。各层职责分明,避免跨层调用,确保业务逻辑清晰。代码实现中,通过DTO、Entity、DO等对象的转换,结合ProtoBuf协议,完成请求与响应的处理流程。为提高复用性,实际项目中可增加Common层存放公共依赖。DDD强调从业务出发设计软件,适应复杂业务场景,是微服务架构的重要设计思想。
|
Android开发 Kotlin
Android经典面试题之Kotlin的==和===有什么区别?
本文介绍了 Kotlin 中 `==` 和 `===` 操作符的区别:`==` 用于比较值是否相等,而 `===` 用于检查对象身份。对于基本类型,两者行为相似;对于对象引用,`==` 比较值相等性,`===` 检查引用是否指向同一实例。此外,还列举了其他常用比较操作符及其应用场景。
363 94
|
12月前
|
Java 程序员 调度
Java 高级面试技巧:yield() 与 sleep() 方法的使用场景和区别
本文详细解析了 Java 中 `Thread` 类的 `yield()` 和 `sleep()` 方法,解释了它们的作用、区别及为什么是静态方法。`yield()` 让当前线程释放 CPU 时间片,给其他同等优先级线程运行机会,但不保证暂停;`sleep()` 则让线程进入休眠状态,指定时间后继续执行。两者都是静态方法,因为它们影响线程调度机制而非单一线程行为。这些知识点在面试中常被提及,掌握它们有助于更好地应对多线程编程问题。
516 9
|
12月前
|
安全 Java 程序员
Java面试必问!run() 和 start() 方法到底有啥区别?
在多线程编程中,run和 start方法常常让开发者感到困惑。为什么调用 start 才能启动线程,而直接调用 run只是普通方法调用?这篇文章将通过一个简单的例子,详细解析这两者的区别,帮助你在面试中脱颖而出,理解多线程背后的机制和原理。
662 12
|
12月前
|
编译器 Android开发 开发者
Android经典面试题之Kotlin中Lambda表达式和匿名函数的区别
Lambda表达式和匿名函数都是Kotlin中强大的特性,帮助开发者编写简洁而高效的代码。理解它们的区别和适用场景,有助于选择最合适的方式来解决问题。希望本文的详细讲解和示例能够帮助你在Kotlin开发中更好地运用这些特性。
309 9
|
Java 程序员
Java社招面试题:& 和 && 的区别,HR的套路险些让我翻车!
小米,29岁程序员,分享了一次面试经历,详细解析了Java中&和&&的区别及应用场景,展示了扎实的基础知识和良好的应变能力,最终成功获得Offer。
260 14
Java社招面试题:& 和 && 的区别,HR的套路险些让我翻车!
今日分享的主题是如何区分&和&&的区别,提高自身面试的能力。主要分为以下四部分。 1、自我面试经历 2、&amp和&amp&amp的不同之处 3、&对&&的不同用回答逻辑解释 4、彩蛋
|
Java 关系型数据库 数据库
京东面试:聊聊Spring事务?Spring事务的10种失效场景?加入型传播和嵌套型传播有什么区别?
45岁老架构师尼恩分享了Spring事务的核心知识点,包括事务的两种管理方式(编程式和声明式)、@Transactional注解的五大属性(transactionManager、propagation、isolation、timeout、readOnly、rollbackFor)、事务的七种传播行为、事务隔离级别及其与数据库隔离级别的关系,以及Spring事务的10种失效场景。尼恩还强调了面试中如何给出高质量答案,推荐阅读《尼恩Java面试宝典PDF》以提升面试表现。更多技术资料可在公众号【技术自由圈】获取。