Wed应用开发——JavaBean(学习笔记)

曹凯欣 2022-11-13 11:39:20

JavaBean

定义

JavaBean是遵循一定标准、用Java语言编写的一个类,该类的一个实例称为一个JavaBean,称Bean。JavaBean具有可重用、升级方便,不依赖平台等特点。JavaBean又可以分为封装逻辑的JavaBean和封装数据的JavaBean。封装逻辑的JavaBean用于封装业务逻辑,数据库操作;封装数据的JavaBeann用于封装数据。

JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,set和get方法获取。众所周知,属性名称符合这种模式,其他Java 类可以通过自省机制(反射机制)发现和操作这些JavaBean 的属性。

简单来说,编写一个javabean就是编写一个java类。当然,也不是简单的java类那么简单,还需要遵循以下要求

1.类成员变量必须要有获取和更改其值的方法。拿name属性来书,必须提供以下两种方法

getName():用来获取属性name
setName():用来设置属性name

2.对于boolean类型的成员变量,允许使用is去代替get或是set

3.类中方法的访问权限必须是public

4.如果有构造方法,必须有一个无参构造方法。

//对于Car类来说,必须要有以下构造方法
public Car(){
	// 内容视情况而定,可以不写,也可以直接在这里给成员变量进行赋值
}

组成

属性

JavaBean提供了高层次的属性概念,属性在JavaBean中不只是传统的面向对象的概念里的属性,它同时还得到了属性读取和属性写入的API的支持。属性值可以通过调用适当的bean方法进行。比如,可能bean有一个名字属性,这个属性的值可能需要调用String getName()方法读取,而写入属性值可能要需要调用void setName(String str)的方法。
每个JavaBean属性通常都应该遵循简单的方法命名规则,这样应用程序构造器工具和最终用户才能找到JavaBean提供的属性,然后查询或修改属性值,对bean进行操作。
JavaBean还可以对属性值的改变作出及时的反应。比如一个显示当前时间的JavaBean,如果改变时钟的时区属性,则时钟会立即重画,显示当前指定时区的时间。

方法

JavaBean中的方法就是通常的Java方法,它可以从其他组件或在脚本环境中调用。默认情况下,所有bean的公有方法都可以被外部调用,但bean一般只会引出其公有方法的一个子集。
由于JavaBean本身是Java对象,调用这个对象的方法是与其交互作用的唯一途径。JavaBean严格遵守面向对象的类设计逻辑,不让外部世界访问其任何字段(没有public字段)。这样,方法调用是接触Bean的唯一途径。
但是和普通类不同的是,对有些Bean来说,采用调用实例方法的低级机制并不是操作和使用Bean的主要途径。公开Bean方法在Bean操作中降为辅助地位,因为两个高级Bean特性–属性和事件是与Bean交互作用的更好方式。
因此Bean可以提供要让客户使用的public方法,Bean设计人员希望看到绝大部分Bean的功能反映在属性和事件中,而不是在人工调用和各个方法中。

事件(event)

Bean与其他软件组件交流信息的主要方式是发送和接受事件。
我们可以将bean的事件支持功能看作是集成电路中的输入输出引脚:工程师将引脚连接在一起组成系统,让组件进行通讯。有些引脚用于输入,有些引脚用于输出,相当于事件模型中的发送事件和接收事件。
事件为JavaBean组件提供了一种发送通知给其他组件的方法。在AWT事件模型中,一个事件源可以注册事件监听器对象。当事件源检测到发生了某种事件时,它将调用事件监听器对象中的一个适当的事件处理方法来处理这个事件。

范围(scope)

JavaBean 的范围 Scope 是一个具有生命时间的变量。
JavaBean的范围在<jsp:useBean scope=”….>标志中右边进行表示。将产生一个JavaBean的快捷参考。

说明:jsp服务器引擎将剥离<jsp。。。。标记。并且在最终用户的浏览器上无法显示实际代码。

在Bean中限制HTML的产生:
理论上,JavaBean 将不会产生任何HTML,因为这是jsp层负责的工作;然而,为动态消息提供一些预先准备的格式是非常有用的。产生的HTML将被标注的 JavaBean方法返回。

练习:使用javabean解决中文乱码

CharactorEncoding类

package com.eu.domain;

import java.io.UnsupportedEncodingException;

public class CharactorEncoding {
    public CharactorEncoding(){
    }
    /**
     对字符进行转码处理
     @param str 要转码的字符串
     @return 编码后的字符串
     */
    public String toString(String str){
        String text= "";
        if (str!=null&&!"".equals(str)){
            try {
                text=new String(str.getBytes("ISO-8859-1"),"UTF-8");
            } catch (UnsupportedEncodingException e) {
            }
        }
        return text;
    }
}

Email类

package com.eu.domain;

public class Email {
    private String title;
    private String content;

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }
}

release.jsp

<html>
<head>
    <title>Title</title>
</head>
<body>
<jsp:useBean id="email" class="com.eu.domain.Email"></jsp:useBean>
<jsp:useBean id="encoding" class="com.eu.domain.CharactorEncoding"></jsp:useBean>
<jsp:setProperty name="email" property="*"></jsp:setProperty>
<div align="center">
    <div id="container">
        <div id="title">
            <%=encoding.toString(email.getTitle())%>
        </div>
        <hr>
        <div id="content">
            <%=encoding.toString(email.getContent())%>
        </div>
    </div>
</div>
</body>
</html>

email.jsp

<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="release.jsp" method="post">
    <table align="center" width="450" height="260" border="1">
        <tr>
            <td align="center" colspan="2" height="40"><b>邮件发送</b></td>
        </tr>
        <tr>
            <td align="left">
                标题:<input type="text" name="title">
            </td>
        </tr>
        <tr>
            <td align="left">
                内容:<textarea name="content" rows="8" cols="40"></textarea>
            </td>
        </tr>
        <tr>
            <td align="center" colspan="2">
                <input type="submit" value="发送">
            </td>
        </tr>
    </table>
</form>
</body>
</html>

 

...全文
67 回复 打赏 收藏 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

50

社区成员

发帖
与我相关
我的任务
社区描述
产学研究,学术传承
社区管理员
  • 又菜又爱玩呜呜呜~
  • 两年半的个人练习生^_^
  • yolanda19910002
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧