useBean动作:
查找或实例化一个JSP页面使用的是javaBean组件
javaBean是特殊类型的java类,与普通java类相比主要区别是包含了两种特殊的方法:
setXXX()设置属性
getXXX()获取属性
在程序中可以把逻辑控制,数据库的操作放在javaBean组件中,然后在JSP文件中调用它,本质为封装作用。
JSP语法:
<JSP:usebean id=”name” scope=”page|request|session|application” typespec/>
第一次实例化Bean时才执行body部分,如果是利用已有的Bean实例则不执行body。
获得的Bean实例后,修改属性可以通过jsp:setProperty动作进行,也可以在脚本中改变,调用该对象的方法显示地修改其属性。
若一个Bean有一个类型为X的属性的foo时,意味着这个类有一个返回值类型为X的getfoo方法,还有一个setfoo方法以 X类型的值为参数。
Jsp:setProperty和jsp:getProperty修改和提取Bean的属性。
Id用来引用Bean实例的变量。如果能够找到id和scope相同的Bean实例,jsp:useBean动作将使用已有的Bean实例,而不是创建新的实例。
Class指定Bean的完整包名,表名Bean具体是哪一个类的实例化。本质相当于构造函数。
Scope指定Bean的有效范围,有四个取值:
Page
Request
Session
Application
默认值是page,表示该Bean旨在当前页面可用,(保存在当前页面的pageContext内),有效范围是当前页面。根据需要进行设定。
Request表示该Bean在当前客户请求内有效(保存在ServletRequest内置对象内)。有效范围在一个单独客户请求的生命周期内。这个需要注意。
Session表示该Bean对当前HttpSession内的所有页面都有效,有效范围是整个用户会话的生命周期内。
Application表示该Bean对所有具有相同的ServletContext的页面都有效。有效范围是应用的生命周期内。
Type指定引用该对象的变量的类型,是Bean类的名字、超类的名字、该类所实现的接口名字之一。记住变量的名字是由id属性指定的。
beanName指定Bean的名字,提供了type属性和beanName属性,可以省略class属性。
package One;
public class A {
int x;
int y;
int z;
public A(){
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public int getZ() {
return z;
}
public void setZ(int z) {
this.z = z;
}
}
<body>
<jsp:useBean id="a1" class="One.A" scope="page"></jsp:useBean>
<jsp:useBean id="a2" class="One.A" scope="request"></jsp:useBean>
<jsp:useBean id="a3" class="One.A" scope="session"></jsp:useBean>
<jsp:useBean id="a4" class="One.A" scope="application"></jsp:useBean>
<jsp:useBean id="time" class="java.util.Date"></jsp:useBean>
<%
a1.setX(1);a1.setY(2);a1.setZ(3);
a2.setX(11);a2.setY(22);a2.setZ(33);
a3.setX(111);a3.setY(222);a3.setZ(333);
a4.setX(1111);a4.setY(2222);a4.setZ(3333);
out.println(a1.getX()+":"+a1.getY()+":"+a1.getZ());
out.println("<br>");
out.println(a2.getX()+":"+a2.getY()+":"+a2.getZ());
out.println("<br>");
out.println(a3.getX()+":"+a3.getY()+":"+a3.getZ());
out.println("<br>");
out.println(a4.getX()+":"+a4.getY()+":"+a4.getZ());
out.println("<br>");
out.println(time.toGMTString());
%>
</body>