【开发该软件的操作系统】:windows10
【软件开发环境/开发工具】:PyCharm
【编程语言】:Python
【开发目的】:这是老师布置的作业啦~ 供初学者参考学习
【开发者】:江西农业大学2020级大二学生
目录
2.静态包含(指令包含)的语法 %@include file=""%>
1.包含的目的
- 在一般的页面开发中会有很多内容要重复地显示。
- 如果让每一个页面都分别包含工具栏、页面头部、页面尾部的代码。这样会有很多的重复代码,以后维护时会很麻烦。
- 如果采用包含的形式,将工具栏、页面头部、页面尾部分别做成一个文件,然后在需要的地方导入就可以减少代码的重复量,方便后期维护。
2.静态包含(指令包含)的语法 %@include file=""%>
静态包含指令是在JSP编译时插入一个包含文本或代码的文件,这个包含的过程是静态的,而包含的文件可以是JSP文件、HTML文件、文本文件,或是一段Java程序(只是简单地将内容合在一起后进行显示)。
在每一个完整的页面中,对于<html>、</html>、<head>、</head>、<title>、</title>、<body>、</body>这几个元素只能出现一次,如果重复出现,则可能会造成显示的错误。
(1)创建info.htm,定义要包含的页面:
(2)创建info.jsp,定义要包含的页面:
(3)创建info.inc,定义要包含的页面:
(4)创建include_demo01.jsp,使用静态包含指令:
(5)启动tomcat,启动浏览器:
(6)浏览器右击,查看源代码
3.静态包含(指令包含)的处理流程
- 首先将所包含的3个文件的内容导入到include_demo01.jsp中
- 然后再一起进行编译
- 最后再将一份整体的内容展现给用户,也就属于先包含,然后再将全部的代码进行集中的编译处理。
如图所示:
4.静态包含(指令包含)存在的问题。
静态包含 是编译时包含,如果包含的页面不存在则会产生编译错误,而且两个页面的"contentType"属性应保持一致,因为 两个页面会合二为一,只产生一个class文件,因此被包含页面发生的变动再包含它的页面更新前不会得到更新。
5.动态包含(标签包含)的语法<jsp:include page=""/>
使用<jsp:include>指令可以完成动态包含的操作,与之前的静态包含不同,动态包含语句,可以自动区分被包含的页面是静态还是动态。
动态包含语法:
不传递参数:
<jsp:include page="{要包含的文件路径 | <%=表达式%>}" flush="true | false"/>
传递参数:
<jsp:include page="{要包含的文件路径 | <%=表达式%>}" flush="true | false">
<jsp:param name="参数名称" value="参数内容"/>
... 可以向被包含页面中传递多个参数
</jsp:include>
<jsp:include>这样的语法格式属于标签指令形式,所有的标签指令必须完结,可以使用/>或</jsp:include>的形式,前者是在不传递参数时使用,后者是在传递参数时使用。
所有以<>形式出现的JSP代码都是标签指令。
(1)创建include_demo02.jsp,使用标签指令包含:
(2)重启tomcat,重新加载浏览器:
(3)标签指令没有完结:
(4)运行:
6.动态包含(标签包含)的处理流程
动态包含在代码的编译阶段,包含和被包含部分是两个独立的部分,只有当运行时,才会动态包含进来,好比方法的调用。(如果包含的是动态页,则先分别处理后再将处理的结果包含进来。)
7.动态包含(标签包含)如何向被包含页面传递参数
(1)定义被包含页,并接收传递的参数:
(2)创建include_demo03.jsp,定义包含页,并传递参数:
(3)结果:
(4)传递参数是一个变量(要传变量就通过表达式完成<%=username%>):
8.动态包含(标签包含)存在的问题
无论是动态包含还是静态包含,其request对象都是相同的。也就是同一个request对象。
9.比较静态包含和动态包含相同点和不同点。
(1)静态包含:
被包含动态页include.jsp:
静态包含处理页:
结果:
(2)动态包含:
被包含动态页include.jsp:
动态包含处理页:
结果:
(1)<%@ include file=” ”%>是指令元素,<jsp:include page=” ”/>是行为元素。
(2)最终编译成java文件的数目不同。静态包含在转换成为java文件的时候将包含文件的内容“复制”到主体文件,然后作为一个整体编译。最终编译为一个java文件;动态包含是各个jsp文件分别转换,分别编译。最终编程成多个java文件。
(3)执行时间不同。静态包含发生在:JSP---->java文件阶段。动态包含发生在:执行class文件阶段。动态加入。
(4)静态包含在两个文件中不能有相同的变量,动态包含允许。由于静态包含相当于将包含文件内容直接复制到主体文件中,如果出现相同的变量,就会出现覆盖等问题,导致文件出错。而动态包含相当于调用不同的jsp,变量所在的空间不同,自然不会出现覆盖等现象。
(5)无论是动态包含还是静态包含,其request对象都是相同的。也就是同一个request对象。静态包含最终编译成一个java文件,有一个request对象很好理解。而动态包含最终编译成多个jsp文件,为何会使用一个request对象呢?其实这些jsp组合的过程是一个请求转发的过程,自然也使用同一个request对象了。
静态包含和动态包含的使用
简单总结一下,就一句话:被包含的页面是静态页面就用静态包含,是动态页面就用动态包含。(当然,不是很绝对,但是这样用没有错。)
静态包含:属于先包含后处理
动态包含:如果包含的是动态页,则先分别处理后再将处理的结果包含进来,解决重复定义变量的问题。
共同进步,祝大家学有所成!