`

servlet和jsp核心编程(第2版)第十三章 在JSP页面中包含文件和applet学习笔记

阅读更多
第十三章 在JSP页面中包含文件和applet
本章论述jsp:include动作,include指令,jsp:plugin动作
一、在请求期间包含页面jsp:include
1.首先这个include动作,是在主页面被请求时,将include所引用的内容的输出包含进来,注意是次级页面的输出,我们可以这样理解,在访问主页面时,如果使用了jsp:include,则服务器对这个include中的URL进行解释,以通常的方式运行该页面,然后将该次级页面的输出包含进来。也就是将主次页面的输出合并在一起后输出。这种行为和RequestDispatcher类的include方法相同。

2.<重点提示>对以斜杠开头的URL,服务器和浏览器的解释是不同的,服务器总是相对于当前WEB应用对他们进行解释,浏览器总是相对于服务器的根目录对他们进行解释。我们可以这样理解,如果是用户请求的一个URL,或者说是客户(浏览器去处理的一
个URL),那么就是以服务器的根目录来解释,比如:
<a href = "/MyTest1/test.jsp">
形成的URL为http://localhost:8080/MyTest1/test1.jsp其中MyTest1是其项目名。但是如果为
<jsp:include page = "/test.jsp">
形成的URL就
为:http://localhost:8080/MyTest1/test1.jsp。注意其中的page属性。

3.<核心方法>由于jsp:include所包含的页面一般不是完整的页面,所以我们可以把它放在WEB-INF目录中,这样用户就不会偶然访问到他们了。

4.flush属性,表示将页面包含进来之前是否应该清空主页面的输出流。

5.<核心方法>不要将完整的HTML文档作为被包含的页面,被包含页面中只能含有适合于出现在文件插入点处的HTML标签。 注意这里是HTML文档不需要是完整的,包括JSP文档,我们需要查看其生成的html代码,并将其交给html验证器。

6.jsp:param 增加请求参数,如果使用了jsp:param指定了参数,那么由jsp:param所指的值仅在被包含文件中优先采用。不会出现在主页面中。

二、在页面转换期间包含文件:include指令
1.include指令可以在主JSP文档转换为servlet(一般在它首次被访问时),将文件包含到文档中。
<%@include file = "Relative URL"%>

我们可以理解为,当主页面转换为servlet时,将include指令所引入的页面合成进来,然后一起转换为servlet。这就意味着include指令。

2.和include动作的主要区别就是它们的调用时间不同,include指令在页面转换为servlet时调用,而include动作则在页面请求时调用,然后服务器分别解释两个URL,将它们的输出合并在一起。

3.<核心方法>对于文件包含,应该尽可能使用include动作。仅在所包含的文件中定义了主页面要用到的字段或方法,或者所包含的文件设置了主页面的响应报头时,才使用include指令。这是因为include动作更加易于维护:主页面不需要知道次页面是否需要更改。

4.既然include指令不便于维护,为什么有时还要使用他呢,因为次页面所包含的内容可以影响到主页面,而这时include动作无法完成的内容。

5.<警告>因为并不要求检测包含的页面什么时候发生更改,所以如果我们更改了被包含的文件,必须更新所有使用它的jsp文件的修改日期。我们往往通过在顶级页面中写入一段JSP注释,当被包含文件发生改变时更新这段注释。

6.特别要注意脚本重用的问题,比如我们写了一个用于计算访问计数的脚本,如果我们在一个页面中使用include动作,那么这个计算访问计数的脚本转换的servlet就为一个单独的servlet,那么这个单独的servlet就属于整个网站,也就是说计算的是整个网的访问计数,而无论用户访问哪个页面,总访问计数都会加1,所以显示的访问计数就是整个网站的访问计数。而如果我们使用include指令,那么由于这个脚本和当前主页面一起形成一个servlet,所以这个脚本就计算的是当前页面的访问计数,虽然网站中的页面都使用该脚本,但是他们的访问计数都不经相同,它显示的就是各自页面的访问计数。

三、使用jsp:forward转发请求
1.如果使用jsp:forward 则主页面不能含有任何输出,因为我们转到了jsp:forward所指的页面,原来的页面的输出显示出来也会被覆盖,我们推荐完全避免使用jsp:forward,转而由servlet调用RequestDispacher的forward方法。

四、包含使用java插件的applet
1.<核心方法>不管您选择applet的哪种方式,applet的.class文件都必须放在浏览器能够访问的目录中,不要将它们放在WEB-INF/classes目录中,使用它们的是浏览器,不是服务器。

2.如果是小型项目,用户又是使用老的浏览器,怎可以用JDK1.1或1.2开发applet,但是我们不能使用java 2D,不能使用java 2集合包;如果我是小型项目,用户使用的是IE6以上或Netscape6或以上。我们可以让用户安装java运行环境JRE(1.4),然后使用
JDK开发;如果是大型项目,一般,我们让用户安装java2插件,使用java2 开发applet。我们可以到http://java.sun.com/products/plugin/下载这个插件。
3.但遗憾的是在某些浏览器中,常规的applet标签不能包含一些插件,这就需要我们针对不同浏览器使用<object>或是<embed>包含这些插件,但是我们还要判断浏览器类型,比较繁琐,<重点提示>所以我们使用<jsp:plugin>,这个元素不向浏览器添加 任何java能力,它只是简化了笨重的OBJECT和EMBED标签的创建工作,java2插件需要这两个标签,也就是说这个标签主要用于引入插件。

4.jsp:param和jsp:params元素,说这两个标签不是为了说它的功能,而是说他们所遵循的xml语法,首先属性名必须小写,属性值必须在单引号或双引号中,同时元素以/>结束。且所有的<jsp:param>必须在<jsp:params>中。

5.jsp:fallback向不支持object或embed的浏览器提供一段替换性文字。如:
<applet code = "MyApplet.class" width = 475  height = 350>
<b>Error:this example requires java.</b>
</applet>

<jsp:plugin type = "applet" width = "475"  height =" 350 ">
<jsp:fallback>
<b>Error:this example requires java.</b>
</jsp:fallback>
</jsp:plugin>

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics