00:00
这个JSP啊,学到现在,我不知道咱们大家发现一个问题没有,你看现在写的这些代码。是不是看的很乱呐?你再看看我们之前写的。这个index你看。你看这代码。是不是看的很乱,都是这这种东西。是不是?那么。我们来看所在JS页面里边啊,大量使用Java代码块、表达式块等内容,可以使我们的页面看起来非常的杂乱无章。那么。为了使阶面看起来简洁明了。简化Java代码,我们一般情况下啊,会尽量少使用Java代码块和表达式块,你注意这说的尽量少使用,有很多公司。
01:10
明文规定不允许使用Java代码块。表达式块,你代码里边是不允许出现的。所以我们之前学的这些啊。学的这个Java代码块。啊,这些东西JSP基础里边啊,学的是Java代码块。啊,声明语句块吧,就不说我们这个就几乎就不用这个JSP的表达式块,像这东西。很多公司明文规定就不允许使用。那不用,那怎么办呢。我们。提倡使用的是。EL表达式GSTL标签,这我们后边会学。
02:00
以及JSP的动作,其实JSP动作我们用的也不多。GB动作,我们就用两个动作,一个是forward动作,一个是动作。那么我们先来看一下啊JP的动作,把它简单说一下。那什么是JSP的动作呢?它是指使用系统定义好的标签来完成由Java代码完成的功能。也就是说,它替换掉了我们的Java代码块。怎么用?监括号JP冒号动作名称,那就是俩呀,我们常用的就两个呀,Forward和include。然后属性名等于属性值,空格属性名等于属性值。那下边我们就来看。这两个动作啊,Forward和include。
03:03
说到forward和印。大家是不是马上就会想到我们request dispatch这个对象的forward和include这两个方法呀?完成请求转发的。在学习的时候,我们学习过。这两个方法的区别在哪儿?你注意,你要知道它的最本质的区别,最本质的区别是标准输出流的开启时间不一样。Forward forward forward forward什么意思啊,向前,也就是说你的请求到这儿。你还没结束呢,没结束呢,就不可能给你开启输出流。所以。这个forward这个动作的发起页面。
04:02
还没有开启标准输出流,那也就是说这个的动作的发起者是无法向标准输出流里边写入数据的。但de不一样,De什么包含?除了完成了自己的工作以外,他还能再包含其他的。所以。Include动作的发起者和目标页面都能够向标准输出流里边。销售数据,也就是说都能。显示到客户端浏览器。我们看一下这两个图啊。这是forward的动作,浏览器发出一个请求。For动作发起页面,这个页面是for动作的发起页面,这个页面无法向标准输出流写入数据。为什么?因为标准输出流还没有开启。这是目标页面给出响应给浏览器,响应是谁给的?是目标页面给的。
05:08
你在看include?Include是什么,你看。这是动作的发起页面,它是可以向标准输出流里边写入数据的。他是把这个目标页面的内容包含到了。这个发起页面最终给出响应的是谁给的?是发起页面给的。因为在这个页面里边已经开启了标准输出流。这是forward和include。这两个动作的区别?当然知道了区别以后,用法是比较简单的啊,那么这里边需要注意这两个动作都有一个配角属性啊,用于指向要转定的转向的这个页面。
06:05
那我们下面就来写一下啊,我们来写一下。关掉。嗯,咱们这样。就他吧,拷贝他。零三。Action动作。发。
07:01
好,我们来看。这个页面这个东西我就不要了啊。嗯,这个删掉,这个也删掉。我们来看forward怎么用。JSP冒号。Forward page。哪啊,Nest,我们还是到nest啊,那是杠nest.jsp。打开N里边,我们这些东西都删掉。OK。现在看一下它是什么效果,我们现在看一下这是什么效果啊。这个。走。
08:04
大家看。这是不是nice?直接这显示的N,诶。这个这个index before是没有啊。Index page after是不是没有啊?为什么没有啊?为什么只有它呀?原因很简单呢,因为forward。这是什么?它底层调用的就是requested forward方法,那么在这个页面,这个forward动作的发起页面。还没有开启标准输出流。所以你像。流里边放的数据,这都是像流里边放的数据啊。是写不到标准输出流里边的。
09:00
在哪儿开启了?在这儿开启了。那我们看一下啊,看一下什么呢。我们看一下这。Walk。这个是吧,打开。看到没?这是不是有include,呃,有,有这个index有ex呀,好。打开。你看这儿。他用的for。当然了,具体这个forward有同学说它不是,那request在底层使用的是它啊,我们现在不去往上分析这个东西了,不分析这个对象了啊。这就把它包含进来了。我们看到了,注意到一个问题,这个。
10:04
是不是形成了俩点加吧。然后编译为了俩点class。没问题吧?好。现在。现在现在。改一下,我得改一下,改成什么呢。这forward呀。我得改成include。好,我改成include了。我把这里边儿删掉。删了啊。把这个关了。现在我直接刷新看好。走。哎,是不是都出现了。
11:01
为什么都出现了?因为这是包含include,在当前这个include动作的发起页面就已经开启了标准输出流,所以它可以写到标准输出流里边。然后又把它里边内容给它包含进来了,并且。这个数据也写到标准输入流了,所以我们在客户端浏览器能够都看到。再看再看这。看到没,这个是不是也是形成了两个点加法编译为了两个点class啊。打开。看看这是不是用的。对不对,这个include include。我们刚刚写过的这个代码,这个include。
12:05
这是个。指令include指令,当时我们说了这个include指令生成的是几个点加Y呀。是不是一个,它是在我们。在我们的tomcat的JP翻译引擎,在翻译的时候,根据JP。规范,那么给他翻译到了一个点,Java文件。形成了一个点加了,最终形成了一个点class,可是我们的include动作呢?Include动作。却是形成了两个点加了两个点class。对不对,那就意味着什么。
13:02
好了,看着我再回去了啊,给这给大家把这个保留下来。下边代码。那和那个写的就不一样了啊。恩。这个。大家看现在能不能这样呢?我在这儿。写个加段,然后username为power node。
14:00
然后我在这儿。给他输出。行不行,这样写行不行?不行,你看这已经报错了,有同学说那报错了,那报错了不一定,这是这是eclips给的语法错误,那不一定会错呀,你想一想会不会错。这个JSP里边声明了一个定义了一个变量,Username将来会在哪,是不会在这个文件里边,这是个什么,这是个service啊,这个service里里边有一个service,这个service里边你看着。啊,对,咱咱打的不是这个是吧,我们这个还没发布呢。这个没发布呢,现在发布一下,当然你发布现在它是跑不起来的啊,这是跑不起来,这样先把它删掉,把它注释掉,否则他跑不起来啊。
15:04
把它注射掉先。Run as。好,现在看着啊,这。Include。这include。关了。Include,这没改。是吧,这没改。哎,这才对啊。刷新好,这是include对吧。那你看一下,我在nest里边找到,找到include啊,找到include,我在nest。
16:00
这个solid里边。是不是声明一个user name,那你想想你在它里边能用吗?这是俩类俩文件他肯定不能用啊,所以这肯定是报是报错呀。我直接刷新。是不是报错呀?所以啊。这种方式。这种include。称为动态连编。你注意它称为动态连编一个静态连边,一个动态连边。那么动态连。是怎么样形成几个点加了呀两个。它里边是不能进行。变量共享的。
17:01
对不对。大家看一下这应用场景啊,它说在静态裂变与动态裂变均可使用的时候,一般使用静态裂变,因为在程序运行时只存在一个solid,对资源的消耗比较小,并且不存在调用问题,执行效率比较高,因为它这个包含进来啊,是在。编译之前就完成了,所以它的执行效率会高。若在两个文件间需要共享同一变量,我们就使用静态连变,若在两个文件间存在同名变量,还不能混淆,那么只能使用动态裂变,什么意思?我在这儿。也声明一个user。Name。
18:00
这个叫北京动力节点。你看。这也有个username。这儿也有个username。这边也有个username,那它会显示谁?Nest里边的是。英文的这个是中文的,它会显示谁。刷新。中文的吧,为什么?刚才说了呀,你看这个和这个是同名的。但他们没有共享,互不干扰。这是互不干扰的,你这访问的就是你这个文件当前的username,它访问不到它。OK了,这是我们说的静态边和动态连边,它的应用场景啊,简单了解一下就OK了,那么这就是JSP动作JP动作I,林浩说有七大动作。
19:03
但这七大动作里边,真正用的能用到的。也就这俩,另外呢,我们就不再多说了。
我来说两句