购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

第4章
JavaBean技术

JavaBean是一个遵循特定写法的Java类。在Java模型中,通过JavaBean可以无限扩充Java程序的功能,通过JavaBean的组合可以快速生成新的应用程序。JavaBean技术使JSP页面中的业务逻辑变得更加清晰,程序中的实体对象及业务逻辑可以单独封装到Java类中。这样不仅提高了程序的可读性和易维护性,还提高了代码的复用性。

本章主要介绍JavaBean的构成,以及不同类型属性的使用和JavaBean的应用,并详细介绍不同作用域中JavaBean的生命周期。

4.1 JavaBean介绍

4.1.1 JavaBean概述

JavaBean本质上是一个Java类,一个遵循特定规则的类。当在Web程序中使用时,会以组件的形式出现,并完成特定的逻辑处理功能。

使用JavaBean的最大优点在于它可以提高代码的复用性。编写一个成功的JavaBean的宗旨为“一次性编写,任何地方执行,任何地方复用”。

1.一次性编写

一个成功的JavaBean组件复用时不需要重新编写,开发者只需要根据需求修改和升级代码即可。

2.任何地方执行

一个成功的JavaBean组件可以在任何平台上运行,JavaBean是基于Java语言编写的,所以它易于移植到各种运行平台上

3.任何地方复用

一个成功的JavaBean组件能够用于多种方案,包括应用程序、其他组件、Web应用等。

4.1.2 JavaBean的种类

JavaBean按功能可分为可视化JavaBean和不可视JavaBean两类。可视化JavaBean就是具有GUI(图形用户界面)的JavaBean;不可视JavaBean就是没有GUI的JavaBean,最终对用户是不可见的,它更多地被应用在JSP中。

不可视JavaBean又分为值JavaBean和工具JavaBean。

值JavaBean严格遵循了JavaBean的命名规范,通常用来封装表单数据,作为信息的容器,如下面的JavaBean类:

工具JavaBean可以不遵循JavaBean规范,通常用于封装业务逻辑、数据操作等。例如,连接数据库,对数据库进行增、删、改、查,解决中文乱码等操作。工具JavaBean可以实现业务逻辑与页面显示的分离,提高了代码的可读性与易维护性,如下面的代码:

4.1.3 JavaBean的规范

通常一个标准的JavaBean类需要遵循以下规范。

1.实现可序列接口

JavaBean应该直接或间接实现java.io.Serializable接口,以支持序列化机制。

2.公有的无参构造方法

一个JavaBean对象必须拥有一个公有类型以及默认的无参构造方法,从而可以通过new关键字直接对它进行实例化。

3.类的声明是非final类型的

当一个类声明为final类型时,它是不可以更改的,所以JavaBean对象的声明应该是非final类型的。

4.为属性声明访问器

JavaBean中的属性应该设置为私有类型(private),可以防止外部直接访问,它需要提供对应的setXXX()和getXXX()方法来存取类中的属性,方法中的XXX为属性名称,属性的第一个字母应大写。若属性为布尔类型,则可用isXXX()方法代替getXXX()方法。

JavaBean的属性是内部核心的重要信息,当JavaBean被实例化为一个对象时,改变它的属性值也就等于改变了这个Bean的状态。这种状态的改变常常伴随着许多数据处理操作,使得其他相关的属性值也跟着发生变化。

实现java.io.Serializable接口的类实例化的对象被JVM(Java虚拟机)转化为一个字节序列,并且能够将这个字节序列完全恢复为原来的对象,序列化机制可以弥补网络传输中不同操作系统的差异问题。作为JavaBean,对象的序列化也是必需的。使用一个JavaBean时,一般情况下是在设计阶段对它的状态信息进行配置,并在程序启动后期恢复,这种具体工作是由序列化完成的。

4.2 JavaBean的应用

4.2.1 在JSP中访问JavaBean

相信很多开发者都有这样的经历,比如在开发中经常碰到要在网页录入大量信息(如人力资源管理系统、客户关系管理系统),导致JSP页面代码冗余复杂。此时引入JavaBean技术,可以实现HTML代码和Java代码的分离,可以对代码进行复用和封装,极大地提升开发效率,简化JSP页面,使JSP更易于开发和维护。因此,JavaBean成为JSP程序员必备的利器。下面具体来说明如何在JSP中使用JavaBean。

1.导入JavaBean类

通过<%@ page import>指令导入JavaBean类,例如:

     <%@ page import="com.vincent.bean.UserBean" %>

2.声明JavaBean对象

JSP定义了< jsp:useBean>标签用来声明JavaBean对象,例如:

    <jsp:useBean id="user" class="com.vincent.bean.UserBean"
scope="session"></jsp:useBean>

说明: 属性id的值定义了Bean变量,使之能在后面的程序中使用此变量名来分辨不同的Bean,这个变量名对大小写敏感(区分字母大小写),必须符合所使用的脚本语言的规定。如果Bean已经在别的< jsp:useBean>标记中创建,则当使用这个已经创建过的Bean时,id的值必须与原来的id值一致;否则意味着创建了同一个类的两个不同的对象。

定义JavaBean的示例如下:

4.2.2 获取JavaBean的属性信息

JSP提供了访问JavaBean属性的标签,如果要将JavaBean的某个属性输出到页面,可以使用<jsp:getProperty>标签,示例代码如下:

有3点需要重点注意的事项:

· class文件必须位于某个包内。

· Bean文件必须有默认无参构造器。

· class文件必须在WEB-INF/classes目录下。

否则,页面会出现UserBean无法解析的错误。

4.2.3 给JavaBean属性赋值

与获取JavaBean属性类似,JSP也提供了给JavaBean属性赋值的标签<jsp:setProperty>,示例代码如下:

读者可以思考一下,此处为什么要使用include标签,页面加载的顺序是什么?如果使用include指令,会是什么结果?

jsp_properties_2.jsp示例代码如下:

程序执行结果如图4.1所示。

图4.1 B/S体系结构

4.3 在JSP中应用JavaBean

4.3.1 解决中文乱码的JavaBean

在JSP页面中,中文经常会出现乱码的现象,特别是通过表单传递中文数据时。解决办法有很多,如将request的字符集指定为中文字符集,编写JavaBean对乱码字符进行转码等。下面通过实例编写JavaBean对象来解决中文乱码问题。

如果注释掉程序中用粗体标记的那条语句,程序执行时输入中文再显示中文就会出现乱码,如图4.2所示。

图4.2 JavaBean中文乱码

解决中文乱码问题的关键在于设置字符集时保持一致,也就是将request请求字符集和页面字符集保持统一。在系统中,我们常用UTF-8字符集来配置页面和类,以避免出现中文乱码的情况。

4.3.2 在JSP页面中用来显示时间的JavaBean

JavaBean是用Java语言所写的可复用组件,它可以是一个实体类对象,也可以是一个业务逻辑的处理。下面通过实例在JSP页面中调用获取当前时间的JavaBean,实现在网页中创建一个简易的电子时钟。

创建名称为DateBean的类,主要对当前时间、星期进行封装。关键代码如下:

创建名称为jsp_clock.jsp的页面,在页面中实例化DateBean对象,并获取当前日期时间及星期实现电子时钟效果。关键代码如下:

运行效果如图4.3所示。

图4.3 JavaBean显示时间

我们看到,实际上页面显示了时间,但是最后发现页面上的时间不会变化,读者可以思考一下怎样实现时间会不断刷新的电子时钟功能。

4.3.3 数组转换成字符串

在程序开发中,我们经常会碰到需要将数组转换成字符串的情况,如表单中的复选框按钮,在提交之后就是一个数组对象,由于数组对象在业务处理中不方便,因此在实际应用中先将它转换成字符串再进行处理。

创建JavaBean,并封装将数组转换成字符串的方法,代码如下:

创建JSP表单,代码如下:

最后,展示转换后的页面代码如下:

4.4 实践与练习

1.创建一个简单的JavaBean类Student,该类中包含属性name、age和sex,分别表示学生的姓名、年龄和性别。

2.为Student类增加一个属性id,表示学号,在JSP页面中设置一个表单,录入Student类的信息,提交并显示录入的信息。

3.完善4.3.2节中时钟不刷新的问题。

4.在录入Student信息的页面增加学生的兴趣爱好和课程选项,提交并显示录入的信息。 ZuRb5NARs499upek83wDhi+4XIK0oYHEnsLQZKvND77mWroMktxojHIgE2hurOLu

点击中间区域
呼出菜单
上一章
目录
下一章
×