00:01
呃,最后呢,我们讲到了这个回滚策略啊,其实跟那个异常相关啊,咱们家务中的异常分类呢,主要分为两大类啊,一个是呢,我们的运行期异常,一个是编译期异常啊呃,有的同学会误会啊,有同学会误会,他会觉得呢,这个编译异常呢,就是编译的时候出的异常,那么运行期异常呢,是运行的时候出的异常,其实所有的异常都是在月份的时候出现的啊,那么为什么我们还称之为叫做编译期和运行期呢?那是因为啊,咱们其实换个称呼可能会更好理解一些,咱们这个异常分类啊,咱们异常分类换另外一个称呼叫什么呢?叫咱们叫做什么呢?叫受控异常。和非受控异常,说的简单点的,就是说受控是受到我们控制的异常,非受控就不受到我们控制的异常啊,就这意思啊,那么我们这个受控异常就是我们所谓的叫编译期啊编译异常啊,就这意思,然后呢,这个呢,我们叫做什么呢?叫运行期啊,咱们叫运行期异常,嗯,然后呢,我们还有另外一个称呼,另外一个称呼呢,什么叫叫提示性异常。
01:08
啊,也就是说我们前面如果不好理解的话,咱们可以理解这个东西叫提示性异常,什么叫提示性异常啊,就是我在写代码的时候,我的开发工具就提示你,提示你什么呀,提示你你这段代码可能会有问题,你要事先做处理,就这个意思,什么意思呢?比方说那个叫not found exception,我想要读取C盘的一个文件夹下面的文件,那我要读这个文件,我是不是事先就应该知道这个位置的文件可能不存在。是不是啊,对,我读这个文件,我能保证它一定存在吗?不见得保留不了啊,对不对,或者连这个D盘都没有,那路径都没有,都写错了,那这都有可能啊,比方说我离那个下面就没有D盘,没有C盘,那这样的话你的路径可能都是错的,所以啊,我这个是我都不用执行,我就能事先提醒你,我告诉你这个文件有可能不存在,那不存在的话你怎么办?我提示你之后,你该自己做处理了,所以我们应该加一个TRY,之后呢,来捕捉异常,捕捉异常干什么?诶自己创建文件,文件不是不存在吗?没事,我自己创建个文件就可以了,这种方式就类似于我们之前给大家讲的那个叫什么呢?叫name not found exception。
02:20
当我们去查询命名空间的时候,如果它不存在,我们是不是应该捕捉异常啊?你捕捉之后是不是该自己创建一个命名空间呢?诶,这就是解决方案,所以提示性异常就提示你,告诉你可能会出现这样的问题,同样道理,Circle exception circle exception什么意思?你连接数据库,你连之前难道就想不到这个数据库可能没开吗?难道你就想不到可能网络不通吗?你在连之前你就应该事先想到的,那既然想到的话,你应该事先做一个什么呢?来做一个我们的处理,所以啊,这种呃异常呢,我们称之为叫编译器异常,或者叫提示性异常,来提示你该做一些处理了,而这个运行器上说白了就是什么呢?程序员考虑不到的事情,为什么预想不到,我从数据库里面取数据出来了,我怎么知道为空?我觉得不应该为空,但是不知道谁无意中把那个数据变为空了,我想象不到我这个除数为零,按我的理解,我的程序中不可能除数为零,但是谁知道那个位置数据为零了呢?我不知道。
03:21
所以这种异常呢,我们spring认为这是我们意想不到的,那我为了保证数据不出问题,我要给你回滚了,而那个编辑异常我就不会回滚啊,但是啊,这是spring考虑的,跟我们考虑是不一样的,我们考虑只要你出异常的,你就应该给我保证数据的一致性,你就应该回滚啊,所以我们就改变了它的异常的什么呢?这种方式啊,所以我们配置文件当中,这边就写了个叫Java点浪点exception啊,就是这个意思,嗯,好了,这个呢,我们稍微的给大家说一说啊,那么我们的spring框架的这个配置文件,咱们就简单的介绍了一下,其实两里面呢,就两个核心功能,一个A,一个我们的loc啊好,接下来呢,我们再回过头来看另外一个配置文件叫spring VC的配置文件,那么这个文件当中第一个呢,它还是扫描正好呢,跟我们刚才的那个扫描呢,诶我们说相反了,因为咱们之前的那个扫描呢,是排除了我们的controller,那么这里呢,就要包含我们的controller,叫要包含咱们的什么我们的controller啊就。
04:21
个意思,然后呢,它里面还会有一些默认的这些什么来操作,咱就不说了,还包括什么我们的drive啊,跟注解相关的,然后这边呢,有一个叫做什么呢?叫视图解析器,它为了能够什么,我们说降低耦合性,你跳转的页面我希望呢,你自己来设定它的规则,所以啊有一个叫视图解析器,否则跳转页面我去哪儿啊,你不能固定写死了,那你不固定写时的话,那么按咱们要按照一定的规则来实现,这里面就有个叫前缀,有一个叫后缀,那么前缀和后缀中间加的就是我的view name叫做视图名称啊,就这么个意思,所以啊,它跳转页面呢,应该是我们这么几部分,它再加上我们叫V内,再加上一个,这个呢叫做S,我们的后缀啊,前缀中间和后缀啊,是这么个概念,嗯。
05:13
然后呢,接下来下面呢,是我们的这个啊叫no handle adapter,这是什么呢?这是我们的那个注解方法的返回实现,也就意味着当我们的服务器把结果处理好之后,向页面返回的时候,这个消息我该如何来处理,所以啊,有一个叫message,这个message的转换呢,他用到了这个东西。叫Jason啊,这个叫Jason,嗯,这个呢,咱们之前也提到过啊,咱们说了,其实说白了就是一个javascript啊,然后呢,Object notation啊notation,我们后面呢,给大家把这个亏本呢,稍微给咱们说一说啊。我写错了啊。嗯,好了,然后呢,接下来下面呢,就是我们这个Jason的格式啊,然后呢,这里呢是字符编码啊,就不说了,然后接下来呢,是我们这个叫Mar part,是我们的文件上传解析器,文件上传是特殊的处理啊,它的数据传输方案呢,跟以前的都不太一样,所以我们这里呢,会有专门的类来处理文件上传啊好了,这是我们spring VC相关的配置,之前呢是我们spring相关的配置,然后呢,我们这里呢,还有一个我们买相关的配置,但是现在什么业务都没有,所以这个呢,咱们先不管它啊,但是呢,不管是不管的,但我该加的还得加啊,所以呢,我这样,我把咱们的这个呢拷贝一下啊拷贝啊,我想想啊,咱们拷贝它,把这个呢,我稍微的给它去一下,嗯,好了,然后呢,这个里面有个叫query data,这个咱们后面会查,所以我这样吧,我先不用它吧,先给它注掉吧,啊,咱们先给注掉,嗯。
06:47
把这个呢,先给它注掉啊,咱们后面用的时候咱们再说啊,好了,那行了,我现在呢,Spring也有了,我的springc也有了,我们的MY也有了,现在我们准备呢,给大家去演示一个最基本的操作,把这个三个框架呢给它演示出来,没问题了,咱们再去集成我的业务啊,现在呢,首先要判断一下框架集成的有没有问题,那框架集成的有没有问题的话,首先要把那个controller service这些程序呢给它加上,所以啊,这里呢,我们来点击new啊,来点击new来创建我们的package啊,我们把这个呢改成我们叫controller,嗯,好,点击OK啊。
07:27
然后这里呢,再来一个我们的package,我们叫service,那么service当中我们还应该再来一个啊,这个我先写上吧,咱们这里呢,创建一个叫call log叫servicece啊,咱们面向接口编程,这里写个interface啊,写个它,然后呢,我这里再来创建一个点。点以后我们new创建一个我们的package叫IMPL,叫实现类,那所以呢,在这里呢,我再来一个叫做new啊,创建一个我们叫做IMPL啊,一个实现类,然后呢,我这里呢,要实现我们的接口,诶给它拿过来就可以了啊好了,行,那这个道有了,Service有了,我再来创建一个我们的controller啊,然后呢,我们写上它,嗯,我们叫做Co log,我们的controller OK,然后呢,点击OK,诶就行了啊这个呢,我们写上,嗯,咱们叫通话日志,通话日志的控制器对象啊控制器对象。
08:26
控制器对象好了,然后呢,拷贝,拷贝以后咱们那个service,诶放过来放到这边,嗯,然后呢,通话我们的日志的,我们叫做服务对象啊,咱们叫做服务啊对象OK,然后呢,这个道我们也给它写上啊,数据访问对象,嗯,控制器啊,我们的来数据访问对象,数据访问对象好了,那现在把三个对象咱们都给它扫,给创建好了,创建好了以后,你千万要记住我们谁扫描什么,什么意思呢?我们的spring框架他要扫描的是我的service,我们的框架扫描的是我的controller,我们的买扫描的是什么?这个诶,所以啊,把这个区分开,每个框架可以识别不同的对象,那就首先来吧,我的这个controller,它是我们的控制器对象,它应该被spring VC扫描,所以我接下来就要增加注解,这个注解就是我们VC。
09:26
的注解了,所以我这里有一个叫controller,诶,就是它啊,你把这个加上就可以了,你加上了以后,那接下来我们的service service我们也要加注解,为什么呢?你要有我们的spring来扫描,所以圈我们叫做什么service,诶,你把这个给它加上,那么我们这个道它是由我们的MY白扫描的,但是这个扫描是不需要你家注解的,为什么呢?因为在它的配置信息当中,它其中有这么一个操作,它扫描的不是某一个类,而是扫描整个包,指定的包下面只要有这个接口,它就自动给它扫描到了,你都不用管它啊,所以我们这边有这么一个操作啊,好了,那既然有这么个操作的情况下,那我这个道呢,我就不用管它了,那我的service和controller就有了,有了以后,对象有了你的组合它们之间的关系了,所以我们需要在service当中去增加那个是吧,数据访问对象的那个A属性,所以我们我们叫做log,我们叫做。
10:26
诶把这个给它加上,加上以后我放过来啊,组合它们之间的关系了,嗯。好,然后呢,那组合他们之间的关系的话,我们spring恰恰在这个环节是非常擅长的,它里面会有一个叫auto的,叫自动装配啊,有这么一个东西啊,然后呢,有这么一个东西的话,那这个时候呢,诶。看看啊,这个怎么不对呢。No being。啊,这个不用管它,这个不用管它,嗯,它这个是因为我们的开发工具呢,它没有识别出来啊,它会认为呢,我们当前整个对象里面没有它,但是那个是我们的买Betty扫描的啊,所以这个不用管,那好了,把这个拿过来以后,接下来我们再往下看啊,我们看什么呢?我们这边还会有一个我们的controller,那controller当中来,我们写上叫pro,我们叫做Co service啊,然后呢,把这个拿过来,诶咱们Co log service好,拿过来以后在这里呢,给它加个圈A啊,我们这里面凹to我们的,嗯。
11:28
呃,把这个呢放过来,嗯,行了,现在controller关联到service service关联到我们的到那只要呢能够正常的去访问的话,我们相信问题是不大的啊好,那接下来我们就准备试一试了,怎么试呢?我先来操作一下,我先来操作的时候啊,我首先我这里准备做什么事情呢?做两步操作,第一个是跳转页面啊,我们要跳转页面,第二个是什么呢?第二个是要返回接上的一个字符串来访问我们的数据啊是这样,呃,我看看这个地方,我现在准备呢来操作一下,网络断了吗?
12:05
挂了是吗?你们能看到看不着了是吗?好啊,不管他,嗯嗯,问题是我这怎么不行了呢。好。好了,现在呢,我们来试一试啊,因为刚才我们介绍了我们的几个对象了,那接下来我们就来演示一下,第一个我们写上叫public,我们叫做spring,然后呢,写上咱们做的简单点啊,咱们呢,我们的业务当中就是为了去查询我们的那个通话的时长,通话的那个时间,所以啊,我们这里写上第一个我们叫query quary什么意思呢?查询有一个专门的条件,这个条件呢,我点按钮呢,去我们的什么具体的页面,所以呢,我们这写个quary啊OK好了,然后呢,在这里呢,我加上一个圈A,这个圈A呢叫request mapping,它表示的含义呢,是我们发送什么样的请求可以走到这个方法当中,所以有一个叫request map,那我就发一个叫har的请求,你只要发送一个叫查询的请求,就会走到一个查询条件的页面啊,所以我这里呢,就直接我们写上叫return啊,我们这里非常的简单啊,咱们直接叫return,嗯,好了,然后写上咱们就叫query,那你这么写完了。
13:23
以后我该去哪找这个页面呢?我该去哪找这个页面呢?那么这个页面其实我刚说过了,我们这边有一个什么东西啊,叫做name和这个叫吧,那这个是我们查找页面的规则,你查找页面有前缀,有后缀,还有视图的名称,那我明确告诉你,咱们返回的这个字符串其实就是我视图的名称。就是我返回了这个字符串,Query就是那个视图的名称,那么如果是视图名称的话,那么它就是那个叫query,那么前缀在我配置文件里面是有的,所以我找一下在我们这里,我们找一下这个前缀在这儿。
14:05
所以拷贝拷贝以后就是它啊,就是它,那么后缀呢,就是我们的这个东西了啊,就是它了,所以把这个我们拿过来好了,那大家想想吧,你现在把它组合在一块,你看看是什么样的一个路径,这个叫web info,你把query拿过来,你再把它拿过来,你会发现是不是只要在指定的位置增加一个页面就行了,所以在我们这里呢,同学们看,我们有个叫web info,不就它吗?它下面应该有个in个文件夹叫JSP,所以啊,我们来,我们写上new,创建一个我们的啊。来叫JSP,然后呢,创建完了以后,我再有一个叫跨点JSP啊,把这个呢,点击new,我们给它加进去啊,嗯,创建一个我们的文件,嗯,传这个吧,然后呢,点击OK,点完以后我们就写上叫cor里我们叫JP啊好了,我现在把它就写完了,写完了以后,那下面咱们现在呢可以去试一试,看一看我们当前的程序能不能跑通,最起码这个页面能不能出来,只要能出来就说明环境上是问题不大的啊好了,那现在呢,我们试一试,我们还是从这边开始找啊运行。
15:20
运行以后我们来看一看我们的结果啊,最起码保证我的页面能够跳转成功啊,咱们再说别的。好了,那现在呢,我们去把这个打开,打开以后首页是没问题啊,那我现在要做的事情就很简单了,叫我刚才是不是说了在我们的地址上要有个que啊,你发送一个这样的请求去走到相应的方法,所以回车,回车以后大家看对不对,是不是去到了我的那个叫跨JP啊,说明我的页面跳转没有问题,那你页面跳转没有问题是不是说明我的spring VC没有问题啊,啊,而且中间的过程没有报错吗?那说明我的spring应该也没有问题,只不过你没有连接数据库,我们的买有没有问题啊,不知道,这个咱们先不管它,咱们先往后来做啊,那好了,那我现在呢这一块呢,我跳转页面可以了,但是我还得做另外一件事情,如果我想从后台来读取数据,怎么办?我不跳转页面了,要读数据,那这个时候呢,我们要写上叫public啊,我们写上叫string,那我这个叫view啊,View什么意思呢?查看的意思,我要查看一些数据啊,我们这里来直接写,我写上以后很简单,大家看我写个叫做map,比方说。
16:43
我把数据的查询结果呢,封装成了一个我们的map,那么好,那这个时候呢,我们写上一个它,我们就叫data map吧,嗯,等于new我们的哈希map。然后呢,我们来啊,我们写上它诶就可以啊,好写完以后,那我现在的这个地方我就准备啊,Data map,把我们查询的结果呢,给它放回去了,我叫put,这个put写上叫user name,然后呢,写上一个张三,那咱们写个张张三,好写完以后再来一个比方说你的这个年龄,你的性别。
17:18
把这个呢,我们拿过来一下啊。呃,User name呢,我改一改啊,咱们比方说换上一个啊,咱们写个20OK好了,行,那我现在就想把这个数据呢,给我的浏览器呢,给它传回去,刚才呢是把页面传回去,现在是把数据传回去,你把数据传回去的话,那我现在直接返回我的map就行了,我直接返回我的叫data map。那如果你这么写的话,那我这写个字符串就不对了,因为你返回的不是个字符串,你返回的是个对象,咱们叫object啊好了,可是我们之前讲过,在互联网不光是互联网上,就只要在网上我们传递数据,可能传个对象过去吗?不能啊,传不了对象,他只能传什么字符串,那你只能传字符串的话,可是我给你的是不是这个对象麦克是不是个对象集合对象吗?但是我们说了,在网络中是不是只能干嘛呀,只能传字符串吧,那是不是应该把我们的这个给它干嘛变成我的使string啊,变它,但是你把一个对象变成使string,你要知道它默认的变是怎么变的呀,它默认的变是不是是我们的某一个类型,比方说U的后面加个圈A啊,后面有一大堆数字吧,就所谓的那哈一扣的对吗?但这不是我想要的,我我得想要看得懂啊,所以在这种情况下,我们就有一种特定的格式,这个格式就叫Jason格式,所以也就意味着我要通过Jason的格式把它变成我们的字符串,那这样的话在我页面中。
18:46
通啊,我能看得明白,哎,就这么个概念,所以那么我要把一个对象通过接线的格式变成一个字符串,我需要采用特定的方式来做,所以圈A我们写上叫request mapping,这个request mapping表述的是你到底怎么去访问这个功能,我们叫做斜杠view,还有一个你的返回结果到底按照什么格式来操作,我写个圈,咱们叫。
19:11
叫做响应体,把我的对象放到应体的什么变成字符串,诶就这个意思,所以在当前场合下,你只要把这个加上就可以了,你加上了以后,我们可以再来试一试啊,所以我们这里呢,还是给它启动啊,重新来。只要你保证页面能跳转,你保证我的数据能得到,那整个的环境上应该问题就不大了,那接下来我们再去做业务就可以了啊,环境保证没问题,嗯。嗯,好了啊,现在呢,我们这边呢,应该是可以了,那可以了之后呢,我这边要换一换了啊呃,我这边要换,换什么呢?咱们写一个叫view啊,我写个回车啊,来我看看啊,咱们把这个该关的关掉它吧,咱们把这个来啊,咱们写上叫view回车,回车以后啊,咱们看一看。
20:03
哦,这不是我想要的,嗯,换个浏览器啊,来换个看。啊,没有啊。好,同学们看,把它关掉啊,关掉以后你会发现我返回的这个对象吗?不是个对象,返回的是一个符合特定格式的一个字符串对吗?这个格式就叫格式,这个字符串我们就称之为叫字符串,所以我们那个当中有一个叫A啊,有个传递数据的A对吗?那个A就靠的是接省格式来传递数据的啊,靠的就是这样的格式来传递数据的啊。所以呢,这个呢,我们也是了解一下啊,这就说明了我们当前的这个环境呢,配置基本上差不多了,数据库你还没交互嘛,这个咱们后面再说啊。
我来说两句