JavaBeans技术的应用

原创 2004年08月13日 16:17:00
     JavaBeans是一个可重复使用的软件部件,用来生成其进行可视化处理的部件。
 
JavaBeans组件是一个JAVA类,遵循一个接口格式,以便于把类看做标准的JavaBeans组件进行构造。

 JavaBeans的属性

 属性是Bean组件内部状态的抽象表示。JavaBeans的属性可以分为以下四类:

    Simple 简单的

  Indexed 索引的

  Bound 绑定的

  Constrained 约束的

简单属性依赖于标准命名约定来定义getXXX()方法和setXXX()方法。索引属性则允许读取和设置整个数组,也允许使用数组索引单独地读取和设置数组元素。绑定属性则是其值发生变化时要广播给属性变化监听器的属性。约束属性则是那些值发生改变及起作用之前,必须由约束属性变化监听器生效的属性。

1、  Simple 简单属性:表示一个伴随有Get/Set方法的变量。

例程1:[formInput.java]

package Test;

public class formInput{

    String str = new String("New Year");

    public formInput(){

    }

    public void setInput(String str){

        this.str = str;

    }

    public String getInput(){

        return str;

    }

}

2、  Indexed 索引属性:表示一个数组值,可以使用Get/Set方法取得数组中的值。

例程2:[formInput1.java]

package Test;

public class formInput1{

    String b[] = new String[]{

        "5","2","3","4"

    };

    public formInput1(){

    }

    public String[] getInput(){

        return b;

    }

    public void setInput(String[] b){

        this.b = b;

    }

}

3、  Bound 绑定属性:提供一种机制,即通知监听器一个JavaBeans组件的属性发生了改变。

例程3:[boundBean.java]

package Test;

import java.awt.Canvas;

import java.beans.PropertyChangeListener;

import java.beans.PropertyChangeSupport;

public class boundBean extends Canvas{

    String str = "bound Bean";

    private PropertyChangeSupport propertyChange = new PropertyChangeSupport(this);

    public void setString(String newValue){

        String oldValue = str;

        str = newValue;

        propertyChange.firePropertyChange("change value",oldValue,newValue);

    }

    public String getString(){

        return str;

    }

    public void addPropertyChangeListener(PropertyChangeListener propertyChangeListener){

        propertyChange.addPropertyChangeListener(propertyChangeListener);

    }

    public void removePropertyChangeListener(PropertyChangeListener propertyChangeListener){

        propertyChange.removePropertyChangeListener(propertyChangeListener);

    }

}

4、  Constrained 约束属性:与绑定属性类似,但属性值的变化首先要被所有的监听器验证以后,值的变化才能由JavaBeans组件发生作用。

例程4:[constrainedBean.java]

package Test;

import java.beans.PropertyChangeSupport;

import java.beans.PropertyVetoException;

import java.beans.VetoableChangeListener;

import java.beans.VetoableChangeSupport;

public class constrainedBean{

    //实例化一个propertyChange对象

    private PropertyChangeSupport propertyChange = new PropertyChangeSupport(this);

    //实例化一个vetoChange对象

    private VetoableChangeSupport vetoChange = new VetoableChangeSupport(this);

    public void setUsername(String newUsername){

        try{

            String oldUsername=yourName;

            vetoChange.fireVetoableChange("Username",new String(oldUsername),new String(newUsername));

            yourName=newUsername;

            changes.firePropertyChange("Username",new String(oldPriceInCents),new String(newUsername));

        }

        catch(PropertyVetoException e){

            System.err.println(e.getMessage());

        }

        public void addVetoableChangeListener(VetoableChangeListener vetoableChangeListener){

            vetos.addVetoableChangeListener(vetoableChangeListener);

        }

        public void removeVetoableChangeListener(VetoableChangeListener vetoableChangeListener){

            vetos.removeVetoableChangeListener(vetoableChangeListener);

        }

    }

}

 

JavaBeans的应用

1、  猜数字

目的:程序指定一个1~100之间的某一个自然数,然后用户去猜这个数的值是多少。程序会根据用户的输入值,做出相应的信息提示。

代码:

[numguess.jsp]

<%@ page contentType="text/html;charset=gb2312" %>

<jsp:useBean id="numguess" class="Test.NumGuessBean" scope="session" />

<jsp:setProperty name="numguess" property="*" />

<html>

<head>

<title>Number Guess</title>

</head>

<body>

<font size=4>

<% if(numguess.getSuccess()){ %>

Congratulations! You got it.

And after just <%= numguess.getNumGuesses() %>tries.<p>

<% numguess.reset(); %>

Care to <a href="numguess.jsp">try again</a>?

<% }

else if(numguess.getNumGuesses() == 0){ %>

Welcome to the Number Guess Game.<p>

I'm thinking of a number between 1 and 100.<p>

<form method="get">

What's your guess?<input type=text name="guess">

<input type="submit" value="Submit">

</form>

<% } else { %>

Good guess,but nope. Try <b><%= numguess.getHint() %></b>

You have made <%= numguess.getNumGuesses() %> guesses.<p>

I'm thinking of a number between 1 and 100.<p>

<form method="get">

What's your guess?<input type=text name="guess">

<input type="submit" value="Submit">

</form>

<% } %>

</font>

</body>

</html>

该程序用到一个Bean,代码:

[NumGuessBean.java]

package Test;

import java.util.*;

public class NumGuessBean{

    int answer;

    boolean success;

    String hint;

    int numGuesses;

    public NumGuessBean(){

        reset();

    }

    public void setGuess(String guess){

        numGuesses++;

        int g;

        try{

            g = Integer.parseInt(guess);

        }

        catch(NumberFormatException e){

            g = -1;

        }

        if(g == answer){

            success = true;

        }

        else if(g == -1){

            hint = "a number next time";

        }

        else if(g < answer){

            hint = "higher";

        }

        else if(g > answer){

            hint = "lower";

        }

    }

    public boolean getSuccess(){

        return success;

    }

    public String getHint(){

        return "" + hint;

    }

    public int getNumGuesses(){

        return numGuesses;

    }

    public void reset(){

        answer = Math.abs(new Random().nextInt() % 100) + 1;

        success = false;

        numGuesses =0;

    }

}

2、  封装数据库

目的:用JavaBeans封装数据库操作。采用的数据库是SQL Server。

步骤:首先,建立数据库Vote,在其中建立表voter和result.

voter的作用是存放投票人的资料,其结构为:

字段名

描述

数据类型

id

自动

Int

Candidate

投票的公司

Varchar

voter_name

投票人姓名

Varchar

voter_company

投票人所在的公司

Varchar

voter_country

投票人所在的国家

Varchar

ip_address

投票人的IP地址

Varchar

vote_time

投票时间

datetime

result的作用是存放候选人的票数,其结构为:

字段名

描述

数据类型

id

自动

Int

candidate

候选公司

Varchar

vote_num

票数

int

建立完数据库后,在ODBC数据源管理器中加入系统DSN,取名vote

创建一个JavaBeans,取名为conn.java

代码:

package vote;

import java.sql.*;

public class conn{

    String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";

    String sConnStr = "jdbc:odbc:vote";

    Connection connect = null;

    ResultSet rs = null;

    public conn(){

        try{

            Class.forName(sDBDriver);

        }

        catch(java.lang.ClassNotFoundException e){

            System.err.println(e.getMessage());

        }

    }

    public ResultSet executeQuery(String sql){

        rs = null;

        try{

            connect = DriverManager.getConnection(sConnStr);

            Statement stmt = connect.createStatement();

            rs = stmt.executeQuery(sql);

        }

        catch(SQLException ex){

            System.err.println(ex.getMessage());

        }

        return rs;

    }

}

编译后放置在应用服务器/WEB_INF/classes/vote目录下。

页面代码:[show.jsp]

<%@ page contentType="text/html;charset=gb2312" %>

<%@ page language="java" import="java.sql.*" %>

<jsp:useBean id="voteBean" scope="page" class="vote.conn" />

<html>

<head>

<title>当前票数统计</title>

<meta http-equiv="refresh" content="10;URL=show.jsp">

</head>

<body align=center>

<h1><b>当前票数统计</b></h1>

<table width="60%" border=1>

    <tr bgcolor="#ccccff" align=center>

        <td width="51%"><font color="#ff0033"><b>候选公司名</b></font></td>

        <td width="49%"><font color="#ff0033"><b>当前票数</b></font></td>

    </tr>

    <%

    ResultSet RS_result;

    RS_result = voteBean.executeQuery("select * from result");

    String companyName;

    int voteNum;

    while(RS_result.next()){

    companyName = RS_result.getString("candidate");

    voteNum = RS_result.getInt("vote_num");

    %>

    <tr align=center>

        <td><%=companyName%></td>

        <td><%=voteNum%></td>

    </tr>

    <%

    }

    RS_result.close();

    %>

</table>

<hr>

<h2><b>投票人的详细信息</b></h2>

<table width="100%" border="1">

    <tr bgcolor="#ffcccc" align="center">

        <td><font color="#0000ff"><b>投票的公司</b></font></td>

        <td><font color="#0000ff"><b>投票人姓名</b></font></td>

        <td><font color="#0000ff"><b>投票人所在的公司</b></font></td>

        <td><font color="#0000ff"><b>投票人所在的国家</b></font></td>

        <td><font color="#0000ff"><b>投票人的IP地址</b></font></td>

        <td><font color="#0000ff"><b>投票时间</b></font></td>

    </tr>

    <%

    ResultSet RS_voter;

    RS_voter = voteBean.executeQuery("select * from voter");

    String candidate,voterName,voterCompany,voterCountry,ipAddress;

    java.util.Date voteTime;

    while(RS_voter.next()){

    candidate = RS_voter.getString("candidate");

    voterName = RS_voter.getString("voter_name");

    voterCompany = RS_voter.getString("voter_company");

    voterCountry = RS_voter.getString("voter_country");

    ipAddress = RS_voter.getString("ip_address");

    voteTime = RS_voter.getDate("vote_time");

    %>

    <tr>

        <td>&nbsp;<%=candidate%></td>

        <td>&nbsp;<%=voterName%></td>

        <td>&nbsp;<%=voterCompany%></td>

        <td>&nbsp;<%=voterCountry%></td>

        <td>&nbsp;<%=ipAddress%></td>

        <td>&nbsp;<%=voteTime%></td>

    </tr>

    <%

    }

    RS_voter.close();

    %>

</table>

</body>

</html>

JavaBeans及其使用方式,作用域范围

一、什么是javabean 1、Javabeans就是符合某种特定规范Java类。使用Javabeans的好处是【解决代码的重复编写】,减少代码冗余,功能区分明确,提高代码的维护性。 2、设计原则...
  • u014038534
  • u014038534
  • 2016年01月18日 22:00
  • 2939

[基础规范]JavaBeans规范

维基百科中javaBeans的解释。
  • sushengmiyan
  • sushengmiyan
  • 2014年10月21日 15:34
  • 3182

黑马程序员_Java高新技术3(框架,JavaBeans与内省(Introspector)) - 伊秋

1.Java框架(frame) /* 通俗例子: 我做房子(框架)卖给用户住,由用户自己安装门窗和空调(用户自定义类/用户自定义其它信息) 用户需要使用我的房子(框架),把符合框架中...
  • wangshfa
  • wangshfa
  • 2014年05月05日 16:19
  • 1888

java技术及其应用第9章 JavaBeans及组件应用

  • 2013年11月30日 14:52
  • 588KB
  • 下载

JavaBeans在JSP中的应用

JavaBeans的定义为了在web应用程序中的代码重用和分层的简化而在jsp网页中使用的组件,且符合了一些特定约定的类。 这些约定是:   该类为公共类,具有无参的构造方法。   该类的属性为...
  • a271256939
  • a271256939
  • 2017年12月26日 20:47
  • 22

重叠构造器+JAVABeans模式->Builder模式

考虑一个类表示包装食品的营养成分标签,这些标签有些是必要的,如每份的含量,还有超过20个可选域:卡路里,蛋白质,总脂肪量,饱和脂肪量,胆固醇,钠,钙等等。大多数产品在可选域中都会有非零值。 对于这样...
  • helingheling123
  • helingheling123
  • 2017年12月25日 18:03
  • 19

JavaBean-XML组件轻松实现JavaBeans到XML的相互转换

不用复杂的代码,就可以让您的javaBeans自己控制到xml文件的相互转化。本文展示了怎样通过写组件来实现从JavaBeans到XML文件的相互转换。    为了灵活的满足Web应用和Web se...
  • boolean2011
  • boolean2011
  • 2012年01月31日 07:31
  • 132

JavaBeans的使用

  • DevelopAndroid
  • DevelopAndroid
  • 2015年08月09日 04:47
  • 325

JAF(JavaBeans Activation Framework)

--------http://blog.sina.com.cn/s/blog_61583c540100dw42.html JAF(JavaBeans Activation Framewo...
  • u014133453
  • u014133453
  • 2014年03月20日 21:17
  • 792

Domain Object as JavaBeans Property

在Struts2中数据转化为域对象是通过param拦截器自动进行的。 你仅仅需要创建一个域对象做为一个javabean的属性并且实现相应的setter和getter方法。 框架会自动初始化域对象并...
  • zclandzzq
  • zclandzzq
  • 2011年12月28日 09:24
  • 435
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JavaBeans技术的应用
举报原因:
原因补充:

(最多只允许输入30个字)