1.1 javabean简介

为什么要引入javabean
JavaBean 是一种 Java 类,它遵循特定的命名约定并实现特定接口和规范。使用 JavaBean 可以将数据封装成对象,这样可以方便地进行操作和管理。引入 JavaBean 的主要目的是为了提高 Java 代码的可维护性和可重用性。

JavaBean 具有以下几个优点:

  1. 封装性:将数据封装在对象内,只暴露必要的属性和方法,屏蔽内部实现细节,提高安全性。

  2. 可重用性:JavaBean 可以被其他程序调用,使得代码具有更好的可重用性,减少了代码的冗余。

  3. 可扩展性:JavaBean 支持继承和多态特性,可以方便地扩展和修改代码,使得代码更加灵活和易于维护。

  4. 规范性:JavaBean 遵循一定的规范,使得代码结构清晰、易读易懂,并且符合 Java 编程的惯例和标准。

  5. 工具支持:JavaBean 可以被各种开发工具支持,如 Eclipse、NetBeans 等,方便编写和调试代码。

因此,引入 JavaBean 可以帮助开发人员更好地组织和管理代码,提高代码的可维护性和可重用性。

javabean的种类
JavaBean是指一种符合特定规范的Java类,它可以用于描述一个可重用的组件。不同类型的JavaBean可以根据其作用和实现方式进行分类,下面是几种常见的JavaBean分类:

1.实体类Bean(Entity Bean):主要用于封装持久化数据的JavaBean。

2.会话Bean(Session Bean):主要用于支持应用程序的业务逻辑处理。

3.消息驱动Bean(Message-Driven Bean):主要用于在分布式系统中处理异步消息。

4.工具类Bean(Utility Bean):主要包含各种工具方法,如日期处理、字符串处理等。

5.显示类Bean(GUI Bean):主要用于实现用户界面组件,如文本框、按钮等。

6.事件类Bean(Event Bean):主要用于封装事件信息,如鼠标点击事件、键盘事件等。

7.配置类Bean(Configuration Bean):主要用于存储应用程序的配置信息,如数据库连接信息、邮件服务器信息等。

8.验证类Bean(Validation Bean):主要用于验证表单输入数据的合法性,如身份证号码、电话号码等。

javabean的设计要求
JavaBean 是一种遵循特定规则的 Java 类,用于构建可重用的组件。它们通常用于表示业务对象,如用户、订单、产品等。

以下是 JavaBean 的设计要求:

  1. 必须提供一个默认的公共构造函数,不带参数,并且没有返回值。

  2. 所有属性必须是私有的,并且必须使用公共 getter 和 setter 方法来访问和修改属性的值。

  3. 属性名必须遵循标准的命名规范,例如:属性 foo 的 getter 方法应该命名为 getFoo(),setter 方法应该命名为 setFoo()。

  4. 应该实现 java.io.Serializable 接口,以允许 JavaBean 实例在网络上进行传输或存储到文件中。

  5. 如果需要,可以提供自定义的序列化和反序列化方法,以便对属性进行更精细的控制。

请注意,这些规则并非硬性要求,您可以根据需要选择性地遵循它们。但是,如果您的类符合这些规则,您将能够利用诸如 IDE 自动生成代码、JavaBean 之间的互操作性等工具和功能。

开发第一个javabean
下面是一个简单的 JavaBean 的示例代码:


public class Person implements Serializable {



  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;

  }



}

这个 JavaBean 表示一个人的基本信息,包括姓名、年龄和性别。它遵循了上面提到的 JavaBean 设计要求,具有默认构造函数、私有属性和公共 getter/setter 方法,并实现了 Serializable 接口。

使用这个 JavaBean 非常简单,您可以创建一个新的 Person 实例并访问其属性:


Person person = new Person();

person.setName("John");

person.setAge(30);

person.setGender("Male");



System.out.println(person.getName()); // 输出 "John"

System.out.println(person.getAge()); // 输出 "30"

System.out.println(person.getGender()); // 输出 "Male"

当然,这只是一个非常简单的示例,实际的 JavaBean 可以更复杂,具有更多的属性和方法。

1.2 javabean应用

如何在jsp中使用javabean

  1. 使用jsp的page指令的import属性导入javabean

可以使用JSP页面指令的import属性导入JavaBean类。通过在 JSP 页面中使用 import 指令,可以将 JavaBean 类添加到 JSP 页面的作用域中,以便在 JSP 页面中访问它们的属性和方法。

下面是一个示例:


<%@ page import="com.example.MyBean" %>



<html>

<head>

  <title>My JSP Page</title>

</head>

<body>

  <%-- 创建一个 MyBean 实例 --%>

  <%

    MyBean myBean = new MyBean();

    myBean.setName("John");

    myBean.setAge(30);

  %>



  <%-- 输出 MyBean 的属性值 --%>

  <p>Name: <%= myBean.getName() %></p>

  <p>Age: <%= myBean.getAge() %></p>

</body>

</html>

在上面的示例中,我们通过在 JSP 页面的顶部使用 import 指令,将 MyBean 类导入到 JSP 页面中。然后,在 JSP 页面中创建了一个 MyBean 实例,并设置了它的属性值。最后,通过在 JSP 页面中使用 <%= ... %> 语法,输出了该实例的属性值。

请注意,如果您使用的是 MVC 模式,通常不会直接在 JSP 页面中创建 JavaBean 实例。而是在 Controller 中创建 JavaBean 实例,并将其添加到请求的属性中,然后在 JSP 页面中使用 EL 表达式获取这些属性值。

  1. 使用jsp提供的jsp:userbean动作标识完成操作

jsp:useBean动作标记用于实例化JavaBean对象,并将其绑定到指定的范围,如request、session或application。下面是一个简单的示例:


<jsp:useBean id="user" class="com.example.User" scope="session"/>

在此示例中,我们创建了一个名为“user”的JavaBean对象,并将其绑定到会话范围。如果当前会话中不存在名为“user”的对象,则该标记将自动调用类的默认构造函数来创建新对象。如果范围中已经存在具有相同名称的对象,则该对象将被重用。

可以使用jsp:setProperty和jsp:getProperty标记来访问JavaBean对象的属性值。例如,在上面的示例中,我们可以通过以下方式设置和获取User对象的属性值:


<jsp:setProperty name="user" property="name" value="John"/>

<jsp:getProperty name="user" property="name"/>

在此示例中,我们将User对象的“name”属性设置为“John”,然后使用jsp:getProperty标记获取该属性的值。

jsp:userbean的语法格式
<jsp:userbean> 是 JSP 标签库中的标签之一,用于在 JSP 页面中声明一个 JavaBean 对象以便在页面中访问该对象的属性和方法。其语法格式如下:


<jsp:useBean id="beanInstanceName" class="fully.qualified.class.name" scope="page|request|session|application" />

其中,参数含义如下:

  • id: 声明的 JavaBean 对象的实例名称。

  • class: 声明的 JavaBean 对象的全限定类名。

  • scope: 声明的 JavaBean 对象的作用域,可选值为 pagerequestsessionapplication

例如,以下代码在 JSP 页面中声明了一个名为 user 的 JavaBean 对象,并将其作用域设为 session


<jsp:useBean id="user" class="com.example.User" scope="session" />

此时,在 JSP 页面的其他部分就可以使用 EL 表达式或 JSP 脚本片段来访问 user 对象的属性和方法了。例如:


<!-- 使用 EL 表达式输出 user 对象的属性值 -->

${user.username}



<!-- 在 JSP 脚本片段中调用 user 对象的方法 -->

<%

    user.login();

%>

1.2.1 javabean与表单

JavaBean是一种特殊的Java类,它遵循了特定的编程规范,包括必须有一个无参构造函数、所有属性必须是私有的并提供公共的getter和setter方法等。JavaBean在开发Web应用中经常被用来表示持久化数据或业务对象。

表单则是Web应用中常见的一种用户交互界面,它通常包含一些输入控件如文本框、下拉框、单选按钮等,用于接收用户输入的数据。这些输入控件的数据通常需要被提交到服务器端进行处理和存储。

当JavaBean和表单结合使用时,JavaBean通常被用来表示表单数据的模型,并通过相应的Getter和Setter方法将表单数据与JavaBean属性进行映射。这样做的好处是可以简化表单数据的处理和验证过程,并提高代码可读性和可维护性。

具体而言,实现表单与JavaBean数据之间的映射可以采用以下三种方式:

  1. 手动映射:即手动编写代码将表单数据赋值给JavaBean属性,或从JavaBean属性中获取数据并展示到表单中。

  2. 使用第三方框架:如Apache Struts、Spring MVC等框架都提供了表单数据绑定的机制,可以自动将表单数据与JavaBean属性进行映射。

  3. 基于注解的映射:可以通过在JavaBean属性上添加特定的注解来实现表单数据与JavaBean属性之间的映射。常见的注解包括@ModelAttribute、@RequestParam等。

总之,通过JavaBean和表单的结合使用,我们可以使Web应用中的表单数据处理更加方便、高效和可维护。

1.2.2 设置属性:jsp:setProperty

jsp:setProperty 标签用于设置 JavaBean 对象的属性值。JavaBean 是一个符合一定规范的 Java 类,它的属性可以通过 get/set 方法来访问和修改。使用 jsp:setProperty 标签可以在 JSP 页面中方便地对 JavaBean 的属性进行赋值。

jsp:setProperty 标签有以下语法:


<jsp:setProperty name="beanName" property="propertyName" value="propertyValue"/>

其中,

  • name 属性指定了要设置属性的 JavaBean 的名称或 ID。

  • property 属性指定了要设置的 JavaBean 属性名。

  • value 属性指定了要设置的属性值。

也可以用 <jsp:getProperty> 标签来获取 JavaBean 的属性值。

例如,假设有如下的 JavaBean 类定义:


public class User {

    private String name;

    private int age;

    

    public void setName(String name) {

        this.name = name;

    }

    

    public void setAge(int age) {

        this.age = age;

    }

    

    public String getName() {

        return name;

    }

    

    public int getAge() {

        return age;

    }

}

在 JSP 页面中,可以这样使用 jsp:setProperty 标签来设置该 JavaBean 的属性值:


<jsp:useBean id="user" class="User"/>



<jsp:setProperty name="user" property="name" value="张三"/>

<jsp:setProperty name="user" property="age" value="20"/>



姓名:<jsp:getProperty name="user" property="name"/><br/>

年龄:<jsp:getProperty name="user" property="age"/><br/>

上面的 JSP 页面代码中,首先使用 jsp:useBean 标签创建了一个 ID 为 “user” 的 JavaBean 对象,然后使用 jsp:setProperty 标签分别设置了该对象的 name 和 age 属性。最后使用 jsp:getProperty 标签获取了该对象的属性值并在页面上输出。

1.2.3 取得属性:jsp:getProperty

jsp:getProperty 标签用于获取 JavaBean 对象的属性值。JavaBean 是一个符合一定规范的 Java 类,它的属性可以通过 get/set 方法来访问和修改。使用 jsp:getProperty 标签可以在 JSP 页面中方便地获取 JavaBean 的属性值并在页面上输出。

jsp:getProperty 标签有以下语法:


<jsp:getProperty name="beanName" property="propertyName"/>

其中,

  • name 属性指定了要获取属性值的 JavaBean 的名称或 ID。

  • property 属性指定了要获取的 JavaBean 属性名。

也可以用 <jsp:setProperty> 标签来设置 JavaBean 的属性值。

例如,假设有如下的 JavaBean 类定义:


public class User {

    private String name;

    private int age;

    

    public void setName(String name) {

        this.name = name;

    }

    

    public void setAge(int age) {

        this.age = age;

    }

    

    public String getName() {

        return name;

    }

    

    public int getAge() {

        return age;

    }

}

在 JSP 页面中,可以这样使用 jsp:getProperty 标签来获取该 JavaBean 的属性值:


<jsp:useBean id="user" class="User"/>



姓名:<jsp:getProperty name="user" property="name"/><br/>

年龄:<jsp:getProperty name="user" property="age"/><br/>

上面的 JSP 页面代码中,首先使用 jsp:useBean 标签创建了一个 ID 为 “user” 的 JavaBean 对象,然后使用 jsp:getProperty 标签分别获取了该对象的 name 和 age 属性值并在页面上输出。

1.3 dao设计模式

DAO(Data Access Object)是一种设计模式,它将数据访问逻辑从业务逻辑中分离出来,以达到解耦的目的。

DAO 模式通常包含以下组成部分:

  1. DAO 接口:定义了数据访问对象的方法。

  2. DAO 实现类:实现了 DAO 接口中定义的方法。

  3. 数据库访问类:负责和数据库进行交互,提供增删改查等基本操作。

使用 DAO 模式的好处在于,可以使业务逻辑和数据访问逻辑分别独立开来,降低了彼此之间的耦合。这样,当需要修改数据访问逻辑时,不会影响到业务逻辑;同样,当需要修改业务逻辑时,也不会影响到数据访问逻辑。

下面是一个简单的 DAO 示例:


// DAO 接口

public interface UserDao {

    // 增加用户

    void addUser(User user);

    

    // 删除用户

    void deleteUser(int userId);

    

    // 更新用户

    void updateUser(User user);

    

    // 获取用户列表

    List<User> getUserList();

}



// DAO 实现类

public class UserDaoImpl implements UserDao {

    // 数据库访问类

    private JdbcTemplate jdbcTemplate;

    

    public void setDataSource(DataSource dataSource) {

        this.jdbcTemplate = new JdbcTemplate(dataSource);

    }

    

    @Override

    public void addUser(User user) {

        String sql = "INSERT INTO user(name, age) VALUES (?, ?)";

        jdbcTemplate.update(sql, user.getName(), user.getAge());

    }

    

    @Override

    public void deleteUser(int userId) {

        String sql = "DELETE FROM user WHERE id = ?";

        jdbcTemplate.update(sql, userId);

    }

    

    @Override

    public void updateUser(User user) {

        String sql = "UPDATE user SET name = ?, age = ? WHERE id = ?";

        jdbcTemplate.update(sql, user.getName(), user.getAge(), user.getId());

    }

    

    @Override

    public List<User> getUserList() {

        String sql = "SELECT * FROM user";

        return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class));

    }

}



// 数据库访问类

public class DataSource {

    // 省略数据库连接等相关的代码



    public Connection getConnection() {

        // 获取数据库连接

        // ...

        return connection;

    }

}

在上面的例子中,我们定义了一个 UserDao 接口,然后实现了它的方法。在 UserDaoImpl 类中,我们使用 JdbcTemplate 类来操作数据库。JdbcTemplate 是 Spring 框架提供的一个简化 JDBC 开发的工具类,它封装了 JDBC 操作中的一些常用方法,使得我们可以更方便地进行数据库操作。

同时,我们还需要一个 DataSource 类来获取数据库连接,这里只是给出了一个简化版的实现,实际情况下可能会更为复杂。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐