jsp动作指令学习笔记之javaBean的使用

=====================================
javaBean简介
模块化的设计思想首先在硬件及电子技术领域中得到广泛应用。通过模块化的设计,电子产品得以在流水线上通过各种标准化零部件进行组装生产。这种思想逐渐延伸及软件领域,就是基于组件的编程技术。在java世界中,javaBean即是其中一种组件技术。

bean的定义很广泛。bean简单的说是满足两项需求的Java类:
(1)它包含一个无参的构造器;
(2)它利用Serializable接口使之可持续。

看一个简单的示例:

public class Student implements java.io.Serializable{
private String name;
private int age;
private String sex;
private int score;

public Student(){
}

public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}

}

说明:
(1)大多数bean都有属性,这些属性通过专门的读取(getter)和写入(setter)方法来进行访问。一般这些属性都需要设置为private,只能通过getter和setter进行访问,setter和getter是bean向外部显示的唯一渠道。

=====================================
<jsp:useBean>动作
<jsp:useBean>动作元素用来在JSP页面中创建一个bean实例并指定它的名字(id)以及作用范围(scope)。

<jsp:useBean>的语法格式如下:




各个参数的说明:

1.id=”name”
id属性中指定的名字用作指定范围内bean对象属性名的标识符,在JSP页面范围内声明为一个java脚本变量。因为该值是一个脚本变量,大小写敏感,必须符合对标识符的java命名规则。该值用在<jsp:setProperty>、<jsp:getProperty>行为的name属性中指出行为应用中可能的bean。

2.typeDesc可以有如下几种选择:

1).class=”className”
指定Bean的类路径和类名。这个类不能是抽象的,而且必须有一个公用的、没有参数的构造器。

2).beanName=”beanName” type=”typeName”:
使用instantiate方法从一个类中实例化一个Bean,同时还可以指定Bean的类型。

3)type=”typeName”:
指定该Bean的类型。type可以是一个类,也可以是一个类的父类或者是接口,如果没有使用class或beanName指定type,则Bean将不会被实例化。

class=”className”和beanName=”beanName”可以与type=”typeName”配合使用,但不能同时使用class=”className”和beanName=”beanName”。

beanName表示Bean的名字,其形式为”a.b.c”。

<jsp:useBean>用于定位或实例化一个JavaBean组件。<jsp:useBean>首先会试图定位一个Bean实例,如果该Bean实例不存在,那么<jsp:useBean>就会根据class或type的值进行实例化。

另外,<jsp:useBean>标签的主体部分通常包含<jsp:setProperty>标签,用于设置属性的值。例如:




或者





<jsp:useBean>的主体部分仅仅在<jsp:useBean>实例化时才会被执行,如果该Bean已经存在,<jsp:useBean>能够定位它,那么主体中的内容将不再起作用。

3.scope=”page | request | session | application”

表示Bean实例的使用范围以及该实例变量名的有效范围,默认值是page。

1)page:
Bean实例能在包含<jsp:useBean>标签的JSP页面及此页面包含的所有静态文件中被使用,直到该页面执行完毕,向客户端发回响应或者通过某种方式跳转到其他页面为止。它是Bean实例的默认使用范围。

2)request:
Bean实例在相邻的两个页面有效。可以使用request对象访问Bean,例如,request.getAttribute(name)。

3)session:
Bean实例作用于整个session生命周期。可以使用session对象访问该Bean,比如:

session.getAttribute(name);

需要注意的是,如果Bean的scope属性定义为session,那么在创建该Bean的JSP文件中的<%@page%>指令中必须指定session=true,否则会导致致命错误发生。

4)application:
与session类似,从创建Bean实例开始,就可以在任何使用相同application的JSP页面中使用该Bean。application对象在应用服务器启动时就创建了,直到应用服务器关闭。这个Bean实例存在于整个application生存周期内,任何在此共享application的JSP文件都能使用同一个Bean。可以使用application对象访问该Bean对象:


application.getAttribute(name);

同<jsp:useBean>动作相关的另外两个动作元素是<jsp:setProperty>和<jsp:getProperty>。前者用来设置在前面useBean指令中声明的Bean的一个或者多个属性值,后者则返回一个Bean的指定属性值。

=====================================
<jsp:setProperty>动作
<jsp:setProperty>动作元素用来在一个JSP页面中设置已经创建的bean实例的属性值。<jsp:setProperty>标签通过使用Bean给定的setXXX()方法,在Bean中可以设置一个或多个属性值。

语法格式如下:


参数说明:

1.name=”beanName”

name是Bean实例的名称,必须和之前使用引入bean实例时的id值一致。

2.propertyDetails

指定Bean的属性以及属性值,可以是以下几种中的一种。

1)property=”*”

这是一种设置Bean属性的快捷方式。使用该方式,在Bean中的属性的名称、类型必须和request对象中的参数名称和类型匹配。由于从表单传过来的数据类型都是String类型的,JSP内在机制会把这些参数转化成Bean属性对应的类型。

如果request对象的参数中有空值,或者Bean中有一个属性在request对象中没有对应的参数,那么这个属性值将不会被修改。

2)property=”propertyName” param=”parameterName”

使用request对象中指定参数的值来设定Bean中的属性值,request中的参数由param参数指定,Bean中的属性由property指定。

如果request对象的参数为空值,那么这个属性值将不会被修改。

3)property=”propertyName”

使用request对象中指定参数的值来设定Bean中的属性值,是property=”propertyName” param=”parameterName”的简化,适用于Bean的属性名称与request对象的名称一致的情况。

如果request对象的参数为空值,那么这个属性值将不会被修改。

(4)property=”propertyName” value=”propertyValue”

使用指定的值设定Bean的属性,属性由property指定,值由value指定,value可以是字符串,也可以是表达式。

例如:




或者




=====================================
<jsp:getProperty>动作
<jsp:getProperty>动作元素用来获取bean实例的属性的值并将之转化成字符串,然后将其插入到输出的页面中,它与<jsp:setProprty>的作用相反。

getProperty指令的语法格式如下:




1.name=”beanName”

name是Bean实例的名称,必须和之前使用<jsp:useBean>引入Bean实例时的id值一致。

2.property=”propertyName”

被指定的Bean属性名。

例如:





=====================================
一个示例:

from.jsp

<%@ page language="java" pageEncoding="GBK"%>


from.jsp








to.jsp

<%@ page language="java" contentType="text/html;charset=GBK"%>


to.jsp







<% out.print(student.getName() + "
“);
out.print(student.getAge() + “
“);
out.print(student.getSex() + “
“);
out.print(student.getScore() + “
“);
%>


=====================================

此条目发表在java/j2ee分类目录,贴了, , , 标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据