版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第10章应用JavaBean技术10.1JavaBean构造方法 10.2useBean动作10.3应用JavaBean的开发实例
【学习提示】在JSP程序和Java程序开发过程中,有很多代码段是可以重复使用的,如对数据库的操作、用户的有效性检查及某项特定功能的实现等。为了解决这个问题,提高开发效率,Sun公司推出了JavaBean。本章将讲述如何编写JavaBean,及其在JSP中的使用方法,并给出具体的应用实例。
JavaBean是由Java语言编写的可重用组件。JavaBean可分为两种:一种是有用户界面,如按钮、滚动条或复杂的数据表格等;还有一种是没有用户界面,主要负责处理事务,比如逻辑运算、数据库操作等。JSP通常访问的是后一种JavaBean,在JSP中调用JavaBean的主要作用就是使JSP文件本身能够摆脱大量的事物处理代码,而主要关注结果的表现方式。10.1JavaBean构造方法
JavaBean作为一种Java类,必须被定义为public,另外需要遵守一些规范:
(1)
JavaBean类如果有构造函数,则必须是有一个无参数的public构造函数,以便让容器对象在设计和运行时生成JavaBean实例化对象。
(2)
JavaBean类可以包含属性,而属性的定义是由getXxx和setXxx函数构成的,即JavaBean类包含属性xxx(在set/get函数中属性名首字母要大写,调用属性时首字母为小写)。对于boolean类型的属性,可以用“is”函数来代替get函数。
(3)J
avaBean类为可串行化(Serializable),即使对象中的属性和状态可以被持久地保存于文件或数据库中。
下面的例子中,JavaBean类的定义存储到文件PersonBean.java中。
PersonBean.java
packagebeans;
/**
*Class<code>PersonBean</code>.
*/
publicclassPersonBeanimplementsjava.io.Serializable{
privateStringname;
privatebooleandeceased;
/**没有参数的构造方法.*/
publicPersonBean(){
}
/***获取属性name的值,注意方法名为getName,属性名的首字母要大写
*/
publicStringgetName(){
return;
}
/***设置属性name的值,注意方法名为setName,属性名的首字母要大写,必须有参变量*/
publicvoidsetName(finalStringname){
=name;
}
/**
*获取属性"deceased"的值*Differentsyntaxforabooleanfield(isvs.get)
*/
publicbooleanisDeceased(){
returnthis.deceased;
}
/**
*设置属性"deceased"的值
*@paramdeceased*/
publicvoidsetDeceased(finalbooleandeceased){
this.deceased=deceased;
}
}
在文件TestPersonBean.java中将生成JavaBean的实例进行测试。
importbeans.PersonBean;
/***Class<code>TestPersonBean</code>.
*/
publicclassTestPersonBean{
/**
*Testermethod<code>main</code>forclass<code>PersonBean</code>.
*@paramargs
*/
publicstaticvoidmain(String[]args){
PersonBeanperson=newPersonBean();
person.setName("Bob");
person.setDeceased(false);
//Output:"Bob[alive]"
System.out.print(person.getName());
System.out.println(person.isDeceased()?"[deceased]":"[alive]");
}
}这个程序将产生下面的结果,如图10-1所示。
图10-1测试JavaBean实例“TestPersonBean”的运行结果
如果要在JSP中使用某个JavaBean对象,可以采用useBean动作标签。useBean的语法格式如下:
<jsp:useBeanid="name"class="classname"scope="page|request|session|application"/>
其中,id属性用来定义JavaBean的实例名,class属性确定JavaBean的实现类。scope属性用于指定JavaBean实例的作用范围,该范围有四种取值,下面对JavaBean的有效范围进行详细介绍。10.2useBean动作10.2.1JavaBean的有效范围
采用useBean动作声明的JavaBean实例有效范围依据scope属性的取值,有以下四种:
(1)
page:JSP引擎为每个用户分配不同的beans,尽管每个用户的beans功能一样,但是它们占用的内存空间不同。该beans只在当前页面有效,当用户离开该页面时,JSP引擎取消分配给该用户的beans。
(2)
request:beans的有效范围在request生命期内。
在任何执行相同请求的JSP文件中使用该beans,直到页面执行完毕向客户端发回响应或转到另一个文件为止。可以使用request对象访问该beans,如request.getAttributes(beanName)。
(3)
session:beans的有效范围在会话期间。从创建beans开始,就能在任何相同beans的JSP文件中使用该beans。如果在一个session生命周期内,用户访问了多个页面,这些页面都包含一个useBean标签,而这些useBean标签中的id值一样,那么用户在这些页面中使用的beans是同一个beans。也就是说,如果用户在某个页面中改变了beans的某个属性值,则其他页面beans的该属性值也会发生相同的变化。注意:在创建beans的JSP文件的page指令中必须指定session为“true”。
(4)
application:从创建beans开始,就能在任何相同application的JSP文件中使用该beans,它存在于整个application生命周期内,任何共享此application的JSP文件都能使用同一beans。即所有的用户共享一个beans,如果有某个用户更改了该beans的某个属性值,那么所有用户beans的该属性值都将发生相同的变化,这个beans一直到服务器关闭时才被取消。10.2.2useBean的工作过程
useBean动作标签的具体执行过程如下:
(1)在指定的scope中查找名为name的JavaBean实例。
(2)若找到,则创建一个名为name、类型为classname的局部变量,其引用指向该JavaBean;若未找到,则在该scope中创建一个名为name、类型为classname的JavaBean,并创建相应的局部变量指向它。10.2.3设置和获取JavaBean属性值
当在JSP文件中采用useBean动作标签创建一个JavaBean实例后,使用setProperty动作标签设置JavaBean的属性值,具体语法格式如下:
<jsp:setPropertyname="beanName"propertyDetails/>
其中:
(1)
name="beanname"
是必选属性。其值为JavaBean的实例名称,即在这之前用jsp:useBean引入的id。
(2)
propertyDetails可以通过四种不同的方法来指定属性的信息。
①
property=“
”。这是一种设置JavaBean属性的快捷方式。在JavaBean中,属性的名称、类型必须和request对象中的参数名称相匹配。如果request对象的属性值中有空值,那么对应的JavaBean属性将不会设置任何值。同样,如果JavaBean中有一个属性没有与之对应的request参数值,那么这个属性同样不会设定。使用property=“
”,JavaBean的属性不用按HTML表单中的顺序排序。②property=“propertyName”。使用request中的一个参数值来指定JavaBean中的一个属性值。这里,property指定为JavaBean的属性名,而且JavaBean属性和request参数的名称应相同。如果request对象的参数值中有空值,那么对应的JavaBean属性将不会被设定任何值。
③property=“propertyName”param=“parameterName”。在JavaBean属性的名称和request中参数的名称不同时可以使用这个方法。Param指定request中的参数名。如果request对象的参数值中有空值,那么对应的JavaBean属性将不会被设定任何值。④property=“propertyName”value=“propertyValue”。value是一个可选属性,它使用指定的值来设定JavaBean的属性。如果参数值为空,那么对应的属性值也不会被设定。不能在一个<jsp:setProperty>中同时使用param和value。
当要获取JavaBean的属性值时,可以使用getProperty动作标签,具体语法格式如下:
<jsp:getPropertyname="beanName"property="propertyName"/>
其中,name是必选属性,其值为JavaBean的实例名;property也是一个必选属性,其值为前面name指定的JavaBean的属性名。下面我们把前面编译好的JavaBeanclass文件“PersonBean.class”放置到Web应用下的WEB-INF\classes\beans目录下,同时编写testPersonBean.jsp文件,在JSP页面中声明有效范围为page的JavaBean实例“person”,并通过表单由用户设置person的两个属性值,然后运用getProperty获取name和deceased这两个属性值,并在页面中进行显示。具体代码如下:
testPersonBean.jsp:
<%@pagelanguage="java"pageEncoding="utf-8"%>
<%//UseofPersonBeaninaJSP.%>
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
<!--下面代码在JSP中通过useBean动作标签引入一个id为person,Java类为PersonBean的Bean实例-->
<jsp:useBeanid="person"class="beans.PersonBean"scope="page"/>
<!--下一行代码利用表单beanTest中用户输入的值为person设置属性值-->
<jsp:setPropertyname="person"property="*"/>
<html>
<head>
<title>useBean动作示例</title>
</head>
<body>
Name:<jsp:getPropertyname="person"property="name"/><br>
<!--获取person的属性name的属性值-->
Deceased?<jsp:getPropertyname="person"property="deceased"/><br>
<!--获取person的属性deceased的属性值-->
<!--下面创建的表单beanTest让用户输入信息,为名为person的JavaBean提供属性值-->
<formname="beanTest"method="post"action="testPersonBean.jsp">
Enteraname:<inputtype="text"name="name"size="50"><br>
Chooseanoption:
<selectname="deceased">
<optionvalue="false">Alive</option>
<optionvalue="true">Dead</option>
</select>
<inputtype="submit"value="TesttheBean">
</form>
</body>
</html>
testPersonBean.jsp的运行结果如图10-2所示,此时名为person的javaBean的name属性值为空,deceased属性值为默认值false;当在表单中填入相关信息并点击“TesttheBean”按钮后,会显示如图10-3所示的person的相关属性值。
图10-2testPersonBean的首次运行结果
图10-3testPersonBean设置属性值后的运行结果
为了深入理解JavaBean在网站开发中的作用,我们下面给出两个具体的开发实例。
实例一:运用JavaBean在JSP页面显示当前的日期和时间。
首先,运用Calendar类的相关方法编写获取时间和日期的JavaBean类文件,编译成字节码文件后存放到Web应用根目录的WEB-INF\calsses\beans文件夹下。ShowCalendar类的具体代码如下:
ShowCalendar.java10.3应用JavaBean的开发实例
/**
*Class<code>ShowCalendar</code>.
*/
packagebeans;
importjava.util.*;
publicclassShowCalendar{
Calendarcalendar=null;
intyear,dayofMonth,dayofYear,weekofYear,weekofMonth,dayofWeek,hour,minute,second;
Stringday,date,time;
//下面创建ShowCalendar的构造方法,根据当前的时间创建日期对象
publicShowCalendar(){
calendar=Calendar.getInstance();
Datetime=newDate();
calendar.setTime(time);
}
publicintgetYear(){
returncalendar.get(Calendar.YEAR);
}
publicStringgetMonth(){
intm=calendar.get(Calendar.MONTH)+1;
Stringmonths[]={"1","2","3","4","5","6","7","8","9","10","11","12"};
if(m>12)return"0";
returnmonths[m-1];
}
publicStringgetDay(){
intn=getDayofWeek();
Stringdays[]={"日","一","二","三","四","五","六"};
if(n>7)
return"星期?";
returndays[n-1];
}
publicStringgetDate(){
returngetYear()+"/"+getMonth()+"/"+getDayofMonth();
}
publicStringgetTime()
{
returngetHour()+":"+getMinute()+":"+getSecond();
}
publicintgetDayofMonth(){
returncalendar.get(Calendar.DAY_OF_MONTH);
}
publicintgetDayofYear(){
returncalendar.get(Calendar.DAY_OF_YEAR);
}
publicintgetWeekofYear(){
returncalendar.get(Calendar.WEEK_OF_YEAR);
}
publicintgetWeekofMonth(){
returncalendar.get(Calendar.WEEK_OF_MONTH);
}
publicintgetDayofWeek(){
returncalendar.get(Calendar.DAY_OF_WEEK);
}
publicintgetHour(){
returncalendar.get(Calendar.HOUR_OF_DAY);
}
publicintgetMinute(){
returncalendar.get(Calendar.MINUTE);
}
publicintgetSecond(){
returncalendar.get(Calendar.SECOND);
}
}然后编写用useBean动作标签调用此JavaBean的JSP(JavaBean_Calendar.jsp)文件,通过表格的形式显示当前的时间、日期和星期,具体代码如下:
<%@pagelanguage="java"pageEncoding="UTF-8"%>
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
<html>
<head>
<title>运用JavaBean显示日期</title>
</head>
<body>
<jsp:useBeanid="clock"class="beans.ShowCalendar"scope="page"/>
<tableborder="4">
<tr>
<td><jsp:getPropertyname="clock"property="year"/>年</td>
<td><jsp:getPropertyname="clock"property="month"/>月
<jsp:getPropertyname="clock"property="dayofMonth"/>日
星期<jsp:getPropertyname="clock"property="day"/></td>
</tr>
<tr>
<td>当前时间为</td>
<td><jsp:getPropertyname="clock"property="time"/></td>
</tr>
<tr>
<td>今天是今年的第
</td>
<td><jsp:getPropertyname="clock"property="dayofYear"/>天
</td>
</tr>
<tr>
<td>本周是今年的第</td>
<td><jsp:getPropertyname="clock"property="weekofYear"/>周</td>
</tr>
<tr>
<td>本周是本月的第</td>
<td><jsp:getPropertyname="clock"property="weekofMonth"/>周</td>
</tr>
</table>
<jsp:getPropertyname="clock"property="date"/>
</body>
</html>
JavaBean_Calendar.jsp在JSP引擎中的运行结果如图10-4所示。
图10-4JavaBean_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 北师大版一年级下册数学第五单元 加与减(二) 测试卷及参考答案(黄金题型)
- 煤炭开采引发地质灾害调查报告(6篇)
- 关于大学生暑假实习心得
- 湖南省常德市2023-2024学年五年级上学期语文期末试卷(含答案)
- 解除租房合同需要哪些条件
- 诚信代理服务合同机构
- 诚恳道歉自白书
- 语文大专班试题
- 语文要素教学的策略与实践
- 购房合同中的交房时间
- GB/T 44770-2024智能火电厂技术要求
- 临沂城市职业学院招聘高技能人才教师和教辅人员笔试真题2023
- 学校防雷电安全应急预案(4篇)
- 辽宁省七校2024-2025学年高二上学期11月期中联考语文试题(含答案)
- 《出口退税培训》课件
- pcba外贸合同范例
- 2024年成都港汇人力资源管理限公司面向社会公开招聘国企业工作人员管理单位遴选500模拟题附带答案详解
- 家政保洁搬家合同范例
- 2024-2030年中国游梁式抽油机行业供需趋势及投资战略研究报告
- 山东省临沂市2024届高三第二次模拟考试语文试题(解析版)
- 2024国家开放大学电大专科《学前儿童健康教育》期末试题及答案
评论
0/150
提交评论