第五章——JSP 与 Java bean

本文介绍了JavaBean的编写规则,包括属性、构造方法和访问器。讲解了如何在JSP中使用JavaBean,如创建、设置与获取属性,并通过实际例子展示了三角形bean、四则运算bean、浏览图像bean、日历bean和计数器bean的应用。此外,还提到了bean的辅助类如Introspector和PropertyDescriptor。
摘要由CSDN通过智能技术生成

目录
前言
5.1 编写JavaBean和使用JavaBean
5.1.1 编写JavaBean
5.1.2 保存bean的字节码
5.1.3 创建与使用bean
5.2 获取和修改bean的属性
5.2.1 getProperty动作标记
5.2.2 setProperty动作标记
5.3 bean的辅助类
5.4 JSP与bean结合的简单例子
5.4.1 三角形bean
5.4.2 四则运算bean
5.4.3 浏览图像bean
5.4.4 日历bean
5.4.5 计数器bean
总结
前言
JavaBean是一种JAVA语言写成的可重用组件。JavaBean可以用于封装数据、处理事务、提供用户界面等功能。本章我们将介绍JavaBean,以及一些JSP与JavaBean结合的简单例子。

5.1 编写JavaBean和使用JavaBean
5.1.1 编写JavaBean
要编写一个JavaBean,需要遵循以下规则:

JavaBean必须是一个具体的和公共的类,不能是抽象类或接口。
JavaBean必须提供一个无参的构造方法,以便其他程序可以实例化它。
JavaBean的属性必须是私有的,不能直接被外部访问。
JavaBean必须提供符合一致性设计模式的公共方法,来暴露其属性给外部。这些方法通常称为属性访问器(getter)和属性修改器(setter)。属性访问器以get或is开头,后跟属性名的首字母大写;属性修改器以set开头,后跟属性名的首字母大写。
例如,下面是一个简单的JavaBean类,它封装了一个人的姓名、年龄和性别:

package com.example.bean;

public class Person {
    //私有属性
    private String name;
    private int age;
    private String gender;

    //无参构造方法
    public Person() {

    }

    //属性访问器和修改器
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }
}


5.1.2 保存bean的字节码
编写好JavaBean类后,需要将其编译成字节码文件,并保存在WEB-INF/classes目录下。如果JavaBean类属于某个包,则需要在WEB-INF/classes目录下创建相应的包结构,并将字节码文件放在对应的包目录下。

例如,上面编写的Person类属于com.example.bean包,则需要在WEB-INF/classes目录下创建com/example/bean目录,并将Person.class文件放在该目录下。

5.1.3 创建与使用bean
在JSP页面中,可以使用jsp:useBean标签来创建或查找一个JavaBean实例²。该标签有以下常用属性²:

id:指定JavaBean实例的引用名称和存储名称。
class:指定JavaBean类的完整类名(包括包名)。
scope:指定JavaBean实例存储的域范围,可以是page、request、session或application中的一个,默认是page。
该标签的作用是,在指定的域范围内查找指定id名称的JavaBean实例,如果存在则返回该实例的引用;如果不存在则根据指定的class创建一个新的实例,并将其存储在指定的域范围内,并返回该实例的引用²。

例如,在JSP页面中使用以下代码:

<jsp:useBean id="person" class="com.example.bean.Person" scope="page"/>

则表示,在page域范围内查找id为person的JavaBean实例,如果存在则返回该实例的引用;如果不存在则根据com.example.bean.Person类创建一个新的实例,并将其存储在page域范围内,并返回该实例的引用。

创建或查找到JavaBean实例后,可以使用jsp:setProperty标签和jsp:getProperty标签来设置或获取其属性值²。这两个标签都有以下常用属性:

name:指定要操作的JavaBean实例的id名称。
property:指定要操作的JavaBean属性名称。
value:指定要设置给JavaBean属性的值(仅对jsp:setProperty标签有效)。
例如,在JSP页面中使用以下代码:

<jsp:setProperty name="person" property="name" value="Tom"/>
<jsp:setProperty name="person" property="age" value="18"/>
<jsp:setProperty name="person" property="gender" value="male"/>

则表示,将person实例的name属性设置为Tom,age属性设置为18,gender属性设置为male。

<jsp:getProperty name="person" property="name"/>
<jsp:getProperty name="person" property="age"/>
<jsp:getProperty name="person" property="gender"/>

则表示,输出person实例的name、age和gender属性值。

5.2 获取和修改bean的属性
5.2.1 getProperty动作标记
getProperty动作标记用于获取一个bean对象中某个属性值,并将其输出到当前位置。getProperty动作标记有以下常用属性:

name:指定要操作的bean对象id名称。
property:指定要操作bean对象中某个具体属性名称。
例如,在JSP页面中使用以下代码:

<jsp:useBean id="person" class="com.example.bean.Person" scope="page"/>
<jsp:setProperty name="person" property="name" value="Tom"/>
<p>姓名:<jsp:getProperty name="person" property="name"/></p>

则表示,在page域范围内创建或查找id为person

5.2.2 setProperty动作标记
setProperty动作标记用于设置一个bean对象中某个属性的值。setProperty动作标记有以下常用属性³:

name:指定要操作的bean对象id名称。
property:指定要操作bean对象中某个具体属性名称。
value:指定要设置给bean属性的值。
例如,在JSP页面中使用以下代码:

<jsp:useBean id="person" class="com.example.bean.Person" scope="page"/>
<jsp:setProperty name="person" property="name" value="Tom"/>
<p>姓名:<jsp:getProperty name="person" property="name"/></p>

则表示,将person对象的name属性设置为Tom,并输出其值。

setProperty动作标记还可以使用param属性来指定一个请求参数的名称,该参数的值将被设置给bean属性³。例如,在JSP页面中使用以下代码:

<jsp:useBean id="person" class="com.example.bean.Person" scope="page"/>
<jsp:setProperty name="person" property="name" param="username"/>
<p>姓名:<jsp:getProperty name="person" property="name"/></p>

则表示,将person对象的name属性设置为请求参数username的值,并输出其值。

如果property属性的值为*,则表示将所有与bean属性同名的请求参数的值设置给bean属性。例如,在JSP页面中使用以下代码:

<jsp:useBean id="person" class="com.example.bean.Person" scope="page"/>
<jsp:setProperty name="person" property="*"/>
<p>姓名:<jsp:getProperty name="person" property="name"/></p>
<p>年龄:<jsp:getProperty name="person" property="age"/></p>
<p>性别:<jsp:getProperty name="person" property="gender"/></p>

则表示,将所有与person对象属性同名的请求参数的值设置给person对象属性,并输出其值。

5.3 bean的辅助类
bean的辅助类包括Introspector、PropertyDescriptor和BeanInfo等。其中,Introspector类主要用于获取bean的属性描述符,PropertyDescriptor类描述bean的属性类型,BeanInfo类写bean的信息。

5.4 JSP与bean结合的简单例子
下面基于5.4节的Javabean例子,介绍一下Javabean在JSP中的使用方法。

5.4.1 三角形bean
public class TriangleBean {
    private double width;   //宽
    private double height;  //高
    private double area;    //面积
    public TriangleBean() {} //空构造方法
    //计算三角形面积
    public void calculateTriangleArea(){
        area = width * height / 2;
    }
    //获取三角形面积
    public double getArea() {  
        return area;
    }
    //设置宽
    public void setWidth(double width) {
        this.width = width;
    }
    //设置高
    public void setHeight(double height) {
        this.height = height;
    }
}


在JSP页面中通过<jsp:useBean>标记创建一个三角形对象,并设置它的宽和高,并且在页面中使用<jsp:setProperty>标记给宽高属性赋值,最后计算面积并显示。

<jsp:useBean id="triangle" class="com.test.TriangleBean"/>
<jsp:setProperty name="triangle" property="width" value="10"/>
<jsp:setProperty name="triangle" property="height" value="5"/>
<jsp:scriptlet>
    triangle.calculateTriangleArea();
</jsp:scriptlet>
三角形面积: <%= triangle.getArea() %>

5.4.2 四则运算bean
public class ArithmeticBean {
    private int a;
    private int b;
    private int result;
    public ArithmeticBean() {}   //空构造方法
    //计算加法
    public void add() {
        result = a + b;
    }
    //计算减法
    public void subtract() {
        result = a - b;
    }
    //计算乘法
    public void multiply() {
        result = a * b;
    }
    //计算除法
    public void divide() {
        result = a / b;
    }
    //获取结果
    public int getResult() {  
        return result;
    }
    //设置参数a
    public void setA(int a) {
        this.a = a;
    }
    //设置参数b
    public void setB(int b) {
        this.b = b;
    }
}


在JSP页面中通过<jsp:useBean>标记创建一个四则运算对象,并且在页面中使用<jsp:setProperty>标记给参数a和b赋值,然后使用<jsp:scriptlet>中的表达式计算并显示结果。

<jsp:useBean id="arithmetic" class="com.test.ArithmeticBean"/>
<jsp:setProperty name="arithmetic" property="a" value="10"/>
<jsp:setProperty name="arithmetic" property="b" value="5"/>
<jsp:scriptlet>
    arithmetic.add();
</jsp:scriptlet>
加法: <%= arithmetic.getResult() %><br/>
<jsp:scriptlet>
    arithmetic.subtract();
</jsp:scriptlet>
减法: <%= arithmetic.getResult() %><br/>
<jsp:scriptlet>
    arithmetic.multiply();
</jsp:scriptlet>
乘法: <%= arithmetic.getResult() %><br/>
<jsp:scriptlet>
    arithmetic.divide();
</jsp:scriptlet>
除法: <%= arithmetic.getResult() %><br/>


5.4.3 浏览图像bean
public class ImageBean {
    private String src; //图片文件路径
    private String alt; //图片说明
    public ImageBean() {}
    //获取图片文件路径
    public String getSrc() {  
        return src;
    }
    //设置图片文件路径
    public void setSrc(String src) {
        this.src = src;
    }
    //获取图片说明
    public String getAlt() {  
        return alt;
    }
    //设置图片说明
    public void setAlt(String alt) {
        this.alt = alt;
    }
}


在JSP页面中通过<jsp:useBean>标记创建一个图像对象,并且设置图片文件路径和图片说明,最后使用<img>标签显示图片。

<jsp:useBean id="imgBean" class="com.test.ImageBean"/>
<jsp:setProperty name="imgBean" property="src" value="images/test.jpg"/>
<jsp:setProperty name="imgBean" property="alt" value="测试图片"/>
<img src="<%= imgBean.getSrc() %>" alt="<%= imgBean.getAlt() %>"/>

5.4.4 日历bean
public class CalendarBean {
    private Calendar calendar = Calendar.getInstance();
    public CalendarBean() {}   //空构造方法
    //获取年份
    public int getYear() {
        return calendar.get(Calendar.YEAR);
    }
    //获取月份
    public int getMonth() {
        return calendar.get(Calendar.MONTH) + 1;
    }
    //获取日期
    public int getDate() {
        return calendar.get(Calendar.DATE);
    }
    //获取星期
    public int getWeek() {
        return calendar.get(Calendar.DAY_OF_WEEK) - 1;
    }
    //下一个月
    public void nextMonth() {
        calendar.add(Calendar.MONTH, 1);
    }
    //上一个月
    public void prevMonth() {
        calendar.add(Calendar.MONTH, -1);
    }
}


在JSP页面中通过<jsp:useBean>标记创建一个日历对象,并且使用脚本语言JavaScript调用nextMonth和prevMonth方法改变月份,最后在页面中使用表格显示当月的日历。

<jsp:useBean id="calendar" class="com.test.CalendarBean"/>
<table border="1">
  <thead>
    <tr>
      <th colspan="7">
        <a href="javascript: void(0);" οnclick="<%= "calendar.prevMonth();" %>">&lt;</a>
        <%= calendar.getYear() %>年<%= calendar.getMonth() %>月
        <a href="javascript: void(0);" οnclick="<%= "calendar.nextMonth();" %>">&gt;</a>
      </th>
    </tr>
    <tr>
      <th>日</th>
      <th>一</th>
      <th>二</th>
      <th>三</th>
      <th>四</th>
      <th>五</th>
      <th>六</th>
    </tr>
  </thead>
  <tbody>
    <%  
      int week = calendar.getWeek();
      int date = calendar.getDate();
      int daysOfMonth = calendar.calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
      for (int i=0; i<6; i++) {
    %>
      <tr>
        <% for (int j=0; j<7; j++) { %>
          <td>
            <% if (i == 0 && j < week || date > daysOfMonth) { %>
              &nbsp;
            <% } else { %>
              <%= date %>
              <% date++; %>
            <% } %>
          </td>
        <% } %>
      </tr>
    <% } %>
  </tbody>
</table>


5.4.5 计数器bean
public class CounterBean {
    private int count;  //计数器
    public CounterBean() {}   //空构造方法
    //增加计数器的值
    public void increment() {
        count++;
    }
    //获取计数器的值
    public int getCount() {  
        return count;
    }
}

在JSP页面中通过<jsp:useBean>标记创建一个计数器对象,并且使用脚本语言JavaScript调用increment方法增加计数器的值,最后在页面中显示计数器的值。

<jsp:useBean id="counter" class="com.test.CounterBean"/>
当前计数器的值:<%= counter.getCount() %>
<a href="#" οnclick="<%= "counter.increment();" %>">增加</a>
总结
本篇博客主要介绍了Javabean的编写和使用方法,以及如何在JSP中使用Javabean。我们还讨论了如何获取和修改bean的属性,以及Javabean的辅助类。最后,通过五个简单的例子展示了Javabean在WEB应用程序中的应用。
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值