=====================================
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实例的名称,必须和之前使用
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"%>
to.jsp
<%@ page language="java" contentType="text/html;charset=GBK"%>
<%
out.print(student.getName() + "
“);
out.print(student.getAge() + “
“);
out.print(student.getSex() + “
“);
out.print(student.getScore() + “
“);
%>
=====================================
Sorry, the comment form is closed at this time.
No comments yet.