06. JavaBean 与 JSP 访问 JavaBean

时间:2021-11-26 19:08:29

JavaBean


1、JavaBean是特殊的Java类,使用 Java 语言书写,并且遵守JavaBean API规范的可重用组件;
以下是 JavaBean API 中的对 JavaBean 类的规范:
  • 提供一个默认的无参构造函数;
  • 需要被序列化并且实现了Serializable接口;
  • 可能有一系列可读写属性;
  • 可能有一系列的"getter"或"setter"方法;

2、JavaBean可以分为2种:
  • 有用户界面(UI)的 JavaBean,比如Swing框架中的各种组件;
  • 没有用户界面的,主要负责事务(数据运算,数据库操作)的 JavaBean,JSP通常访问这种 JavaBean;

3、一个JavaBean由3部分构成:
  • 属性(properties)
JavaBean提供了高层次的属性概念,拥有属性读取和属性写入的API的支持,同时对bean进行操作。JavaBean还可以对属性值的改变作出及时的反应;
  • 方法(method)
对于JavaBean中,外部可调用的方法一般是各种属性的 getter 和 setter 方法,对有 JaveBean 的设计初衷,外部调用 JavaBean 更多依赖于Bean的属性和事件;
  • 事件(event)
Bean与其他软件组件交流信息的主要方式是发送和接受事件,事件为JavaBean组件提供了一种发送通知给其他组件的方法;

4、Java Bean 类的简单示例MessageBean.java : 定义一个储存信息的 Java Bean12345678910111213141516171819202122232425262728


JSP 对 JavaBean 的访问


JSP 中对于 JavaBean 的访问主要是通过<jsp:useBean><jsp:setProperty><jsp:getProperty>这3个动作元素来实现的;

1、JSP 加载/创建 JavaBean实例 

<jsp:useBean> 动作用来加载一个将在JSP页面中使用的JavaBean, 语法格式如下:1
<jsp:useBean id="name" class="package.class" />
<jsp:useBean> 相关属性
class 指定Bean的完整包名。
type 指定将引用该对象变量的类型。
beanName 通过 java.beans.Beans 的 instantiate() 方法指定Bean的名字
如同所有 JSP 动作标签一样,要对<jsp:useBean>指定 id  scope 属性,详见:03. JSP 动作标签在类载入后,可以通过 <jsp:setProperty> 和 <jsp:getProperty> 动作来修改和检索bean的属性;

2、JSP 设置 JavaBean 属性值

<jsp:setProperty>动作用于设置已经实例化的Bean的属性,由2种用法:
① jsp:useBean元素的外面(后面)使用jsp:setProperty, 此时,不管 jsp:useBean 是找到了一个现有的Bean,还是新创建了一个Bean实例,jsp:setProperty 都会执行。 如下所示:
123② 把 jsp:setProperty 放入 jsp:useBean 元素的内部,此时,jsp:setProperty 只有在新建Bean实例时才会执行,如果是使用现有实例则不执行 jsp:setProperty;1
<jsp:useBean id="myName" ... >
2
   ...
3
   <jsp:setProperty name="myName" property="someProperty" .../>
4
</jsp:useBean>
<jsp:setProperty>相关属性
name name属性是必需的。它表示要设置属性的是哪个Bean。
property property属性是必需的。它表示要设置哪个属性。有一个特殊用法:如果property的值是"*",表示所有名字和Bean属性名字匹配的请求参数都将被传递给相应的属性set方法。
value value 属性是可选的。该属性用来指定Bean属性的值。字符串数据会在目标类中通过标准的valueOf方法自动转换成数字、boolean、Boolean、 byte、Byte、char、Character。例如,boolean和Boolean类型的属性值(比如"true")通过 Boolean.valueOf转换,int和Integer类型的属性值(比如"42")通过Integer.valueOf转换。   value和param不能同时使用,但可以使用其中任意一个。
param param 是可选的。它指定用哪个请求参数作为Bean属性的值。如果当前请求没有参数,则什么事情也不做,系统不会把null传递给Bean属性的set方法。因此,你可以让Bean自己提供默认属性值,只有当请求参数明确指定了新值时才修改默认属性值。

3、JSP 获取 JavaBean 属性值 

<jsp:getProperty>动作提取指定Bean属性的值,转换成字符串,然后输出。语法格式如下:123<jsp:getProperty>相关属性
name 要检索的Bean属性名称。Bean必须已定义。
property 表示要提取Bean属性的值

4、简要示例

该例子直接引用以上的示例 JavaBean 类 MessageBean1
<%@ page language="java" contentType="text/html; charset=UTF-8"
2
    pageEncoding="UTF-8"%>
3
<!DOCTYPE html>
4
<html>
5
<head>
6
<meta charset="utf-8">
7
<title>Use Java Bean Test</title>
8
</head>
9
<body>
10
11
<h2>Use Java Bean Test</h2>
12
13
<%--创建Java Bean实例: 可以不指定scope,默认为page --%>
14
<jsp:useBean id="message_bean" class="demo.MessageBean" scope="page" />
15
 
16
<%-- 设置Java Bean的属性值--%>
17
<jsp:setProperty name="message_bean" property="id" value="0113" />
18
<jsp:setProperty name="message_bean" property="message" value="This is Just a test message!" />
19
<jsp:setProperty name="message_bean" property="level" value="3" />
20
 
21
<%--回显Java Bean 的各项属性值 --%>
22
<p>id: 
23
    <jsp:getProperty name="message_bean" property="id" /> 
24
<p>
25
<p>message: 
26
    <jsp:getProperty name="message_bean" property="message" />
27
<p>
28
<p>level: 
29
    <jsp:getProperty name="message_bean" property="level" />
30
<p>
31
32
</body>
33
</html>