




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1第4章 JSP 与与 JavaBean 2本章主要内容: 编写和使用JavaBean; 使用有关标记加载JavaBean、设置和获取JavaBean的属性值; 针对实际问题编写JSP页面。3 为了有利于为了有利于WebWeb应用的扩展和维护,应用的扩展和维护,我们编写一个我们编写一个WebWeb应用时,提倡将数据应用时,提倡将数据的表示和处理分离。的表示和处理分离。 1 1、JSPJSP页面通过使用页面通过使用HTMLHTML标记为用户提标记为用户提供一个友好的界面,数据的表示层。供一个友好的界面,数据的表示层。 2 2、JSPJSP页面中变量的声明、程序片以及页面中变量的声明、程序片以及表
2、达式为动态部分,对数据进行处理。表达式为动态部分,对数据进行处理。 4JavaBean 简介 Sun公司对于JavaBean的定义是:“Java Beans是一个可重复使用的软件部件”。 JavaBean是描述Java的软件组件模型,是Java程序的一种组件结构,也是Java类的一种。 在Java模型中,通过JavaBean可以无限扩充Java程序的功能,通过JavaBean的组合可以快速的生成新的应用程序。 5 JavaBean JavaBean是一个可重复使用的软件组件,是一个可重复使用的软件组件,是遵循一定标准、用是遵循一定标准、用JavaJava语言编写的一语言编写的一个 类 , 该
3、类 的 一 个 实 例 称 为 一 个个 类 , 该 类 的 一 个 实 例 称 为 一 个JavaBeanJavaBean,简称,简称beanbean 6 JavaBean实质上是一个Java类,但有它独有的特点,JavaBean的特性包括:1.是公共的类;2.构造函数没有输入参数;3.属性必须声明为private,方法必须声明为public;4.用一组set方法设置内部属性;5.用一组get方法获取内部属性;7 JavaBean和JSP技术的结合不仅可以实现表现层和商业逻辑层的分离,而且可以提高JSP程序的运行效率和代码重用的程度,还可以实现并行开发,是JSP编程中常用的技术。85.1 编
4、写和使用编写和使用JavaBean一、编写bean 编写一个JavaBean就是编写一个Java的类,这个类创建的一个对象称为一个bean,为了让Tomcat知道这个bean的属性和方法,我们必须在类的方法命名上遵守以下规则:9 1.1.如果类的成员变量的名字是如果类的成员变量的名字是xxxxxx,那么为了获取或更,那么为了获取或更改成员变改成员变 量的值,即获取或更改属性,类中必须提量的值,即获取或更改属性,类中必须提供两个方法:供两个方法: getXxxgetXxx()() 用来获取属性用来获取属性xxxxxx setXxx setXxx() () 用来修改属性用来修改属性xxxxxx 即
5、方法的名字用即方法的名字用getget或或setset为前缀,后缀是将成员变为前缀,后缀是将成员变量名字的首字母大写的字符序列。量名字的首字母大写的字符序列。 2.2.对于对于booleanboolean类型的成员变量,即布尔逻辑类型的类型的成员变量,即布尔逻辑类型的属性,允许使用属性,允许使用“isis”代替上面的代替上面的“getget”和和“set”set”。 3.3.类中声明的方法的访问属性都必须是类中声明的方法的访问属性都必须是publicpublic的。的。 4.4.类中声明的构造方法必须是类中声明的构造方法必须是publicpublic、无参数的。、无参数的。 10 注意:bea
6、n必须要带有包名。使用package语句给bean一个包名。 例如:package gping; package tom.jiafei; 例1 创建bean的源文件,该bean的作用计算圆的面积。11package mypackage;import java.io.* ;public class circle double radius;public void setRadius(double radius)this.radius=radius;public double getRadius()return radius;12public double circleLength()return
7、 radius*2*3.14;public double circleArea()return 3.14*radius*radius;13二、二、 使用使用Bean JavaBean可以在任何Java程序编写环境下完成编写,再通过编译成为一个字节码文件(.class文件),为了让Tomcat找到这个字节码,必须把字节码文件放在特定的位置. 14Bean的保存 在当前在当前WebWeb服务目录下建立如下目录结构:服务目录下建立如下目录结构: Web服务目录服务目录WEB-INFclasses 根据类的包名,在目录根据类的包名,在目录classesclasses下建立相应的下建立相应的子目录子目录
8、. .比如比如: : Web Web服务目录服务目录WEB-INFclassestomjiafeiWEB-INFclassestomjiafei注意:启用这些目录,必须重新启动注意:启用这些目录,必须重新启动TomcatTomcat服服务器。将务器。将.class.class文件复制到该目录下即可。文件复制到该目录下即可。 152. JSP页面中使用页面中使用bean 使用使用JSPJSP动作标记:动作标记:useBeanuseBean。 useBeanuseBean标记的格式:标记的格式: 或或16useBean语句执行流程 在useBean标签中获得id,scope的值在pageConte
9、nt中查找指定的id,scope值的对象。这个对象存在吗?Y创建指定id,scope值的一个 对 象 , 添 加 到papeContent中给客户分配一个指定id,scope值的对象useBean语句执行结束useBean语句执行开始N17 标签的基本属性含义见图18 例如: 19Bean是如何被加载的? Tomcat服务器1、首先根据id的名字,在Tomcat内置的pageContent对象中看是否含有名字id和作用域scope的对象;2、如果该对象存在,Tomcat就将这个对象的副本(Bean)分配给JSP页面;3、如果没有找到,就根据class指定的类创建一个名字是id的Bean,并添加
10、到pageContent对象中,同时将这个Bean分配给JSP页面。20 注意:首次创建一个新的Bean,需要相应的字节码文件,以后用的是副本,如果修改了字节码文件,必须重新启动Tomcat服务器,才能使用新的字节码文件。21Scope的取值1、scope取值page 该Bean 的有效范围是当前页面。当客户请求Bean时,分配内存空间给它,当客户离开这个页面时,便取消分配的Bean,并收回内存空间。 Tomcat分配给每个JSP页面的Bean是不相同的。它占有的内存空间不同。22 注意:当两个客户访问同一个JSP页面时,一个用户对自己Bean的属性的改变,不会影响到另一个客户。232、sco
11、pe取值session Bean的有效范围是客户的会话期间。如果客户在多个页面中互相连接,每个页面都含有一个相同的useBean标记,那么这个客户在这些页面得到的bean是相同的,即占有相同的内存空间。当会话结束,Bean也消失,释放空间。24 注意:如果客户在某个页面更改了Bean的某个属性,那么其他页面的Bean的属性也发生变化。 两个客户同时访问一个JSP页面时,一个用户对自己Bean的属性的改变不会影响到另一个客户。253、scope取值request Bean的有效范围是request期间。客户在网站访问时请求多个页面,如果每个页面都含有useBean标记,那么在每个页面分配的bea
12、n也不相同。Tomcat服务器对请求作出相应后,Bean消失。26 注意:当两个客户同时请求一个JSP页面时,一个用户对自己Bean属性的改变,不会影响另外一个客户。274、scope取值application Bean的有效范围是application期间。Tomcat服务器为所有的JSP页面分配一个共享的bean. 当几个客户同时访问一个JSP页面时,任何一个客户对自己的bean的属性的改变都会影响到其他用户。28例编写一个圆bean,计算圆的面积和周长问题分析:问题分析:这里部署圆bean的三个步骤:1给bean起一个包名small.dog。由于Tomcat服务器要求bean字节码必须放
13、在一个包中。我们在编写Circle.java时,使用package语句给bean起的包名是small.dog。2创建包small.dog。在某目录下创建子目录smalldog,把编译后的字节码文件Circle.class复制到smalldog目录下,这就完成了small.dog包的创建。3把包small.dog复制到存放bean的公有目录中。Tomcat5.0服务器存放bean字节码的公有目录是Tomcat 5.0commonclasses,我们将smalldog目录复制到Tomcat 5.0commonclasses目录下,就完成了包small.dog包的复制。程序结构:程序结构:由Circ
14、le.java类实现bean功能;useBean.jsp页面调用圆bean。29程序算法:程序算法: Circle.java:声明三个变量,表示圆的半径/面积/周长:radius/circleArea/circleLength定义三个方法,分别获取圆的半径/面积/周长的值 useBean.jsp:导入包small.dog以类small.dog.Circle创建一个对象,对象名是:girl设置对象girl的半径为100输出对象girl的半径,周长,面积的值。3031Package small.dog;import java.io.* ;public class circle double rad
15、ius;public void setRadius(double radius)this.radius=radius;public double getRadius()return radius;32public double circleLength()return radius*2*3.14;public double circleArea()return 3.14*radius*radius;33例例1useBeans示例 圆的半径是: beans2.jsp 34测试测试bean的生命周期的生命周期例例2bean1.jsp 圆的半径是: bean2.jsp 35bean2.jsp 圆的半
16、径是: 修改后的圆的半径是:bean1.jsp 36例子例子3appbean.jsp 圆的初始半径是: 修改后的圆的半径是: 37user.jsp;Hello : ;注:该bean作用范围还包括a.jsp384.2 获取和修改bean的属性 当使用useBean创建好一个bean后,就可以使用这个bean了。比如修改属性、使用类中的方法等。 我们还可以使用和 标记设置和获取bean的属性。39一、一、动作标签动作标签getPropertygetProperty 使用该标记可以获得使用该标记可以获得beanbean的属性值的属性值 . .格式如下:格式如下:或或这条指令相当于这条指令相当于get
17、Xxx()方法。方法。40NewCircle.javapackage tom.jiafei;import java.io.*;public class NewCircle double radius=1,circleArea,circleLength; public double getRadius() return radius; public void setRadius(double newRadius) radius=newRadius; public double getCircleArea() circleArea=Math.PI*radius*radius; return cir
18、cleArea; public double getCircleLength() circleLength=2.0*Math.PI*radius; return circleLength; 41beanGetProperty.jsp 圆的半径是:圆的面积是:圆的周长是:42二、二、动作标记动作标记setProperty 使用该标记可以设置使用该标记可以设置beanbean的属性值,可以通过的属性值,可以通过3 3种方式设置种方式设置beanbean属性的值。属性的值。1 1、将、将beanbean属性的值设置为一个表达式的值或字属性的值设置为一个表达式的值或字符串。符串。 设置为一个表达式的值
19、格式如下:设置为一个表达式的值格式如下:jsp:setProperty name=bean的名字的名字 property= bean的属性的属性 value= /43 设置为一个字符串格式如下:设置为一个字符串格式如下: 注意:表达式值和字符串的值都会注意:表达式值和字符串的值都会自动地转化自动地转化为为bean属性的类型属性的类型。44 Java语言字符串转换为其他数值类型的方法: Integer.parseInt(String s) Long.parseLong(String s) Float.parseFloat(String s) Double.parseDouble(String s
20、)45 例5 定义一个描述学生基本信息的类Student.java。在编写student.jsp,使用动作标记设置、获取相关的属性。46Student.javaPackage tom.jiafei;public class Student String name=null; long number; double height,weight; public String getName() return name; public void setName(String newName) name=newName; public long getNumber() return number; p
21、ublic void setNumber(long newNumber) 47 number=newNumber; public double getHeight() return height; public void setHeight(double newHeight) height=newHeight; public double getWeight() return weight; public void setWeight(double newWeight) weight=newWeight; 48例子例子5student.jsp 名字是: 学号是: jsp:setProperty
22、 name=zhang property=height value=/身高是: 米 体重是: 公斤492 2、通过、通过HTTPHTTP表单的参数的值来设置表单的参数的值来设置beanbean的相应属性的值的相应属性的值: : 注意:格式中不用再具体指定注意:格式中不用再具体指定beanbean属性的属性的值,将对应表单中哪个参数指定的,系值,将对应表单中哪个参数指定的,系统会统会自动根据名字进行配对自动根据名字进行配对。50 例6 用户通过表单的形式来指定表单的值。51Goods.java 商品类:价格,名称,数量package tom.jiafei;public class Goods S
23、tring name, goodsNumber; double price; public String getName() return name; public void setName(String newName) name=newName; 52public String getGoodsNumber() return goodsNumber; public void setGoodsNumber(String s) goodsNumber=s; public double getPrice() return price; public void setPrice(double ne
24、wPrice) price=newPrice; 53例子例子6goods.jsp 输入商品的名称: 输入商品的代号: 输入商品的价格: 提交表单才能设置商品的信息 商品的名称:商品的代号:商品的价格:543 3、通过、通过requestrequest的参数的值来设置的参数的值来设置beanbean的的相应属性的值,要求相应属性的值,要求requestrequest参数名字参数名字必须与必须与beanbean属性的名字相同属性的名字相同其格式如下:其格式如下:55例例7 7 使用使用requestrequest参数设置参数设置beanbean的属的属性的值性的值56 JSP页面中调用JavaBe
25、an的一般操作方法:(1)编写实现特定功能的JavaBean;(2)应用在JSP页面中声明并初始化JavaBean,这个JavaBean有一个唯一的id标志,还有一个生存范围scope(根据具体的需要进行指定),同时还要指定JavaBean的class来源(如mybean.LoginBeanr);(3)调用JavaBean提供的public方法或者直接使用和标签来得到 和设置JavaBean中属性的值。 (4)调用JavaBean中的特定方法完成指定的功能。57课堂实践 任务1 使用JavaBean实现计数器。counter.java实现计数操作; counter.jsp通过Bean中的方法显
26、示访问计数; counter1.jsp通过读取Bean中的属性显示访问计数。585.3 bean的辅助类的辅助类 有时在写一个有时在写一个beanbean的时候,可能还需要的时候,可能还需要自己编写的其他类,那么只要将这些类自己编写的其他类,那么只要将这些类和创建和创建beanbean的类写在一个的类写在一个JavaJava源中即可,源中即可,但必须按将源文件编译后产生的全部字但必须按将源文件编译后产生的全部字节码文件复制到相应的目录中节码文件复制到相应的目录中 . .59 例8 定义一个beanListFile,列出JSP页面所在目录中特定扩展名的文件。再定义一个实现FilenameFilt
27、er接口的辅助类FileName,该类可以帮助我们的bean列出指定扩展名的文件。60ListFile.javapackage tom.jiafei;import java.io.*;class FileName implements FilenameFilter String str=null; FileName (String s) str=.+s; public boolean accept(File dir,String name) return name.endsWith(str); 61public class ListFile String extendsName=null; S
28、tringBuffer allFileName; public void setExtendsName(String s) extendsName=s; public String getExtendsName() return extendsName; public StringBuffer getFileName() File dir=new File(d:/2000); FileName help=new FileName(extendsName); String file_name=dir.list(help); for(int i=0;ifile_name.length;i+) al
29、lFileName.append(file_namei+ ); return allFileName; 62file.jsp 输入文件的扩展名: 扩展名是 的文件有: 635.4 举例 例10 定义一个三角形bean计算三角形的面积,再编写一个JSP页面,该页面提供一个表单,用户可以通过表单将三角形三边的长度提交给该页面。 该bean能判断三条边能否构成一个三角形64 分析:在三角形bean中应该设计几个属性,分别代表什么含义?需要提供哪些方法?65问题分析:问题分析:部署三角形bean的步骤:1给bean起一个包名small.dog。编写Triangle.java时,使用package语句给
30、bean起的包名是small.dog。2把编译后的字节码文件Triangle.class复制到存放bean的公有目录Tomcat 5.0commonclasses smalldog 目录下。这也意味着,Triangle.class字节码保存在small.dog包中。程序结构:程序结构:由Triangle.java类实现bean功能;Triangle.jsp页面调用bean。66程序算法:程序算法:Triangle.java:声明5个变量,保存bean的5种属性:sideA, sideB, sideC, area, triangle。定义方法getArea(),计算三角形面积。定义方法boole
31、an isTriangle(),判断给出的三条边能否构成一个三角形。 Triangle.jsp: 1导入包small.dog2创建一个表单,该表单包含三个文本框(接受客户输入三条边的长度)3以类small.dog.Triangle创建一个对象,对象名是triangle。4给对象triangle的属性(sideA,sideB,sideC)赋值。5. 将对象triangle的属性值输出。 67Triangle.javapackage red.star;public class Triangle double sideA=-1,sideB=-1,sideC=-1, area=-1; boolean
32、triangle; public void setSideA(double a) sideA=a; public double getSideA() return sideA; public void setSideB(double b) sideB=b; public double getSideB() return sideB; 68public void setSideC(double c) sideC=c; public double getSideC() return sideC; public double getArea() double p=(sideA+sideB+sideC
33、)/2.0; if(triangle) area=Math.sqrt(p*(p-sideA)*(p-sideB)*(p-sideC); return area; public boolean isTriangle() if(sideAsideB+sideC&sideBsideA+sideC&sideCsideA+sideB) triangle=true; else triangle=false; return triangle; 69triangle.jsp 输入三角形三边: 边A: 边B: 边C: 三角形的三边是: 边A:, 边B:, 边C:.这三个边能构成一个三角形吗?面积
34、是: 70四则运算bean例11 定义一个四则运算bean 完成四则运算,再编写一个JSP页面,该页面提供一个表单,用户可以通过表单将两个运算数和运算符提交给该页面。71 分析:在四则运算bean中应该设计几个属性,分别代表什么含义?需要提供哪些方法?72ComputerBean.javapackage red.star;public class ComputerBean double numberOne,numberTwo,result; String operator=+; public void setNumberOne(double n) numberOne=n; public dou
35、ble getNumberOne() return numberOne; public void setNumberTwo(double n) numberTwo=n; public double getNumberTwo() return numberTwo; 73public void setOperator(String s) operator=s.trim(); public String getOperator() return operator; public double getResult() if(operator.equals(+) result=numberOne+num
36、berTwo; else if(operator.equals(-) result=numberOne-numberTwo; else if(operator.equals(*) result=numberOne*numberTwo; else if(operator.equals(/) result=numberOne/numberTwo; return result; 74computer.jsp Input type=text name=numberOne value= size=6 + - * / Input type=text name=numberTwo value= size=6
37、 = 75计数器计数器bean 记录某个web服务目录(通常所说的网站)被访问的次数。但需要限制客户通过不断刷新页面或再次访问该网站的其他页面来增加计数。76comeOne.jsp Welcome欢迎您访问本站,这是本网站的comeOne.jsp页面 您是第 个访问本网站的客户。 欢迎去comeTwo.jsp参观 77comeTwo.jsp Welcome欢迎您访问本站,这是本网站的comeTwo.jsp页面 您是第 个访问本网站的客户。 欢迎去comeOne.jsp参观78CounterCount.javapackage red.star;import java.io.*;public cl
38、ass CounterCount int number=0; boolean isCome=false; File file=new File(count.dat) ; private void countPeople() if(!file.exists() number+; try file.createNewFile(); FileOutputStream out=new FileOutputStream(file); DataOutputStream dataOut=new DataOutputStream(out); dataOut.writeInt(number); out.clos
39、e(); dataOut.close(); catch(IOException ee) 79else try FileInputStream in=new FileInputStream(file); DataInputStream dataIn=new DataInputStream(in); number=dataIn.readInt(); number+; in.close(); dataIn.close(); FileOutputStream out=new FileOutputStream(file); DataOutputStream dataOut=new DataOutputS
40、tream(out); dataOut.writeInt(number); out.close(); dataOut.close(); catch(IOException ee) isCome=true; 80public int getNumber() if(isCome=false) countPeople(); return number; 81浏览图像浏览图像 bean 单击“上一张”或“下一张”浏览图像82Play.javapackage red.star;import java.io.*;class FileName implements FilenameFilter /辅助类 p
41、ublic boolean accept(File dir,String name) boolean boo=false; if(name.endsWith(.jpg)|name.endsWith(.JPG) boo=true; return boo; 83public class Play int imageNumber=0,max; String pictureName, playImage; public Play() File dir=new File(D:/apache-tomcat-5.5.20/webapps/ch4/image); pictureName=dir.list(ne
42、w FileName(); max=pictureName.length; public void setImageNumber(int n) if(n0) n=max-1; if(n=max) n=0; imageNumber=n; 84public int getImageNumber() return imageNumber; public String getPlayImage() playImage=new String(); return playImage; 85play.jsp 单击上一张或下一张按钮浏览图像 Input type=hidden name=imageNumber
43、 value= Input type=hidden name=imageNumber value= 86成绩单成绩单 beanScoreList.javapackage red.star;public class ScoreList String studentName,courseName=,score=; StringBuffer scoreWatch=new StringBuffer(); public void setScore(String n) score=n; public void setStudentName(String s) studentName=s; public v
44、oid setCourseName(String s) courseName=s; public String getCourseName() return courseName; 87 public StringBuffer getScoreWatch() if(studentName!=null&studentName.length()0&score.length()0) scoreWatch.append(); scoreWatch.append(); scoreWatch.append(studentName); scoreWatch.append(); scoreWa
45、tch.append(); scoreWatch.append(+score); scoreWatch.append(); scoreWatch.append(); studentName=; score=; return scoreWatch; 88studentScore.jsp 课程名称:Input type=text name=courseName value= 学生姓名: 学生成绩: 89日历日历bean 90CalendarBean.javapackage red.star;import java.util.*;public class CalendarBean String calendar=null; int year=-1,month=-1; public void setYear(int year) this.year=year; public int getYea
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025人事代理合同书范本下载
- 2025关于铝材购销合同
- 2025建筑外墙保温材料安装合同示范文本
- 民宿认养合同协议书
- 涂料幕墙施工方案
- 强化保安人员社会适应能力的策略计划
- 法律合伙入股协议书
- 服务合同延期协议书
- 深圳老师就业协议书
- 档案安全保管协议书
- 井下电钳工题库(含答案)
- 2025年随州国有资本投资运营集团有限公司招聘笔试参考题库附带答案详解
- 吉林伟良矿业有限公司吉林省和龙市和安河金矿矿山地质环境保护与土地复垦方案
- 湖北省武汉市2025届高中毕业生四月调研考试语文试卷及答案(武汉四调)
- 2022水利工程建设项目档案管理规程
- 辅导员考试的重点知识与试题
- 润滑油委托加工合同
- 杭州市萧山区招录高学历事业人员笔试真题2024
- 古建筑修缮加固施工方案
- 2025年中国高消费旅客出境游洞察
- T-PAYS 002-2024 磐安药膳制作技术规程
评论
0/150
提交评论