学习目标
● 理解什么是JavaBean
● 掌握两种JavaBean的封装类
● 掌握在JSP页面上如何使用JavaBean
● 掌握<jsp:useBean>、<jsp:setProperty>、<jsp:getProperty>动作的用法
● 了解MVC设计模式
JavaBean是Java开发语言中一个可以重复使用的软件组件,本质上是一种特殊的Java类,它通常具有如下特点。
(1)JavaBean的类必须是公共的(public)。
(2)它必须具有一个公共的、无参的构造方法。
(3)属性必须是私有的(private)。
(4)可以有一系列的获取方法(getter)或设置方法(setter)去获取或设置JavaBean的属性,通常属性名的首字母应大写。
(5)对于boolean类型的成员变量,允许使用is方法代替获取方法。
JavaBean可分为两种:一种是传统应用中用于实现用户界面(User Interface,UI)的JavaBean;还有一种是主要负责封装数据或封装业务的JavaBean,这也是在Web应用程序中使用的JavaBean。
封装数据的JavaBean负责数据的存取,需要设置多个属性及其属性值的存取方法。如果属性名字是Xxx,则使用getXxx方法来获取属性值;使用setXxx来设置或更改属性值。下面,我们定义一个简单的JavaBean。
例3-1 定义一个简单的JavaBean。
新建一个名为javaWeb的Web项目,在javaWeb工程的文件夹src中创建一个名为model的包,在包下定义一个名为User的类。
User.java文件的内容如下。
这里定义的User类是一个JavaBean,此类中定义了5个属性:userId、userName、password、role、status,并提供了公共的setter方法和getter方法供外界访问这些属性。
JavaBean的属性可以是任意类型,且一个JavaBean可以有多个属性。每个属性通常具有相应的获取方法(getter)或设置方法(setter)。例如,例3-1中userName属性的设置方法为setUserName,password属性的获取方法为getPassword。
封装业务的JavaBean是完成一定运算和操作功能的业务类,主要包含一些实现特定功能的方法,通常与一个封装数据的JavaBean对应。就上述封装数据的JavaBean而言,封装业务的JavaBean用于操作封装数据。比如用于将表单中用户输入的值送入数据库中相应的字段,或者将数据库中的字段值取出并显示在网页中,此时需要一个专门的JavaBean与封装数据的JavaBean配合完成操作。
例3-2 定义封装业务的JavaBean,负责数据库连接及数据库中数据操作的业务流程。
(1)在sample的数据库中创建一个名为userinfo的表,表结构如图3-1所示。
图3-1 userinfo表结构
(2)向该表中插入若干条数据。
(3)在javaWeb工程的文件夹src中创建一个名为util的包,在包下定义一个名为ConnectionManager的类,代码如下。
(4)在javaWeb工程的文件夹src中创建一个名为dao的包,在包下定义一个名为UserDao的类,代码如下。
在JSP的开发中使用JavaBean可以减少重复代码,使整个JSP代码的开发更简洁。JSP提供了3个关于JavaBean组件的动作元素,即JSP标签,它们分别为<jsp:useBean>标签、<jsp:setProperty>标签和<jsp:getProperty>标签。
<jsp:useBean>标签:用于在JSP页面中查找或实例化一个JavaBean组件。
<jsp:setProperty>标签:用于在JSP页面中设置一个JavaBean组件的属性。
<jsp:getProperty>标签:用于在JSP页面中获取一个JavaBean组件的属性。
通过使用<jsp:useBean>,在JSP页面中查找或实例化一个JavaBean组件,语法格式如下。
属性id表示定义的JavaBean的实例名,属性class表示定义的JavaBean类名。属性scope是定义的JavaBean实例的作用域,有4个取值,分别对应4个范围,这4个取值如下。
(1)Page:表示JavaBean实例在当前页面有效。
(2)Application:表示JavaBean实例在项目的各个页面都有效。
(3)Session:表示JavaBean实例在本次会话中有效。
(4)Request:表示JavaBean实例在本次请求中有效。
当定义一个JavaBean时就可以为其属性赋值,可以使用<jsp:setProperty>动作来设置或修改JavaBean的属性值,也可以使用<jsp:getProperty>动作来获取JavaBean的属性值。
通过使用<jsp:setProperty>,为已经实例化的JavaBean的属性赋值,语法格式如下。
当property="*"时,将前端表单的所有标签与JavaBean属性一一对比,若标签的name与属性名相同,则将标签的值赋给JavaBean实例中对应的属性;当property为指定的某个具体属性时,JavaBean实例中只会有该属性被赋值;当property为指定的某个具体属性,value为指定的一个值时,则会将该值赋给JavaBean实例中的该属性,此时前端对应标签的值不会赋给JavaBean实例的对应属性。
通过使用<jsp:getProperty>,可以获取指定的JavaBean的值,语法格式如下。
我们只需要对<jsp:getProperty>与<jsp:setProperty>做一般性了解即可,下面给出一个<jsp:useBean>的示例。
例3-3 对javaWeb工程的web目录下的index.jsp文件进行修改,代码如下。
在例3-3中,我们使用<jsp:useBean>标签在index.jsp页面中实例化了UserDao对象。启动Tomcat服务器,打开“index.jsp”页面,在该页面的第一个文本框中显示“aaa”;在第二个文本框中显示表userinfo中是否有username值为“tom”的记录,若有,则在此文本框中显示“tom”;若没有,则显示“null”;在第三个文本框中显示表userinfo中username值为“tom”的记录中字段userId、userName及password的值。index.jsp页面显示结果如图3-2所示。
图3-2 index.jsp页面显示结果
在封装了数据实体类User与数据访问类UserDao后,那么如何在页面中使用这些类的对象呢?下面我们给出一个JSP与JavaBean结合使用的示例。
例3-4 在JSP页面中对数据表中的数据进行增加、删除、修改及查询操作。
(1)在javaWeb工程中的web文件夹中创建addUser.jsp文件,代码如下。
(2)在web文件夹中创建editUser.jsp文件,代码如下。
(3)在web文件夹中创建userinfo.jsp文件,代码如下。
(4)在web文件夹中创建queryUser.jsp文件,主要代码如下。
(5)启动Tomcat服务器,在浏览器地址栏中输入http://localhost:8080/javaWeb_web/userinfo.jsp,页面显示结果如图3-3所示。
图3-3 userinfo.jsp页面显示结果
(6)在userinfo.jsp页面中单击编号,可以打开editUser.jsp页面,在此页面中可以实现用户信息的修改,如图3-4所示。如何在后台修改用户信息将在后续章节进行讨论。
图3-4 editUser.jsp页面显示结果
(7)在userinfo.jsp页面中单击“删除”按钮将弹出提示框,提示信息为“提示:确定删除此用户?”,但此时单击“确定”按钮并不能真正实现用户数据的删除,如何在后台删除用户数据将在后续章节进行讨论。
(8)在userinfo.jsp页面中单击“增加用户”按钮,可以打开如图3-5所示的页面,实现增加用户操作,如何在后台增加用户将在后续章节进行讨论。
图3-5 增加用户页面
MVC(Model View Controller)是Xerox PARC在20世纪80年代为编程语言Smalltalk-80发明的一种软件设计模式,指的就是模型—视图—控制器。MVC是Model(模型)、View(视图)、Controller(控制器)3个单词的首字母,它是一种成熟的设计模式,并不是Java平台独有的。它将一个应用程序在逻辑上视为3层:负责用户界面的为视图(View)层,负责程序流程控制的为控制器(Controller)层,负责对数据进行建模的为模型(Model)层,如图3-6所示。
图3-6 MVC模式
在Java Web的开发设计中,将显示与业务逻辑分开的模式中,最典型的就是“JSP+JavaBean”模式,这种模式将显示和业务逻辑分开。JSP作为视图层,实现流程控制和页面显示,提供页面为用户展示数据,并通过接收用户请求和调用JavaBean组件来响应用户的请求。JavaBean对象既可以封装数据,又可以处理业务逻辑,主要适合小型Web项目的快速开发。“JSP+JavaBean”模式的工作原理如图3-7所示。
图3-7“JSP+JavaBean”模式的工作原理
这一模式简单易用,解决了显示和业务逻辑分离的问题,和微软推出的动态网页技术ASP有相似之处,但是这种模式中的JSP除了负责页面显示,还需要负责流程控制,业务逻辑显得复杂臃肿,不利于后期维护。
后来出现的“Servlet+JSP+JavaBean”模式,是MVC设计模式的一种实现。主要思想是用一个或多个Servlet作为控制器,请求由Servlet接收后,经Servlet处理后再转发给JSP页面。在Servlet作为控制器时,每个Servlet只完成某一个功能,但多个Servlet组合起来就可以完成复杂的功能,这样就提高了代码的可重用性。在此模式中,JavaBean的功能其实很单一,它只是充当数据实体对象,用来在模型、视图、控制器三个组件之间进行数据传输。MVC的核心是Servlet,JSP只负责输入、输出,它只是一个负责数据显示或数据传递的工具,至于什么时候显示数据,什么时候输入数据则由控制器Servlet来决定。MVC的工作原理如图3-8所示。
图3-8 MVC的工作原理
本章主要讲解了JavaBean在JSP中的应用,首先介绍了JavaBean的定义,其次介绍了两种JavaBean的封装类及语法规则,并介绍了JavaBean在JSP中的使用,并给出用户信息管理示例,最后介绍了MVC设计模式。
1.JavaBean具有哪些特点?它能给JSP开发者带来什么便利?
2.定义JavaBean需要注意哪些规范?
3.与JavaBean相关的动作标记有哪些?
4.简述MVC设计模式。
5.编写一个封装学生基本信息的JavaBean对象,在index.jsp页面中调用该对象,并将学生信息显示到页面中。