浅谈JavaBean
-
- 支持反射机制:利用反射机制可以分析出JavaBean是如何运行的
- 支持事件:是一种简单的通信机制
- 支持属性:可以自定义属性,通过标准标签与jsp页面进行数据交互
- 支持持久性:是指可以将JavaBean进行保存在需要的时候又可以重新载入
package first;
public class Person extends Man{
private String name;
private int age;
//属性第一个字母变为大写,前边加上set
public void setAge(int age) {
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public String getName() {
return name;
}
}
4、jsp提供了JavaBean 3中标准动作既:<jsp:useBean> <jsp:setProperty> <jsp:getProperty>
①首先我们来看<jsp:useBean>动作
<jsp:useBean id="person" class="first.Person" type = "first.Man" scope = "request"/>
其对应生成servlet代码
first.Person person = null;
synchronized (application) {
person = (first.Person) _jspx_page_context.getAttribute("person", javax.servlet.jsp.PageContext.APPLICATION_SCOPE);
if (person == null){
person = new first.Person();
_jspx_page_context.setAttribute("person", person, javax.servlet.jsp.PageContext.APPLICATION_SCOPE);
}
}
标签内的相应属性对应的含义我们用一个表格来描述
属性值 | 说明 |
id |
给Bean起个变量名可以在指定范围内使用改变量。如:person等同Personperson = new Person(); |
class | bean的路径名必须是page.class。如Person在包first中故为first.Person,默认值为page |
scope | bean的有效范围,取值有page,request,session,application, |
beanName | 实例化的类名称或序列化模板的名称,制定的名称可以为其接口,父类。ji |
type | 指定其父类或接口名称。如实例化hashMap,type可以写Map,当没有父类或接口时可以省去 |
- 谈完属性我们再来谈谈他的作用域名scope。其作用域有四种page,request,session,application
- page:仅仅在当前页面有效。通过forward转向其他页面都将导致其生命周期的结束
- request: 1>客户请访问的当前jsp页面。2>与当前jsp页面共享同一个客户请求的页面既当前页面的<%@include>、<jsp:forword>标签包含的其他jsp页 当向客户返回响应时生命周期结束
- session: 当javabean对象创建后,在整个session会话期间,同一个session共享同一个javabean对象。也可以通过session.getAttribute()方法取得JavaBean对象,当当前客户会话结束时,该javabean立即销毁
- application: JavaBean对象被创建后,它存在于整个Web应用的生命周期内,Web应用中的所有JSP文件都能共享同一个JavaBean对象。 JavaBean对象作 为属性保存在application对象中,属性的名字为JavaBean的id,属性值为JavaBean对象除了可以通过JavaBean的id直接引用JavaBean对象外,也可以通过application.getAttribute()方法取得JavaBean对象
②当了解完如何创建Javabean对象接下来我们需要了解如何使用Javabean对象。我们可以使用<jsp:setProperty>来设置其属性值,标签内的各个属性代表的含义用表格来描
<jsp:setProperty property ="name" value = "bo" name = "person"/>
对应生成的jsp_servlet
org.apache.jasper.runtime.JspRuntimeLibrary.introspecthelper(_jspx_page_context.findAttribute("person"), "name", "bo", null, null, false);
out.write('\r');
属性 | 说明 |
name |
指定设置那个对象的属性,指bean的名字即为<jsp:useBean>中的id值 |
property | 是指创建的对象(即bean)的属性名,将其值赋给该对象的属性值 |
param | 是指表单传过来的参数,需要将表单传过来的参数设置为该对象的属性值时。当通过表单参数设置bean的属性值时不用设置value的值jsp引擎会自动根据表单中与bean属性名对应,并转化相应的参数类型。 |
value | 要设定的属性值 |
当通过表单参数设置bean的属性值时我们可以通过把属性名设置为通配符“*”来设定所有的bean属性值.例如表单中传过来两个参数name = “hhh”,age = "22".
<jsp:setProperty property = "*", name = "person">
执行该代码以后,该bean对象也可以说person实例的name属性值已经设置为hhh,age值已设置为22
③有设置属性的bean动作,当然也有取属性的bean动作即为<jsp:getProperty>,该标签必须与<jsp:useBean>标签配合使用
<jsp:getProperty property = "age" name = "person"/>
对应生成的jsp_servlet代码
out.write(org.apache.jasper.runtime.JspRuntimeLibrary.toString((((first.Person)_jspx_page_context.findAttribute("person")).getAge())));
该标签只有两个属性name和property其标签内的属性与<jsp:setProperty>中的属性含义相同