00:05
咱们上节课呢,主要是说了一下这个文件上传啊。哪儿呢,这儿啊,这个。这边呢,我再来说一下吧,啊,这个简单回顾一下啊。首先呢,我们文件上传呢,这个必须得使用POS请求。Get请求不行,Get的请求呢,它只能呢,这个提交一个这个普通的一个文本,而且呢,内容长度是有限制。盖的请求的,它是在请求行上发送出去的啊,问号后边跟上。所以文件上传这种这种这个功能呢,它是不能够使用这个get啊,所以只能用POS,但是你单独用POS又不行啊,为什么?因为form表单有一个。
01:09
有一个属性啊,叫ec ta。这个属性如果不设置呢,它呢是不能够像提交这种二进制数据的。如果你设置了这样一个叫multi form day的这个数据啊,或者是这个类型的。Enc t他呢就可以呢,上传文件了啊,所以这个东西你记住就行了啊,没什么,这其实就是HTD协议规定好的,所以你要上传文件你就写这个啊,你要是不是上传文件,你就写另外一个。你要写上另外一个,我就我就不考虑文件上传这个事儿了。所以这就是个标记啊。另外呢,咱们文件上传有一个组件啊,还记得吧,叫fire是吧。Well。这个你得记住啊。
02:01
有了它才行的,所以这边要注意的一个是post请求,一个是en enc type属性的设置,还有一个就是我们文件上传组件。我们知道啊,在一个文件上传的时候,我们使用了一个第三方的组件啊,这个组件不是散啊,是阿帕奇的,阿帕奇的开源项目啊,一个东西叫commons file upload是吧,叫commons file upload啊把这个名字要记住的。文件上传组件。那这样的话,咱们其实文件上传组件里面把这个东西当做一个对象。叫什么呀?The fire item还记得吧?下边那个也一样,它也当做什么呢?Fire item。但是有些fire item,它是这个表单的普通的一个。空降。啊,它不是个文件,也有可能它是个什么呀,文件对吧,所以我们在底层呢。就做了一些相关的判断。我们再来把这个回顾一下,好,这边我们过来第一个啊,这个request不行了。
03:06
这个不行啊。这个解决不了了,他的请求体编码的编不了了啊,这个不管用,另外这个呢解决不了乱码,这个呢是获取不到数据了,以后不能采用这种方式获取数据了。Request什么get拿不到?拿回肾脏啊,所以一切都变了啊,都是谁惹的祸呀,就是这个。就是它你只要一改,它也就是实际上啊,实际上我们底层服务器,服务器TOD只对什么进行了支持啊。只对叫什么这个哪个属性,这个属性。做了支持。明白吧,他对这个属性其实没有支持,没什么太大的支持,所以你这个一系列的东西全都不够,全都不够用了,这个不能用了,这个也不能用了,都用不了了。我们第一步是创建硬盘文件调控工厂对象,而这个对象呢,需要去设置我们两个选项啊,一个是设置仓库,其实就是临时文件的存储路径,还有一个是设置我们一次可以接受的最大属性,有的时候这个用不着,什么时候这个用不着呢,如果这个文件小于4KB,如果这个文件小于4KB的话,一次就接收过来了,临时文件就没有了。
04:12
但是如果要是这个文件非常大,那这样的话,我们可以找一个临时的存储目录。是这样。我们会创建一个核心对象啊,嗯,叫s file upload。然后呢,它呢可以设置它的最大可以接收的文件啊,1GB的文件,另外的话,我们在这个地方调了一点核心对象的pass解析request,它其实所有的数据都在这个对象里边。他只要解析这个对象就行了,一解析这个对象,你表面看的那些数据比较乱啊,但是它有规律吗?有规律他一解析就出来了,有了这些数据之后,我们就封装成一个对象,叫file item。嗯,把这些对象放到什么类集合中开始循环,循环一次拿出一个元素,判断元素是否是普通元素,如果是普通元素的话,我们就要get fair name和get three来获取name和value。
05:04
如果我们是一个文件的话,就直接写了,在这个过程中,我们涉及到一个路径的问题,所以呢,这边要掌握这个路径啊,叫get so contest,我们点get real。然后这个路径是不带斜杠的,最后所以我在这加了一个斜杠,又加了个文件名。是这意思吧,所以这个路径你知道。这个是文件上传啊,行了,就回顾到这来了啊,这个我不说了,今天我们还要用。嗯。另外呢,其实我们还说了一下这个。Flax的插件啊,就是javascript和S帽还有FLASH3种技术结合在一起,有一个插件啊叫fusion Cha free这个组件,这个组件是flash的一个插件,要知道它可以显示统计图,什么柱状图,线图是吧,线状的,柱状的,饼状的都可以显示统计图嘛,统计图表的显示其实还是比较常用的啊,为什么呢?因为大家知道在呃,你比如说你你应该见过那个什么招行的信用卡吧,招行信用卡网上银行中心。
06:16
你上去之后,你点那些什么财务分析。是吧,你不知道有没有那个招行信用卡啊,它有一些财务分析啊,最近你几个月的花费已柱状可显示是吧?你上一个月上上个月是吧,花了多少钱啊,你的钱都花在哪了?有一个统计嘛,这个你可以研究一下啊,他那个柱状图也很好,做的也很不错啊。呃,这个柱状图其实不用插件也行,不用插件自己去做呗,自己去写,但是呢,那个东西写很可以写很多啊,那些写得写很多,而且写出来东西不一定很漂亮,所以呢,咱们如果要是完成这个功能,其实我们大多数从网上找一些插件啊,不会自己去写啊,自己去写的话太费劲了,嗯。
07:01
另外呢,真free charge呢,要知道这是基于纯Java原实现的图表,这个用的比较少了啊,目前公司用的这个比较少,因为这个东西出来不好看。不怎么好看了,你想一想,Java做客户端的还是不行。是这样吗?你想图表是不是在浏览器端显显示的呀,你Java去实现一个图表发送给浏览器啊,你Java这个UI做的就不是特别的漂亮,所以呢,咱们这个用的少了啊。用这个可能比较多一些,还有一个叫high叉。开叉这个地方也比较多一些啊,所以你可以从网上找一找,关于一些这个图表的一个插件啊,你可以找一下相关的啊,另外讲完这个之后呢,咱们后来又说了一下啊,关于父子窗口通信的问题又提了一下。子窗口给副窗口的文本框赋值吧,Window open document or id.value设置上去就可以了,window.close关闭啊下是查看企业的一个明细,在这咱们遇到了点困难,什么困难就是那个配置文件吧,配置文件里面是不是那个0002,对的是中国呀,所以人民币没显示,人民币最后显示成中国了,怎么办呢?我统一在配置文件里面加那个前缀,还记得吧,这个配置文件加前缀你要理解啊,统一都加一个什么CRY点。
08:27
这样的话,咱们在底层拿到它再加个CY点就可以拿到这个东西了,好就是这样啊,行了,那咱们这个,哎,这个第38版本我看一下啊38,哎,38怎么没写呢。三班是干啥呢?谁什么也没写呢吗?没写呢啊来咱们就写上吧,嗯,该做哪个了,叫什么保存核准键吧,保存核准件啊,保存核准件,保存核准件,呃,完成文件什么上传啊,文件文件上传啊,这个行了,那咱们就把这个做一下,这个其实有点复杂了,我们昨天说了,不是说上传的时候。
09:19
你比如说你你你保存数据成功了。或者是你,或者你文件上传成功了,保存数据失败了。这个时候要把你上传那个文件删掉是吧,其实这个也更难啊,以前不是加了SESE里边不是学过吗。Java SE里边没有学过file吗?有一个类好像叫file啊,嗯,是吧,File里边有一个方法呀,叫什么呀,Delete呀。是吧,他就删了啊,所以咱们来看看。呃,这边呢,咱们一起来再来部署一下,然后呢,我再来找一下啊,看一下思路啊。捋捋这个思路吧,嗯。
10:00
来。等会儿啊,这个集中有点慢。来清一清,咱们把这个打开。打开之后呢,我们来看看这个项目。来咱们这边呢,点一下啊。这边呢,点这个啊,点核准核准核准。点查询,然后呢,我就查询,查询之后有腾讯啊,哎,就腾讯吧,这个我看看是怎么个情况。行吧,点啊把这个设置到这行了,点确定过去吧,嗯,这是不是有腾讯的相关信息啊,有啊好了,下边填上信息之后是不是点确定啊,那么大家注意啊,点确定的时候,底层需要什么你得看清楚,所以你得打开谁啊database看一看这个表。
11:01
看一看这个SQL脚本啊。来我们看一下啊,这有一个用户投资人。企业企业关系核准件吧,核准建这张表呢,是咱们接触的最后一张表了啊这边呢,咱们看一看,嗯,你看先看这个吧,Remark是这个联系人,联系电话是这个吧,嗯,再往下啊,有一个fair remark谁呀,这个吧,嗯,这是什么?这应该是主见的吧,主见你往下看。主键吧,这个主键是他啊,一会我往里拉一下。这样吧,我来拉一下看一看啊。主见是他。啊,这个有了了,这个有了,这个有了,这个有了。这个主键是个什么?是个sequence吧?注意完上面有sequence啊,Sequence专门生成这个主键,好了再往下,Feedback是什么?
12:07
Feedback呢,是反馈的状态。零差异啊,零代表没有反馈。一代表已经反馈。零代表未反馈,一代表已反馈。所以咱们呢,把这个核准键插进去之后啊,这个核准键的默认的值应该是几啊。零啊,所以把零放到这就行了。所以呢,这边都搞定了,还有几个没搞定的,大家捋捋啊。我用这种颜色吧,一个org扣的吧。文件名吧,还有一个是用户代码吧,这用户代码好说,应该是经办人吧,所以这个也过了,这个也过了,那就剩两个了吧,一个文件名,还有一个什么org code org扣是不是这个东西啊。
13:04
所以这应该应不应该加个隐藏域啊,隐藏域来了,所以大家是否还记得我曾经说过一张表的设计,我们一般呢,不采用外键设计。是吧,不采用外键设计。但是我们仍然可以保证这个数据是来自于什么。另外一张表呢,字段。你既然这能把这个这个东西显示出来,这说明这个东西在数据库里边有没有。你要知道这堆信息是不是查出来的是吧,你只要加个隐藏域,你在这点确定,你想一想这个编号你是不是就发送过去了,你底层放进去,你放心啊,这不加外键也能保证数据是合法的,所以不一定非得那什么加外键啊,所以设计的时候你要考虑清楚,我们可以不加外键。就过去了,所以你看啊,这帮人呢,点过点点这个过去过来之后呢,开这个核准键的时候,你看清楚这个核准键开的时候啊,他设计的时候故意往这显示了一个详细信息,他是有目的的。
14:05
他的目的其实就是希望将来在这儿呢加个隐藏域。明白吧,把这个组织机构代码干什么发过去。啊,是给这家企业开什么核准件的。这是动力节点嘛,或者腾讯嘛,是吧,开课软件。所以呢,这样的话就全了,那接下来大家想是不是应该搞界面了,先把界面搞一搞吧。来,所以开发第一步就先搞界面啊,把界面这块该改的改,改哪个呀,是这个吧,叫open account out detail。这个咱们用过了。啊,这个咱们也用过了,这是分页查询,这是首页。这个应该是那个。明细那个页面啊。这不是企业吗,是吧?我们先干什么?第一件事先不做其他的啊,先把这个组织机构代码加个隐藏域,这个组织机构代码先给加上去,要不然你将来会忘的啊这个位置。
15:06
来这个隐藏于咱们经常加了啊,加上去input type类型。Time类型是hidden name是over cold value是。哎,就是这个吧。就是把它拿过来放那就行。这是name和value有了,接下来再往下看啊,还有哪些需要改一改,比如remark contact啊,Mark先看这个吧,啊,联系人。联系人找到啊,在哪。这样吧,嗯,联系电话啊。联系电话是这个。
16:02
备注啊。是这吧。还有一个文件名吧。这呢?继续啊,然后还有一个什么文件备注吧。还有吗?这是主见吧,Session吧。零吧。就没了。没了啊,你看上面是不是有个有个有个sequence啊。呃,你看。是吧?核准的C关子吗?行了,这个咱们关了就行了啊,关了好,那么接下来呢,你把这个准备好之后呢,还是这样的固定的步骤啊,咱们这个阶段就是学一个步骤,这个确定呢,我把这个拿过来OK吗?所以你复制一下啊,打开它这边呢,咱们可以贴过来,然后找找,嗯。
17:11
找到之后,你看他在指导你啊,指导你什么呢?点完这个之后跳跳到哪个页面啊。这个页面啊,所以这边的话,咱们就是可可准键了啊,就是save on保存核准键。好了,那这样的话,咱们老规矩了,来写一写吧,哎,写一写啊,Function STEM,你想一想,现在的话,它去保存这个核准。我们要提交表单,所以这边呢,给一个表单吧,所以杠叫杠,什么save out,保存核准,Method,你肯定得给一个什么,而且enc time你不能随便写。
18:01
你写的什么multi part是吧?Some把这个form剪了放到什么最后?是吧,就是这样。这个都准备好了吧,这边写什么document DR是吧,Forms是吧,哪个form。这个吧,加一个name啊,叫all form,核准键的form,把它复制粘贴到这个位置上,然后点submit提交就行了。那接下来呢,你要把这个路径呢,写一写吧,所以你复制一下,然后。你打开配置文件。然后在配置文件中呢,写这个请求就行了啊好,这是。保存核准键,所以咱们应该包换了吧,这次是不是核准件的信息了,所以这边包换包啊,换包要建新的包了,复制一下放到这放到这这边咱们先删了。
19:14
来这边的信息呢,咱们就改成叫insert啊。这边改成什么叫啊,这个包没有啊,得新建一下。好,接下来咱们在这儿建一个包吧。然后呢,建一个类啊,这个类。点中它,咱们建一个类切过来继承。来一系列都得建出来啊。
20:05
是吧,来这边呢,咱们应该给一个接口。这个接口叫house。实现类啊。As down实现。听见啊。接口。这个叫out service。这个叫on service的事件。添加service。Finish,行了,这个都关掉,重新再打开啊,打开它调接口实现接口实现。
21:03
这是一个保存核准键的,来保存核准键吧,这边呢,重写方法呢,当然是一个什么方法呀,对了,你肯定是个pose的方法。来request response,其实我觉得你要是小心点的话,也可以不重写这个方法,重写谁呀?甚至有些同学还这么写啊。怎么写,这样写也有,不是说没有啊,也有,他把这两个方法干什么呀,都写上了,这写个什么get在这叫谁get,把这传进去,Request和response,他只写一个方法。明白吧,这样的话可以避免什么呀,无论你客户端是get请求还是posts请求,底层程序是不是都能执行,但是我觉得这么写还不如写谁呢,Service,你写service来不就行了吗?是吧?所以这边呢,我就比较严谨了啊嗯啊,完全按照规范来do,这样写呢,实际上是一种省懒劲的方式,就是懒得判断了,判断啥呀,不判断。
22:17
是吧,这个不判断了,管你概念还是post请求呢,我直接都写成什么都写出来对不对,在这调一下。是不是都可以啊,还有的这样会会发生4.5吗。比如说钙的请求,他就会走哪个。搜下边的代码呢。如果是postose的请求呢?走上面吧,走上面那个代码会执行吗?他会调这个方法,这个方法重写了吗?是不会走这个逻辑啊,所以他的任务其实就是走逻辑啊,这段的话,你要你不要看到别人这么写,你就感觉很疑惑啊,他为什么这么写。也能啊,方法有多种方法,愿意怎么写呢就怎么写啊行这边呢,大家得考虑一下他的这个思路是什么。
23:10
有一个重要的问题d to怎么办?这个我们还能用吗?这个方法还能用吗?你还记得这个方法底层掉的是什么吗?request.get什么pararater吧?哎,我问你这是文件上传吗?文件上传这种方式还能拿数据吗?不行了,所以这个方法over了,这个方法不行了,用不了了。你不能一下把它设置到这个对象里边了,咱们以前写的比较简单是吧,直接make一下它就进去了,现在进不去。进不去了啊,所以这边的话你得考虑了,这有一个传输数据的对象吧,那可见我们得用map吧。
24:07
是吧?你将来不是判断一下叫什么,叫什么file,什么item,点什么is,什么from,什么fail是吧,如果它是个普通元素的话怎么办?是不是拿到name了,是不是也拿到value了,这个name和value能放到map集合里边吗?是吧?你放到map集合里边,这个map就是为谁准备的,为数据库这张表吧,那张表就是这个一张表。你把数据都放到map集合中,传给下一个参数,传下去之后呢就可以了。到到里边是不是再从map集合里边把数据取出来放到放到数据库里边啊,所以就这么传就行了啊,没什么难度了。所以这个呢,其实啊,我就是提个啊,这个东西大家应该能想象到的,来咱们这个想一想,那这样既然是这样,这个service是怎么定的啊。
25:02
返回布尔类型吧,叫save out吧,这个里边需要一个什么,需要map吧,String叫on map吧,核准建map集合。那这边就得报错了,咱们加上好了,这个先先不用管它关了,这个呢,这个返回个in类型得了啊,叫insert of,参数是of map啊啊你看,所以这个分析呢,其实还是很重要的。啊,这是一个保存核准件,来这个关掉吧,加上去,嗯,就这样就行了,这个里面有service,所以这边需要一个什么叫out service service out service,你有一个什么out service的实现啊,好。
26:04
那这边呢。嗯,叫all down all down,利用一个all down的直线啊好行了,这边你就看着看掉就行了。啊,这个先写也行,这个先写也行,这个告这个告先写也可以,没问题。先写谁都行是吧,那咱们先写到吧,行吧,先把这个写一下,倒写的话connection啊拿过来,Connection这边加一个什么prepare的什么statement吧,好,没有结果集,这个不需要结果集,Connection等于BB get connection没问题啊,为什么?因为get connection这个方法里面用了local了,所以是线程安全的一个线程一个连接了,所以就用它就行了啊来继续就别抛了啊,咱们抓吧抓吧啊抓了之后呢,在这抛异常吧,我习惯用这种方式啊,不是不是说一成不变的啊,你要是想往上抛这个也行吧。
27:09
想往上跑,你这是不是就不用抓了,但是我希望把这个数据库里面出现异常,想打印出来,想考好调试。所以我就我就这么写了,行吧,Run time exception这边呢,我就要保存什么,保存核准键异常啊,保存核准键到异常到这边呢,关一下呗,捺这个是捺吗?好,那这边呢,咱们是不是需要准备一个count呀,给个零,最后把这个count的返回啊,就是咱们一习惯编程,编程方式嘛,啊都是这样的,来接下来这个词后语句写一写吧,嗯,写一写词后语句,那你就写就行了,你底层需要什么。
28:06
来,我们来看一下底层呢,需要的是这些数据。所以我决定啊,把它放到这看着啊,来这边呢,一共是几个呀,一个两个三四五六七八九十。九个啊。第二啊,嗯,Value啊,没错啊,这不要加分号,加分号会报错的啊。给同学调调程序呢,他看见有同学这么写。找了半天还不好找。为什么看不见这个分号?没没往这想?嗯。所以呢,千奇百怪的错误啊,不过这样也可以这个锻炼一下挑错是吧。
29:02
确实是这样,其实有的时候您可以帮助别人调一下做法。这东西调调调各种做的话,你将来将来调错能力上去。调错能力太重要,为什么呀?因为你将来以后还是一个人开发。没人帮你了啊,你要不具备调控能力,一个错误调一天,那你工作效率没了错,跟踪还是很重要啊,来编译一下,编译了之后呢,咱们接下来就可以去。呃,赋职了吧,啊副职啊,嗯,这块呢,咱们赋下值啊。七逗号八九这边呢,咱们赋值需要负什么值,赋上去之后是不是就可以执行了,第2EXCUSE吧,Update啊执行完就结束了,这个方法就结束了,你要给它赋值全来自于这个map集合,你给第一个赋值,那一定第二什么方法,Map集合里和钙的方法是吧,都在MB集合里边,盖在什么呀,那肯定盖上。
30:30
是吧,你都盖着就行了,所以这边呢,你就复制一下啊,然后呢,这边不用用一下它得了。反正都是get吧,行了。怎么改,把它拿过来放在这,把它拿过来放在这,把它拿过来放到这吧,来文件名需要吧,还有一个文件备注吧,还有一个编号吧,编号还有一个什么用户代码吧。那最后一个是什么?
31:00
Feedback吧,大家看一看其中有几个呢?其实不用我们写的。是吧?有一个什么,这个最起码是sequence生成的。这个不用我们写,我们写到后面写死就行了是吧。还有一个feedback是不是也不用我们写。是吧,所以这个时候呢,大家看啊,倒数第一个和倒数第三个。倒数第一个直接写成什么零?注意听啊,倒数第三个是这个问号,这个问号直接加一个什么sequence of。第二,Nice。V。还记得这个属性吗?这是序列,那接下来是不是又不是九个问号了,是不是变成七个了?所以该删删啊主键吧,删掉最后一个吧,删掉这改成几。
32:02
嗯。这就完美了。所以你现在应该有底了啊,在页面上必须给我传过来七个数据,你要是不给我传过来这七个,我这个数据不够。是吧,你看这个在隐藏域里边对吧,这个不担心,这个不担心,这个也不担心,这个也不担心,担心的是这两个,一个是文件名,一个是一个扣,这是在section里边的吧。这是文件名吗?所以这边呢,你得注意了,好,你的service好写吧。Connection connection等于now prepared,没有没有这个是吧,不用加这个啊,直接写一个connection吧,啊等于什么B点盖吧,好加一个什么TRYK应该一直这么写的啊,来咱们写,加上BBU点什么close。后边咱们写成now就行了啊,来这个写成now好了,那接下来在这写上BB to.begin.begin啊就行了,BB to点什么com,然后在这写上BBU to点什么go back,在这写上b.in好,都写上,最后呢,在这个位置上咱们直接返回一个,嗯,我看看啊,在这需要一个countt,所以这边呢,我需要定一个in类型的count啊,电子类型countt它等于零,完事之后这边呢,我就直接写一个house到点什么。
33:32
Insert你插入就可以了,当你插入的时候会返回个in类型值,此时会返回count,所以返回一个count等于等于什么对吧。这个已经不陌生了。N多遍了,都写啊。这还能陌生吗?这要再陌生,这些代码是不是没跟上啊,我在怀疑代码可能没跟上啊,到写了service写了那个来就行了,嗯,来这边怎么写,一切准备好了,这边怎么办呀,来吧,上传啊怎么写,打开我们的上传组件,这个这个这个打开,打开我们这个,把这个复制一下,两个炸包给拿过来,放到什么我们的立下。
34:25
是吧,你得拿过来放到力边下边啊,这个和这个。你放过来之后呢,你才可以完成文件上传嘛,所以这边咱写一写吧,怎么写。还记得这个步骤吗?还记得步骤吗?第一步是什么?第课file item factory啊factory等于new,第课file item factor,我说一下啊,这个不用记,到时候我那个我那个代码复制粘贴吧,啊你别记了啊,点size size size啊来factor.size size这都设置完之后呢,还有一个叫file up light,什么file upload是吧,Upload等于用一个什么。
35:19
什么file upload吧,接下来这个地方。把factory是不是传过来放在这,接下来我们继续往下upload,应该有个方法叫set mark set set ma,还是1024吧,乘以1024啊,再乘以1024吧,行不行,还是这样的啊。如果超这个范围的话,是不是应该提给个提醒啊,给个提醒。这个提醒的话就不再给了啊,其实还是相同的,比如我们拿到这个文件,其实可以拿到这个文件的大小啊,判断一下,如果他抄了,咱们就给他报个错出去就行了。
36:06
这个你下去之后自己做吧,啊,这个就不写了,直接呢调用upload的一个方法吧,点pass request,把这个request是不是解析了,解析之后会返回一个历史的集合,叫file item吧,嗯,File item好了,那么接下来找包就行了,上面呢,我们设置一下啊,比如说这个呢,应该是什么?应该比如说4KB吧,还是4KB啊1024这边呢,这个咱们就设成一个又一个five吧,嗯,加一个time pass啊time pass。好,早班,接下来我们这需要一个什么time pass吧,嗯,Time pass翻译什么this.get the contact的点get什么will past,然后呢,这边写上去杠啊,叫time对吧?好了,那这样的话,这个文件文件夹是不是得在这建一下,点右键啊,新建一个folder,这个文件夹叫time finish就行了,将来放到这儿,将来是不是还得放核准键呀,所以呢,加一个O就行了。
37:14
啊O不行,重名了,重名了啊outca了行吧,核准文件啊,核准文件放到这,上传放到这,临时文件放到这行吧,那么接下来咱们继续啊,这边需要加一个try catch,然后呢,我们在这边呢,大家想一想啊,你别忘了啊,你的任务是什么?是给人家倒准备数据,人家到需要map集合呢,所以这个时候你还得在这准备个什么map map吧,String string是吧,String,你呃叫on map吧,你有一个什么哈西map是吧?String啊走那条数据,你需要往这个,往这个里边放什么东西啊。最起码你得放一个什么点put吧,放一个user Co。
38:02
是吧?是不是section啊,request.get session吧,然后呢,括起来把它转换成U,然后括起来,然后呢,调用它的一个方法,点get user code,这样是不是就取出来了啊,往里边放一个用户代码。你看一下这作业啊,我说过了,这个你能搞定,这个也行,这个也行,这个也行。这个咱们是从S里面取就行了,这是file remark,这是file name,文件名在哪?到时候咱们再说吧,行吧,这边呢,继续啊,怎么办?For循环吧,Fire items吧,Fire,对不对,Fire a,好,接下来每学过一次,判断一下如果叫什么fire.is bomb bed。
39:01
如果是这个怎么办?普通元素的话,拿name,拿value name怎么拿?Name是file item.get filed name这个value是file item.get词钝加上GB180300行吧,因为解决乱码问题嘛,接下来你是不是就可以往map集合里边放数据了,There put你把谁放进去,Name和value放进去,你想一想,现在都是谁有数据了?这个东西是不是都有,就就就还有谁没有啊,这个有这个有这个有这个有这个也有了,这个也有了,这个没有。文件名是不是没放进去。那那名没放进去啊。怎么放文件名啊?
40:04
注意听啊,注意听啊,All the file name原先的文件名怎么拿file底盖什么get name就行了,这是不是原先的文件名,那希望呢,New file name呢?新的文件名是什么?注意啊。我说一下这个新的文件呢。咱们最好以组织机构代码起名,核准件啊,这个东西这个名啊,它不能重。如果文件名重的话,文件上传组件会将原先文件覆盖掉。所以我们这个核准件呢,这个文件起名一般以什么。一般以组织机构代码,因为这个是全球唯一的,所以用它来做文件名的,听明白我的意思吗?那如果用它来做文件名呢?你怎么做呀?这个新文件名应该是什么?如果原先的文件名,比如说你拿到的是什么?是简历点doc。
41:07
那这边应该是多少啊,一二三一二三一二三点doc是这意思吗?比如这个扩展名我们要不要。扩展名是不是还得要啊,但是前面这个文件名我们是不是不要了,换成了一个组织机构代码吧,所以怎么怎么写。啊,我们可以在外边准备一个ort扣的吧,等于空呗,等于,那么嗯,然后呢,它是个普通元素,如果叫org透的点EQ是谁?Name就是现在这个name啊,如果是org code的话,咱们就给这个变量赋一个值,这个变量赋一个什么值,Value。是不是把白付给他?
42:02
如果这个条件成立,我就把这个Y赋给org code,这样的话它有没有值啊,它有值,它能不能做文件名。好,这一部分是不是搞定了,所以它就是or code加上吧,这个是不是没了,但是这个必须得获取了,这个怎么获取。是这个文件名,就是代表这个文件名拿后缀你会拿吗?第二,萨斯菌。从哪个位置开始截,从这个last index of点。我给你时间捋啊。看这个串。看这个串啊,能不能捋清楚。
43:03
它截串是从这个位置开始截对吗?所以必须拿到这个点的下标对吗?咱们拿这个点的下标。这个函数啊,叫last index of什么意思啊?点在这个字符串里面,最后出现出现最后一个位置出现出的索引吧,点在这个字符串里边最后一次出现出的索引。啊。所以这个位置需要一个下标啊,看下标这样这边呢,这咱们就就就就这么写吧,这样的话这个怎么写,还是那个fair item,点什么get name,拿到原文件名,原文件原文件名,然后再拼接新文件名,拿到新文件名之后怎么办?是不是得获取路径,怎么获取路径,Let get context,不是这个啊,是contact,然后点get real past是吧?Real past是谁?叫什么go,什么on,什么file是吧?然后再加个斜杠吧,还记得吧,再加上什么文件名。
44:24
他最终是不是放在这儿了?怎么写?File item不是有个方法吗?叫什么叫write,你有一个file吧,需要一个什么啊,嗯,这就行了,这就妥了。好,这有异常删一下。能理解吧,嗯,这样。那么接下来呢,你先你实际上应该在外边跟跟一个啊叫up success up,呃,Up fair啊叫up fair吧,OK吧,Fair OK啊呃,True默认啊,默认是成功了啊,默认是成功了,但是有没有可能出现异常。
45:15
出现异常就代表什么,失败吧,失败了啊,默认成功了,就出现异常就失败了,失败之后呢,你得判断一下,如果上传成功是不是才有必要去调service,如果OK else,这就是。Fill up success,这个是什么?Fire up。文件上传成功,文件上传失败,你只有文件上传成功才才干什么,才会调这个service是吧,怎么调service叫out service就行了,点什么方法,它会返回一个不类型对吧,叫save OK。
46:09
对吧,如果COK了,Else,如果这是什么?这是保存成功了,这是保存成功,这是什么?保存失败删除文件吧。保存成功就response.send什么wedire重定向到哪啊,还记得吧,是哪个杠O杠。Input org.JSP。保存失败怎么办?跑存失败,把文件删掉,怎么删呀,File没有一个什么file吧,这个希望跟着路径啊,所以这个路径呢,咱们拿出来,嗯嗯嗯。
47:09
这啊。把part传过来f.delete。路径嘛,删除。所以这个else呢,我就不再做做做不做处理啊,我就不做处理了,行吧。不做处理了啊。哦,那个文件名都忘了传了是吧,你看这大家不提醒我就忘了,到时候运行肯定会闹了,所以这这边咱们就存一下子啊,不能往这存文件名有了吧,有了之后调那个什么方法呀,库子吧,这个K不能随便写。
48:01
你在后边不是file name吗?Get,所以你在这put的时候,你不是写个file name吗?是吧,后边这写new file name行吧?好,这样的话外面集合就存进去文件名了啊,我还把这个丢了啊。行就这样吧,那这样的话咱们来测一下啊,简单测一下来。我们要开合论剑了啊。这边点它点它部署,点它OK,把服务器启动,启动之后咱们把这个关了,这个关了,这边咱们给它清了啊,清了好了,这边打开,打开之后咱们点一下登录啊。走。这边的啊,这边的。可软件查询给腾讯开一个吧,啊,这不有腾讯嘛,是吧,来点确定啊,这边呢,咱们来看看腾讯的联系人,随便写随便写随便写随便写啊电子文件我这有吗。
49:00
电子文件我在桌面上建一个得了行吧。叫off。我把它打开啊,核准核准键行吧,就这么着吧啊。嗯,点它吧,嗯打开啊好,这边点确定。哦。哪儿的问题啊?哦,还有一个问题,Request点。Second点盖,呃,吹的光写了是吧,嗯。这样行吗?
50:04
如果不确定的话,你就可以加一个什么括号。行吧,是是是这么写了啊,我还有一个问题忘了说了,这一提交我想起来了。来我先助教啊,这个有问题。应该是有问题。我在这呢,输出一句话啊test来,我把这个呢再部署一下。好了,我把胡旭再挤一下啊。行了,那这样的话,咱们就来看一下,点它又不行了是吧,点那底层过滤器了是吧,来点它点它点这个啊这个这个来点查询,那换一个腾讯不好使啊,点这个。确定。
51:01
你看啊。点我就点中它打开,我随便点确定。嗯,是不是输了两次啊。你输出两个呀,有人访问吗。没有吧,就是我先反问的啊。没人访问这个啊,是我一个人访问的,我再来一次吧。点查询点查询点它点确定点确定,你看李思。是不是两次啊,也就是表单提交了几次。表单要是没有提交两次,这个方法是不是也不会执行两次啊,为啥呢,这个事呢,我得给大家说明啊。因为他惹的祸。打开这边有个语法需要我说一下这个浏览器兼容问题,应该是在这啊。打开之后呢,大家看一看记录啊。
52:00
这个兼容呢,还是很有意思的。这个button。大家发现没有,它本身叫什么?Button。是吧?它本身叫巴啊。八分结束。TEDTD,对的是这呢。是吧,这个TD,这个是DR。是吧,就是那个巴特吗?啊,还有一个吧。还有一个发碳啊。最后这是一个image。啊,就是这个button嗯,是吧,这个是一个button啊,我这边给它。
53:02
你怎着吧,这边咱们往后推一下,往后退一下,往后退一下行吧。然后这边还有八呢,拿过来。其实这是一个什么呢?TD单元格,单元格里边放了几个button,两个button啊,一个button里边放了一个image。Button上放麦的就是这种效果吗?哪种效果这种的?你看你看后边还有一层,还有一层呢。是吧,你看我一点,哎,你看下去了吧,哎,这是按钮上放的图片,按钮上放的图片啊,点确定过去你看啊。用按钮吧,按钮上放的图片啊,所以我点下去啊。是吧,点下去啊,所以这边呢,大家要注意咱们这个button呢。它本身具有提交表单的功能。Button本身啊,在IE8浏览器里边,其他浏览器不敢说啊,当然IE8浏览器来来说呢,有这样一个问题,Button名字button记住啊,名就叫什么,Button这样的东西,它本身具备提交表单的功能,所以说这边你要是换成这个的话,你看咱们以前说过啊。
54:21
常用的或者是正规的是什么?正规的是submit才能提交是吧,但是人家本身叫什么but。嗯,本身叫button,咱们那个叫什么input,然后后面跟一个什么type,咱们后面跟一个什么button,那这个能提上吗。不能。明白吧,人家这个名就叫什么啊,所以这边呢,咱们等于提交表单提交了几次啊。两次怎么办?删一次就行了,把这个uncle去掉行吗?
55:02
来这边呢,我再给他点一下录入点查询点点点确定过来清空点它来点确定看一看啊。是吧,这不一个吗。哎,跟这个函数还有关系吗?没了。跟他没关系了。来这边我写上IE8浏览器啊,其他浏览器没有,所以这边我就写一下啊,这个其实呢,到时候你看一下就行了啊呃,IE8浏览器来说,嗯。八标签啊,本身具备提交表单的功能啊,这个啊,好了,那咱们就再来试一下吧。
56:03
删掉吧。最后啊,删了。行了,那这样关掉点它啊,点它部署,然后OK。别睡了,醒醒了啊。困得不行了,晚上睡得太晚了。来。你,你睡,我也想睡。然后我现在没精神了。嗯,点走。行啊,没问题啊,看底层报错有没有啊,来继续啊,嗯,随便写个张三联系电话备注啊,就是核准建吧,核准键核准键啊来走呃,走打开走。呦,成了。
57:01
成面成本看一下啊,来C盘阿尔法奇tomcad,打开咱们的一个web APP吧,打开root吧。哪个呀?哦,这个是吧,啊你看。嗯,是吧,而且这个文件名不是和你和那个跟那个组织机构代码是一样的吗?以这个作为文件名,然后他临时文件是在这呢啊,这个没有临时文件,可能文件太小了。是吧,嗯,文件太小,不到4KB嘛。俩字儿啊,和准见。行了,这边呢,咱们嗯,再来看一看啊,就是说还有一个问题啊,什么问题,咱们如果这个数据有没有保存,你你看一下啊,这搞了半天数据没进去,这还是不行啊,光文件上去不行,咱们打开这个啊,这边改一改叫EUA北京power。好,这边呢,我们看一下那个table,应该是找这个核准键吧。
58:04
这个query就行了啊,你看看这个对不对。没啥事儿吧?这不主见吗和转见吗?123张三和转见张三没事吧?好,这是这个啊,接下来我再来做一个啊,比如说这边呢,这个有没有可能上传成功,但是最后呢,这个数据插入失败了,试试啊in有一个方法是什么来着,Pass in吧,ABC行吧,这会报异常吗?会报异常啊,我们加了断点吧,往哪加。我们就加到这行吗。加个断点啊好了,那这样的话咱们再来试一试,这边点查询吧,点查询吧,我点这个动力节点了啊,点确定过来来找找找找来找找找到之后点打开来点确定好。
59:16
文件过去了吗?是不是文件已经有了,文件有了,数据有吗?没有了吧,没有呢,大家看啊,到这个断点了啊,断点往下上传成功还是失败了,这是成功了,上传成功了,但是保存会失败吗。保存会失败吧,所以这时候往下我就直接往下你看报异常了吧,是不是叫那个数字格式化异常啊,什么到保存异常是吧,是这个吗?所以这个时候你往下你看一看这是什么类型。放了是吧,保存失败啊,保存失败都走这个了,是不是就删了,删你看这个文件是不是还在啊,来这边我就点删除好打开。
60:01
那你杀了?文件不删掉了吗?是吧,你保存失败的话,你文件给他删了,这就删掉就行了。这是一个整体嘛,行了,这个功能呢,咱们就做到这了啊,大家可以休息一下啊。
我来说两句