粉丝244获赞1285

本节课我们来实现用户信息的删除功能,当我们点击删除的时候, 我们要将用户信息从数据库中进行物理删除,找到我们的优点。 dao, 我们在刚开始的时候就已经实现了用户信息的删除,所以我们只需要在三十余字层调用一下即可。 看,这是 c, 看这位,这里改成 删除,然后这里参数的话应该是需要改一下 他的参数,应该是一个 usb, 所以这里应该是 douzer 参数 uyd。 嗯,删除用户 用户,我们再补充一下,物理删除, 这里报错了是因为是因为我们修改代码的时候,最好先将服务关闭,然后找到我们的 siri, 复制一下,修改用户的那个号,然后改个名字, 这里需要改一下删除用户信息, 那么他需要从前台接受一个参数。 我们看一下,在我们的额的密优字里头,一旦我们点击删除的按钮,他会出发 delete 这个事件。 delete 我们方法明, 我们也改一下比例的水油嘴。 重点是在这里 uid 等于 uid, 所以我们这里的货啊,只需要签收一下这个 uid, 注意安全, 然后优字,再说一次点丢优字,然后是 uid, 这里我们需要将 uid 从此 图片转化为眼贴盖就行。 这是第二 boss, 外地 删除完成之后再重新查询一下,刷新页面,当然签单页面还需要的修改一下,在这里 没事的,等于我们新装点的啊。修完之后重新启动我们的弹幕卡, 然后重新访问我们的下属。二,咱们一二三四五四 登录用户管理,然后我们删除最后一个,确定现在只剩下八条记录,我们再删除一个, 只剩七个。然后我们再试一次,只剩六条记录, 这样一来我们就实现了用户的删除功能。

学习 tomcat 是 什么?总是遇到困难?别担心,今天这个视频将用三个核心技巧帮你快速突破瓶颈,效率提升百分之两百,让我们开始吧! tomcat 是 apache 基金会开源的轻量级 java web 服务器,同时也是 slit 容器。它像一家兼具接待和烹饪功能的餐厅浏览器, 客人发送 http 请求点餐。 tomcat 先以 web 服务器身份接收请求接待客人,再通过 slide 容器运行 java 编写的动态程序烹饪餐品,最后返回响应结果上菜。 它不像 web logic 等重型服务器那样复杂,适合中小型 java web 项目或开发测试场景,是 java 开发者入门 web 开发的常用工具。 它的核心功能包括处理 http 请求和运行 url jsp。 比如,你在浏览器输入网址发送请求, tomcat 会解析请求中的 url 和参数,向餐厅店员记录订单细节,然后调用对应的 url 或 jsp 程序处理逻辑。厨师按订单做菜,生成动态内容后,封装成 html 响应,返回给浏览器店员上菜。 它既能直接处理 html 图片等静态内容,现成临时,也能生成用户登录结果、商品列表等动态内容。现场制作的餐品 sloven 是 java 编辑的处理 http 请求的类,但它无法独立运行,需要 tomcat 提供的容器环境。 tomcat 作为 sloven 的 容器,就像温室,给植物提供生长条件。它负责管理 sloven 的 适应周期期,创建出使化、处理请求、销毁, 提供请求和响应对象,供 sloven 的 使用,还处理 sloven 之间的通信。没有这个容器, sloven 就 像没水没阳光的种子,无法发芽生长。有了 tomcat, sloven 才能正常接收和处理浏览器的请求。 tomcat 和 apache http server 的 区别在于动态处理能力。 apache 是 纯静态 web 服务器,只能返回 html、 图片等现成内容。向书店卖印刷好的书, tomcat 不 仅能处理静态内容,还能运行 swalent gsp 生成动态内容。向书店既卖现成书,也能现场打印定制内容。 实际项目中常把两者配合使用。 apache 负责静态资源。 tomcat 处理动态请求,就像书店前台卖现成书,后台按需打印定制书,效率更高。 tomcat 的 目录结构清晰分工,并目录是启动停止脚本,如 startup bat。 像图书馆的门禁系统。 web apps 目录是 web 应用部署区,把 a r 包放这里会自动解压。如同图书馆的书架区。 kuf 目录存配置文件,如 server ink smell, 类似图书馆的管理规则手册 logs 目录记录运行日记,像图书馆的每日运营台账。 live 目录是依赖库,如同图书馆的工具间, 理解目录结构,能快速定位部署和配置的位置。部署 web 应用到 tomcat, 最常见的方式是将 word 包复制到 web apps 目录, tomcat 会自动解压并注册应用。如同把新书放进图书馆书架管理员会自动分类上架。另一种方式是通过 tomcat 管理控制台上传 w a r 包,向去图书馆前台提交新书请求。部署成功后,浏览器输入 http bug 汪零八零应用名就能访问,如同读者找到书架上的书,开始阅读。 tom tate 的 comformail 有 多个关键配置文件, server-slash-like server 等。像图书馆的整体规划图 up 点 xls 是 应用默认配置,设置欢迎页 url 映设,如同每本书的阅读指南。 点 xls 是 应用上下文配置管理数据源等资源,类似书架的摆放规则。修改 server 点 xls 中的端口号能避免冲突,如同图书馆换门牌号,防止和邻居混淆 调整 webder xl l 的 欢迎页能让用户打开应用,直接看到首页启动 tomcat 需运行并目录的 startup 脚本,它会加载配置文件,出使服务并监听端口。如同图书馆开门前,管理员检查设施、打开门禁,等待读者 停止时运行 shut down 脚本, tomcat 会销毁资源,关闭服务,向图书馆闭馆时整理书籍,锁门启动失败。常见原因是端口被占用,如同图书馆门牌号被邻居占用,导致客人找不到入口,此时修改 server xml 的 端口号即可解决。 tomcat 默认使用八零八零端口接收 http 请求端口号,如同餐厅的门牌号,客人通过门牌号找到餐厅。若八零八零被其他程序占用,需修改 conserver、 xmail connector 标签的 port 属性,比如改成八零八一。 若想让用户访问时不用加端口号,如 http connectafter, 可将端口改为八十。 http 默认端口,如同餐厅使用城市准干道的门牌号,客人无需额外记忆数字就能找到。 tomcat 版本需与 java 版本匹配,比如 tomcat 八支持 java 七级以上, tomcat 九支持 java 八级以上, tomcat 一 零支持 java 八加,且 sovereign api 升级到五点零。 这项手机 app 和系统的兼容性,闲版本微信 tomcat 十需要 android 十以上 java 八加。若手机系统太老, java 六只能用旧版本 tomcat。 如 tomcat 七、选择版本时要结合项目使用的 java 版本和 sorent api 需求,避免出现无法运行的情况。以上就是今天关于 tomcat 是 什么。



web logic 是一款商业级应用服务器,相比于开源的 comcat, 它具有以下优势,性能和可伸缩性 web logic 具有出色的性能和可伸缩性能力,能够支持大量的并发用户和高负债的应用程序。 高可用性, web logic 具有高可用性,能够在应用服务器及群中实现无缝的故障转移, 确保应用程序的连续可用性。安全性, web logic 提供了丰富的安全特性,包括访问控制、数据加密和身份验证等功能,可以帮助保护应用程序和用户的数据安全。高级管理功能 web logic 提供了丰富的管理功能,包括监视、诊断和调试工具等,可以帮助管理员更好地管理和维护应用服务器。支持多种编程语言和框架 web logic 支持 job 一规范,包括 several, h, j, s, p, a, d, b 等,也支持其他语言和框架,如 p h, p, ruby, spring 等。 web logic 适合处理大型、复杂的企业及应用程序,需要高性能、高可用性和高安全性的场景, 例如金融、保险、电子商务等领域的大型应用程序。而 tomcat 则适合小型、简单的应用程序,需要快速部署和轻量级的场景,例如个人博客、小型网站等。

嗯,这一点我们分享一下,这是分开拍的嘉瓦元的钓友方法,那么他既然支支持嘉瓦元的钓友,那么他不仅仅支持计算机上面的嘉瓦开发钓友,安卓上面的嘉瓦开发钓友同样也是可以的。那么首先我们看一下 第一步就是我们要引入我们的家,那么这个家库提供了一些 ipi 的操作方法,比如说我这里面首先声明了一下,那么这里面有获取计算机的 id, 获取所有打印机,然后自行打印方法,我们看一下,嗯,每一个方法, 首先看下这个获取打印机,获取打印机就是获取我们计算家已经安装的打印机,那我们看一下这个里面主要的参数,就是这几个参数设置一下,那么通过这个 xq 的这个方法把这个参数传进去,然后他会有一个回调,这个回调他就会把我们安装的打印机回传回来,这里我们可以处理,然后进行显示, 在打印的时候可以进行选择,那么我们再看一下打印方法,打印方法其实他也是一样哎,都是通过这个参数配置,然后通过 excuse 然后传进去。同样他是有一个回调,就是在打完成的时候他会有一个回调,那么这会有一个回调,他上面会显示这个打印的结果, 那么我们这里面有一个 get print settings, 那么这个就是我们对我们传进去的打印参数进行配置,比如说,呃,我们要传进去的这些数据,我们可以是一个阶层的一个数组, 那么还有我们我要使用的打印机,比如使用哪一台打印机,这个就是我们在通过获取打印列表的时候,我们可以在上面进行选择,就是我们要使用的打印机, 然后我们这里面配置了打印模板,就是我们提前使用我们的设计器进行设计的模板,然后通过这个这几个探索进行传入,用模板他支持多种方式,比如说客户端模板,直接放在客户端的计算机,然后远程模板,这样我们可以放在云端的服务器, 那放云南服务器的话,我们只要输入一个 url 就可以了,这个就是我们模板文件,就这个模板文件存放的目录,那么如果你要放在本地的计算机,那你就放在一个本地的文件夹就行,注意这个后面不要加双线啊。最后 然后你数据类型他可以有多种,比如说有数组啊,或者是阶层数组啊,都可以,然后把这个最后通过这个就传进去进行打印, 那就可以了。还有最后一个就是我们这个获取计算机 id, 它主要是标示我们是哪一台计算机使用的,也就说我们 ipi 在哪一台计算机, 那么比如说我,我不属于台,然后可以后台使用,那么我们可以有时候可能会需要用到 hid, 那么这个根据需要使用, 这就是几步简单的方法,通过家网来调用。呃,打印机,那么使用 cc 文件盖还是比较方便的,我们也可以看一下这个 visco 这个运行,你看这里面我们就是调用的这几个方法, 那么这个方法我们就都在这里面,我们都给他写好,这个是一样的,就刚才我们看的是一样,那么我们可以来运行一下,看一下效果。 哎,我们听到打印机已经打印,那么你看一下这个就是我们获取的计算机 id, 然后还有这个计算机的列表是我们,你看我们安装了很多打印机,那最后一个是就是打印的呃状态,比如打印返回的时候, ok, 就是。

这节我们来聊一聊 spring 的 异常处理器啊,也就是 spring 啊,我们在这种 mvc 这种架构当中啊,比如说你如果这个 service, 一 般我们的这个主要的逻辑就是写在 service 层,那 service 层当中的这个异常啊,你如果没有进行这个 try catch, 也没有抛出,就是进行 throw 啊,那它的一个处理流程是怎么样的呢?那肯定就是这个,呃, service 层啊,就到了这个,到了这个控制器,是吧?控制器层,控制器层它会往上抛啊, dispatcher, dispatcher serverlet serverlet, 这个啊,这是前端控制器带到这个框架框架前面啊,来进行处理。好,那这是它大概的一个异常的这样一个传传播的一个路径啊, 那么在异常它也分为就是有几种类型,就是你这个运行时的异常,它这个编印系的异常,一个叫检查异常啊,呃,运行时的一个异常,比方说,呃,你除以零啊,比方说有一个简单的, 那我在每一个方法里面我写的这个这样的 一除以零,那这个很显然它会进行一个,它也会进行报错啊, else, 应该是 else 啊, esmitic 啊, 啊,这个 exception 应该准确说是这个异常,这个异常呢是属于这个,呃, round round time, round time exception, round time 就是 运行式异常, 那你如果没有对这段代码你进行一个查找器,或者在你这个方法上面没有进行 throw, 那 这个异常就会传播到控制器啊,控制器这上面呢,它也有一个注解,就是 e exception handler 啊,如果说你没有用这个注解来进行处理,那么这个异常它就会到这个 dispatcher server 啊,当然这里是没有考虑,就是说你进行一个全局的异常补货啊,就是有一个 controller 的 外设,就是相相当于这样的一个全局的异常,也是一 exception handler 这这样一种方式,那最终肯定你这个调用的这个接口,它肯定是五百啊,肯定是五百的一个状态码,肯定是出错了,对不对? 但是它异常它会传播到哪儿啊?如果说你控制器层,你有这样的一个 exception handler 来进行处理,或者说你在控制器层,哼,你把它给 try catch 住了, 就是说你调用这个方法,哎,你把这个方法 service 这个方法,这层面,你把它拷 catch 了,那它也会进行补货,那具体的处理逻辑就在你 catch 啊, 还有一些啊, checked exception, 我 们也叫这个变异期异常啊,变异期异常呢,就是必须是除以一些 编辑器的这个异常,就是处理一些什么,嗯, i o 流啊,尤其是像 i o 流有文件的读写啊,像这这个过程当中啊,那一般来说我们要有这种 i o exception 啊, 那这种异常它就是属于变异式的一个异常,你如果没有进行异常的一个相关的处理,那变异的时候就会告诉我啊, 那这个代码它在你翻译它的时候,翻译代码的时候它不会报错啊,只是说你在运行到它的时候它会报错,这叫 round time exception, 一个编辑器异常,一个运行式异常, 好,那在这个控制器级别的呢,它就有这个 exception handler 和这个 controller 的 外设,像这样一种方式进行一个控制器级别的这个异常的一个捕获,那 service 里面啊,呃, 如果说你的这个事务方法就是 transactional, 这里面是事务的这个异常,那这个会导直接导致这个事务进行回馈啊, 比方说我在进行 repository, 就是 d a o 啊,就是 d o 或者叫 map map 层的进行一个操作,那最终是操作这个数据库。打比方啊,就是你操作数据库, 但是接下来它立马抛了一个 run time 的 一个一个 exception 出了一个异常,那这个异常就会直接导致你这个 transactional 注解标志的这个事务啊,它会导致这个事务的一个回滚啊。 好,那我们一般也不推荐就是说你把这个异常,呃, 把它吞掉了,什么叫吞掉了呢?吞掉这个异常,呃,你也就是你把它踹踹住了,然后在 catch 里面呢,你只是一个空的这个 catch 块儿不记录,你又没有做日历记录,也不抛出,那这个代码看着像正常一样,实际上它已经已经出错了啊, 那调用方他也他也不知道你这个出错了啊,那感,感觉就是你这个代码是很正常的在呃,在通过日制你是没法发现它的一个端利啊,哪里出了问题啊? 那我们处理这个异常的一些方式呢?我们可以通过 a o p 啊,通过 a o p 加上切点切面,像这样一种方式啊,当然这是 啊,就是使用 a o p, 包括刚刚说的那个大局异常的一个处理啊, 还有你这个直接在里面进行一个,嗯,补货啊,补货的一个操作在,尤其是把日制记记录啊, 记录清晰啊,这个日制是非常重要的,很重要的一个依据啊, 那我们怎样总结一下,也就是说你这个运行时的异常啊,它会自动传播,最终会导致你接口五百,对吧?翻译时的一个异常呢,就是强制要求你处理,你如果没处理啊,就像 l 流的这种,你没有处理,那你这个变异都不通过啊, 那未处理的异常就会生成包含这个错误,详情呢?这个 h g p 的, 哎,这个五百的一个相应啊, 那 spring 的 如果是事务方法,就是这个事务管理,它会回滚这个运行时一个异常啊,日制记录呢,就是你这个异常战,它就是记录在这个服务器的日制当中,我们推荐是用 log, log, error 这种来直接来打印它这个异常, 也就是说在 service 层也要适当的来处理这个异常啊,至少啊,一个标准的一个做法也要进入这个日制啊,并且根据这个业务需要转化为合适的这个业务异常,再向上抛除, 那也就是我们自定义这个异常处理机制,就全局异常不火,在里面定义各种场景的,这个 就是相当于是业务异常啊,你自己来对它定义的啊,就是某种场景下面啊,它 很明显的一个一个报错,跟哪一类业务有关,那我就定义这样的一个一个异常,分门别类啊,就是打印这样一个信息,便于排查问题。

好,那么我们接下来呢,已经在 id 二上配置完了,我们接下来要给大家讲 severe lite, 那么什么是 severe lite, 其实两个单词的一个拼写啊,就是一个 servere, 一个 update surve, 我们都知道是不是就是服务器 oplante 的,我 oplay 的,我们经常说,哎,下载一个 app, 下载一个 f, 是不是对不对?什么是 app 啊?是不是其实就是一个小程序啊,就是一个程序, 那么 sorry lit 其实就是什么 server uplate, 它的一个拼写,他们这两个单词合并在一起了,就叫 server lit 好不好?你看 server lit, 那么它的官方解释就是运行在服务器端的一个小程序, 其实呢,我们呃来,其实大家都是这样解释啊,运行在服务器端的小程序,大家听完之后也不知道什么什么鸟鸟意思,运行在服务器端的小程 什么他妈听不懂,但是也都这样讲,也不知道啥意思。然后今天呢,老陈给大家讲一下,聊一聊。斯文类上呢,是一个接口,定义了加完类被浏览器访问到,也就是说被 tomk 的识别的规则, 我们呢定义一个接口,定义一个类,是不是就可以实现这个 sorry 的接口来复写这个方法,你说啊,老陈,你说说什么鬼嘛,你说完我我也没听懂,还说别人说的不行, 那我现在给大家来讲啊,首先我们来说 sorry 是一个接口,既然是一个接口,接口,我们通过前面的学习知道,只要是接口,他就定义的一个规范,就像我们这个排插这个插座一样,对不对?两孔的,三孔的,只要是接口,他就是定义的一个规范, 那么加加班类的是一个接口,接下来往下看,他定义了加瓦类被汤姆 k 的识别的一个规则,也就是说是怎么样? 来想啊?来想同学们,比如说我们现在学家外补要实现的是什么?是不是前后端的结合呀?我们之前写的一些东西是不是只能在这个按个奥特加斯在这控制台跑一跑?控制台跑一跑显然不是我们想要的。 我们一直说前后端前后端结合啊,或者说前后端结合如何如何是怎么样,我们需要让这个数据啊, 他和这个前端页面能够结合起来。我们后端是怎么?后端就是来处理数据的。你比如说他这个淘宝啊, 他这些图片啊,或者说这些金额等等,他都是数据,他是在我们后端存储起来,存储起来,但是我们需要和前端这个框架来给他结合,比如说啥时候往这里面放啥样的图片?学过 a t m 知道这是个图, 图片,这是一个数字,这是一个标题,对不对?然后之前老陈讲一些电话也给大家,经常让大家写这样的练习,对吧?那我们来看我们当时在写的时候,是不是把这个页面给写死了?我们为什么每一次搜索能够出现不同的效果呢? 同样的,因为出现不同的效果,就是因为这个资源,我们刚才说叫什么叫动态资源? 动态资源对不对?动态资源也就是包括这些数据啊,这些内容存储他不是静态资源,静态资源是固定的,出来就是这样的一个模板,就是动态资源, 但是这些动态资源包括这些图片,包括这些这个这个幺三九等等。再比如说,比如说他买,买两件一百三十九,你如果说只通过前端的页面,你怎么样能够算出来两个?他买两 需要一百三十九乘以二,让他结算这个金额,你算不出来,对不对?因为这个静态资源只是让我们看到的一个静态的一个页面,那么如何让他实现这个动态资源?就是我们能够看到这东西啥时候给他返回过来,或者说啥时候他买两件的时候,这个钱怎么算?这个是不是就牵扯到一个逻辑了? 那你说他只通过前端的一个页面,他如何来实现这个逻辑呢?你说我通过 gs 可以不可以?当然可以,但是你在处理一些大型的后台数据的时候,你是不是还在用?你用夹瓦,你说使用夹瓦是怎么样?夹瓦是不是来处理逻辑的?对这些动态资源进行处理逻辑的对不对?处理逻辑的,我们来看 处理逻辑,我们现在访问的是一个前端的一个页面,前端的一个页面对不对?但是呢我们想来处理这些动态的资源或者数据的话, 需要怎么样?是不是需要加瓦的逻辑来处理?那么加瓦的逻辑他如何能够和前端这个页面结合到一起呢? 我们之前整的是不是只能在控制台输出啊?我们处理这个逻辑,我们的逻辑和他这个前端的页面怎么样结合呢?他是不是就需要一种规范呀?他最起码得让这个服务器先能识别出来这个东西吧? 对不对?服务器因为我们的整个整个项目都是运行在服务器,所以说服务器能够识别出来完之后,接下来服务器是不是就可以把它返回给浏览器了, 对不对?这个呢?就是我们为什么要使用 siri 的为什么?也就是说 siri 的是运行在服务器端的小程序,你也可以把它理解为 siri 类的,就是运行在服务器端的加瓦程序。 我说这个不严谨,好吧,因为他不只是加吧,好吧,你现在就这样理解好不好?这样就明白了吧?因为我们需要让这个 sorry, 他作为一个中间人,才能够让前端的页面访问到我们这个 sorry 里头,里面把这些数据进行一个逻辑处理。 这就是为什么刚才一直要给大家来讲我们的动态和静态资源,讲动态和静态资源就是为了用在这里, 我们斯文里头的目的就是要对这些动态资源进行一个逻辑处理,逻辑处理你必须使用加瓦,你使用加瓦,那么前端他怎么来识别这个加瓦代码呢?他就需要一个规范,规范谁来制定, sorry 才来制定。 再比如说我给大家来通过刚才这个很这个清晰的给大家理解解释。接下来再来看这个是不是你在餐厅 吃饭,服务员就是 siri 的服务员,是不是需要对这个客户的菜单?客户是,比如说我需要点一个鱼香肉丝,呃,酸菜茄子是烧烧烧、烧花鸭、烧子鸡、烧烧雏鸡、烧子鹅,乱七八糟,对吧?卤煮卤鸭,是吧?不再报菜名了啊? 就是服,服务员呢,我们这个服务员呢,需要对这个客户的数据进行一些处理,对不对?处理完之后呢,我们需要给他传递给大厨,大厨是不是就是服务器啊? 对不对?然后这个服务器就是这个厨厨师啊,厨师把它做好了之后,服务员就是所谓的萨瓦迪卡,再把它传递给客户, 对不对?其实也是怎么样?其实就是这个服务员呢,需要对这个用户,用户给你报这些东西,他是不是需要对他进行一个逻辑处理啊?处理完之后怎么样?服务器得识别他呀?就厨师得识别他,他说的是啥东西啊?怼完之后是不是再把这个东西传给客户?这个明白了吧? 再通过 sorry, 他把他传递给客户, sorry, 他有一些方法再给他传递出来。客户,好,这个你就明白。这服务器是不是就是一个中间人? sorry, 他就是一个中间人。 sorry, 他的目的是什么? sorry 类,他的目的啊,就是实现前后端的结合,目的就是实现, 就是实现前端动动态资源的逻辑处理, 明白了吧?逻辑处理,要不然的话你写一个家吧,那他这个前端他能看懂个屁啊?是不是就就不是一个系统?所以说我们要定义一个规范。 好,那搞完之后我们呢就来给大家搞一个什么 sorry 的一个快速入门,好吧? sorry 的快速入门就分为这这四个步骤,就是说你新创建一个加微一项目,我们是不是已经创业过了?加 一项目我们可以在里面再等会再创建一个 model, 好吧?创建一个 model 就是再搞一个新的,然后呢?就是新建一个加瓦类,实现一下塞伯利特接口。怎么实现?塞伯利特接口是不是直接?嗯? plus 塞伯利特就可以了,然后呢就是实现它里面的一些方法, 里面有很多很多的方法,那么接下来我们就配置三八类的,在这个外部点叉 m l 里面进行一个配置,这个呢就是一个配置的文件。 好,大家这个看到了吧?看到完之后你现在来看一下啊,我们把这个步骤来给大家复制一下,敷上之后我们来写一下,这是塞罗雷特快速入门 来,我们呢在这个泰斯塔泰斯的外部里面,这个是整体我们的一个大项目,我们在里面呢,因为我们接下来演示一直要在这个泰斯的外部里面,所以说我们你有一个,呃,在新建一个 model, model 就是工, 其实幅度就相当于是整个项目下面的一个小工程,那么接下来肯定还是需要使用加挖 ee, 对吧?加挖 ee 之后把外部 ok k 成勾上,勾上完之后 nex 的,但是完之后我们需要去改名字,改名字叫什么?呃,对零一对零一, w e b 外物的外物对零一,对吧?对零一,然后分的是好,外部对零一分的是好,这就可以了,可以完成。我们来看, 我们需要建一个 sorry 的,需要建一个 sorry 的,我们来看这,你看,你看这些 index gsp 就是默认的东西,我们把其他关掉扣子啊的默认东西,他在什么?他是不是在外国?外国是不是就是前段页面,他在这个页面下面这些东西啊?外国,那我们要写的什么?我们要写的是不是加瓦呀?我们要 新建一个四万类的,对不对?实现四万类的建,建一个加瓦类,那你加瓦这类需要怎么样?是不是在这个 src 下面,对不对?所以说我们来新建一个包 cn, 点 c f g, 好,先点陈富国。那么接下来呢?我们来建一个 sorry 的一加瓦啊,来,同学们看右键,你有一个加瓦,一定要记住,我们的加瓦文件都在这个 s r c 下面,前端东西在外部下面,然后我们搞一个什么 s e r v r e t sorry 类,特一 d e m o demo e, ok, ok 完之后你现在见的啥东西?你现在见的是不是一个加?妈的泪啊? 好,加完类,那我们接下来需要怎么样?来把这两步给他抽过来,抽过来啊, 出过来。那我们需要怎么样?新建一个类,实现 solo 类的借口, 实现 solid, 咋实现 implant? 谁 solid? s e r v l e t solid, 记着要选这个啊,加瓦 x 下面的 solid 实现完这个接口之后,他爆错了,为什么?你看克拉斯萨瓦迪卡,怎么怎么马斯特比,是不是说明他的一些方法我们没有重写,怎么来重写?是不是就是实现加了中的抽象方法,来 aim plant 买啥的, ok, 这个时候是不是就是怎么样实现了 service, 重写了他下面的一些这这这个出现方法,对吧?出现方法,你看 inita, 然后有这个什么 service, 卡菲格,然后还有 service, 还有什么 service info, 还有这个 destroy 这几个方法。那我们现在呢?先先写一个,在 stroverts 下面写一个什么 strvis 创建,创建了 s e r v r e t, 创建了 sorry 好不好?那创建完之后我们看还有第四步,第四步怎么配置 sorry 的?在外部点叉 ml 中配置就是配置 sorry 的。好,我们找到外部,外部下面是不是有一个外部点叉 ml 配置,来,我们来写一下 外部点,这这个提头已经写好了,就是这个叉 m 是什么样的版本,因口顶就是字符编码是一个什么样的 utf, 杠八等等这些题 我们先不用管他,那么这个时候怎么写 seven eight, 然后呢? seven eight 内幕,这个 seven eight 内幕是什么意思呢?来,我们接下来还要写一个什么 seven eight class, 好,我们来配置这个叉 m 文件,这个 solidate 内幕是不是就是我们接下来通过这个端口号点哪个地方能够找到这个 solid, 能够找到这个 solid 戴帽仪,好吧,那我们现在就给他一个 se r v l e t solid d 第一好不好? solo 的第一,你看 solo 的内容就是这个 soli, 他就是我们需要在这个外部里面是不是要把把什么,把这个家外文件和这个外部页面他相有趣的结,有有序的结合到一起? 第一啊,这个是一,第一好,第一,那么这个时候就是 sorry 的内幕是第一,那么这个 sorry 的第一它指向在哪哪个地方呢?是哪一个 sorry class class 是不是就加我文件哪个类呢?我们来找 cn 点 cf 机点 sorry 的呆猫一, 好吧,这个是什么意思?就是我们接下来来访问这个 sorry 的对一的时候,怎么样就找到了 cn 点 cf 机 sorry 的带风衣,就找到了 cncf 机下面的 sorry 的带风衣。好,那么洗完之后我们再写一个 sorry, 买一瓶 好, sorry 特麦平,麦平是什么意思呢?就是就是映射的意思,麦平就是映射的意思,就是让他们两个呢产生一个映射的一个关系,产生完之后,这边 sorry 的 demon 是不是他第一,是不是他这个 severalized 内幕?你看 severalities of 内蒙, 这个 sorry 的 sorry 的麦皮就是映射,就他俩一一进行对应,然后他现在接下来对应什么?你看我通过这个 sorry 的第一是不是找到了他,找到 sorry 的内幕一,然后这个 sorry 的内幕衣找到是谁,是不是找到新闻联系 f e 他下面的 sorry 的戴墨镜,那么这个 url 是不是路径的意思? url 就是路径啊,网址路径,这个 拍他什么意思?你看模式啊,就是就是,说什么意思呢?这个地方要写的是我们通过前端如何来访问他,别说我 s e r s e r v r e t sorry 的一好,那么如这这个这个整个代码写完是怎么样啊?给大家来看一下, 好,来看一下,画一下图啊。他们两个呢,是产生了一个映射的一个关系, sorry 他 和骚扰里的麦平产生一个映射关系,首先呢,你看,首先我们给这个地方骚扰里的内幕,他俩内幕要保持一致,因为一致才能够产生映射 一致啊,一致之后 sorry 他第一, sorry 他第一是找到了谁?是不是吸引点 cf 机下面的 sorry 的戴墨镜是不是就找到了他,拉的 他的一个执行流程让大家看到啊?就是什么 sorrytella, 新星点 cf 机点单位一,是不是通过他是不是找到了?找到哪个地方? 通过他是不是来,来到了这个地方,找到了我们写的骄傲文件,那么这个映射是怎么什么那个意思,因为 u i l 就是网址入境, u i l 就是我们在网址在写网址的时候,在这这浏览器访问的时候,怎么样来找他?我不可能写这么长。一一一一一大六,对吧? 这个时候就要产生映射,我这个 sorry 弹幕一,一旦写完,这个杠 sorry 的。第一,我找到了谁,找到了 sorry 的内幕,是不是找到了他?我这个 sorry 的内幕仪和谁产生了映射?因为你看他俩都是 sorry 的内幕,他俩是保持一致的,所以说我找到了他, 我找到了他,他又找到了谁?他是不是又找到了他?他是不是又通他通过他找到了新联系 f g 下面的加号文件,也就是说我们配置这个文件的目的是什么样的?映射文件的目的就是我们最终要通过网址上只输一个杠 sirilit1 就能够找到这个 sirilita, 明白了吧?这就是他的一个一个过程好不好?那我们接下来怎么样呢?接下来来运行一下 加运行一下。好四二八雷特 dme text 幺零九九音,说明什么?说明这个端口号已经被占用。好,我们来配置一下艾迪特 v 零一, 我们再来启动一下。 刚才呢是因为什么?因为这个地方我们创建的这个安什么内幕的,他是形的 tfboys 的外部,所以我们现在要要要搞的什么? 这个外部?对,零一,所以说他,他指向的是 tom k 的八点五点三,因为刚才这个还在运行,所以他们两个默认蛋糕都是八零八零,所以说会提示一个重提示一个已经占用,所以说我们把它关掉就可以了,关掉完之后重新启动, ok 的,八点五点三点一,这个八点五点三点一的,你看看一下他默认的啊,默认的已经配置好到我们这个。呃,外部对零一这个就是正在运行。 好,我往下看,我往下看,我们现在这个摁的刀,这,他现在访问的是不是我们这个对零一下面的? 你看对零一这个地方啊,你看是访问的我们这个对零一下面的一个初始的一个呃,剪视频页面,对吧?那我们现在需要怎么样?我们现在通过配置文件想来访问这个 sorry 类态。一, 这个 sorry 他姨是不是最终能够找到这个吸引点? cf g 点戴帽。一,找到她,找到她,她将会执行一个什么样的东西呢?是不是有打印一句话,创建 sirilet, 姨,创建 sirilet, 那么如果说我们通过输入这个网 网址,我们在控制台能够打印出来这样一个东西,在控制台能够打印出来创建 sirito, 是不是就说明我们通过配置文件来操作了我们的 sirito? 好,写一个斜杠,好,我们来。嗯,这个 sorrylit。 一,小写 s s e r v l e t slvrlitt。 一, 好,我们再看一下啊,这个三万累他一, 关闭,其他重新启动一下, 好,我来找你。 哎,还是四零四,我们来看一下让人看到的,来,重新启动一下,重新启动, 把这段执行的汤姆贴到八点五点三,一,我们现在的目的呢?就是让他打印出来这样一句话,就说明,是吧,说明我们执行了这个操作。 好,我们来看一下这个 sorrylite。 一,这个呢,一旦不输,输不对的话,他就会报错,报一个四零四,四零四就是找不到路径,我们是不是 s e r v l e t e 斜杠?好, 我们来现在是不是没有四零四了?没有四零四是不是说明你看来只打印了一句话,创建了 sure late, 这说明什么?说明我们通过这个配置文件来操作这个 sorry late 操作成功了,对不对?那么如果说我现在打印其他话,你看 打印其他话的话肯定也会打印。通过这样一个初识斯文利特的一个例子呢,让大家认识到一个什么样的一个东西呢?就是我们来如何?首先什么是斯文利特? sorry, 是不是对这些动态数据进行一个处理?但是我们现在先不对前端的页面进数据进行处理,因为我们还没有获取那个数据,我们现在先让我们通过后端的这些网址就可以来操作我们的这个 sorry 的加我文件,是不是就是让他们产生了一个结合?因为你看通过这个路径,通过这 直接输了一个杠, siri 的一就能够操作我们的 siri 的家务文件,是不是就已经让他们产生了一个结合? 对,那么这个地方大家也需要明白这个叉 m l 配置的一个意义,这个意思是什么?好吧,他的一个是谁找谁,怎么样来找到这样的一个过程,这个呢就是我们讲的一个初识,一个 sorry。

当你的面试官让你谈一谈对于 m v c 的 一个理解的时候,如果你一上来就照搬模型,试图控制器这三个词虽然说没错,但是却很难出彩。想拿出亮点呢?我们不妨先用一句话来概括本质,比如说 spring m v c 是 spring 框架对于经典的 m v c 设计模式的一种实现以及拓展, 基于 server-app 去进行构建,并通过前端控制器模式将 web 层开发标准化、自动化,显著地简化了我们基于 h t d p 的 一个请求的处理流程。 在传统的 mvc 中, model, view, controller 各司其职,而在 spring 的 体系中,这一结构将被进一步的细化。业务逻辑通常我们会放在 service 层, 而数据访问则交由我们的 repository 层,也就是我们的仓储层。而 control 呢,则由专注于 web 请求的一个协调以及响应。而这种分层虽然不属于 mvc 的 原始定义,但是在 spring 的 全家桶当中已经成为 一个事实上的一个架构约定。而 spring mvc 的 核心机制是前端控制器模式,它是由 dispatch service 担任总调度的一个角色,他统一接收所有的请求,再根据我们的配置映设规则将所有的请求 分发给对应的旁圈的注解进行一个处理。而控制器完成了之后,通常会返回一个 model and view 对 象,随后由我们的 view resource 去进行试图的解析,最终则渲染成为我们 html 的 一个页面,反 返回给客户端。不过要注意的是什么呢?如今大多数的架构已经转向了一个前后端分离的一个架构, control 呢?不一定返回我们所谓的页面,如果你使用了,比如说 rest control, 或者说我们的 converter, 自动地将返回值转换成为 jason 或者叉 ml 的 一个格 是直接响应给前端。可以说 three m v c 是 对于原生 sublet a p i 的 一个高级封装。开发者不需要手动地编辑多个 sublet, 维护繁琐的 u r l 的 映设参数,我们去进行提取, 而是借助了 dispatch serverlight 统一进行调度,它实现了请求分发、数据绑定验证、异常处理与试图渲染等流程的标准化。总结来看,如果回答这个问题的时候,我们如果机械地去重复性的描述 mvc 三个字幕,其实没有任何的意义。 你要讲清楚 springmvc 是 如何基于 serverlight 容器进行工作的,如何通过 dispatch serverlight 实现了解偶以及 拓展如何适应我们的一个现代的前后端分离的开发需求。那么理解了这几点之后,面试官就能看到你不仅懂概念,更明白他的一个设计意图以及实现的机制。