第七章 JavaBean技术.docx
- 文档编号:3321276
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:25
- 大小:135.12KB
第七章 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">
邮箱认证系统
【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"%>
<%
//获取邮箱地址
StringmailAdd=request.getParameter("mailAdd");
//实例化Email,并对mailAdd赋值
Emailemail=newEmail(mailAdd);
//判断是否是标准的邮箱地址
if(email.isEamil()){
out.print(mailAdd+"
是一个标准的邮箱地址!
");
}else{
out.print(mailAdd+"
不是一个标准的邮箱地址!
");
}
%>
在地址栏输入
http:
//localhost:
8080/ch5_example/index.jsp
得到
得到
【7.2.1获取JavaBean属性信息】
jsp:
useBean
在JSP中使用JavaBean。
一般来说,JSP或者Servlet里面的JavaBean具有的特点是:
(1)属性名第一个字母都是小写
(2)每个属性有对应的getter和setter方法。
此外,Bean的特点还有:
必须要有一个不带参数的构造器,在JSP元素创建Bean时会调用空构造器。
格式:
useBeanid=””scope=””class=””type=””/> useBean…> setProperty…> getProperty…> useBean> 【例】 新建JavaBean: Produce get和set方法可以自动生成。 生成默认的构造器。 【Produce.java】 packagecom.lyq.bean; publicclassProduce{ privateStringname="电吉他"; privatedoubleprice=1880.5; privateintcount=100; privateStringfactoryAdd="山东济南"; publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ this.name=name; } publicdoublegetPrice(){ returnprice; } publicvoidsetPrice(doubleprice){ this.price=price; } publicintgetCount(){ returncount; } publicvoidsetCount(intcount){ this.count=count; } publicStringgetFactoryAdd(){ returnfactoryAdd; } publicvoidsetFactoryAdd(StringfactoryAdd){ this.factoryAdd=factoryAdd; } publicProduce(){ } } 【index.jsp】 <%@pagelanguage="java"contentType="text/html;charset=GB18030" pageEncoding="GB18030"%> DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http: //www.w3.org/TR/html4/loose.dtd">
useBeanid="produce"class="com.lyq.bean.Produce">
useBean>
setPropertyproperty="name"name="produce"value="洗衣机"/> setPropertyproperty="price"name="produce"value="888"/> setPropertyproperty="count"name="produce"value="56"/> setPropertyproperty="factoryAdd"name="produce"value="山东济南"/> 商品名称: getPropertyproperty="name"name="produce"/> 价格: getPropertyproperty="price"name="produce"/> 数量: getPropertyproperty="count"name="produce"/> 厂址: getPropertyproperty="factoryAdd"name="produce"/> 在地址栏输入 http: //localhost: 8080/ch5_example/index.jsp 得到 加上表单部分【login.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">
添加产品信息
修改【index.jsp】
<%@pagelanguage="java"contentType="text/html;charset=GB18030"
pageEncoding="GB18030"%>
DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http:
//www.w3.org/TR/html4/loose.dtd">
<%request.setCharacterEncoding("UTF-8");%>
useBeanid="produce"class="com.lyq.bean.Produce">
useBean>
setPropertyproperty="*"name="produce"/> 商品名称: getPropertyproperty="name"name="produce"/> 价格: getPropertyproperty="price"name="produce"/> 数量: getPropertyproperty="count"name="produce"/> 厂址: getPropertyproperty="factoryAdd"name="produce"/>
地址栏输入
http:
//localhost:
8080/ch5_example/login.jsp
得到
【补充说明】
1. useBeanid="produce"class="com.lyq.bean.Produce">
useBean>
id:
使用这个JavaBean创建的一个对象名
相当于Produceproduce=newProduce();
2. useBeanid="produce"class="com.lyq.bean.Produce">
useBean>
是标签语法。
Produceproduce=newProduce();
是Java语法。
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"/> 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); } --%> --往当前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"/> count: <%=counterBean.getCount()%> 在地址栏输入 http: //localhost: 8080/servlet_example1/RequestBean.jsp,结果为 修改【RequestBean.jsp】 useBeanid="counterBean"scope="request"class="bean.CounterBean"CounterBeanscope="page"Example
CounterBeanscope="request"Example
CounterBeanscope="request"Example
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第七章 JavaBean技术 第七 JavaBean 技术