00:00
刚才我在进行一要总结的时候说,呃,如果说我们需要一些其他。要实现一些其他功能。而这种规范里边。没有事先定义好怎么办?我们可以自定义一些标签对吧?可以自定义一些标签。当然,我们之前说的这都是自定义什么函数?那我现在想实现这样一个功能,大家看啊。我们再来写一个。这个叫卡斯特tag。我就叫这样一个名儿了。
01:02
想实现什么功能呢?啊,想实现这个功能。嗯。GSP吧。我现在想获取到。客户端浏览器汇到客户端的IP。获取客户端IP怎么获取?这我们学过吧,是不是点get remote address,这获取的就是客户端的IP。对吧,那么。Out点。IP等于IP。
02:09
看啊服务器。哟,这么多了。把他们都删掉啊。好,大家看。这是一个吧,是不是这我们在哪啊,在前边儿这个web编程基础里边说过,他是干嘛的。那它是由本地。本地的那个,呃。域名处理文件做的这种映射关系是吧,这个就不说了啊,现在或者这样,我把这个IP我不用loco,我给他换一个,换成谁呢127。
03:11
对吧,这不就是客户端的IP吗。当然,我也可以换成这样啊。我看一下我这个机器的IP。幺九二点幺六八点零点一百零点一百。192。1921680100。没问题吧?是不是?那。就获取的就是。我们的。
04:02
客户端的IP,现在就这个功能。我不想那因为不能用这个,这个叫什么呃。加个蛋板块啊。那怎么办?定义成标签儿吧。哎,这个标签怎么定义呢。你注意,这就是我们现在要学习的自定义标签。那GDP里边啊,支持自定义标签。自定义标签就是为了简化我们的代码。那么我们自定义的标签,它肯定就对应着一段。Java代码。怎么做?这个怎么做?我们这时候就需要定义一个叫做标签处理器的一个类。而标签处理器,你看定义标签处理器,定义标签处理器。
05:05
需要你定一个Java类,这个Java类实现一个接口,哪个接口呢叫simple tag。在这儿呢,大家看。在这儿。这个包。这个保险有个simple tag。这是个接口对吧。这个接口里边我们看一下,它有五个方法。需要我们实现这五个方法都是干嘛的?首先看第一个方法do tag,这是最核心的方法。当你调用那个标签,你自定义的标签的时候,他就会执行这个方法。这是最核心的方法,标签所实现的功能都在它里边放着。Get parent。Set parent肯定是由服务器调用的。
06:03
这干嘛的,将当前你这个标,你不是自定一个标签吗?将你当前自定义这个标签的副标签。Get,设置进来。将它的副标签给它设置进来,什么是副标签?打开。外边儿全没,你看啊。这是个子标签吧?这就是他的副标签。那这如果是个子标签的话,这就是他的副标签。明白吧?好。当然这个是获取它的副标签。然后这样set JSP body set JSP body,我们发现这这set方法肯定都是服务器调用的啊。你看这里面放的什么JSP fragment。
07:02
这JP。片段。你起的名叫jsbo,这什么意思呢?这提供的是。我们服务器会自动把当前这个标签,假如说当前标签是谁,是他。会把它包装成一个对象,哪个对象JSP fragment这样一个对象。就j Bo的呀。然后给它设计进来。那这样的话,你这个标签里边是不是东西都可以获取到了。它是一个对象啊是吧,然后set JSP contest。这JP contest JP上下文是个什么东西?你看它设置的是PC这什么呀。
08:01
JSP上下文是。看一下JSP。我们发现JSP contest啊。看到没?直接的已知的子类是谁?Page contest page contest我们知道是配置域啊,代表的就是当前这个。页面。上下文呢?所以JP contest是什么?他就是配的。就是配置contest。当前页面的上下文,但是页面里边所有的信息都在这放着呢。所以啊,先简单了解一下。这五个方法,那好了,那也就是说我们下边是不是就要。
09:01
定一个类,实现这个接口了。不过实现它之前,我们发现你看。这个接口是不是也有一个实现类啊,叫simple tag support。我们打开这个实现类看一下。这个实现类。啊,有一个无参构造器,然后呢。方法。它实现了那个symbol tag接口,所以它肯定实现了这里边方法吧,你看这。这不是抽象类吧,是不是普通类?那我们看一下do t实现了。然后这三个赛的方法,它实现了。同时,当然了,这三个set方法,还有一个get派的方法,这都是接口里边的方法,同时这给我们增加了两个方法,一个是get JSP。
10:10
一个是get JSP contest。这两个。我们可以获取到JSP的代码片段呢,这个可以获取到。我们当前页面的上下文呢,是不是这样的话,我们感觉用它就比较好了。我们直接定一个类继承的simple tag support要比。实现simple这个接口要方便一些,那好。那现在我们。就来定义吧。
11:00
我新建个class。嗯,叫什么呢。叫我这个就叫。IPT吧。C。IP tag。这个这个这个com点北京。点tags吧,这个叫tags啊,好,我继承这刚才说了simple tag support。那这里边你需要注意,你继承了它,你要想实现什么功能,你最核心功能都在哪呢?是不是do t里边啊,所以在这需要。重写父类的do tag方法。
12:05
来。重写这个方法把这个删掉了啊。重写它,你注意啊,我们现在这个是干嘛的。获取客户端IP,我要是获取客户端IP,我们知道我们就得获取到谁呀,就得获取到我想想。我要获取,我怎么获取到request呢?诶,你想一下,我们之前在不管是学solid还是学GSP的时候,关于那个配T里边是不是可以获取到。Request response。Solid这些东西是不是都可以获取到,那也就是说我们这里边这个方法啊。
13:06
哪个方法?啊,找到JP这边是JP。Contest,我获取到contest是不是就是他呀。JSP contest JSP contest里边看看有什么方法。看看有没有。Get request。这是不是没有啊?有没有?Get request。有没有?没发现呢,没发现这个负类没有,但是我们知道谁有啊,配contest有啊。你看看page contest有没有?Get response get request是不是有啊,所以。
14:06
我就使用哪个方法。在后退。我就使用get JSP contest。不是获取这个吗。我给他下转型成为contest。然后就能获取到了,所以这怎么写。获取配置contest对象。那肯定是this get JSP contest。这获取到的是什么PC page context呀?那我现在要要的是page context啊。强转是不是?
15:02
有了它了,我就可以获取。请求对象PC.get request。有了请求了,我是不是就可以获取获取谁获取客户端IP request.get。Mo address。Client IP。好了,这是不是就有IP了?啊对,有了IP怎么办呢?你注意啊,我们现在要实现的功能是将来在这里边要放一个标签。放上这个标签,他就能马上把客户端的IP显示出来,你注意显示出来,能在客户端显示出来,就说明这个IP要写到哪,标准输出流,我们要获取到标准输出流,标准输出流怎么能获取到标准输出流呢?
16:18
他他有吗。没,我们记得是response边是不是有啊。哦,对,Response里边有标准输出流。PC里边有没有get呀,还真有。是不是可以直接获取到我们的标准输出流,Out?然后我out.print。看IP。获取标准输出流。
17:06
将客户端IP写入到。输出流中。那OK了。我们的这个do tag就搞定了。那么我们的这个。注意,我们现在定义的这是什么呀?这叫标签。定义标签处理器,这个标签处理器是获取客户端IP的啊好,这写完了,写完以后呢。写完以后你注意,对于标签我们是需要注册的。在哪注册TLD文件?这我们现在很熟悉了吧?
18:03
我们要在web info下建一个文件。这个XML文件叫什么名无所谓。啊叫,但我们叫什么名,我们想想啊叫个什么呢。我这样吧,我叫my tag。叫my tag。点儿。TLD是不是是TLD文件啊。My tag。太长了。自定义tag吧。Kum。CT,我就叫CT了啊,T tag。好。那TD文件。
19:01
里边。是不是需要添加上头部信息啊,就是约束啊在哪儿呢?汤姆太太。Web as examples。Web JP two是不是在这儿呢,打开。是不是需要把?这段拷贝。给他折个行。然后呢,TD文件是标签库啊。是不是要需要对这个标签库进行注册呀,进行配置信息是不是在这儿呢?这三行吗?一样啊,这三行还得要。
20:10
1.0。叫什么,Name叫什么,我们说过一般是不是和这个T文件名相同啊,我就叫CT了。You are ina。You are。北京power node。点。com下边的,那下边的什么我们自定义的标签啊,JSP。这个。C。Tax吧卡。To。自定义标签是吧,好,就叫这个名呢。
21:02
这说了,这这对谁呀,咱们讲过呀,这是对。标签库的配置,或者说注册是吧,紧接着该干嘛了。注册标签了。还是从它里边找,你看直接上来,这是不是就有啊tag吗?我们之前定义要函数库是在哪呢?是不是最后是function呢?是不是这些function现在要的是tag。这个是。注册标签。描述不要了。Name name是不是我们将来在。JSP文件里边要用的。
22:00
这叫什么,我就叫。Client IP。对应的肯定是这个呀。拷贝全名儿。好。这body content empty,先保持empty就可以了,它是什么意思?它的意思是说。你定的这个标签是否有标签体?没有,什么叫标签体,大家看这是个标签吧。这个标签,这个内容就是它的标签体,这是个标签,这个标签的这个内容就是它的标签体。有同学说还有那没有标签体的标签吗?当然有啊,我们写的HR。爱天猫里边的HR。是吧?没有标签体吧?
23:00
你再比如说我们写的BR没有标签体吧,是不是?可是有的啊,好,它是没标签体的,至于这样将来能填什么,我们后边会详细来讲,就这OK了。我注册过了。注册过以后怎么用用就简单了。肯定需要把这个标签库给引入。At tlab。Uri等于。就我们自己定一个吧。Prefix。等于CT吗?OK。我这要用了CT是不是CT client IP就这没标签体,它直接就你看直接这就结束了。
24:06
OK了。我现在直接能不能直接刷新呢?不能啊,我们这个定义了累了,是不是配置文件也有了,那我们需要重启服务器。直接刷新肯定不行啊。好,给这儿刷新走。没问题吧,是不是这就OK了?这就是我们自定义标签的基本用法,重新总结一下。首先我们需要定一个标签处理器,定一个类,这个类是不是继承的simple tag support呀?然后重写do t方法。这是第一步,第二步是不是要注册啊。
25:02
在web音符下。我们要新建一个TD文件,在这里边对这个标签进行注册。第三步,使用,把标签库导入,然后直接使用标签,你看你代码列表直接写这个东西是不是就简单多了呀?其实大量的工作是不是在后台做的,Java代码做的,这仅仅是个表象,仅仅就放一个标签。OK了。
我来说两句