文章目录

一:JavaBean概述

二:JavaBean属性

三:JavaBean的标准动作

四:JavaBean的使用

一:

1.1JavaBean的概述:

JavaBean是使用Java语言描述的软件组件模型,简单地说,它就是一个可以重复使用的Java类。
JavaBean可分为可视化组件和非可视化组件,其中可视化组件包括简单的GUI元素(例如,文本框、按钮)及一些报表组件等。非可视化组件是在实际开发中经常被使用到的并且在应用程序中起着至关重要的作用。其主要功能是用来封装业务逻辑(功能实现)、数据库操作(例如,数据处理、连接数据库)等。

1.2为什么使用JavaBean:

(1)可以实现代码的重复利用。
(2)易编写、易维护、易使用。
(3)它可以压缩在jar文件中,以更小的体积在网络中应用
(4)完全是Java语言编写,可以在任何安装了Java运行环境的平台上的使
用,而不需要重新编译。

1.3JavaBean的形势和要素:

(1)如果类的成员变量的名字是xxx,那么为了更改或获取成员变量的值,
即更改或获取属性,在类中可以使用两个方法:
● getXXX():用来获取属性xxx。
● setXXX():用来修改属性xxx.。
(2)对于boolean类型的成员变量,即布尔逻辑类型的属性,允许使用"is“
代替上面的"get"和"set"。
(3)类中方法的访问属性都必须是public的。
(4)类中如果有构造方法,那么这个构造方法也是public的并且没有参数。

JavaBean示例:
import java.io.Serializable;
public class JavaBeanDemo implements Serializable{   //实现了Serializable接口JavaBeanDemo(){}                                                    //无参的构造方法private int id;                                                             //私有属性Idprivate String name;                                                  //私有属性namepublic int getId(){return Id;             }    public void setId(int id) {                                            //set()方法this.id = id;}public String getName(){                                          //get()方法return name;}
public void setName(String name) {this.name = name;}
}

二. JavaBean属性:

2.1简单属性:

JavaBean的简单属性(Simple属性)表示为一般数据类型的变量并且getXXX()和setXXX()方法是以属性来命名的。
例如:

public class Hello {Hello(){}                //无参构造方法private String name;            //定义String类型的简单属性nameprivate boolean info;  public String getName() {       //简单属性的getXxx()方法return name;}public void setName(String name) {    //简单属性的setXxx()方法this.name = name;}public boolean isInfo() {       //布尔类型的取值方法return info;}public void setInfo(boolean info) { //布尔类型的setXxx方法this.info = info;
}
}
2.2 索引属性:

JavaBean的索引属性(Indexed属性)表示一个数组值或者一个集合,与Simple属性一样可以使用getXXX()和setXXX()方法来获取值
例如:

public int[] array=new int[8];public int[] getArray() {     //返回整个数组return array;}public void setArray(int[] array) {   //为整个数组赋值this.array = array;}public void setArray(int index,int value) {   //为数组中的某个元素赋值this.array[index]=value;}public int getArray(int index){      //返回数组中的某个值return array[index];} 
2.3束缚属性:

束缚属性(Bound)也称为关联属性,它是当该种属性的值发生变化时,要通知其它的对象。每次属性值改变时,这种属性就触发一个PropertyChange事件(在Java程序中,事件也是一个对象)。
事件中封装了属性名、属性的原值、属性变化后的新值。这种事件是传递到其它的Bean,至于接收事件的Bean应做什么动作由其自己定义。

包含关联属性的#Bean必须具有以下的功能:

(1)允许事件监听器注册和注销与其有关的属性修改事件;
(2)当修改一个关联属性时,可以在相关的监听器上触发属性修改
事件
实现方法:利用java.beans.PropertyChangeSupport类创建出PropertyChangeSupport类的对象,从而可以用于管理注册的监听器列表和属性修改事件通知的发送。JavaBean还需要实现addPropertyChangeLinster()方法和removePropertyChangeLinster()方法,以便添加和取消属性变化的监听器

2.4限制属性:

限制属性(constrained)是指当这个属性的值要发生变化时,与这个属性已建立了某种连接的其它外部Java对象可否决该属性值的改变(限制属性的监听者通过抛出PropertyVetoException来阻止该属性值的改变),Bean本身也可以否决该Bean属性值的改变。
一个限制属性有两种监听者:属性变化监听者和取消属性改变的监听者。取消属性改变的监听者在自己的对象代码中有相应的控制语句,在监听到有限制属性要发生变化时,在控制语句中判断是否应否决这个属性值的改变。

实现方法:利用java.beans.VetoableChangeSupport类的fireVetoableChange()方法传递属性名称、改变前的值和改变后的值等信息。JavaBean还需要实现addVetoableChangeLinster()方法和removeVetoableChangeLinster()方法,以便添加和取消属性变化的监听器。

三. JavaBean的标准动作:

3.1:3.1 page作用域

page作用域在这4种类型中范围是最小的,客户端每次请求访问时都会创建一个JavaBean对象。JavaBean对象的有效范围是客户请求访问的当前页面文件,当客户执行当前的页面文件完毕后JavaBean对象结束生命。
在page范围内,每次访问页面文件时都会生成新的JavaBean对象,原有的JavaBean对象已经结束生命期。

3.2:3.2 request作用域

当scope为request时,JavaBean对象被创建后,它将存在于整个request的生命周期内,request对象是一个内建对象,使用它的getParameter方法可以获取表单中的数据信息。
Request范围的JavaBean与request对象有着很大的关系,它的存取范围除了page外,还包括使用动作元素jsp:include和jsp:forward包含的网页,所有通过这两个操作指令连接在一起的JSP程序都可以共享同一个JavaBean对象

3.3:session作用域

当scope为session时,JavaBean对象被创建后,它将存在于整个session的生命周期内,session对象是一个内建对象,当用户使用浏览器访问某个网页时,就创建了一个代表该链接的session对象,同一个session中的文件共享这个JavaBean对象。客户对应的session生命期结束时JavaBean对象的生命也结束了。在同一个浏览器内,JavaBean对象就存在于一个session中。当重新打开新的浏览器时,就会开始一个新的session。每个session中拥有各自的JavaBean对象。

3.4: application作用域

当scope为application时,JavaBean对象被创建后,它将存在于整个主机或虚拟主机的生命周期内,application范围是JavaBean的生命周期最长的。同一个主机或虚拟主机中的所有文件共享这个JavaBean对象。如果服务器不重新启动,scope为application的JavaBean对象会一直存放在内存中,随时处理客户的请求,直到服务器关闭,它在内存中占用的资源才会被释放。在此期间,服务器并不会创建新的JavaBean组件,而是创建源对象的一个同步拷贝,任何拷贝对象发生改变都会使源对象随之改变,不过这个改变不会影响其它已经存在的拷贝对象。

3.5:3.5 JavaBean获取作用域数

示例:
1.创建一个web项目

2.创建一个JavaBean:“Scope.java” 。

package scope;
public class Scope {public Scope(){}                                        //无参的构造函数private int number=0;                                //初始化变量number的值为0public int getNmuber(){                             //增加并返回变量number的值number++;return number;}public void setNumber(int newNumber) {   this.number = newNumber;       //给变量number赋新值}
}

3.在webroot下创建名称为“scope.jsp”的页面文件,用来显示JavaBean存在的范围的具体区别。主要代码:

<body><jsp:useBean id="pageScope" scope="page" class="scope.Scope" /><% out.println("使用page获取的数据为:" + pageScope.getNmuber());%> <jsp:useBean id="requestScope" scope="request" class="scope.Scope" /><%out.println("使用request获取的数据为:" + requestScope.getNmuber());%><jsp:useBean id="sessionScope" scope="session" class="scope.Scope" /><% out.println("使用session获取的数据为:" + sessionScope.getNmuber()); %> <jsp:useBean id="applicationScope" scope="application"class="scope.Scope" /><% out.println(“使用application获取的数据为:” +applicationScope.getNmuber());%>
</body> 

四. JavaBean的使用:

示例:
1.创建web项目
2.src下创建circle 包
3.创建名称为“Circle.java”的JavaBean,该类文件主要实现了圆的数学计算操作,代码如下:

package circle;
public class Circle {private int radius=1;            //定义私有变量radius表示圆的半径public Circle(){}               //无参的构造函数public int getRadius()  {return radius;      //返回变量radius}public void setRadius(int rRadius)    {radius=rRadius;    //给变量radius赋值}public double circleLength(){return Math.PI*radius*2.0;  //计算圆的周长}public double circleArea(){return Math.PI*radius*radius;   //计算圆的面积}
} 

4.创建名称为“radiusInput.jsp”的页面文件,该页面文件将实现提示用户输入圆半径的功能,主要代码如下:

<body><form id="form1" name="form1" method="post" action="circle.jsp">请输入圆的半径:<input name="radius" type="text" id="radius" /><input type="submit" name="submit" value="开始计算" /></form>
</body> 

5.创建名称为“circle.jsp”的页面文件,该页面文件将实现显示圆的面积和周长的计算结果,主要代码如下:

<body><jsp:useBean id="circleBean" scope="session" class="circle.Circle"/></p><%int radius=Integer.parseInt(request.getParameter("radius"));circleBean.setRadius(radius);out.println("圆的半径是:"+circleBean.getRadius());out.println("圆的周长是:"+circleBean.circleLength());out.println("圆的面积是:"+circleBean.circleArea());
%>
</body> 

6.将项目部署到服务器上,运行服务器,在浏览器上打开radiusInput.jsp
运行示例:

JavaBean(1)——学习记录相关推荐

  1. 我的Spring学习记录(二)

    本篇就简单的说一下Bean的装配和AOP 本篇的项目是在上一篇我的Spring学习记录(一) 中项目的基础上进行开发的 1. 使用setter方法和构造方法装配Bean 1.1 前期准备 使用sett ...

  2. Pytorch学习记录-torchtext和Pytorch的实例( 使用神经网络训练Seq2Seq代码)

    Pytorch学习记录-torchtext和Pytorch的实例1 0. PyTorch Seq2Seq项目介绍 1. 使用神经网络训练Seq2Seq 1.1 简介,对论文中公式的解读 1.2 数据预 ...

  3. HTML5与CSS3权威指南之CSS3学习记录

    title: HTML5与CSS3权威指南之CSS3学习记录 toc: true date: 2018-10-14 00:06:09 学习资料--<HTML5与CSS3权威指南>(第3版) ...

  4. springboot @cacheable不起作用_Springboot学习记录13 使用缓存:整合redis

    本学习记录的代码,部分参考自gitee码云的如下工程.这个工程有详尽的Spingboot1.x教程.鸣谢! https://gitee.com/didispace/SpringBoot-Learnin ...

  5. 【Cmake】Cmake学习记录

    Cmake学习记录 1.1 常例 add_library(gen_reference_infogen_reference_info/gen_reference_info.hgen_reference_ ...

  6. ASP.NETCore学习记录(一)

    ASP.NETCore学习记录(一) asp.net core介绍  Startup.cs  ConfigureServices  Configure  0. ASP.NETCore 介绍 ASP.N ...

  7. Android开发技术周报176学习记录

    Android开发技术周报176学习记录 教程 当 OkHttp 遇上 Http 2.0 http://fucknmb.com/2018/04/16/%E5%BD%93OkHttp%E9%81%87% ...

  8. add函数 pytorch_Pytorch学习记录-Pytorch可视化使用tensorboardX

    Pytorch学习记录-Pytorch可视化使用tensorboardX 在很早很早以前(至少一个半月),我做过几节关于tensorboard的学习记录. https://www.jianshu.co ...

  9. java之字符串学习记录

    java之字符串学习记录 public class StringDemo { public static void main(String[] args) { //静态初始化字符串 String s1 ...

最新文章

  1. Size Matters! Long-Read DNA Sequencing
  2. cordova media android不播放声音,cordova-plugin-media 录音并打包上传
  3. SSL加密包解析的几个概念梳理
  4. 企业邮箱服务器删除邮件,企业邮箱Webmail对邮件进行删除或者清空邮件的方法...
  5. 来一场蛋白和小分子的风花雪月
  6. 1.5 编程基础之循环控制 20 球弹跳高度的计算
  7. 妈咪,我找到了!15个实用的Linux find命令示例
  8. linux登陆提示鉴定故障_5个最常见的Linux问题的故障排除提示
  9. python二维向量运算模拟_Python数学基础之向量定义与向量运算(附代码)
  10. Atitit 各有所长原则 Thinker和Doer之争。 Doer Influencer relater thinker 目录 1. Doer Influencer relater thinke
  11. 软件的接口设计图_软件产品研发流程
  12. PowerBuilder资源分享汇总
  13. 常用的API函数汇总
  14. uniapp—配置自定义基座
  15. UDIMM和RDIMM内存条区别
  16. 单模光纤最大传输距离为多少_单模光纤的最长传输距离是多少?单模光纤和多模光纤的区别在于什么?...
  17. 【源码】非常有用的Vml图像画板
  18. python 筛选 加字段_如何显示/隐藏显示在筛选中的字段,按选择分组?
  19. 说话人识别(speaker Recognition/Verification)简介
  20. DDN - Digital Data Network

热门文章

  1. Unity加载并展示PPT
  2. 申请支付宝-Alipay 密钥流程
  3. 人工智能在教育中的应用场景
  4. 鲁大师7月新机流畅榜:realme GT大师探索版拿下冠军!
  5. STM32 us精确延时方式
  6. ps怎么把白色背景变透明
  7. html绘制水管,CAD平面水管如何画?
  8. uniapp——解决checkBox组件无法全选无法选中的bug
  9. 计算机网络课论文参考文献,热门计算机网络课程论文参考文献 计算机网络课程专著类参考文献哪里找...
  10. python的pulp包_使用Python/PuLp解决线性规划问题