JSP中引用的web组件复用的两种方式:静态包含、动态包含
静态包含
在JSP源文件转换成对应Servlet源文件时将当前JSP文件和其包含的所有其他文件合并成一个Servlet文件
- JSP中的include伪指令实现静态包含
– include标准语法:<%@include file=“地址”%> 只有一个file属性,路径是相对路径
<%@include %>指令
- 包含文件中要避免使用< html>< body>等元素
打印结果:logo - <%@include%>指令可以放在JSP页面的任意位置
- file属性值不能是一个动态表达式
- File属性值不能向被包含的文件传递参数
被包含文件之间可以共享变量,尽量减少文件之间的联系,降低耦合度,增强可复用度
head.jsp:
打印结果:zhangsan - 静态包含所包含的文件能够含有影响整个页面的JSP内容(如:import语句,声明)
- 若有相同的import或变量则报错
动态包含(独立运行)
动态包含是指客户端请求时,将请求转发给当前JSP文件包含的其他对象
– 使用JSP的include动作指令和forward动作指令实现动态包含
– include 和forward相当与Servlet中的RequestDispatcher.include()和RequestDispatcher.forward()方法
include动作指令
– 标准语法:<jsp:include page=“地址” flush=“true”>
- include动作指令规则
– page属性值可以是相对路径或代表相对路径的表达式
page属性指向的文件既可以是动态文件也可以是静态文件
– include允许当前页面将客户端请求暂时转交给所包含的对象,一旦对象执行完毕,返回当前JSP页面
包含文件和被包含文件各自独立编译、执行,彼此之间不能访问各自定义的变量(即page作用域范围内的对象),只能共享request范围、session范围、application范围对象 - 动态包含可以传递参数:
– 直接在包含动作中传递
– 使用<jsp:param name=“” value=“”/>
<jsp:param />标签传递参数时,会替换request对象同名的参数值
打印结果:
打印结果:
– 使用request.set/getAttribute()方法
include伪指令与include动作指令
include伪指令 | include动作指令 | |
---|---|---|
规则 | <%@include %> | < jsp:include> </jsp:include> |
编译时间 | 较慢(资源必须被解析) | 较快 |
执行时间 | 较快 | 较慢(每次请求资源被解析) |
灵活性 | 较差(页面内容必须固定) | 较好(页面在运行时动态选择) |
动作发生时间 | 页面转换期间 | 请求期间 |
被包含内容 | 文件的内容 | 页面的输出 |
产生Servlet数目 | 1 | n |
forward动作指令
语法格式:<jsp:forward page=“地址”/>
相当于
forward动作指令在调用转发操作后不会继续处理指令后的任何代码
include动作指令在调用转发操作后,完成转发操作后将继续处理指令后的代码
• 以斜杠开头的URL是相对于Web应用进行解析,而< a>或者< form>标签中的URL如果以斜杠开头则是相对于服务器的根目录进行解析
JavaBean
JavaBean通过封装属性和方法成为具有某种功能或者处理某个业务的对象,简称Bean
JSP使用JavaBean
- JavaBean满足的条件
– 必须有一个无参的公共构造方法
– 所有的属性必须有setter和getter方法,属性本身最好定义为私有的,以实现JavaBean的封装性 - 在JSP中使用< jsp:useBean>操作元素来加载JavaBean程序
相当于
- 使用< jsp:setProperty>操作元素来设置JavaBean的属性值
- 使用< jsp:getProperty>操作元素获取JavaBean的属性值
若是不设置属性值,则在url中设置