JavaBean 是特殊的 Java 类,使用 Java 语言书写,并且遵守 JavaBean API 规范。
JavaBean规范:
<1>需要被序列化并且实现了 Serializable 接口。
<2>JavaBean 类必须是一个公共类,并将其访问属性设置为 public ,如: public class user{ …}
<3>JavaBean 类必须有一个空的构造函数:类中必须有一个不带参数的公用构造器,例如:public User() {…}
<4>一个javaBean类不应有公共实例变量,类变量都为private ,如: private int id
<5>javaBean属性是具有getter/setter方法的成员变量。也可以只提供getter方法,这样的属性叫只读属性;也可以只提供setter方法,这样的属性叫只写属性; 如果属性类型为boolean类型,那么读方法的格式可以是get 或is。例如名为abc的boolean类型的属性,它的读方法可以是getAbc(),也可以是isAbc();
命名规范:
一般JavaBean属性以小写字母开头,驼峰命名格式,相应的 getter/setter 方法是 get/set 接上首字母大写的属性名。
例如:属性名为userName,其对应的getter/setter 方法是 getUserName/setUserName。
属性名为uName,其对应的getter/setter 方法是getuName/setuName。
属性名为URL, 其对应的getter/setter 方法是getURL/setURL。
package com.qdu.beans;
import java.io.Serializable;
public class Student implements Serializable{
private String srollno;
private String spassword;
private String sname;
private String sgender;
private String sbatch;
//带参数的构造函数
public Student(String sno, String sname, String spassword, String sgender, String sbatch) {
this.srollno = sno;
this.spassword = spassword;
this.sname = sname;
this.sgender = sgender;
this.sbatch = sbatch;
}
//建议实体类都包含一个不带参数的构造函数
public Student() {
}
public String getSrollno() {
return srollno;
}
public void setSrollno(String srollno) {
this.srollno = srollno;
}
public String getSpassword() {
return spassword;
}
public void setSpassword(String spassword) {
this.spassword = spassword;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public String getSgender() {
return sgender;
}
public void setSgender(String sgender) {
this.sgender = sgender;
}
public String getSbatch() {
return sbatch;
}
public void setSbatch(String sbatch) {
this.sbatch = sbatch;
}
}
JavaBean 属性
一个 JavaBean 对象的属性应该是可访问的。这个属性可以是任意合法的 Java 数据类型,包括自定义 Java 类。
一个 JavaBean 对象的属性可以是可读写,或只读,或只写。JavaBean 对象的属性通过 JavaBean 实现类中提供的两个方法来访问:
一个 JavaBean 对象的属性应该是可访问的。这个属性可以是任意合法的 Java 数据类型,包括自定义 Java 类。
一个 JavaBean 对象的属性可以是可读写,或只读,或只写。JavaBean 对象的属性通过 JavaBean 实现类中提供的两个方法来访问:
访问JavaBean
<jsp:useBean> 标签可以在 JSP 中声明一个 JavaBean,然后使用。声明后,JavaBean 对象就成了脚本变量,可以通过脚本元素或其他自定义标签来访问。<jsp:useBean> 标签的语法格式如下:
<jsp:useBean id="bean 的名字" scope="bean 的作用域" typeSpec/>
jsp提供三个动作jsp:useBean, jsp:getProperty(获取属性),jsp:setProperty,用于在jsp页面上操作一个javabean
jsp:useBean动作用于查找或创建一个javabean实例,如果查找到bean,则后续可以使用bean的id去访问该bean,否则创建一个新的javabean实例,常用属性
** id:要查找或创建的bean的名称
** class: 要查找的bean对应的类的类名
** scope: 在什么范围查找一个bean,范围有四个:page,request,session,application
<!--<h3>1. 查找或创建JavaBean实例</h3>-->
<!--目前还没有一个名为stu的javabean实例,所以这里的代码会导致一个新的javabean实例被创建-->
<jsp:useBean id="stu" class="com.qdu.beans.Student" scope="session" />
访问 JavaBean 对象的属性
在 <jsp:useBean> 标签主体中使用 <jsp:getProperty/> 标签来调用 getter 方法,使用 <jsp:setProperty/> 标签来调用 setter 方法,语法格式如下:
jsp:setProperty动作用于设置一个javabean的指定属性的值,该动作的常用属性有:
** name:指定要使用的bean的名称,就是useBean中指定的
** property:指定要设置的属性的名称,为javabean对应的类中的属性名
** value:javabean属性的值
<!--<h3>2. 设置JavaBean实例的属性的值</h3>-->
<jsp:setProperty name="stu" property="srollno" value="2017208888" />
<jsp:setProperty name="stu" property="sname" value="Anna" />
<jsp:setProperty name="stu" property="spassword" value="6666" />
<jsp:setProperty name="stu" property="sgender" value="女" />
<jsp:setProperty name="stu" property="sbatch" value="17J03班" />
jsp:getProperty动作用于获取一个javabean的指定属性的值,该动作的常用属性有:
** name:指定要使用的bean的名称,就是useBean中指定的
** property:指定要获取的属性的名称,为javabean对应的类中的属性名
<!--<h3>3. 获取JavaBean实例的属性的值</h3>-->
<p>
<br>学号: <jsp:getProperty name="stu" property="srollno" />
<br>密码: <jsp:getProperty name="stu" property="spassword" />
<br>姓名: <jsp:getProperty name="stu" property="sgender" />
<br>性别: <jsp:getProperty name="stu" property="sgender" />
<br>班级: <jsp:getProperty name="stu" property="sbatch" />
</p>
设置bean属性值的方式
<body>
<h1>设置bean属性值的方式</h1>
<hr>
<!-- 这里因为还没有一个名为stu的javabean,所以useBean会创建一个Student类型的bean对象 -->
<jsp:useBean id="stu" class="com.qdu.beans.Student" scope="request" />
<h4>1. 通过value属性直接给出值</h4>
<jsp:setProperty name="stu" property="srollno" value="2016890709" />
<jsp:setProperty name="stu" property="sname" value="anna" />
姓名:<jsp:getProperty name="stu" property="sname" />
<h4>2. 通过param属性指定使用的请求参数,给出参数的名称</h4>
<jsp:setProperty name="stu" property="srollno" param="srollno" />
<jsp:setProperty name="stu" property="spassword" param="spassword" />
<jsp:setProperty name="stu" property="sname" param="sname" />
<jsp:setProperty name="stu" property="sgender" param="sgender" />
<jsp:setProperty name="stu" property="sbatch" param="sbatch" />
姓名:<jsp:getProperty name="stu" property="sname"/>
<h4>3. 不给value或param属性,则根据属性名使用同名的请求参数的值</h4>
<jsp:setProperty name="stu" property="srollno" />
<jsp:setProperty name="stu" property="spassword"/>
<jsp:setProperty name="stu" property="sname" />
<jsp:setProperty name="stu" property="sgender" />
<jsp:setProperty name="stu" property="sbatch" />
姓名:<jsp:getProperty name="stu" property="sname"/>
<h4>4. 使用*:所有属性根据属性名自动匹配请求参数名称,使用对应参数的值,前提是属性名和请求参数名相同</h4>
<!--如果指定property为*,则表示自动使用同名的请求参数的值作为同名的属性的值-->
<jsp:setProperty name="stu" property="*" />
姓名:<jsp:getProperty name="stu" property="sname"/>
</body>