jsp中include指令和jsp:include动作之间的区别
的有关信息介绍如下:实例,有a.jsp,b.jsp,c.jsp三个jsp,a和b分别使用include指令和jsp:include动作两种方式引入c:
(一),a.jsp使用include指令引入c.jsp,那么在浏览器中查看a的源代码,你会看到两段分开的html代码,格式是这样的:
,两段html代码是分开的。(二)、b.jsp使用jsp:include动作引入c.jsp,那么在浏览器中查看b的源代码,你会发现c.jsp页面中所有的内容均会被嵌入到b.jsp中,html格式是这样的:
,即c的代码会被加入到b中,两段html代码是嵌入的。然后,我们去看a.jsp和b.jsp对应的servlet代码,路径在tomcat服务器的work/catalina路径下:
我们会发现,其实servlet的处理方式和以上所说的是一样的,(1)、a.java在_jspServer()方法中分别编译a.jsp和c.jsp,就是按顺序来编译a和c,处理完了一个再处理另一个,先处理谁那就看include语句在a.jsp中的位置,如果在头部就先处理c.jsp,如何在结尾就先处理a.jsp;a.java
(2)、b.java在_jspServer()方法中先编译b.jsp前半部分,再编译整个c.jsp,最后编译b.jsp剩下的后半部分,并且编译c.jsp的代码是这样的:org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "c.jsp", out, false),一句话编译完c.jsp。b.java
最后,我个人发现两者的根本不同就是,使用include指令,在a.jsp中可以直接使用c.jsp中的变量date,比如在a中输出date的年份<%= date.getFullYear()>%,是可以的:
但是如何在b中这样写,输出date.getFullYear()就编译错误,提示date cannot be resolved:
一句话,两者的区别就是能否直接使用被引入文件中的变量。