对应书本第7章
总说:数据流,从哪流到哪;数据的存储与运算;
JavaBean就是将java代码封装成处理某种业务逻辑的类,在jsp中调用此类即可,简化jsp页面。
一般过程:先看看整个页面需要哪些数据,把整个页面的数据整体看成一个类写一个类,之后如果需要其他的方法可以再写其他类,在jsp中直接调用类即可。
JavaBean种类:
传统应用中,JavaBean主要用于实现一些可视化界面,如窗体、按钮等,称为可视化的JavaBean,一般用于Swing程序中;
目前JavaBean主要用于实现一些业务逻辑或封装一些业务对象,称为非可视化的JavaBean,用在java web 中。
例1:验证邮箱地址是否合法?
首先是创建一个Email类,放在1/Java Resources/src/com.lyq.bean包下
#############Email.java
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;
}
}
#################index.jsp
################### result.jsp
动作标签
JSP页面尽量避免java代码,用动作标签来代替java代码,动作标签来调用java类的方法。
例,有个类public class Produce
关于类对象的set和get总结:
例
<jsp:useBean id="produce" class="com.lyq.bean.Produce"></jsp:useBean>
SET:
// 调用一系列属性的set方法,property里放属性名,name里放对象名
<jsp:setProperty property="name" name="produce" value="洗衣机"/>
如果类Produce的属性名和页面index.jsp中多个文本框的名称相同,比如name、age、sex等,可以一次性直接多个赋值
<jsp:setProperty property="*" name="produce"/>
GET:
<jsp:getProperty property="count" name="produce"/> 或
<%= produce.getPrice() %>
例7.5
编写对字符转码的JavaBean,解决乱码问题
###############################News.java
package com.lyq.bean;
public class News {}
###############################CharactorEncoding.java
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;
}
}
###############################index.jsp
<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>
###############################release.jsp
<body>
// news 是News的对象
<jsp:useBean id="news" class="com.lyq.bean.News"></jsp:useBean>
// encoding是CharactorEncoding的对象
<jsp:useBean id="encoding" class="com.lyq.bean.CharactorEncoding"></jsp:useBean>
// 相当于把index.jsp页面中输入的值赋值给类News的对象news
<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>
在学了JSTL标签库及EL表达式后,或一些MVC框架后,就可以通过标签取代所有的java代码。
例:页面显示实时时间
首先是JavaBean,写一个DateBean.java:
package com.lyq.bean;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class DateBean {
// 日期及时间
private String dateTime;
// 星期
private String week;
// Calendar对象
private Calendar calendar = Calendar.getInstance();
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;
}
public String getWeek() {
String[] weeks = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
int index = calendar.get(Calendar.DAY_OF_WEEK);
// 获取星期几
week = weeks[index - 1];
return week;
}
}
之后在index.jsp页面中调用类的方法即可。
但是index.jsp中需要有设置页面刷新的语句。
页面刷新
推荐用法一,因为尽量减少java代码的出现,法二用了java代码
每隔一秒刷新:
法一:
<head>
<title>电子时钟</title>
<meta http-equiv="Refresh" content="1">
</head>
法二:
<body>
<% response.setHeader("refresh", "1"); %>
</body>
程序中常把数组转为字符串处理
例7.7
对调查问卷的复选框转化为字符串处理,效果如下:
分析:首先对于这个页面的数据怎样用类存储。实际上复选框提交后是按照数组存储的。所以先写个类存储数据。
之后再写个类用来将数组转为字符串;
在jsp中调用类即可。
##########################Paper.java
package com.lyq.bean;
import java.io.Serializable;
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;
}
}
##########################Convert.java
package com.lyq.bean;
public class Convert {
public String arr2Str(String[] arr){
StringBuffer sb = new StringBuffer();
// 判断arr是否为有效数组
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
<body>
<form action="reg.jsp" method="post">
<div>
<h1>调查问卷</h1>
<ul>
<li>你经常用哪些编程语言开发程序:</li>
<li>
// 同一系列的复选框都拥有相同的name
<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="提 交">
</div>
</form>
</body>
##########################reg.jsp
<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>