include指令和include动作的区别
Posted A Free Raindrop
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了include指令和include动作的区别相关的知识,希望对你有一定的参考价值。
include指令和include动作的区别
1.include指令
include可以在JSP页面转换成Servlet之前,将JSP代码插入其中。它的主要优点是功能强大,所包含的代码可以含有总体上影响主页面的JSP构造,比如属性、方法的定义和文档类型的设定。它的缺点是难于维护只要被包含的页面发生更改,就得更改主页面,这是因为主页面不会自动地查看被包含的页面是否发生更改。
include指令的语法格式如下:
<%@ include file="Relative Url"%>
2.include动作
jsp:include动作是在主页面被请求时,将次级页面的输出包含进来。尽管被包含的页面的输出中不能含有JSP,但这些页面可以是其他资源所产生的结果。服务器按照正常的方式对指向被包含资源的URL进行解释,因而这个URL可以是Servlet或JSP页面。服务器以通常的方式运行被包含的页面,将产生的输出放到主页面中,这种方式与RequestDispatcher
类的include方法一致。它的优点是在被包含的页面发生更改时,无须对主页面做出修改。它的缺点是所包含的是次级页面的输出,而非次级页面的实际代码,所以在被包含的页面中不能使用任何有可能在整体上影响主页面的JSP构造。
jsp:include动作的完整语法如下:
<jsp:include page="Relative path to resource" flush="true">
其中jsp:include之间不能有空格,page属性指定被包含的页面,这个属性是必需的,是指向某种资源的相对URL。如果这个相对URL不是以/开头,则将其解释为相对于主页面的路径;如果是以/开头,是这个URL被解释为相对于当前WEB应用的根目录,而不是服务器的根目录,这是因为该URL是由服务器来解释的,不是由用户的浏览器来解释的。像下面这行代码,是由用户的浏览器进行解释的,因此会按照相对于服务器的根目录进行解释。 flush属性是一个可选的次级属性,默认值为false,它指定在将页面包含进来之前是否应该清空主页面的输出流。
注意:在JSP1.1中,flush是必需的属性,而且聚会只能是true。
3.两者的区别和比较
jsp:include动作和include指令之间的根本性的不同在于它们被调用的时间。jsp:include动作在请求期间被激活,而include指令在页面转换期间被激活。
两者之间的差异决定着它们在使用上的区别。使用include指令的页面要比使用jsp:include动作的页面难于维护。前面已经说过,使用JSP指令,如果包含的JSP页面发生变化,那么用到这个页面的所有页面都需要手动更新。在JSP服务器的相关规范中并没要求能够检测出包含的文件什么时候发生改变,实际上大多数服务器页都有去实现这种机制。这样就会导致十分严重的维护问题,需要记住所有包含某一个页面的其他页面,或者重新编译所有的页面,以使更改能够生效。在这点上,jsp:include就体现出了十分巨大的优势,它在每次请求时重新把资源包含进来。在实现文件包含上,应该尽可能地使用jsp:include动作。 jsp:include动作直比于include指令在维护上有着明显优势,而include指令仍然能够得以存在,自然在其他方面有特殊的优势。这个优势就是include指令的功能更强大,执行速度也稍快。include指令允许所包含的文件中含有影响主页面的JSP代码,比如响应报送的设置和属性方法的定义。
【精华】include 指令和 include 动作的区别 include指令合并静态文档或Jsp页面中的内容,可以用于包括动态生成的输出结果,因此可以包含一个Servlet 。
include指令在编译期合并为一个文档 。
include动作在请求时进行包括处理。
共享局部变量
include指令各文件中的声明的脚本变量在所有组成的页面中有效 。 include动作在一个文件中声明的脚本变量不能用于其他页面,除非将变量放置在 request,session,application作用域中。
修改的生效
include指令被包含文件被修改,不会立即生效,除非修改主页面或删除主页面的类。 include动作修改了被包含的文件立即生效。
变量的作用域
include指令中的要注意变量命名冲突情况 。
include动作不会出现变量命名冲突问题,因为他们实际上是局部变量。
以上是关于include指令和include动作的区别的主要内容,如果未能解决你的问题,请参考以下文章