00:00
来接着我们来看一下添加图书,添加图书咋做呀?添加图书在这个位置你看见吗?你点击之后它跳到哪呀?跳到book edit啊,这个地址不太对啊,Book edit在哪你看到吗?就这个book edit是吧,它路径不太对,他少了什么,他少了pages manager。你看到吗?少了pages manager,咱们改改吧,呃,咱们找到book manager这个地方啊,Pages manager就是这样,那回来咱们刷新一下啊,咱们刷新一下这个就不需要断点了,咱们就放过去吧啊。这也这也不看了啊。好,现在这个页面已经出来了啊,咱们点击添加读书,它跳过来了。没问题,好,那么接着咱们在这里输入完之后点击提交,整个流程是什么样子呢?哎,咱们来梳理一下啊,首先呢,这里是那个图书列表管理页面啊,图书列表管理页面,然后呢,这里有一行一行的数据啊。
01:13
一行一行的数据。啊条一行图书信息,一行图书信息是吧?嗯,好,我们把这个拿过来。好了,最底下不就有个添加吗?放大一点添加添加啊添加好了。来咱们看一下哈,当他点击了这个添加怎么办呢?诶,它会跳到一个。添加图书的页面。我把这个拿掉啊,这个呢是添加图书,添加图书的页面,也就是什么不可下划线edit.gdp页面。
02:12
啊,添加图书,那添加图书里是啥呢?其实就是个表单嘛,是吧,就是什么书名啊是吧,下划线啊给你输入,然后这个作者。啊,价格。销量库存。是吧,大概就这内容嘛,然后有个提交嘛,是吧,哎,提交,然后这个提交啊,也就是一个提交按钮,大概就这样子啊这样好了,那么我们就整理一下子,那你进入到这个页面,注意看啊,你点击添加诶,它跳过来是吧,没错,就这个流程,然后呢,我们就开始在里面输入内容啊,哎,某某某某某某某某某某某某某是吧,这时候你得去提交,提交给谁呀?是提交给服务器呗,那服务器就是谁呢?就是咱们刚刚说的那个book serve that程序这边这个book,哎,程序,那么这个程序里面大家注意啊,每个功能都有一个方法啊,Public的ADD是吧,就添加图书嘛。
03:45
啊,负责添加图书,就这样。负责添加图书。OK好了,诶,那么大概流程是这样子的哈,这边你点击提交,诶提交过来给他。
04:05
是吧,那这里面要干什么事情呢?啊,你想想这里面需要干什么事情,一个你已经把数据发过来了,大家注意看了啊,你点击提交,你肯定要把这些书名啊,作者,销量,价格,库存是吧?发给服务器,那服务器干啥啊,获取请求的参数好封装成为book,可对象你知道吧,哎,封装成为一个并对象是吧?呃,然后。别着急啊,疯狂成为对象以后呢啊,调用book可service.and book方法添加。或者是保存突出是吧,反正就保存到数据库了嘛,诶然后第三大家想想哈,这个时候业务已然完成是吧,我已经放到数据库了,那我应该干嘛。
05:04
大家想想哈,我这里点击提交,他应该回到哪里,他应该回到这点,然后这里呢,给我列出我刚刚添加那条记录。就应该是这样,所以它应该干嘛啊,跳到图书列表页面是吧?诶跳到图书列表页面,诶怎么跳怎么跳,嗯,它的地址是多少啊,就斜杠manager,然后book问号action等于list,是不是跳出来这个地址啊,这个地址不就是查询图书并且跳到图书列表页面吗?大概就这样子好,那么我就先把这个咱们要做的事情啊,把它复制出来,放到我们这个添加的方法里面,一会咱们去完成它啊来吧,啊就这里OK好了,那么大概的流程就是大家注意看啊,它这个跳过来,那它就又回到这边来。
06:12
能理解吧,哎,这里呢,刷新数据,哎,显示添加的图书大概就这样子啊,大概就这样子,好,那我们就按照这样的一个分析来实现一下哈,首先现在已经这个添加啊,已经跳到这边来了,这里面提交,提交完之后他要提交给他,那我们改下这个表单的提交地址,嗯,我们找到book edit啊。呃,找到它这个地方地址呢,咱们改改,改成什么呀,叫many book so that,好,呃,提交的方式,Post get都可以。啊po get,因为毕竟这个东西啊,已经进入到后台了,对吧,这里面也没有含有什么特殊敏感的信息,所以你get也行,这个就不限制了啊好,这里呢,还要加一个隐藏域,加什么隐藏域呀,Action,为什么呀,因为你要告诉服务器你要调用哪个方法呀。
07:22
是吧,你要调用哪个方法,咱们现在提交过来调用哪个方法出现ad啊,那你必须通过这个隐藏域告诉他啊,然后再往下看这个地方大家注意。这个名称啊,这个表单项的名称,一定要把这个book下划线去掉,这里是我们故意写的哈,为啥呀啊,咱们把这些参数封装成为一个不可对象的时候,它需要什么?是不是需要参数的名和Java并谁这个。哎呀,这个book里的属性名是要一致对上啊,哎,要对上,所以呢,这个要注意啊,把这个去掉。
08:05
一定要去掉哈。好,这个去掉之后啊,咱们就可以提交了啊,咱们来看看效果,我。呃,大家注意看,这个地址改好了,该实验它了啊,我们到这边来好呃,首先获取请求的参数,封装成为一个book对象,那这个简单吗?为啥简单?咱们昨天不是写过工具类吗?Copy parater啊IQ点get parater map这边呢,你有一个book对象完事了,对吧?这不就实现了吗?然后第二步定要用book,设点an book book对象你直接放下来,它就可以添加图书了那。添加好了以后怎么办呢?跳过去就完了,来那这里到底是怎么跳呢?大家注意看啊,IEq.get request dispat是吧?斜杠用这个地址行吗?这么写行吗?当然可能没有感觉哈,这么写大家注意看,是有bug的,那我先给你看一下效果吧哈,先给你看下效果,来我们重启一下,重新部署一下。
09:29
这个大码大致就写好了啊,咱们看看有没有什么问题测一下。重新部署了,这还在编译呢啊。OK。来,现在咱们测一下哈。刷新一下。好,添加图书走。走,大家看看这里面走。图书对的吧,你看这个信息都没有啥问题,然后往下走保存到数据库,你到这边来确认一下。
10:09
有吧,哎,没问题啊,老师你刚说有啥问题在哪呢?注意看啊,最后那一步啊,请求转发到book啊列表了,咱们这边打个杠点,你看他过没过来哈。过来你看到了吧,是不是过来了,诶请转发过来了,过来以后往下走啊,查询全部的图书啊,放到绿客的域当中,诶转发过去走,最终跳到页面,诶时间截止是不是出来了,这样一看没啥问题对吧,没啥问题啊老师。这时候注意哦。请求注意,当用户按下F5功能键。功能键F5,诶,发现了吗?他后台这边又直接跳过来,又发起了一次请求,诶。运过来了。诶又添加一次图书,你你看啊,再刷新是不是又过来了,诶发现了吗?再给他放过去,又又刷新列表,你看见了吗?我就给他放过去了哈,好这时候呢,出现两个时间简史,那如果用户又按F5呢,我跟你说这个一闪一闪看见吗?他又过来了,请求又发了一次,诶老师这是为啥呀。
11:26
这是为啥?首先咱们先说明一下哈,图书添加图书已然完成,但还有个B啊,它有个bug,咱们要说明一下。这个bug就是什么?就是表单重复提交,哎,表单重复提交,大家注意看着哈,当用户提交完请求,浏览器会记录下最后一次请求的全部信息,当用户按下记住啊,按下功能键F5,那么就会。
12:13
发起浏览器记录的最后一次请求,那么我们最后一次请求是什么呀?就是添加这个操作。所以大家注意,这里不应该用转发啊,因为我们说请求转发是一次请求,那么你要举的这个bug怎么办?你得用重定向,咱们说过重定向什么两次请求啊,来注意看啊,response.send letter那就行了,地址还是这个地址。但是你得用重对项,大家注意看,但这里要改改啊,请求转发的斜杠是表示到工程名,但是重对项的斜杠呢,表示端口号,那这里是不是缺个工程名是吧,你把工程名啊加上就好了啊加上就好了,好重对项是两次请求咱们继续看一下哈,这时候重新再部署一次。
13:14
你发现这个bug就没有了,稍等啊稍等。好,启动我先亲一下啊。启动成功看见吧,好,启动成功咱们来测一下啊,后台图书管理啊,这咱们先给他放过去,咱们不看好接着咱们看一下这个添加图书,好,咱们再次咱们说个一吧,稍微区分看一下,点击提交,大家看他来到后台。走,这就是那个添加的图书,你看一一看见吗。不同了是吧,哎,往下走保存到数据库了。刷新一下是吧,到数据库了啊,这个时候注意看,从定向我给它放过去,它又查询的是list放过去大家看信息啊,还是显示了的,但是由于大家注意看,由于他最后一次操作什么重叠箱,所以它是两次请求,那么这个时候地址栏已经发生了变化了,这个时候你再按下功能键F5,它只会干嘛,它只会发起最后一次请求,就是list这个查询。
14:28
看见了吗?这边还会重复的添加吗?那就没有了啊,大家注意啊,这是个小的细节,要注意的。
我来说两句