javabean
7.1 javaBean介绍
7.1.1 javaBean 概述
起初,JavaBean的目的是为了将可以重复使用的代码进行打包,在传统的应用中,JavaBean主要用于实现一些可视化界面,如一个窗体、按钮、文本框等,这样的JavaBean称之可视化的JavaBean。随着技术的不断发展与项目的需求,目前JavaBean主要用于实现一此业务逻辑或封装一些业务对象,由于这样的JavaBean并没有可视化的界面,所以又称之为非可视化的JavaBean。
可视化的JavaBean一般应用于Swing的程序中,在java web开发中并不会采用,而是使用非可视化的JavaBean,实现一此业务逻辑或封装一些业务对象,下面就通过实例来了解一下非可视化的JavaBean。
7.1.2 JavaBean种类
【例7.1】:通过非可视化的javaBean对象,用于封装邮箱地址,通过jsp页面调用该对象来验证邮箱地址是否合法:
(1):创建名称为Email的javaBean对象,用于封装邮箱地址
package com.lyq.bean;
import java.io.serializable;
/**
* 邮件对象JavaBean
* @author Li YongQiang
*/
public class Email implements Serializable {
// serialversionuid 值
private static final long serialVersionUID = 1L;
// Email地址
private String mailAdd;
// 是否是一个标准的Email地址
private boolean eamil;
/**
* 默认无参的构造方法
*/
public Email() {
}
/**
* 构造方法
* @param mailAdd Email地址
*/
public Email(String mailAdd) {
this.mailAdd = mailAdd;
}
/**
* 是否是一个标准的Email地址
* @return 布尔值
*/
public boolean isEamil() {
// 正则表达式,定义邮箱格式
String regex = "\\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";
// matches()方法可判断字符串是否与正则表达式匹配
if (mailAdd.matches(regex)) {
// eamil为真
eamil = true;
}
// 返回eamil
return eamil;
}
public String getMailAdd() {
return mailAdd;
}
public void setMailAdd(String mailAdd) {
this.mailAdd = mailAdd;
}
}
说明:
虽然在javaBean的规范中,要求JavaBean对象提供默认无参的构造方法,但除默认无参的构造方法外外,JavaBean对象也可以根据相关属性提供构造方法,所以Email类为了实例化方便,还提供了使用mailAdd实现的一个构造方法。
(2):创建index.jsp的页面,用于放置验证邮箱的表单,表单提交地址为result.jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="result.jsp" method="post">
<table align="center" width="300" border="1" height="150">
<tr>
<td colspan="2" align="center">
<b>邮箱认证系统</b>
</td>
</tr>
<tr>
<td align="right">邮箱地址:</td>
<td><input type="text" name="mailAdd"/></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" />
</td>
</tr>
</table>
</form>
</body>
</html>
(3)创建result.jsp的页面,对index.jsp页面的表单进行处理,在此页面实例化Email对象,对邮箱地址进行验证,并将验证结果输出到页面中。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@page import="com.lyq.bean.Email"%><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<p align="center">
<%
// 获取邮箱地址
String mailAdd = request.getparameter("mailAdd");
// 实例化Email,并对mailAdd赋值
Email email = new Email(mailAdd);
// 判断是否是标准的邮箱地址
if(email.isEamil()){
out.print(mailAdd + " <br>是一个标准的邮箱地址!<br>");
}else{
out.print(mailAdd + " <br>不是一个标准的邮箱地址!<br>");
}
%>
<a href="index.jsp">返回</a>
</p>
</body>
</html>
该页面通过JSP的内置对象request,接受表单传递的mailAdd值,然后通过该值来实例化Email对象,通过Email的isEmail()方法判断地址是够合法,并在页面中输出判断结果。
7.2 JavaBean的应用
7.2.1 获取JavaBean的属性信息
在javaBean对象中,为了防止外部直接对JavaBean属性的调用,通常将JavaBean中的属性设置为私有的(private),但需要为其提供公共的(public)访问方法,也就是getXXX()方法。
【例7.2】 在jsp页面中显示javaBean属性信息
(1)创建名称为Produce的类,该类是封装商品对象的javaBean,在Produce类中创建商品属性,并提供相应的getXXX()方法
package com.lyq.bean;
/**
* 商品对象
* @author Li YongQiang
*/
public class Produce {
// 商品名称
private String name = "电吉他";
// 商品价格
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动作标签进行获取。
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body>
<jsp:useBean id="produce" class="com.lyq.bean.Produce"></jsp:useBean>
<p>
<ul>
<li>
商品名称:<jsp:getProperty property="name" name="produce"/>
</li>
<li>
价格:<jsp:getProperty property="price" name="produce"/>
</li>
<li>
数量:<jsp:getProperty property="count" name="produce"/>
</li>
<li>
厂址:<jsp:getProperty property="factoryAdd" name="produce"/>
</li>
</ul>
</p>
</body>
</html>
说明:使用 jsp:useBean标签可以实例化JavaBean对象,jsp:getProperty标签可以获取JavaBean
中的属性信息,这两个标签可以直接操作我们所编写的类,它真的有那么强大,是不是在JSP 页面中
可以操作所有的Java类?答案是否定的。jsp:useBean标签与jsp:getProperty标签之所以可以操作
java类,是因为我们所编写的Java类遵循了JavaBean规范。jsp:useBean标签获取类的事例,其内部
是通过实例化类的默认构造方法进行获取,所有,JavaBean需要一个默认的无参的构造方法;
jsp:getProperty标签获取JavaBean中的属性,其内部是通过调用指定类型的getXXX方法进行获取,
所以,JavaBean规范要求为属性提供公共的(public)类型的访问器。
因此,在编写就JavaBean是要遵循制定的JavaBean规范。
7.2.2 对JavaBean属性赋值
【例7.3】 创建商品对象的JavaBean,在该类中提供属性及其属性相对应的getXXX()方法与setXXX()方法,在JSP页面中对JavaBean属性赋值并获取输出。
(1)创建Produce类,该类是封装商品信息的JavaBean ,在该类中创建商品属性及其属性相对应的getXXX()和setXXX()方法。
package com.lyq.bean;
/**
* 商品对象
* @author Li YongQiang
*/
public class Produce {
// 商品名称
private String name ;
// 商品价格
private double price ;
// 数量
private int count ;
// 出厂地址
private String factoryAdd ;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public String getFactoryAdd() {
return factoryAdd;
}
public void setFactoryAdd(String factoryAdd) {
this.factoryAdd = factoryAdd;
}
}
(2)创建页面,在该页面中实例化Produce对象,然后对其属性值进行赋值并输出
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body>
<jsp:useBean id="produce" class="com.lyq.bean.Produce"></jsp:useBean>
<jsp:setProperty property="name" name="produce" value="洗衣机"/>
<jsp:setProperty property="price" name="produce" value="8888.88"/>
<jsp:setProperty property="count" name="produce" value="88"/>
<jsp:setProperty property="factoryAdd" name="produce" value="广东省xxx公司"/>
<p>
<ul>
<li>
商品名称:<jsp:getProperty property="name" name="produce"/>
</li>
<li>
价格:<jsp:getProperty property="price" name="produce"/>
</li>
<li>
数量:<jsp:getProperty property="count" name="produce"/>
</li>
<li>
厂址:<jsp:getProperty property="factoryAdd" name="produce"/>
</li>
</ul>
</p>
</body>
</html>
7.2.3 在JSP页面中应用JavaBean
将JavaBean对象应用到JSP页面中,JavaBean的生命周期可以自行进行设置,它存在于4种范围之内,分别为:page、request、session、APPlication,默认的情况下,JavaBean作用于page范围之内。
【例7.4】 实现档案管理系统,在其中录入用户信息功能,主要通过在JSP 页面中应用JavaBean进行实现。
(1) 创建名称为Person的类,实现对用户信息的封装。
package com.lyq.bean;
/**
* 用户信息
* @author Li YongQiang
*/
public class Person {
// 姓名
private String name;
// 年龄
private int age;
// 性别
private String sex;
// 住址
private String add;
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 getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAdd() {
return add;
}
public void setAdd(String add) {
this.add = add;
}
}
(2)创建程序的主页面index.jsp,在该页面中放置录入用户信息所需要的表单
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<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>
</body>
</html>
技巧
表单信息中的属性名称最好设置为JavaBean的属性名称,这样就可以通过“<jsp:setProperty="*/>”的形式来接收所有参数,这种方式可以减少程序中得代码量。如将用户年龄文本框的name属性设置为age,它对应Person类中的age。
(3)创建名称为reg.jsp的JSP页面,用于对index.jsp页面中的表单的提交请求进行处理。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%request.setCharacterEncoding("UTF-8");%>
<jsp:useBean id="person" class="com.lyq.bean.Person" scope="page">
<jsp:setProperty name="person" property="*"/>
</jsp:useBean>
<table align="center" width="400">
<tr>
<td align="right">姓 名:</td>
<td>
<jsp:getProperty property="name" name="person"/>
</td>
</tr>
<tr>
<td align="right">年 龄:</td>
<td>
<jsp:getProperty property="age" name="person"/>
</td>
</tr>
<tr>
<td align="right">性 别:</td>
<td>
<jsp:getProperty property="sex" name="person"/>
</td>
</tr>
<tr>
<td align="right">住 址:</td>
<td>
<jsp:getProperty property="add" name="person"/>
</td>
</tr>
</table>
</body>
</html>
reg.jsp页面中的<jsp:userBean>标签实例化了JavaBean,然后通过“<jsp:setProperty name=“person” property="*"/>”对Person类中的所有属性进行赋值,使用这种方式要求表单中的属性名称与JavaBean中的属性名称一致。
说明
表单中的属性名称与JavaBean中的属性名称不一致,可以通过<jsp:setProperty >标签中的param属性来指定表单中的属性。如表单中的用户名为username,可以使用“< jsp:setProperty name=“person” property=“name” param=“username”/>对其赋值”
7.3 在JSP中应用JavaBean
在JSP页面之中,处理中文字符经常会出现字符乱码的现象,特别是在一些表单传递中文数据时候容易产生,它的解决办法有很多,如将request的字符集指定为中文字符集、编写JavaBean对乱码字符进行转码等,下面就通过实例,编写JavaBean对象来解决中文乱码现象问题。
**【例7.5】**通过编写对字符转码的JavaBean,来解决在新闻发布系统的,发布中文信息的乱码现象
(1)实现对新闻实体对象的封装
package com.lyq.bean;
/**
* 新闻对象
* @author Li YongQiang
*/
public class News {
// 标题
private String title;
// 内容
private String content;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
(2)创建对字符编码进行处理的JavaBean,在该类中对字符编码进行转换。
package com.lyq.bean;
import java.io.UnsupportedEncodingException;
public class CharactorEncoding {
/**
* 构造方法
*/
public CharactorEncoding(){
}
/**
* 对字符进行转码处理
* @param str 要转码的字符串
* @return 编码后的字符串
*/
public String toString(String str){
// 转换字符
String text = "";
// 判断要转码的字符串是否有效
if(str != null && !"".equals(str)){
try {
// 将字符串进行编码处理
text = new String(str.getBytes("iso8859-1"),"GB18030");
} catch (UnsupportedEncodingException e) {
e.printstacktrace();
}
}
// 返回后的字符串
return text;
}
}
CharactorEncoding 类通过toString()方法对字符串参数进行编码,实例中将其编码设置为ut-8,因为在JSP页面的编码也是UTF-8.这里统一
String类的getByste()方法的作用,是按给定的字符编码将此字符串编码到byte序列,并将结果存储到新的byte数组;而String类的构造方法String(byte[]) bytes[], Charset charset)是通过使用指定的字符编码解析指定的byte数组,构造一个新的字符串。
(3)创建index.jsp页面,用于放置发布新闻信息的表单。
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>XX新闻发布系统</title>
</head>
<body>
<form action="release.jsp" method="post">
<table align="center" width="450" height="260" border="1">
<tr>
<td align="center" colspan="2" height="40" >
<b>新闻发布</b>
</td>
</tr>
<tr>
<td align="right">标 题:</td>
<td>
<input type="text" name="title" size="30">
</td>
</tr>
<tr>
<td align="right">内 容:</td>
<td>
<textarea name="content" rows="8" cols="40"></textarea>
</td>
</tr>
<tr>
<td align="center" colspan="2">
<input type="submit" value="发 布">
</td>
</tr>
</table>
</form>
</body>
</html>
(4)创建名称为release.jsp的页面,用于对发布新闻信息的表单请求进行处理。
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>发布结果</title>
<style type="text/css">
#container{
width: 450px;
border: solid 1px;
padding: 20px;
}
#title{
font-size: 16px;
font-weight: bold;
color: #3399FF;
}
#content{
font-size: 12px;
text-align: left;
}
</style>
</head>
<body>
<jsp:useBean id="news" class="com.lyq.bean.News"></jsp:useBean>
<jsp:useBean id="encoding" class="com.lyq.bean.CharactorEncoding"></jsp:useBean>
<jsp:setProperty property="*" name="news"/>
<p align="center">
<p id="container">
<p id="title">
<%= encoding.toString(news.getTitle())%>
</p>
<hr>
<p id="content">
<%= encoding.toString(news.getContent())%>
</p>
</p>
</p>
</body>
</html>
在release.jsp页面中使用< jsp:useBean>标签分别实例化了News对象与CharactorEncoding对象,然后通过< jsp:setProperty>标签对News对象中的属性进行赋值,在赋值之后,使用CharactorEncoding对象的toString()方法对News对象中的属性进行转码处理。
注意:
通过< jsp:useBean> 标签实例化的JavaBean对象,如果在JSP页面中使用java代码调用JavaBean对象中的属性或方法,所使用的JavaBean对象的变量名称为< jsp:useBean>标签中的id属性
7.3.2 在JSP页面中用来显示时间的JavaBean
【例7.6】 创建获取当前时间的JavaBean对象,该对象既可以获取当前的日期和时间,同时也可以获取今天是星期几。实现简单的电子时钟。
(1) 对时间,星期进行封装
package com.lyq.bean;
import java.text.simpledateformat;
import java.util.calendar;
import java.util.Date;
/**
* 获取当前时间的JavaBean
* @author Li YongQiang
*
*/
public class DateBean {
// 日期及时间
private String dateTime;
// 星期
private String week;
// Calendar对象
private Calendar calendar = Calendar.getinstance();
/**
* 获取当前日期及时间
* @return 日期及时间的字符串
*/
public String getDateTime() {
// 获取当前时间
Date currDate = Calendar.getInstance().getTime();
// 实例化SimpleDateFormat
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH点mm分ss秒");
// 格式化日期时间
dateTime = sdf.format(currDate);
// 返回日期及时间的字符串
return dateTime;
}
/**
* 获取星期几
* @return 返回星期字符串
*/
public String getWeek() {
// 定义数组
String[] weeks = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
// 获取一星期的某天
int index = calendar.get(Calendar.DAY_OF_WEEK);
// 获取星期几
week = weeks[index - 1];
// 返回星期字符串
return week;
}
}
DataBean类主要封装了日期时间(dateTime属性)和星期(week属性),并针对这两个属性提供了相应的getXXX()方法。其中,getDateTime()方法用于获取当前的日期和时间,该方法通过SimpleDateFormat对象的format()方法fanhu9i对当前时间的格式化,并返回格式化后的字符串。getWeek()方法用于获取星期几,该方法主要通过Calendar对象获取一星期的某天索引,及创建字符串数组来实现。
(2)创建名称为index.jsp的页面,它是程序中的主页。在index.jsp页面中实例化DateBean对象,并获取当前日期时间及星期实现电子时钟效果。
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>电子时钟</title>
<style type="text/css">
#clock{
width:420px;
height:80px;
background:#E0E0E0;
font-size: 25px;
font-weight: bold;
border: solid 5px orange;
padding: 20px;
}
#week{
padding-top:15px;
color: #0080FF;
}
</style>
<meta http-equiv="Refresh" content="1"> //每隔1秒自动刷新页面一次
</head>
<body>
<jsp:useBean id="date" class="com.lyq.bean.DateBean" scope="application"></jsp:useBean>
<p align="center">
<p id="clock">
<p id="time">
<jsp:getProperty property="dateTime" name="date"/>
</p>
<p id="week">
<jsp:getProperty property="week" name="date"/>
</p>
</p>
</p>
</body>
</html>
在index.jsp页面中,通过< jsp:useBean> 标签对DateBean对象实例化,将JavaBean对象DateBean的作用域设置为application,然后通过< jsp:getProperty>标签分别获取DateBean对象的日期时间及星期属性值。
技巧
因为获取当前时间的JavaBean对象DateBean并不涉及更多的业务逻辑,所以实例中将它的作用域设置为application。好处是,在JSP页面中第一次调用该对象时会实例化一个DateBean对象,以后再次调用时不需要再次实例化DateBean,因为它在application范围内已经存在。
7.3.3 数组转换成字符串
【例7.7】 实现对“问卷调查”表单中复选框的数值的处理。
(1)创建名称为Paper的类,对调查问卷进行封装。
package com.lyq.bean;
import java.io.Serializable;
/**
* 调查问卷
* @author Li YongQiang
*/
public class Paper implements Serializable {
private static final long serialVersionUID = 1L;
// 编程语言
private String[] languages;
// 掌握技术
private String[] technics;
// 部分
private String[] parts;
public Paper(){
}
public String[] getLanguages() {
return languages;
}
public void setLanguages(String[] languages) {
this.languages = languages;
}
public String[] getTechnics() {
return technics;
}
public void setTechnics(String[] technics) {
this.technics = technics;
}
public String[] getParts() {
return parts;
}
public void setParts(String[] parts) {
this.parts = parts;
}
}
paper类包含3个属性对象,他们均为字符串数组对象,属性值可以包含多个字符串对象。其中,language属性代表“编程语言”集合,technics属性代表“掌握技术”集合,parts属性代表“困难部分”集合。
(2)创建将数组转换成字符串的JavaBean对象,它的名称为Convert。在该类中编写arr2Str()方法,将数组对象转换成指定的字符串。
package com.lyq.bean;
/**
* 转换数组的JavaBean
* @author Li YongQiang
*/
public class Convert {
/**
* 将数组转换成为字符串
* @param arr 数组
* @return 字符串
*/
public String arr2Str(String[] arr){
// 实例化StringBuffer
StringBuffer sb = new StringBuffer();
// 判断arr是否为有效数组
if(arr != null && arr.length > 0){
// 遍历数组
for (String s : arr) {
// 将字符串追加到StringBuffer中
sb.append(s);
// 将字符串追加到StringBuffer中
sb.append(",");
}
// 判断字符串长度是否有效
if(sb.length() > 0){
// 截取字符
sb = sb.deleteCharAt(sb.length() - 1);
}
}
// 返回字符串
return sb.toString();
}
}
技巧
在组合字符串过程中,arr2Str()方法使用的是StringBuffer对象,并没有使用String对象,这是因为String是不可变长的对象,在每一次修改之后字符串长度都会创建一个新的String对象;而StringBuffer则是可变的字符序列,类似于String的字符串缓冲区。所以,在字符串经常修改的地方使用StringBuffer,其效率高于String。
(3)创建程序中的首页index.jsp,在该页面中放置调查问卷所使用的表单。
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>调查问卷</title>
</head>
<body>
<form action="reg.jsp" method="post">
<p>
<h1>调查问卷</h1>
<hr/>
<ul>
<li>你经常用哪些编程语言开发程序:</li>
<li>
<input type="checkbox" name="languages" value="JAVA">JAVA
<input type="checkbox" name="languages" value="PHP">PHP
<input type="checkbox" name="languages" value=".NET">.NET
<input type="checkbox" name="languages" value="VC++">VC++
</li>
</ul>
<ul>
<li>你目前所掌握的技术:</li>
<li>
<input type="checkbox" name="technics" value="HTML">HTML
<input type="checkbox" name="technics" value="JAVA BEAN">JAVA BEAN
<input type="checkbox" name="technics" value="JSP">JSP
<input type="checkbox" name="technics" value="SERVLET">SERVLET
</li>
</ul>
<ul>
<li>在学习中哪一部分感觉有困难:</li>
<li>
<input type="checkbox" name="parts" value="JSP">JSP
<input type="checkbox" name="parts" value="STRUTS">STRUTS
</li>
</ul>
<input type="submit" value="提 交">
</p>
</form>
</body>
</html>
在index.jsp页面中,包含了大朗的复选框按钮CheckBox,提交表单之后name属性相同的checkbox对象的值,将会被转换成一个数组对象。
(4)创建名称为reg.jsp的页面,用于对index.jsp页面表单提交请求进行处理,将用户所提交的调查问卷结果输出到页面中。
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>调查结果</title>
</head>
<body>
<jsp:useBean id="paper" class="com.lyq.bean.Paper"></jsp:useBean>
<jsp:useBean id="convert" class="com.lyq.bean.Convert"></jsp:useBean>
<jsp:setProperty property="*" name="paper"/>
<p>
<h1>调查结果</h1>
<hr/>
<ul>
<li>
你经常使用的编程语言:<%= convert.arr2Str(paper.getLanguages()) %> 。
</li>
<li>
你目前所掌握的技术:<%= convert.arr2Str(paper.getTechnics()) %> 。
</li>
<li>
在学习中感觉有困难的部分:<%= convert.arr2Str(paper.getParts()) %> 。
</li>
</ul>
</p>
</body>
</html>
在reg.jsp页面中共实例化了两个JavaBean对象,均通过< jsp:useBean>标签进行实例化。其中,属性为paper的对象为事例中封装的调查问卷对象,在index.jsp页面中表单提交后,reg.jsp 页面中的< jsp:setProperty>标签将对paper对象中的属性赋值。id属性值为convert的对象,是将数组转换成字符串的javaBean 对象,用于将paper对象中的属性值转换成字符串对象,该操作通过调用arr2Str()方法进行实现。
练习
1.编写一个封装学生信息的JavaBean对象,在index.jsp页面中调用该对象,并输出学生信息
package com.lyq.bean;
/**
* 学生信息JavaBean
* @author Li YongQiang
*/
public class Student {
// 学号
private int id;
// 姓名
private String name;
// 性别
private String sex;
// 年龄
private int age;
// 班级
private String classes;
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 String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getClasses() {
return classes;
}
public void setClasses(String classes) {
this.classes = classes;
}
}
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>学生信息</title>
<style type="text/css">
li.{font-size: 12px;}
</style>
</head>
<body>
<jsp:useBean id="student" class="com.lyq.bean.Student">
<jsp:setProperty property="id" name="student" value="1"/>
<jsp:setProperty property="name" name="student" value="李*强"/>
<jsp:setProperty property="sex" name="student" value="男"/>
<jsp:setProperty property="age" name="student" value="18"/>
<jsp:setProperty property="classes" name="student" value="三年一班"/>
</jsp:useBean>
<h2>学生信息</h2>
<ul>
<li>
学号:<%=student.getId() %>
</li>
<li>
姓名:<%=student.getName() %>
</li>
<li>
性别:<%=student.getSex() %>
</li>
<li>
年龄:<%=student.getAge() %>
</li>
<li>
班级:<%=student.getClasses() %>
</li>
</ul>
</body>
</html>
2。编写一个封装用户信息的JavaBean对象,通过操作JavaBean的动作标识,输出用户的注册信息
package com.lyq.bean;
/**
* 用户JavaBean
* @author Li YongQiang
*/
public class User {
// 用户名
private String name;
// 密码
private String password;
// qq号码
private String qq;
// E-Mail地址
private String mail;
// 性别
private String sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getQq() {
return qq;
}
public void setQq(String qq) {
this.qq = qq;
}
public String getMail() {
return mail;
}
public void setMail(String mail) {
this.mail = mail;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>用户注册</title>
</head>
<body>
<form action="reg.jsp" method="post">
<table align="center" width="450">
<tr>
<td align="center" colspan="2">
<h2>用户注册</h2>
<hr>
</td>
</tr>
<tr>
<td align="right">用户名:</td>
<td><input type="text" name="name" /></td>
</tr>
<tr>
<td align="right">密码:</td>
<td><input type="password" name="password" /></td>
</tr>
<tr>
<td align="right">性别:</td>
<td>
<input type="radio" name="sex" value="男" checked="checked">男
<input type="radio" name="sex" value="女">女
</td>
</tr>
<tr>
<td align="right">QQ号码:</td>
<td><input type="text" name="qq" /></td>
</tr>
<tr>
<td align="right">E-Mail地址:</td>
<td><input type="text" name="mail" /></td>
</tr>
<tr>
<td align="center" colspan="2">
<input type="submit" value="注 册">
</td>
</tr>
</table>
</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>注册信息</title>
</head>
<body>
<%request.setCharacterEncoding("GB18030"); %>
<jsp:useBean id="user" class="com.lyq.bean.User">
<jsp:setProperty property="*" name="user"/>
</jsp:useBean>
<table align="center" width="400">
<tr>
<td align="right">姓 名:</td>
<td>
<jsp:getProperty property="name" name="user"/>
</td>
</tr>
<tr>
<td align="right">密 码:</td>
<td>
<jsp:getProperty property="password" name="user"/>
</td>
</tr>
<tr>
<td align="right">性 别:</td>
<td>
<jsp:getProperty property="sex" name="user"/>
</td>
</tr>
<tr>
<td align="right">QQ号码:</td>
<td>
<jsp:getProperty property="qq" name="user"/>
</td>
</tr>
<tr>
<td align="right">E-Mail地址:</td>
<td>
<jsp:getProperty property="mail" name="user"/>
</td>
</tr>
</table>
</body>
</html>
3.编写一个页面访问计数器的JavaBean,在index.jsp页面中通过jsp动作标签实例化该对象,并将其放置于application范围中,实现访问计数器
package com.lyq.bean;
/**
* 计数器
* @author hhaha
*/
public class Counter {
// 次数
private static int count = 0;
// 获取计数器值
public int getCount(){
return ++count;
}
}
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>计数器</title>
</head>
<body>
<jsp:useBean id="counter" class="com.lyq.bean.Counter"></jsp:useBean>
<h2>
欢迎光临,你是第
<jsp:getProperty property="count" name="counter"/>
位来访者。
</h2>
</body>
</html>
相关阅读
使用FastJson对JSON字符串、JSON对象及JavaBean之间的
maven依赖包: <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --><dependency><groupId>com.alibaba</groupId><a
bean译过来即为“豆子”的意思,大家对豆子的印象是什么,大概就是只能看到豆子硬硬的外皮,而看不到内部的东西。那么在java中,bean可以