第七章 JavaBean技术.docx
《第七章 JavaBean技术.docx》由会员分享,可在线阅读,更多相关《第七章 JavaBean技术.docx(25页珍藏版)》请在冰豆网上搜索。
第七章JavaBean技术
【7.1.1JavaBean概述】
纯JSP开发方式
JSP+JavaBean开发方式
【7.1.2JavaBean种类】
JavaBean:
支持组件的功能。
Java中的组件叫JavaBean。
Java(咖啡)Bean(豆)。
狭义的JavaBean是具有一个界面形式的体现;广义的JavaBean是普通的Java类。
满足两点要求:
(1)属性名第一个字母都是小写的,private的;
(2)一般具有getters和setters方法。
原因就是符合面向对象的特性,所以属性是私有的,别人不能访问,从而隐藏细节。
Getters是读取属性的值,setters是修改属性的值。
如果属性只能读不能改,那么只写getters方法即可。
如果属性只能改不能读,那么只写setters方法即可。
一般web中使用的JavaBean不具有图形界面的表现。
一般是用来实现某一业务逻辑或者取得特定结果。
【例7.1】封装邮箱地址的JavaBean
【Email.java】
packagecom.lyq.bean;
importjava.io.Serializable;
publicclassEmailimplementsSerializable{
//serialVersionUID值
privatestaticfinallongserialVersionUID=1L;
//Email地址
privateStringmailAdd;
//是否是一个标准的Email地址
privatebooleaneamil;
/**
*默认无参的构造方法
*/
publicEmail(){
}
/**
*构造方法
*@parammailAddEmail地址
*/
publicEmail(StringmailAdd){
this.mailAdd=mailAdd;
}
/**
*是否是一个标准的Email地址
*@return布尔值
*/
publicbooleanisEamil(){
//正则表达式,定义邮箱格式
Stringregex="\\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";
//matches()方法可判断字符串是否与正则表达式匹配
if(mailAdd.matches(regex)){
//eamil为真
eamil=true;
}
//返回eamil
returneamil;
}
publicStringgetMailAdd(){
returnmailAdd;
}
publicvoidsetMailAdd(StringmailAdd){
this.mailAdd=mailAdd;
}
}
【index.jsp】
<%@pagelanguage="java"contentType="text/html;charset=UTF-8"
pageEncoding="UTF-8"%>
DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http:
//www.w3.org/TR/html4/loose.dtd">
Inserttitlehere
邮箱认证系统
|
邮箱地址:
|
|
【result.jsp】
<%@pagelanguage="java"contentType="text/html;charset=UTF-8"
pageEncoding="UTF-8"%>
DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http:
//www.w3.org/TR/html4/loose.dtd">
<%@pageimport="com.lyq.bean.Email"%>
Inserttitlehere
<%
//获取邮箱地址
StringmailAdd=request.getParameter("mailAdd");
//实例化Email,并对mailAdd赋值
Emailemail=newEmail(mailAdd);
//判断是否是标准的邮箱地址
if(email.isEamil()){
out.print(mailAdd+"
是一个标准的邮箱地址!
");
}else{
out.print(mailAdd+"
不是一个标准的邮箱地址!
");
}
%>
返回
1.useBeanid="produce"class="com.lyq.bean.Produce">
2.useBeanid="produce"class="com.lyq.bean.Produce">
3.useBeanid=””scope=””class=””type=””/>
scope默认是page
type是对象的类型,如type=”java.lang.Object”
相当于Objectcb=newProduce();
一般情况下不指定type,则就是class类型的对象。
不存在父类指向子类对象的情况。
4.setPropertyname="produce"property="price"value="888"/>
注意name指定的名称必须已经有这个对象。
这句话相当于
produce.setPrice(888)
5.getPropertyname="produce"property="price"/>
相当于produce.getPrice()
6.
jsp:
useBean各个参数的含义:
●id:
对象实例名称
●scope:
Bean作用范围,默认是page
●class:
Bean的类名称
●type:
Bean实例类型,可以是本类,或其父类,或其实现的接口,默认为本类(多态)
scope各个取值的含义:
●page:
仅涵盖使用JavaBean的页面。
每次访问页面时,重新生成一个。
【CounterBean.java】
packagebean;
//JSP中使用JavaBean,要求这个Bean放在包里面。
importjava.io.Serializable;
publicclassCounterBeanimplementsSerializable{
privateintcount=0;
publicCounterBean(){}
publicintgetCount(){
count++;
returncount;
}
publicvoidsetCount(intcount){
this.count=count;
}
}
【PageBean.jsp】
useBeanid="counterBean"scope="page"class="bean.CounterBean"/>
CounterBeanscope="page"Example
count:
<%=counterBean.getCount()%>
<%--上下两句效果一样--%>
getPropertyname="counterBean"property="count"/>
在地址栏输入
http:
//localhost:
8080/servlet_example1/PageBean.jsp,结果为
刷新页面,输出内容不变。
●request:
有效范围仅限于使用JavaBean的请求
【RequestBean.jsp】
useBeanid="counterBean"scope="request"class="bean.CounterBean"/>
<%--
bean.CounterBeancounterBean=request.getAttribute("counterBean");
if(counterBean==null){
counterBean=newbean.CounterBean();
request.setAttribute("counterBean",counterBean);
}
--%>
CounterBeanscope="request"Example
--往当前request对应的bean中设置-->
<%counterBean.setCount(100);%>
<%--和RequestBean2.jsp用的是同一个request,也是同一个counterBean对象--%>
--测试结果是101-->
forwardpage="RequestBean2.jsp"/>
<%--和RequestBean2.jsp用的不是同一个request,也不是同一个counterBean对象--%>
--访问RequestBean.jsp,跳转到RequestBean2.jsp,因为和当前request不是同一个request-->
--则产生一个新的request,产生一个新的bean对象,测试结果是1而不是101-->
<%--response.sendRedirect("RequestBean2.jsp");--%>
【RequestBean2.jsp】
useBeanid="counterBean"scope="request"class="bean.CounterBean"/>
CounterBeanscope="request"Example
count:
<%=counterBean.getCount()%>
在地址栏输入
http:
//localhost:
8080/servlet_example1/RequestBean.jsp,结果为
修改【RequestBean.jsp】
useBeanid="counterBean"scope="request"class="bean.CounterBean"