include指令是静态包含。静态包含的意思就是:把文件的代码内容都包含进来,再编译!
include指令是静态包含,include行为是动态包含。其实include行为就是封装了request.getRequestDispatcher(String url).include(request,response)
include行为语法是这个样子的
<jsp:include page=""/>
使用jsp行为来包含文件,jsp源文件是这样子的:
jsp行为包含文件就是先编译被包含的页面,再将页面的结果写入到包含的页面中(1.jsp)
动态包含可以向被包含的页面传递参数(用处不大),并且是分别处理包含页面的(将被包含页面编译后得出的结果再写进包含页面)【如果有相同名称的参数,使用静态包含就会报错!】!
总结
<%@include file="xxx.jsp"%>在翻译阶段(将JSP页面转换成servlet的阶段),include会读入指定的页面中的内容,并将这些内容和原来的页面融合在一起,
融合后的完整页面再被整体的转换为一个servlet。这意味着主页和被引入的页面共享所有的页面作用域数据。include指令的一个常见用法是引入应用程序的所有页面都需要的公共声明。
,而<jsp:include page="xxx.jsp">
是jsp中的动作指令,用于在运行时引入另外的资源。被引用页面改变后,容器可能不会马上产生反应。这个指令是在请求处理阶段而不是在翻译阶段执行的。该行为并不是要引入指定页面的实际内容,它将引入执行该引入页面后所产生的应答,这意味着你可以指定任何能够产生文本应答的web资源。JSP容器将通过一个内部的函数调用来调用指定的资源。因此,这些被引入的资源可以帮助处理原来的请求,所以这些资源可以访问请求作用域内的所有对象,以及所有的请求参数。但是要注意,它不能访问任何页面作用域属性,或是在主页面中声明的脚本变量。
<c:import>行为和<jsp:include>相同,另外它还可以从外部资源引入数据,比如不同的web应用程序,或者一个FTPfuwq。
所以应该使用<c:import>来代替<jsp:include>的使用。
被引用页面改变后,新版本会立即投入使用。使用静态包含只会产生一个class文件,而使用动态包含会产生多个class文件。<%@ include file%>是把引入的文件和当前的文件共同合斌成一个servlet文件进行解析。<JSP:include page>是把当前文件和引入文件生成两个不同的servlet文件,在当前文件中在进行动态的调用引入的servlet文件。
使用静态包含,包含页面和被包含页面的request对象为同一对象,因为静态包含只是将被包含的页面的内容复制到包含的页面中去;而动态包含包含页面和被包含页面不是同一个页面,被包含的页面的request对象可以取到的参数范围要相对大些,不仅可以取到传递到包含页面的参数,同样也能取得在包含页面向下传递的参数