采用页面引入技术可以将多个页面相同的部分抽取出来,从而使用代码满足DRY()原则。
1、jstl import
JSP页面引入包含静态引入和动态引入两种:
2、静态引入静态引入:将一个外部文件嵌入到当前JSP文件中,同时解析这个页面的JSP语句,它会把目标页面的其他编译指令也包含进来。复制被包含文件汇总的所有内容,再把它粘贴到这个文件中。 静态引入的语法:
示例:
-
被引入的页面:aa.jsp
被引入的页面 被引入的页面
-
目标页面:aim.jsp
静态引入范例
-
运行,查看生成的servlet类可看到如下代码段
可看出静态引入时被引入页面的内容会被直接写入到目标页面中。 注意:静态引入会将被包含页面的编译指令也包含进来,如果两个页面的编译指令有冲突,那么目标页面就会出错。
动态引入是不会引入include页面的编译指令的,而是仅仅将被引入页面的body内容插入本页面。 动态引入的语法格式:
或
flush属性用语指定输出缓存是否转移到被引入文件中。如果指定为true,则包含在被引入文件中,如果指定为false,则包含在原文件中,对于JSP1.1旧版本,只能设置为false。 对于第二种语法格式,则可在被引入页面中加入额外的请求参数。
示例:
-
被引入的页面:aa.jsp
被引入的页面 被引入的页面
-
目标页面:aim.jsp
静态引入范例
-
运行,查看生成的servlet类可看到如下代码段
可看出动态引入只是使用了一个include方法来插入目标页面的内容,而不是将目标页面完全融入到本页面中。
- 静态引入是将被引入页面的代码完全融入,两个页面融合成一个整体Servlet;而动态引入则在Servlet中使用include方法来引入被引入页面的内容。
- 静态引入时被引入页面的编译指令会起作用;而动态引入时被引入页面的编译指令则失去作用,只是插入被引入页面的body内容。
- 动态引入可以增加额外的参数,而静态引入只生成一个java文件
- 静态引入是指令标签,动态引入是行为标签
- 静态引入被引入的页面发生改变时,所有引用它的页面都得重新编译;而动态引入被引入的页面发生改变时,只需要编译被引入的页面即可
- 静态引入可以引入静态页面,动态引入可以引入动态页面
- 动态引入:如果包含jsp文件,每次加载目标页面的时候,被包含的页面都要重新编译。就是说不管包含了几个jsp页面编译后生成的servlet只有一个class文件
- 静态引入:包含了几个JSP文件转译成servlet时就会有几 个 class文件,如果在jsp1定义了变量i同时在jsp2也定义了变量i那么你编译都会通不过的
- 静态引入是在转换时插入被引入文件的源代码,而动态引入是在运行时插入被包含文件的响应。
- 静态包含,不论包含的是txt文本还是jsp文件,被包含的页面都不会从新编译。