第七章、JavaBean技术
1、简单样例。主要是在html页面中输入一个字符串,然后调用java类判断这个字符串是否是一个邮箱地址
在项目的src文件中建立com.song.bean包,然后在里面新建Email类,负责处理email的逻辑
package com.song.bean;
import java.io.Serializable;
public class Email implements Serializable {
// serialVersionUID值
private static final long serialVersionUID = 1L;
private String mailAdd;
private boolean email;
/**
* 默认无参的构造方法
*/
public Email() {
}
/**
* 构造方法
*/
public Email(String mailAdd) {
this.mailAdd = mailAdd;
}
public boolean isEmail() {
// 正则表达式,定义邮件格式,mailAdd是一个String,使用其中的matches函数与正则表达式相比较
String regex = "\\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";
if (mailAdd.matches(regex)) {
this.email = true;
}
return email;
}
public String getMailAdd() {
return mailAdd;
}
public void setMailAdd(String mailAdd) {
this.mailAdd = mailAdd;
}
}
然后在编写index.jsp负责接收输入的email地址
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>login</title>
</head>
<body>
<form name="form1" method="post" action="result.jsp">
<table align="center" width="300px" 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" value="确定">
</td>
</tr>
</table>
</form>
</body>
</html>
再编写result,jsp文件负责调用Email类的使用以及展示判断结果
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ page import="com.song.bean.Email"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>result</title>
</head>
<body>
<div align="center">
<%
//获取邮箱地址
String mailAdd = request.getParameter("mailAdd");
//实例化Email
Email email = new Email(mailAdd);
if (email.isEmail()) {
out.println(mailAdd + "<br>是一个邮箱地址!<br>");
} else {
out.println(mailAdd + "<br>不是一个邮箱地址!<br>");
}
%>
<a href="index.jsp">返回</a>
</div>
</body>
</html>
2、JavaBean的应用
2.1在一个jsp页面中对java类的属性进行获取和赋值
首先上java类,这里的类是Produce有四个私有属性和get/set
package com.song.bean;
public class Produce {
private String name = "电吉他";
private double price = 1880.5;
private int number = 10;
private String factoryAdd = "天津市津南区";
public String getName() {
return name;
}
public double getPrice() {
return price;
}
public int getNumber() {
return number;
}
public String getFactoryAdd() {
return factoryAdd;
}
public void setName(String name) {
this.name = name;
}
public void setPrice(double price) {
this.price = price;
}
public void setNumber(int number) {
this.number = number;
}
public void setFactoryAdd(String factoryAdd) {
this.factoryAdd = factoryAdd;
}
}
然后是获取java类中的属性的index.jsp页面
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ page import="com.song.bean.Produce"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>login</title>
</head>
<body>
<jsp:useBean id="produce" class="com.song.bean.Produce"></jsp:useBean>
<div>
<ul>
<!-- 注意这里的property里面的属性不是和Produce的属性对应的,而是和Produce的getXXXX函数中的XXXX对应的 -->
<!-- 比如改变Produce中的属性值name——>nnnn,不会报错, -->
<!-- 但是将Produce中的getName()函数的名字变为getNamex(),就会报错,说找不到name -->
<!-- 将property中药寻找的属性值变为和getNamex()对应的namex之后,就会正常显示 -->
<li>商品名称:<jsp:getProperty property="namex" name="produce"/></li>
<li>价格:<jsp:getProperty property="price" name="produce"/></li>
<li>数量:<jsp:getProperty property="number" name="produce"/></li>
<li>厂址:<jsp:getProperty property="factoryAdd" name="produce"/></li>
</ul>
</div>
</body>
</html>
然后是设置类中属性的index.jsp页面
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ page import="com.song.bean.Produce"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>login</title>
</head>
<body>
<jsp:useBean id="produce" class="com.song.bean.Produce"></jsp:useBean>
<jsp:setProperty property="name" name="produce" value="洗衣机"/>
<jsp:setProperty property="price" name="produce" value="8888.8"/>
<jsp:setProperty property="number" name="produce" value="80"/>
<jsp:setProperty property="factoryAdd" name="produce" value="北京市朝阳区"/>
<div>
<ul>
<!-- 注意这里的property里面的属性不是和Produce的属性对应的,而是和Produce的getXXXX函数中的XXXX对应的 -->
<!-- 比如改变Produce中的属性值name——>nnnn,不会报错, -->
<!-- 但是将Produce中的getName()函数的名字变为getNamex(),就会报错,说找不到name -->
<!-- 将property中药寻找的属性值变为和getNamex()对应的namex之后,就会正常显示 -->
<li>商品名称:<jsp:getProperty property="name" name="produce"/></li>
<li>价格:<jsp:getProperty property="price" name="produce"/></li>
<li>数量:<jsp:getProperty property="number" name="produce"/></li>
<li>厂址:<jsp:getProperty property="factoryAdd" name="produce"/></li>
</ul>
</div>
</body>
</html>
2.2、JavaBean在page request session application 的生命周期的设置
这里举了一个填写person类信息的例子
首先上Person类,他有四个私有属性和get/set方法
package com.song.bean;
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;
}
}
然后是在index.jsp页面中填写属性值
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ page import="com.song.bean.Produce"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>index</title>
</head>
<body>
<form action="reg.jsp" method="post">
<table width="400" align="center" height="200" border="1">
<tr>
<td align="center" colspan="2" height="40"><b>添加用户信息</b>
</td>
</tr>
<!-- 这里的input中的name里的参数需要和person类的变量对应,方便submit传输到reg.jsp中,
然后使用setProperty方法一次接受全部的参数,并且传递给在reg.jsp页面中实例化的person对象中 -->
<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 colspan="2" align="center"><input type="submit" value="添加">
</td>
</tr>
</table>
</form>
</body>
</html>
然后是在reg.jsp页面中将刚刚输入的属性值赋给实例化的person,然后显示在页面中
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>reg</title>
</head>
<body>
<%
request.setCharacterEncoding("UTF-8");
%>
<jsp:useBean id="person" class="com.song.bean.Person" scope="page">
<!-- 这里调用Person类,然后以person实例化,在后面的使用中, -->
<!-- 这个person和后面的jsp:set/getPropert中的name里面的person相对应 ,后面的property是对应于这个person的属性方法-->
<!-- 此处的 * 代表一次接受所有的参数 输入input中的name中的参数,需要和jsp:set/getProperty 中的property中的参数相对应 -->
<jsp:setProperty name="person" property="*" />
</jsp:useBean>
<table width="400" align="center">
<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>
2.3另一个例子,电子时钟
首先建立一个DateBean的java类
package com.song.bean;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class DateBean {
private String dateTime;
private String week;
private Calendar calendar = Calendar.getInstance();
/**
* 获取当前日期以及时间
*
* @return日期及时间的字符串
*/
public String getDateTime() {
// 这里需要从Calendar.getInstance()调用时间,而不是使用类的属性calendar,因为后者会导致时间固定为类实例化的时间(个人理解)
Date currDate = Calendar.getInstance().getTime();
SimpleDateFormat sdf = new SimpleDateFormat("yyy年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;
}
}
然后再index.jsp中调用这个类,注意因为要达到时间随动效果所以要额外加入一行
<meta content="1" http-equiv="Refresh">
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ page import="com.song.bean.Produce"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>index</title>
<style type="text/css">
#clock {
width: 420px;
height: 80px;
backgroung: #E0E0E0;
font-size: 25px;
font-weight: bold;
border: sold 5px orange;
padding: 20px;
}
#week {
padding-top: 15px;
color: #0080FF;
}
</style>
<meta content="1" http-equiv="Refresh">
</head>
<body>
<jsp:useBean id="date" class="com.song.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>
2.4最后一个例子
填写表单,将数据传递给后一个页面,然后将数据赋给实例化的paper,再利用javabean中的convert对数据做转换
先上Paper类,负责接收和输出数据
package com.song.bean;
public class Paper {
private static final long seriVersionUID = 1L;
private String[] languges;
private String[] technics;
private String[] parts;
public static long getSeriversionuid() {
return seriVersionUID;
}
public String[] getLanguges() {
return languges;
}
public void setLanguges(String[] languges) {
this.languges = languges;
}
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;
}
}
然后是数据转化的类Convert
package com.song.bean;
public class Convert {
/**
* 将数组转化为字符串
*
* @param arr 数组
* @return 字符串
*/
public String arr2str(String[] arr) {
StringBuffer sb = new StringBuffer();
if (arr != null && arr.length > 0) {
for (String s : arr) {
sb.append(s);
sb.append(",");
}
if (sb.length() > 0) {
sb = sb.deleteCharAt(sb.length() - 1);
}
}
return sb.toString();
}
}
下面是index.jsp也就是填写表达的界面
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ page import="com.song.bean.Produce"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>index</title>
<style type="text/css">
</style>
</head>
<body>
<form name="form1" action="reg.jsp" method="post">
<div>
<h1>调查问卷</h1>
<hr />
<ul>
<li>你经常使用哪种开发语言:</li>
<li><input type="checkbox" name="languges" value="JAVA">JAVA
<input type="checkbox" name="languges" value="PHP">PHP
<input type="checkbox" name="languges" value=".NET">.NET
<input type="checkbox" name="languges" 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="提交">
</div>
</form>
</body>
</html>
然后是数据展示页面,负责接收index.jsp传输进来的数据,然后赋值给实例化的paper,在使用convert中的函数对数据进行转化,输出
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>reg</title>
</head>
<body>
<jsp:useBean id="paper" class="com.song.bean.Paper"></jsp:useBean>
<jsp:useBean id="convert" class="com.song.bean.Convert"></jsp:useBean>
<jsp:setProperty property="*" name="paper"/>
<div>
<h1>调查结果</h1>
<hr/>
<ul>
<li>你经常使用的编程语言:<%=convert.arr2str(paper.getLanguges()) %></li>
<li>你目前所掌握的技术:<%=convert.arr2str(paper.getTechnics()) %></li>
<li>你学习中那一部分感觉有困难:<%=convert.arr2str(paper.getParts()) %></li>
</div>
</body>
</html>