在JSP网页中,既可以通过程序代码来访问JavaBean,也可以通过特定的JSP标签来访问JavaBean。采用后一种方法,可以减少JSP网页中的程序代码,使他更接近与HTML页面。下面介绍访问JavaBean的JSP标签。
1.导入JavaBean类
如果在JSP网页中访问JavaBean,首先要通过< page import gt; 指令引入Java类。
2.声明JavaBean对象
<jsp:useBean>标签用来声明JavaBean对象,例如:
<jsp:useBean id="myBean" class="com.xdl.bean.BeanDemo" scope="session" />
上述代码声明了一个名字为"BeanDemo"的JavaBean对象,<jsp:useBean>标签具有以下属性:
id属性:代表JavaBean对象的ID,实际上表示引用JavaBean对象的局部变量名,以及存放在特定范围内的属性名。JSP规范要求存放在所有范围内的每个JavaBean对象都有唯一的ID,例如不允许在会话范围内存在两个ID为"BeanDemo"的JavaBean,也不允许在会话范围和请求范围内分别存在ID为"BeanDemo"的JavaBean。
class属性:用来指定JavaBean的类名。
scope属性:用来指定JavaBean对象的存放范围,可选值包括page(页面范围)、request(请求范围)、session(会话范围)和application(Web应用范围)。scope属性的默认值为page,范例中的scope属性取值为"session",表示会话范围。
以上实例代码中的<jsp:useBean>标签的处理流程如下:
(1)定义一个名为myBean的局部变量。
(2)尝试从scope指定的会话范围内读取名为" myBean"的属性,并且使得myBean局部变量引用具体的属性值,即BeanDemo对象。
(3)如果在scope指定的会话范围内,名为"myBean"的属性不存在,那么久通过BeanDemo类的默认构造方法创建一个BeanDemo对象,并把它存放在会话范围内,令其属性名为"myBean",此外,myBean局部变量也引用这个BeanDemo对象。
3.访问JavaBean属性
JSP提供了访问JavaBean属性的标签,如果要将JavaBean的某个属性输出到网页上,可以用<jsp:getProperty>标签,例如:
<jsp:getProperty name="myBean" property="count" />
以上<jsp:getProperty>标签根据name属性的值"myBean"找到由<jsp:useBean>标签声明的ID为"myBean"的CounterBean对象,然后打印它的count属性,它等价于以下Java表达式:
<myBean.getCount() gt;
Servlet容器在运行<jsp:getProperty>标签时,会根据property属性指定的属性名,自动调用JavaBean的相应的get方法。属性名和get方法之间存在固定的对应关系。如果在JavaBean中不存在get方法时,那么Servlet容器在运行<jsp:getProperty>标签时就会抛出异常。由此尅安,只有开发人员创建的JavaBean类严格遵守JavaBean的规范,才能保证JSP中的访问JavaBean的标签能正常运行。
如果要给JavaBean的某个属性赋值,可以使用<jsp:setProperty>标签,例如:
<jsp:setProperty name="myBean" property="count" value="1" />
以上<jsp:setProperty>标签根据name属性的值"myBean",找到由<jsp:useBean>标签声明的ID为"myBean"的BeanDemo对象,然后给它的count属性赋值。
值得注意的是,如果一个JSP文件通过<jsp:setProperty>或<jsp:getProperty>标签访问一个JavaBean的属性,要求改JSP文件先通过<jsp:useBean>标签声明这个JavaBean,否则<jsp:setProperty>和<jsp:getProperty>标签在运行时会抛出异常。