问答题 JSP中include指令和include动作有什么区别
【正确答案】
【答案解析】include的主要作用是用来在当前文件中引入另外一个文件,以便在当前文件中使用,例如,当应用程序中的所有页面的某些部分(例如标题、页脚、导航栏等)都一模一样时,就可以考虑把相同的部分提取出来写入一个单独的文件中,然后通过include方式引入。
include有两种使用方法:include指令和include动作。其中,include指令的使用方法为:<%@include file="test.jsp"%>,include动作的使用方法为:<jsp:include page="test.jsp"flush="true"> include指令与include动作之间的根本性差异在于二者被调用的时间。include指令是编译阶段的指令,即在编译时,编译器会把指令所指向目标文件的内容复制到指令所在的位置,替换指令,最终形成一个文件,在运行时只有一个文件。也就是说,include指令所包含文件的内容是在编译时插入到JSP文件中的,当文件内容有变化时就需要重写编译,因此适合于包含静态页面的情况,例如可以包含一个Servlet。而include动作是运行时的语法,在主页面被请求时,才将用到的页面包含进来,涉及两个文件,类似于方法调用,因此更适用于包含动态页面的情况。除此之外,二者的差别还有以下3点:
1)当使用include动作时,在页面中声明的变量不可用于另一文件,除非将变量放置在request、session、application作用域中;而在使用include指令时,当前页面和被包含页面可以共享变量。
2)当使用include指令时,新生成的JSP页面要符合JSP语法要求,应该避免变量名的冲突;而在使用include动作时,不存在变量名冲突问题。
3)include指令会修改被包含文件,但不会立即生效,除非修改主页面或删除主页面的类;而include动作修改了被包含的文件,会立即生效。
考虑到include动作在维护上的优势,当这两种方法都适用时,优先考虑使用include动作。仅在所包含文件中定义了主页面要用到的字段或方法,或所包含文件设置了主页面的响应报头时,才应该使用include指令,例如,很多站点的导航部分和版权信息部分都是相同的,在每个文件中都会出现,所以可以考虑把这些内容放在单独的文件中,然后使用<%@include%>指令引用即可。
常见笔试题:
在JSP中,可动态导入其他页面的标签是______。
A.<%include/></textarea> B.<%@include%>
C.<jsp:importPage/> D.<jsp:include/>
答案:D。见上面讲解。