00:00
路径问题我们说完了,接下来我们要把咱们之前的程序要改善一下了,我们说了在我们的页面当中,我们的这些路径你写个点点斜杠可以,它能访问,但是不是说每个都这么写,那这样的话路径不统一,用起来就会非常的麻烦,他不确定啊,所以我能不能让它简单一点呢?可以咱们刚才不讲过了吗?一个路径是可以以斜杠开头的,那我问问同学们,我现在的这个地方的路径是前台路径还是后台路径?没错,它是前台路径,为什么?因为这个标签它的属性会被浏览器解析执行,那么它就叫前台路径,那如果他是前台路径的话,它以斜杠开头,它是基于谁啊?他是以谁为基准,它是以当前的什么服务器的根为基准,它缺少了什么?缺少了我web应用的名称,所以很简单,拷贝,你拷贝以后大家看我这么写,其实也可以。
01:11
所以啊,把这个拷贝拷贝以后,把这个替换一下。好了,那么替换完成以后,接下来我们要做的事情就是刷新,刷新之后你会发现样式没有任何的问题,我们这么写也是对的啊,没有问题,可是既然它也是对的话,那我们以后是不是都这么写了呢?还不行。为什么还不行?因为你怎么知道我们的外部应用名称一定叫他呢?可不一定啊,可以改的,外部应用名称是可以改的,那既然可以改的话,你固定斜视就不正确了。那我该怎么办?我们应该把这个名称给它动态的获取,你发布的是什么名称,我就应该取得是什么名称,而不能固定写时了。
02:04
那我如何得到你发布的名称,这个我们的E表达式可以做到,那它是怎么做到的呢?来,我们看一看,我们写上叫做Dollar符,然后呢,我们大括号里面会有一个叫page context的点,会有个request,然后它里面会有一个属性点,我们叫做pass。啊,有这么一个就是它啊,你这么写完了以后,他就可以把我们当前外部应用名称给它取到啊来咱们试一试,把这个咱们拷贝,拷贝以后,然后呢,把这个不要了。罚他,我们也不要了。好,那我现在刷新一下,刷新以后来看一看,你会发现页面是没有一点变化的,说明我们的这种写法也是对的,那么也是对倒是对呀,但是有的同学啊,会有问题老师呀,我的英文单词学的不怎么好,那这样的话,这些单词我不小心写错了怎么办?比方说我的这个大写啊,我不小心写了个小写。
03:13
大家想一想会出现什么情况?是不是我的路径就不对了,那路径不对的话,是不是样式就出不来了,所以我们现在刷新。刷新以后你会发现还不是说我们的样式不对的问题,连页面都出现了问题,对吗?所以在这种情况下我们说不对,那为什么不对呀?这个在EL表达式当中,我们访问一个对象的属性,其实并不是访问这个属性,而是访问这个属性的。Get方法,可是咱们这里根本就没有他的get方法,他就一定会报错,所以啊,我们现在写错了还不行呢,啊好那行,那我这不小心也写错了怎么办?比方说我这写错了啊。
04:01
他原来大写,现在写小写了,老师那不依然会报错吗?来试一试我们刷新。刷新以后报错了吗?没报错。只是样式并不存在,但是它没有报错,诶老师不对啊,你刚才也是大写变小写,你现在也是大写变小写,怎么它就有两种不同的情况呢?这里咱们还要说一下EL表达式当中,你访问一个对象的属性,这个属性的get的方法不存在,那么会报错,但是你访问的是这个对象,如果它不存在,我们的E表达式是可以进行默认处理的,就是说什么都不做。所以呀,他就没事儿了。哎呀,老师,那这就太麻烦了啊,写错字有的时候会出错,有的时候不会出错,那我怎么去判断对不对,而且你这个单词这么长,不小心写错了难免呢,那有没有什么简单的方法?不写这么长也能把它写对呢,我们说有什么意思,大家看一看,如果我想一个办法,我写上一个叫APP pass,你觉得行吗?
05:10
也就是说啊,我把那个路径啊,保存到这样的一个变量当中,然后我们在用的时候我直接来取,这能写错吗?不容易吧,为什么?因为我们这的含义非常的准确,叫应用的路径对吧,几个字母就出来了,而且APP pass这个单词也好记,那这样的话不就行了吗?那或者你为了更简单点,你就直接叫pass也没问题啊,也没问题,这都无所谓啊。哪怕你直接写个什么呢,你直接写个P也行啊,啊,只要你把含义搞明白那就行了啊,但是我们尽量呢,还是建明之意直观一点,所以我们这里就叫APP pass,那么也就意味着你需要将我们当前的那个路径,当前的外部应用名称给它保存到这个APP pass当中。
06:01
那么我们在哪保存,我们在什么时候保存呢?首先这个路径应该是所有的人都应该共享的路径,不是说你张三的路径跟李四的路径你们不一样,不会的,每一个人用的路径是完全相同的,那所以说我们就应该把它保存到。应用范围当中就是application当中,可是你在什么时候保存到应用范围当中呢?那么也就意味着在用户使用之前,服务器启动之后,它就应该保存好。所以我们在这里可以增加一个监听器,在服务器启动之后,把路径给它取到,取到以后把这个地方给它设定上就可以了,啊好,那么我们接下来就要准备监听器了,所以我们增加一个web。好,点击完成,点击完成以后,我们点击new,然后创建class,我们叫server,叫startup,叫服务器的启动监听器,那么你随便写个类就能叫监听器了吗?不是,你必须要实现特定的接口,叫so。
07:18
Listener,你实现这个接口之后重写它的方法,那么我们就可以实现我们的逻辑了,我们要重写的就是这个方法,这个方法的目的是什么呢?在我的web应用对象初始化的时候会被监听到,那监听到以后,我们的简单逻辑就是将。Web应用路径啊,应用名称吧,应用名称或者应用路径都可以啊嗯。保存到我们的application范围中。我们就想做这样的一件事情,那么你想做这样的事情的话,你首先你得把那个OB对象拿到,你把那个路径拿到,所以我们SCE,我们会有一个参数点get so context,它就是我们所谓的application应用范围,所以来serve late context,我们就叫application,等于这么写完了以后,我们的应用对象取到了,那么它的路径呢?来我们写上,我们也能取到,等于ob.get我们的pass。
08:29
获取了之后,那现在我就保存好了,所以application.site attribute我们就写上叫APP pass,把这个pass给它加上即可啊好了,那我写完之后老师呀,诶你这么写的话,那为什么我们页面当中我们不直接写这个pass呢?我这么写不行吗?大家想一想行不行?不行吧,为什么不行?因为我们把我们的路径保存到application里面,它就类似于往map里面存数据,对吗?那这个就是key,这个就是value,那么你想想吧,你把数据保存到了map当中,那么你取数据,你根据什么取,你是不是根据K来取啊,所以我们这是不能用pass,应该就用pass啊,咱们这么写就行了,嗯,好,那这么写行了之后,那接下来。
09:30
我们的监听器就能起作用了吗?还不行,你需要在web的插当中把监听器给它配好了,所以监括号我们的listener,然后在这里写上我们的listener class,把我刚才写好的这个监听器的类给它加进去拷贝。拷贝以后放到这个位置点,然后把它拿过来。好了,那我现在这么写完以后我们就可以了,行,那么我们试一试。
10:05
把这个服务器停了,我们重新来看一看效果。可以啦,那我现在呢,就来我们。刷新。诶,刷新也可以啊,刷新刷新以后大家看出没出来出来了说明啊,我们之前的这种方式是对的,因为我这么写是可以访问到它的路径的,来我们看看源码。把源码打开,源码当中你会发现大家看这个位置是不是把当前的web应用路径的名称取到了,那你取到以后我们这么写就没有任何的问题,而且我们不是固定斜视的,我们是在监听器当中给他动态获取的,那这样的话它是什么都不重要。好了,那这么写完以后,那就简单了,为什么?因为你的样式可以这么做,那么我们的脚本文件我们也能这么做,那都能这么做的话,我们页面中就不会报错了,所以我们给他拷贝以后啊,我们所有的程序我们都会这么来做,所以刷新刷新以后你看一下控制台检查检查以后,这边还有错误吗?没有任何的错误了。
我来说两句