java email bean_JavaWeb学习笔记-第四章JavaBean技术

第四章 JavaBean技术

4.2.2 使用JavaBean的意义

如果使HTML代码与Java代码相分离,将Java代码单独封装成为一个处理某种业务逻辑的类,然后在JSP页面中调用此类,就可以降低HTML代码与Java代码之间的耦合度,简化JSP页面,提高Java程序代码的重用性及灵活性。这种与HTML代码相分离,而使用Java代码封装的类,就是一个JavaBean组件。

4.2.3 了解JavaBean的规范

JavaBean是一个可重用的Java软件组件模型,在编写时,需要遵循Java的一些编码约定。一个标准的JavaBean应该具有以下规范。

l

公共的无参的构造方法。

一个JavaBean对象必须拥有一个公共类型、默认的无参构造方法,从而可以通过new关键字直接对其进行实例化。(补充:当一个类创建了一个对象时,Java会自动调用该类的构造函数。构造函数具有和类完全相同的名称。无论是否定义构造函数,所有类都有构造函数,如果没有定义构造函数,系统会自动调用默认的构造函数。当然,一旦定义了自己的构造函数,也就不用调用默认的构造函数。一个类可以有多个构造函数,它们具有相同的方法名,即类名。构造函数分为默认的构造函数和带参数的构造函数。在编译阶段,编译器会根据参数的个数来决定调用那个构造函数。)

l

类的声明是非final类型的。

当一个类声明为final类型时,它是不可以更改的,所以,JavaBean对象的声明应该是非final类型的。

l

实现可序列接口。

JavaBean应该直接或间接实现java.io.Serialization接口,以支持序列化机制。

l

为属性声明访问器。

JavaBean中的属性应该设置为私有(private)类型,以防止外部直接访问,但它需要对外提供公共(public)的访问方法,也就是说需要为属性提供getter/setter方法。

补充:Serializable接口

public interface Serializable类通过实现

java.io.Serializable

接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化。可序列化类的所有子类型本身都是可序列化的。序列化接口没有方法或字段,仅用于标识可序列化的语义。

当遍历一个图形时,可能会遇到不支持可序列化接口的对象。在此情况下,将抛出 NotSerializableException,并将标识不可序列化对象的类。

序列化运行时使用一个称为 serialVersionUID

的版本号与每个可序列化类相关联,该序列号在反序列化过程中用于验证序列化对象的发送者和接收者是否为该对象加载了与序列化兼容的类。如果接收者加载的该对象的类的

serialVersionUID 与对应的发送者的类的版本号不同,则反序列化将会导致 InvalidClassException。可序列化类可以通过声明名为

"serialVersionUID"

的字段(该字段必须是静态 (static)、最终

(final)

的 long

型字段)显式声明其自己的 serialVersionUID:

ANY-ACCESS-MODIFIER

static final long serialVersionUID = 42L;

如果可序列化类未显式声明 serialVersionUID,则序列化运行时将基于该类的各个方面计算该类的默认

serialVersionUID 值,如“Java(TM)

对象序列化规范”中所述。不过,强烈建议

所有可序列化类都显式声明 serialVersionUID 值,原因计算默认的 serialVersionUID 对类的详细信息具有较高的敏感性,根据实现的不同可能千差万别,这样在反序列化过程中可能会导致意外的

InvalidClassException。因此,为保证

serialVersionUID 值跨不同 java

实现的一致性,序列化类必须声明一个明确的

serialVersionUID 值。还强烈建议使用

private 修改器显示声明

serialVersionUID(如果可能),原因是这种声明仅应用于立即声明类

-- serialVersionUID 字段作为继承成员没有用处。

当一个JavaBean在构造工具内被用户化,并与其它Bean建立连接之后,它的所有状态都应当可被保存,下一次被load进构造工具内或在运行时,就应当是上一次修改完的信息。为了能做到这一点,要把Bean的某些字段的信息保存下来,在定义Bean时要使它实现Java.io.Serializable接口。例如:

public class Button implements Java.io.Serializable {……}

实现了序列化接口的Bean中字段的信息将被

所谓的Serializable,就是java提供的通用数据保存和读取的接口。任何类型只要实现了Serializable接口,就可以被保存到文件中,或者作为数据流通过网络发送到别的地方。也可以用管道来传输到系统的其他程序中。这样子极大的简化了类的设计。只要设计一个保存一个读取功能就能解决上面说得所有问题。

4.3 JavaBean与JSP的完美结合

例4.1 通过非可视化的JavaBean封装邮箱地址对象,通过JSP页面调用此对象,来验证邮箱地址是否合法

(1)

创建名称为Email的JavaBean对象,用于封装邮箱地址,此类位于com.lyq.bean包中,其关键代码如下。

package com.lyq.bean;

import java.io.Serializable;

public class Email implements Serializable

{

private static final

long serialVersionUID=1L;

private String

mailAdd;

private boolean

email;

//public

Email(){

//}

public Email(String

mailAdd){

this.mailAdd=mailAdd;

}

public String

getMailAdd() {

return mailAdd;

}

public void

setMailAdd(String mailAdd) {

this.mailAdd = mailAdd;

}

public boolean

isEmail() {

//正则表达式,定义邮箱格式

String

regex="\\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";

if(mailAdd.matches(regex)){

email=true;

}

return email;

}

}

(2)

创建名称为index.jsp的页面。它是程序之中的首页,用于放置验证邮箱的表单,此表单的提交地址为result.jsp页面,其关键代码如下。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java EE 项目的目录结构可以根据具体的需求进行灵活设计,但一般情况下,推荐使用以下的标准目录结构: ``` project ├── src │ ├── main │ │ ├── java │ │ │ └── com │ │ │ └── example │ │ │ ├── controller │ │ │ ├── dao │ │ │ ├── entity │ │ │ ├── service │ │ │ └── util │ │ ├── resources │ │ │ ├── mapper │ │ │ └── db.properties │ │ └── webapp │ │ ├── WEB-INF │ │ │ ├── classes │ │ │ ├── lib │ │ │ └── web.xml │ │ ├── css │ │ ├── js │ │ ├── images │ │ └── index.jsp │ └── test │ ├── java │ └── resources ├── target ├── pom.xml └── README.md ``` 其中,各个目录的作用如下: - `src/main/java`:存放项目的 Java 源代码,按照包名分层,一般包括 `controller`、`dao`、`entity`、`service` 和 `util` 等包; - `src/main/resources`:存放项目的配置文件和资源文件,一般包括数据库连接配置文件 `db.properties`、MyBatis 的 mapper 文件等; - `src/main/webapp`:存放 Web 应用的 Web 资源,包括 JSP 页面、CSS 样式表、JavaScript 脚本等; - `src/test/java`:存放项目的测试代码; - `src/test/resources`:存放测试代码所需要的资源文件; - `target`:存放编译后的 .class 文件、打包后的 .war 文件等; - `pom.xml`:Maven 项目管理工具的配置文件; - `README.md`:项目说明文件。 以上是一种常见的 Java EE 项目目录结构,但并不是唯一的标准。在实际开发中,可以根据项目的具体需求进行合理的调整和修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值