1.1 javabean简介
为什么要引入javabean
JavaBean 是一种 Java 类,它遵循特定的命名约定并实现特定接口和规范。使用 JavaBean 可以将数据封装成对象,这样可以方便地进行操作和管理。引入 JavaBean 的主要目的是为了提高 Java 代码的可维护性和可重用性。
JavaBean 具有以下几个优点:
- 封装性:将数据封装在对象内,只暴露必要的属性和方法,屏蔽内部实现细节,提高安全性。
- 可重用性:JavaBean 可以被其他程序调用,使得代码具有更好的可重用性,减少了代码的冗余。
- 可扩展性:JavaBean 支持继承和多态特性,可以方便地扩展和修改代码,使得代码更加灵活和易于维护。
- 规范性:JavaBean 遵循一定的规范,使得代码结构清晰、易读易懂,并且符合 Java 编程的惯例和标准。
- 工具支持: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 的设计要求:
必须提供一个默认的公共构造函数,不带参数,并且没有返回值。
所有属性必须是私有的,并且必须使用公共 getter 和 setter 方法来访问和修改属性的值。
属性名必须遵循标准的命名规范,例如:属性 foo 的 getter 方法应该命名为 getFoo(),setter 方法应该命名为 setFoo()。
应该实现 java.io.Serializable 接口,以允许 JavaBean 实例在网络上进行传输或存储到文件中。
如果需要,可以提供自定义的序列化和反序列化方法,以便对属性进行更精细的控制。
请注意,这些规则并非硬性要求,您可以根据需要选择性地遵循它们。但是,如果您的类符合这些规则,您将能够利用诸如 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 表达式获取这些属性值。
2使用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 对象的作用域,可选值为page
、request
、session
或application
。
例如,以下代码在 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数据之间的映射可以采用以下三种方式:
手动映射:即手动编写代码将表单数据赋值给JavaBean属性,或从JavaBean属性中获取数据并展示到表单中。
使用第三方框架:如Apache Struts、Spring MVC等框架都提供了表单数据绑定的机制,可以自动将表单数据与JavaBean属性进行映射。
基于注解的映射:可以通过在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 模式通常包含以下组成部分:
DAO 接口:定义了数据访问对象的方法。
DAO 实现类:实现了 DAO 接口中定义的方法。
数据库访问类:负责和数据库进行交互,提供增删改查等基本操作。
使用 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 类来获取数据库连接,这里只是给出了一个简化版的实现,实际情况下可能会更为复杂。