JSP - JavaBean



JavaBean 是一个用 Java 编写并根据 JavaBeans API 规范编码的特殊构造的 Java 类。

以下是将 JavaBean 与其他 Java 类区分开的独特特征:

  • 它提供了一个默认的无参数构造函数。

  • 它应该是可序列化的,并且可以实现 **Serializable** 接口。

  • 它可能具有一些可以读取或写入的属性。

  • 它可能具有一些用于属性的“**getter**”和“**setter**”方法。

JavaBean 属性

JavaBean 属性是可以由对象用户访问的命名属性。该属性可以是任何 Java 数据类型,包括您定义的类。

JavaBean 属性可以是 **只读、可写、只读** 或 **只写**。JavaBean 属性通过 JavaBean 实现类中的两种方法访问:

序号 方法和描述
1

get**PropertyName**()

例如,如果属性名称为 *firstName*,则您的方法名称将为 **getFirstName()** 以读取该属性。此方法称为访问器。

2

set**PropertyName**()

例如,如果属性名称为 *firstName*,则您的方法名称将为 **setFirstName()** 以写入该属性。此方法称为修改器。

只读属性将仅具有 **getPropertyName()** 方法,而只写属性将仅具有 **setPropertyName()** 方法。

JavaBean 示例

考虑一个具有少量属性的学生类:

package com.tutorialspoint;

public class StudentsBean implements java.io.Serializable {
   private String firstName = null;
   private String lastName = null;
   private int age = 0;

   public StudentsBean() {
   }
   public String getFirstName(){
      return firstName;
   }
   public String getLastName(){
      return lastName;
   }
   public int getAge(){
      return age;
   }
   public void setFirstName(String firstName){
      this.firstName = firstName;
   }
   public void setLastName(String lastName){
      this.lastName = lastName;
   }
   public void setAge(Integer age){
      this.age = age;
   }
}

访问 JavaBean

**useBean** 动作声明一个 JavaBean 以在 JSP 中使用。声明后,该 Bean 成为一个脚本变量,可以被 JSP 中使用的脚本元素和其他自定义标签访问。**useBean** 标签的完整语法如下:

<jsp:useBean id = "bean's name" scope = "bean's scope" typeSpec/>

此处,**scope** 属性的值可以是 **page、request、session** 或 **application**,具体取决于您的需求。**id** 属性的值可以是任何值,只要它在同一 JSP 中的其他 **useBean 声明**中是唯一的即可。

以下示例演示如何使用 useBean 动作:

<html>
   <head>
      <title>useBean Example</title>
   </head>
   
   <body>
      <jsp:useBean id = "date" class = "java.util.Date" /> 
      <p>The date/time is <%= date %>
   </body>
</html>

您将收到以下结果:

The date/time is Thu Sep 30 11:18:11 GST 2010 

访问 JavaBean 属性

除了 **<jsp:useBean...>** 动作外,您还可以使用 **<jsp:getProperty/>** 动作访问 get 方法,并使用 **<jsp:setProperty/>** 动作访问 set 方法。以下是完整语法:

<jsp:useBean id = "id" class = "bean's class" scope = "bean's scope">
   <jsp:setProperty name = "bean's id" property = "property name"  
      value = "value"/>
   <jsp:getProperty name = "bean's id" property = "property name"/>
   ...........
</jsp:useBean>

**name** 属性引用之前由 useBean 动作引入 JSP 的 JavaBean 的 id。**property** 属性是应调用的 **get** 或 **set** 方法的名称。

以下示例演示如何使用上述语法访问数据:

<html>
   <head>
      <title>get and set properties Example</title>
   </head>
   
   <body>
      <jsp:useBean id = "students" class = "com.tutorialspoint.StudentsBean"> 
         <jsp:setProperty name = "students" property = "firstName" value = "Zara"/>
         <jsp:setProperty name = "students" property = "lastName" value = "Ali"/>
         <jsp:setProperty name = "students" property = "age" value = "10"/>
      </jsp:useBean>

      <p>Student First Name: 
         <jsp:getProperty name = "students" property = "firstName"/>
      </p>
      
      <p>Student Last Name: 
         <jsp:getProperty name = "students" property = "lastName"/>
      </p>
      
      <p>Student Age: 
         <jsp:getProperty name = "students" property = "age"/>
      </p>

   </body>
</html>

让我们将 **StudentsBean.class** 可用于 CLASSPATH。访问上述 JSP。将显示以下结果:

Student First Name: Zara 

Student Last Name: Ali 

Student Age: 10 
广告