JavaBean介绍
JSP网页开发初级阶段,JSP网页代码与业务逻辑代码写在一起,给程序调试及维护带来很大困难,直至JavaBean出现,才改善了这一问题
JavaBean概述
将HTML代码与Java代码分离,将Java代码单独封装成为一个处理某种业务逻辑的类,然后在JSP页面中调用此类(JavaBean组件)
JavaBean种类
- 可视化的JavaBean:一般用于Swing的程序中,在JavaWe开发中并不会采用
- 非可视化的JavaBean:实现一些业务逻辑或封装一些业务对象
在JavaBean的规范中,要求JavaBean对象提供默认无参的构造方法,但除默认无参的构造方法外,JavaBean对象也可以根据相关属性提供构造方法
JavaBean的应用
JavaBean是用Java所写成的可重用组件,可以应用于系统很多层中,如PO,VO,DTO,POJO
获取JavaBean属性信息
在JavaBean对象中,为了防止外部对JavaBean属性的调用,通常将JavaBean中的属性设置为私有的,但需要为其提供公共的访问方法
示例代码:
(1). 创建名为Produce的类,该类是封装商品对象的JavaBean,在Produce类中创建商品属性,并提供相应的getXXX()方法:
public class Produce {
private String name = "guitar";
private double price = 1880.5;
private int count = 100;
private String factoryAdd = "广东省深圳市xxx琴行";
public String getName() {
return name;
}
public double getPrice() {
return price;
}
public int getCount() {
return count;
}
public String getFactoryAdd() {
return factoryAdd;
}
}
(2). 在JSP页面中获取商品JavaBean中的属性信息,该操作通过JSP动作标签获取:
// <jsp:useBean>实例JavaBean对象
<jsp:useBean id="produce" class="com.wang.yx.bean.Produce"></jsp:useBean>
<div>
<ul>
// <jsp:getProperty>获取属性信息
<li>
商品名称:<jsp:getProperty name="produce" property="name"/>
</li>
<li>
价格:<jsp:getProperty name="produce" property="price"/>
</li>
<li>
数量:<jsp:getProperty name="produce" property="count"/>
</li>
<li>
厂址:<jsp:getProperty name="produce" property="factoryAdd"/>
</li>
</ul>
</div>
JSP页面应该尽量避免出现Java代码,所以实例使用JSP的动作标签避免这一问题
运行结果:
商品名称:guitar
价格:1880.5
数量:100
厂址:广东省深圳市xxx琴行
对JavaBean属性赋值
编写JavaBean对象要遵循JavaBean规范,在JavaBean规范中的访问器setXXX()方法,用于对JavaBean中的属性赋值
如果对JavaBean对象的属性提供了setXXX()方法,在JSP页面中就可以通过<jsp:setProperty>对其进行赋值
在JSP页面中应用JavaBean
在遵循JavaBean规范下,在JSP页面使用JavaBean很简单,主要通过JSP动作标签<jsp:useBean>、<jsp:getProperty>、<jsp:setProperty>来实现对JavaBean对象的操作
JavaBean的生命周期可以自行进行设置,它存在于4种范围:page,request,session,application,默认情况下,JavaBean作用于page范围内
实例代码:
(1). 创建Person类,实现对用户信息的封装
public class Person {
private String name;
private int age;
private String sex;
private String add;
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getSex() {
return sex;
}
public String getAdd() {
return add;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public void setSex(String sex) {
this.sex = sex;
}
public void setAdd(String add) {
this.add = add;
}
}
(2). 创建程序主页面index.jsp,在该页面中设置录入用户信息所需要的表单
<form action="reg.jsp" method="post">
<table align="center" width="400" height="200" border="1">
<tr>
<td align="center" colspan="2" height="40">
<b>添加用户信息</b>
</td>
</tr>
<tr>
<td align="right">姓 名:</td>
<td>
<input type="text" name="name">
</td>
</tr>
<tr>
<td align="right">年 龄:</td>
<td>
<input type="text" name="age">
</td>
</tr>
<tr>
<td align="right">性 别:</td>
<td>
<input type="text" name="sex">
</td>
</tr>
<tr>
<td align="right">住 址:</td>
<td>
<input type="text" name="add">
</td>
</tr>
<tr>
<td align="center" colspan="2">
<input type="submit" value="添 加">
</td>
</tr>
</table>
</form>
表单信息中的属性名最后设置为JavaBean中的属性名称,这样可以直接使用<jsp:setProperty property="*"/>的形式来接受所有参数
(3). 创建reg.jsp页面,将所获取的用户信息输出到页面中
// 如果所处理的表单中包含中文,可以通过request的setCharacterEncoding()方法指定字符编码格式解决乱码现象
<%
request.setCharacterEncoding("utf-8");
%>
<jsp:useBean id="person" class="com.wang.yx.bean.Person" scope="page">
<jsp:setProperty name="person" property="*"/>
</jsp:useBean>
<table align="center" width="400">
<tr>
<td align="right">姓 名:</td>
<td>
<jsp:getProperty name="person" property="name"/>
</td>
</tr>
<tr>
<td align="right">年 龄:</td>
<td>
<jsp:getProperty name="person" property="age"/>
</td>
</tr>
<tr>
<td align="right">性 别:</td>
<td>
<jsp:getProperty name="person" property="sex"/>
</td>
</tr>
<tr>
<td align="right">住 址:</td>
<td>
<jsp:getProperty name="person" property="add"/>
</td>
</tr>
</table>
Tip:如果表单中属性名和JavaBean中的属性名不一致,可以通过<jsp:setProperty>标签中的param属性来指定表单中属性
eg:
// 假设这里表单中用户名为username
<jsp:setProperty name="person" property="name" param="username"/>