了解JavaBean

1.什么是JavaBean

JavaBean是基于Java的组件模型,由属性、方法和事件3部分组成。在该模型中,JavaBean可以修改或与其他组件结合以生成新组件或完整的程序。它又是一种Java类,通过封装成为具有某种功能或者处理某个业务的对象。因此,可以通过嵌在JSP页面内的Java代码访问Bean及其属性。

为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean通过提供符合一致性设计模式的公共方法将内部域暴露成员属性。在业内众所周知,属性名称符合的这种模式,其他Java类可以通过自身机制发现和操作这些JavaBean属性。

2.JavaBean的特点

按照Sun公司的定义,JavaBean是一个可以重复使用的软件组件。实际上JavaBean是一种Java类,通过封装属性和方法成为一种具有某种功能或者处理某个业务的对象,简称bean。由于JavaBean是基于Java语言的,因此JavaBean不依赖平台,且具有以下特点。

可以实现代码的重复利用
易编写、易维护、易使用
可以在任何安装了Java运行环境的平台上使用,而不需要重新编译。

编写JavaBean就是编写一个Java类,所以您只要会写类就能编写一个bean,这个类创建的一个对象称作一个bean。为了能让这个bean的应用构建工具(比如JSP引擎)知道这个bean的属性和方法,需要在类的方法命名上遵循以下规则。

如果类的成员变量的名字是person,那么为了更改或获取成员变量的值,即更改或获取属性,在类中可以使用两种方法:getPerson(),用来获取属性person;setPerson(),用来修改属性person。
对于boolean类型的成员变量,即布尔逻辑类型的属性,允许使用is代替上面的get和set。
类中方法的访问属性都必须是public的。
类中如果有构造方法的话,那么这个构造方法必须是public的并且是无参数的。

3.JavaB的属性

JavaBean的属性与一般Java程序中所指的属性,或者说与所有面向对象的程序设计语言中对象的属性的概念是一个概念,在程序中的具体体现就是类中的变量。属性分为四类:即单值、索引、关联和约束属性。

1.单值属性

单值属性是最普通的属性类型,该类属性只有一个单一的数据值,该数据值的数据类型可以是Java中的任意数据类型,包括类的和接口等类型。
定义了属性,还需要定义对应的访问方法,一般每个单值属性都伴随一对get/set方法。属性名与该属性相关的get/set方法名对应。例如有一个dog的属性,则会有setDog和getDog方法。
另外,布尔属性是一种特殊的单值属性,它只有两个允许值:true和false,如果有一个名为dog的布尔属性,则可以通过isDog方法访问。

2.索引属性

索引属性是指JavaBean中数组的成员变量。使用与该属性对应的set/get方法可以得到数组的值。索引属性通过对应的访问方法设置或取得该属性中某个元素的值,也可以一次设置或取得整个属性的值。如果需要定义一批同类型的属性,使用单值属性就会显得非常烦琐,为解决此问题,JavaBean中提供了索引属性。

3.关联属性

关联属性是指当该种属性的值发生变化时,要通知其他的对象。每次属性值改变时,这种属性就触发一个PropertyChange事件。事件中封装了属性名、属性的原值和属性变化后的新值。这种事件传递到其他的Beans,至于接收事件的Beans应做什么动作,由其自己定义。

4.约束属性

JavaBean的属性如果改变时,相关的外部类对象首先要检查这个属性改变的合理性再决定是否接受这种改变,这样的Bean属性叫约束属性。当约束属性的改变被拒绝时,改变约束属性的方法产生一个约束属性改变异常,通过这个异常处理,JavaBean约束属性还原回来原来的值,并为这个还原操作发送一个新的属性修改通知。
约束属性的改变可能会被拒绝,因此它的set方法(例如setDog( ))与一般其他JavaBean属性的setDog( )有所不同。约束属性方法如下:

public void setDog(dogType newDog) throws PropertyVetoException

4.构造方法

在JavaBean中的函数和过程统称为方法,通过方法来改变和获取上面介绍的各种属性值。方法可以分为构造方法、访问方法和普通方法等。

1.构造方法

JavaBean的构造方法就是对JavaBean的属性及方法进行初始化,即对所定义的属性及方法设一个初始值,构造方法名要和JavaBean的类名相同。比如:

public class TimeShow {

    //定义属性
    private int hour;
    private int minute;

    //构造方法,对属性进行初始化操作,其名字应与bean的名字相同
    public TimeShow () {
        Date now = new Date ();
        hour = now.getHours ();
        minutes = now.getMinutes ();
}
}
2.访问方法

访问方法就是对组件中定义的属性的访问,包括读和写两种访问方式。在定义了Bean的属性,并通过构造的方法将其初始化后,要让其他程序访问Bean的这些属性,就必须为其创建访问方法。
读就是一种用于取出属性的取值函数,即getter;而写则是一种用于设置Bean属性的赋值函数,即setter。比如:

public void setPropertyName(PropertyType value); //给属性赋值,即写方法
publiv PropertyTypep getPropertyName (); //读取属性,即读方法
3.普通方法

除了对属性的访问方法外,还可以在Bean创建一般方法来实现对函数的调用,只要将Bean中的一般方法定义成公有的方法,就可以供其他程序调用。比如:

package jsp..example.mybean;

public class Multiple {
    public int Multi (int j) {
    int x = 1;
    for (int i = 1; i <= j; ++i)
        {x = x * i;}
        return x;
    }
}
下面介绍一下如何在JSP中使用JavaBean

编写一个JavaBean类来计算圆的周长和面积:

1.新建一个CircleBean类来计算圆的周长和半径。代码如下:

package com.ch4;

public class CircleBean {
    private int radius =1;
    
    public CircleBean() {
        
    }
    
    public int getRadius() {
        return radius;
    }
    
    public void setRadius(int rRadius) {
        radius = rRadius;
    }
    
    public double circleLength() {
        return Math.PI*radius*2.0;
    }
    
    public double circleArea() {
        return Math.PI*radius*radius;
    }
}

2.新建一个r_input.jsp文件,用来输入半径,并将半径提交到area_output.jsp。代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.
getServerName() + ":" + request.getServerPort() + path + "/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <base href="<%=basePath%>">
        <title>My JSP 'r_input.jsp' 计算圆的面积</title>
        <meta http-equiv="pragma" content="no-cache">
        <meta http-equiv="cache-control" content="no-cache">
        <meta http-equiv="expires" content="0">
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="This is My Page!">
    </head>
    <body>
        <center>
            <form id="forml" name="forml" method="post" action="area_output.jsp">
            请输入圆的半径:
            <input name="radius" type="text" id="radius" /><br>
            <input type="submit" name="submit" value="开始计算" />
            </form>
        </center>
    </body>
</html>

3.新建一个输出半径、周长和面积的area_output.jsp,利用JavaBean把得到的r赋值给半径,从而得到周长和面积。代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<base href="<%=basePath %>">
<title>My JSP 'area_output.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keywords1, keywords2, keywords3">
<meta http-equiv="pragma" content="no-cache">
<!-- link rel="stylesheet" type="text/css" href="styles.css" -->
</head>
<body>
<jsp:useBean id="circleBean" scope="session" class="com.ch4.CircleBean" />
<center>
<%
    int radius=Integer.parseInt(request.getParameter("radius"));
    out.println("圆的半径是:" + circleBean.getRadius( ) );
    out.println("圆的周长是:" + circleBean.circleLength( ) );
    out.println("圆的面积是:" + circleBean.circleArea( ) );
%>
</center>
</body>
</html>

项目的目录是这样的:

图片.png

最后我们把项目用tomcat跑起来,在浏览器中输入http://localhost:8081/HelloWorld/r_input.jsp。默认的端口号为8080,这里我把8080改为了8081。

图片.png
图片.png

输入半径为1,显示结果就从r_input.jsp跳转到area_output.jsp中。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,493评论 18 399
  • 一. Java基础部分.................................................
    wy_sure阅读 3,774评论 0 11
  • 小编费力收集:给你想要的面试集合 1.C++或Java中的异常处理机制的简单原理和应用。 当JAVA程序违反了JA...
    八爷君阅读 4,544评论 1 114
  • 福彩胆~2~8~ 体彩胆~5~8~ 打底二十五注 585 885 577 171 886 442 772 639 ...
    散文_ae38阅读 180评论 1 2
  • 我亲爱的闺蜜分手了,谈了2年多的感情,分手原因是狗血的性格不合.亲爱的她哭哭啼啼的找到我,哭诉着各种不舍以及恋爱过...
    小七和小猫阅读 336评论 0 6