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>
	<div 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>
	</div>
</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>
	<div>
		<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>
	</div>
</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公司"/>
	<div>
		<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>
	</div>
</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"/>
	<div align="center">
		<div id="container">
			<div id="title">
				<%= encoding.toString(news.getTitle())%>
			</div>
			<hr>
			<div id="content">
				<%= encoding.toString(news.getContent())%>
			</div>
		</div>
	</div>
</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>
	<div align="center">
		<div id="clock">
			<div id="time">
				<jsp:getProperty property="dateTime" name="date"/>
			</div>
			<div id="week">
				<jsp:getProperty property="week" name="date"/>
			</div>
		</div>
	</div>
</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">
		<div>
			<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>
			&nbsp;&nbsp;&nbsp;&nbsp;<input type="submit" value="提 交">
		</div>
	</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"/>
	<div>
		<h1>调查结果</h1>
		<hr/>
		<ul>
			<li>
				你经常使用的编程语言:<%= convert.arr2Str(paper.getLanguages()) %> 。
			</li>
			<li>
				你目前所掌握的技术:<%= convert.arr2Str(paper.getTechnics()) %> 。
			</li>
			<li>
				在学习中感觉有困难的部分:<%= convert.arr2Str(paper.getParts()) %> 。
			</li>
		</ul>
	</div>
</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>
相关推荐
<p> <span style="font-size:14px;color:#E53333;">限时福利1:</span><span style="font-size:14px;">购课进答疑群专享柳峰(刘运强)老师答疑服务</span> </p> <p> <br /> </p> <p> <br /> </p> <p> <span style="font-size:14px;"></span> </p> <p> <span style="font-size:14px;color:#337FE5;"><strong>为什么需要掌握高性能的MySQL实战?</strong></span> </p> <p> <span><span style="font-size:14px;"><br /> </span></span> <span style="font-size:14px;">由于互联网产品用户量大、高并发请求场景多,因此对MySQL的性能、可用性、扩展性都提出了很高的要求。使用MySQL解决大量数据以及高并发请求已经是程序员的必备技能,也是衡量一个程序员能力和薪资的标准之一。</span> </p> <p> <br /> </p> <p> <span style="font-size:14px;">为了让大家快速系统了解高性能MySQL核心知识全貌,我为你总结了</span><span style="font-size:14px;">「高性能 MySQL 知识框架图」</span><span style="font-size:14px;">,帮你梳理学习重点,建议收藏!</span> </p> <p> <br /> </p> <p> <img alt="" src="https://img-bss.csdnimg.cn/202006031401338860.png" /> </p> <p> <br /> </p> <p> <span style="font-size:14px;color:#337FE5;"><strong>【课程设计】</strong></span> </p> <p> <span style="font-size:14px;"><br /> </span> </p> <p> <span style="font-size:14px;">课程分为四大篇章,将为你建立完整的 MySQL 知识体系,同时将重点讲解 MySQL 底层运行原理、数据库的性能调优、高并发、海量业务处理、面试解析等。</span> </p> <p> <span style="font-size:14px;"><br /> </span> </p> <p> <span style="font-size:14px;"></span> </p> <p style="text-align:justify;"> <span style="font-size:14px;"><strong>一、性能优化篇:</strong></span> </p> <p style="text-align:justify;"> <span style="font-size:14px;">主要包括经典 MySQL 问题剖析、索引底层原理和事务与锁机制。通过深入理解 MySQL 的索引结构 B+Tree ,学员能够从根本上弄懂为什么有些 SQL 走索引、有些不走索引,从而彻底掌握索引的使用和优化技巧,能够避开很多实战中遇到的“坑”。</span> </p> <p style="text-align:justify;"> <br /> </p> <p style="text-align:justify;"> <span style="font-size:14px;"><strong>二、MySQL 8.0新特性篇:</strong></span> </p> <p style="text-align:justify;"> <span style="font-size:14px;">主要包括窗口函数和通用表表达式。企业中的许多报表统计需求,如果不采用窗口函数,用普通的 SQL 语句是很难实现的。</span> </p> <p style="text-align:justify;"> <br /> </p> <p style="text-align:justify;"> <span style="font-size:14px;"><strong>三、高性能架构篇:</strong></span> </p> <p style="text-align:justify;"> <span style="font-size:14px;">主要包括主从复制和读写分离。在企业的生产环境中,很少采用单台MySQL节点的情况,因为一旦单个节点发生故障,整个系统都不可用,后果往往不堪设想,因此掌握高可用架构的实现是非常有必要的。</span> </p> <p style="text-align:justify;"> <br /> </p> <p style="text-align:justify;"> <span style="font-size:14px;"><strong>四、面试篇:</strong></span> </p> <p style="text-align:justify;"> <span style="font-size:14px;">程序员获得工作的第一步,就是高效的准备面试,面试篇主要从知识点回顾总结的角度出发,结合程序员面试高频MySQL问题精讲精练,帮助程序员吊打面试官,获得心仪的工作机会。</span> </p>
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页