Java 之父 James Gosling 在设计 Java 语言,为 Java 组件中封装数据的 Java 类进行命名时,看到了桌子上的咖啡豆,于是灵机一动,就把它命名为“JavaBean”。从此,"JavaBean"开始了它罪恶的一生。
定义
JavaBean 是遵守 Java API 规范的 Java类,它是一个可以重复使用的组件。
JavaBean必须满足以下三个条件:
- 是一个公共类,并提供公有的无参构造方法
- 属性必须私有化
- 必须有对应的get/set方法
只要是满足了以上3个要求的、是用Java语言编写的类就叫做 JavaBean。
Java示例
package com.chen.pojo;
public class People {
private int id;
private String name;
private int age;
private String address;
public People(){
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "People{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", address='" + address + '\'' +
'}';
}
}
JavaBean 的属性
JavaBean的属性与普通Java类的属性的概念不一样JavaBean的属性是以方法定义的形式出现的。
JavaBean 的每个属性通常都具有相应的 setter 和 getter 方法,setter 方法称为属性修改器,getter 方法称为属性访问器,如下:
- getPropertyName()
属性访问器以小写的 get 作为前缀,后跟属性名,且属性名的第一个字母也要改为大写。例如:属性名称为 name,则方法名称为 getName( ),用来读取该属性值。 - setPropertyName()
属性修改器以小写的 set 作为前缀,后跟属性名,且属性名的第一个字母也要改为大写。例如:属性名称为 name,则方法名称为 setName( ),用来设置该属性值。
值得注意的是,JavaBean 的某个属性也可以只有 set 方法或 get 方法,这样的属性称之为只写或只读属性。
JavaBean的使用
在JSP中专门定义了三个标签:<jsp:useBean >、<jsp:setProperty >和<jsp:getProperty >,它们分别用于创建和查找JavaBean的实例对象、设置JavaBean对象的属性、读取JavaBean对象的属性。
- <jsp:useBean >标签
<jsp:useBean id="people" class="com.chen.pojo.People" scope="page|request|session|application">
其中,id表示Bean 实例化对象的变量名,可以在指定范围内使用该变量名。
class表示需要实例化 Bean 的类路径,指定的类必须包含 public 且无参数的构造方法。scope指定 Bean 的作用域,取值有:
- page:只能在当前页面使用该 Bean 对象;
- request:只能在一次请求范围内使用该 Bean 对象;
- session:只能在一次会话范围内使用该 Bean 对象;
- application:可以在整个应用范围内使用该 Bean 对象。
- <jsp:setProperty >标签
<jsp:setProperty name = "beanName" property = "attributeName" value = "attributeValue"/>
其中,name 指定需要修改属性的 Bean 的名称;property 指定 Bean 的属性,即 Bean 类中的属性;value 是要设定的属性值。
- <jsp:getProperty >标签
<jsp:getProperty name = "beanName" property = "attributeName">
其中,name 指定需要获取属性的 Bean 的名称;property 指定 Bean 的属性,即 Bean 类中的属性。
在现如今的开发过程中,JavaBean的真正用途在于和数据库的字段做映射(ORM)
ORM:
- 表–>类
- 字段–>属性
- 行记录–>对象
People表:
id | name | age | address |
1 | 狂神1号 | 3 | 西安 |
2 | 狂神2号 | 18 | 北京 |
3 | 狂神3号 | 38 | 上海 |
数据库中的People表对应的Java中的People类:
package com.chen.pojo;
public class People {
private int id;
private String name;
private int age;
private String address;
public People(){
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "People{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", address='" + address + '\'' +
'}';
}
}
使用JSP标签来对创建People类对象:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<jsp:useBean id="people01" class="com.chen.pojo.People" scope="page"/>
<jsp:setProperty name="people01" property="id" value="1"/>
<jsp:setProperty name="people01" property="name" value="狂胜1号"/>
<jsp:setProperty name="people01" property="age" value="3"/>
<jsp:setProperty name="people01" property="address" value="西安"/>
<jsp:useBean id="people02" class="com.chen.pojo.People" scope="page"/>
<jsp:setProperty name="people02" property="id" value="2"/>
<jsp:setProperty name="people02" property="name" value="狂胜2号"/>
<jsp:setProperty name="people02" property="age" value="18"/>
<jsp:setProperty name="people02" property="address" value="北京"/>
<jsp:useBean id="people03" class="com.chen.pojo.People" scope="page"/>
<jsp:setProperty name="people03" property="id" value="3"/>
<jsp:setProperty name="people03" property="name" value="狂胜3号"/>
<jsp:setProperty name="people03" property="age" value="38"/>
<jsp:setProperty name="people03" property="address" value="上海"/>
<p>People表中第一行的数据如下:</p>
id:<jsp:getProperty name="people01" property="id"/>
姓名:<jsp:getProperty name="people01" property="name"/>
年龄:<jsp:getProperty name="people01" property="age"/>
地址:<jsp:getProperty name="people01" property="address"/>
</body>
</html>