JAF简介

JavaBeans激活框架(JavaBeans Activation Framework) 

       JAF的目的在于统一处理不同数据格式的方法(不管数据格式为简单文本还是由图片、声音、视频甚至其它"活动"内容共同组成的复合文档)。在这个意义上,JAF对Java的作用正如插件对Web浏览器的作用。JAF使得Java对象与编码数据流之间的映射变得非常容易。

       JAF完成于1998年,当时JavaBean非常流行,Swing非常热门,Servlet刚刚出现,J2EE平台还没有。那时Sun需要一个用于文件浏览器和JavaMail的标准发现API,此需要推动了JAF的创建。“发现”指可以动态找到正确的组件以处理任意但类型化了的数据的机制。特别是,作为发现API来开发JAF,以便使GUI开发人员能够为文档和图像数据动态地发现浏览器和编辑器。 

       发现取决于注册的类型,注册可以将每一文件类型与对应的应用程序建立关联。 

       简单的说,JAF提供了用于动态发现可视窗口部件以处理由MIME文件头描述的各种数据的架构。当用于SAAJ这样的非可视系统时,JAF可以将Java类型映射到将它们无缝转换到数据流的特殊处理程序,从而允许SAAJ将Java对象自动转换成由SwA MIME部分包含的原始数据。 



1.       DataHandler 类 

       JAF架构的核心是javax.activation.DataHandler类。DataHandler类定义了三个构造函数: 

       Public DataHandler(DataSource ds) 

       Public DataHandler(java.net.URL url) 

       Public DataHandler(Object obj, String mimeType) 

       当使用前两个构造函数时,数据处理会委托到DataSource接口的一个子类型,使用第三个构造函数时,数据处理委托到一个动态发现的内容处理程序并使用此处理程序。 

       如果DataHandler是用DataSource对象构造的,那么它将首先试图试图将getContent()方法委托到一个DCH,如果它没有找到DCH,会返回一个从DataSource中得到的InputStream。有趣的是,DataHandler总是试图首先委托到一个DCH,即便是用DataSource创建DataHandler也是如此。 

       上述说明的问题看似简单,但实际上非常重要,它说明了getContent()方法的作用。getContent()方法要返回一个表示附件的Java对象,DataSource的InputStream只作为最后一种手段来返回。从DCH中返回的对象类型取决于DCH的编码方式。 



2.       DataContentHandler类 

       此接口用于实现将Java对象流转换成数据流,或将数据流转换成Java对象。 

       DataContentHandler类型的每一个子类(即每一个DCH)均用于自动将Java对象的专用类型转换为流,以及将流转换成Java对象。如某个DCH能够将java.awt.Image对象转换为JPEG或GIF编码流,或者进行反向转换。DCH的缺点是它们的使用范围通常受到很大的限制,每一个DCH只能讲一个对象类型转换成一种类型的数据流。 

       与DCH不同,DataSource对象只处理数据流。用户要用DataSource从某种类型的资源中读数据流,并将数据流写入DataSource。,此时重点放在了流上而不是Java对象类型上。从而DataSource具有很大的通用性,其缺点为不宜于使用,因为用户直接处理的是流而不是Java对象。 



3.       DataSource 类 

       DataSource类拥有完成委托操作所需要的全部功能。当使用DataSource或URL参数构造DataHandler时,DataHandler要使用DataSource而不是DCH。 

       JAF定义了两个标准的DataSource对象,即FileDataSource对象和URLDataSource对象。     某些DataSource实现用于动态发现它们的MIME类型。例如,FileDataSource用MIME类型注册表发现它的MIME类型。JAF中的默认MIME类型注册表是mimetypes.default文件,该文件包含在JAF二进制JAR文件中。 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
JavaMail API用于发送和接收电子邮件,而Java激活框架(JAF)则用于处理邮件内容的附件和多媒体类型。以下是安装JavaMail API和Java激活框架(JAF)的步骤描述: 1. 下载JavaMail API和Java激活框架(JAF)的JAR文件,可以从Oracle官方网站或其他可靠的下载站点下载。 2. 将下载的JAR文件复制到Java项目的classpath中,可以将其放在项目的lib目录下。 3. 在Java代码中引入JavaMail API和Java激活框架(JAF)的类,例如: ``` import javax.mail.*; import javax.mail.internet.*; import javax.activation.*; ``` 4. 配置JavaMail API的会话(Session)对象,包括SMTP服务器地址、SMTP端口、是否使用SSL等信息。例如: ``` Properties props = new Properties(); props.put("mail.smtp.host", "smtp.gmail.com"); props.put("mail.smtp.socketFactory.port", "465"); props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.port", "465"); Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("username","password"); } }); ``` 5. 创建邮件消息(Message)对象,设置发件人、收件人、主题、正文等信息。例如: ``` Message message = new MimeMessage(session); message.setFrom(new InternetAddress("[email protected]")); message.setRecipients(Message.RecipientType.TO,InternetAddress.parse("[email protected]")); message.setSubject("Testing Subject"); message.setText("Dear Mail Crawler," + "\n\n No spam to my email, please!"); ``` 6. 如果需要添加附件或多媒体内容,可以使用Java激活框架(JAF)提供的数据处理器(DataHandler)类。例如: ``` MimeBodyPart messageBodyPart = new MimeBodyPart(); messageBodyPart.setText("This is message body"); Multipart multipart = new MimeMultipart(); multipart.addBodyPart(messageBodyPart); messageBodyPart = new MimeBodyPart(); DataSource source = new FileDataSource("path/to/file"); messageBodyPart.setDataHandler(new DataHandler(source)); messageBodyPart.setFileName("filename"); multipart.addBodyPart(messageBodyPart); message.setContent(multipart); ``` 7. 最后,使用JavaMail API提供的Transport类将邮件发送出去。例如: ``` Transport.send(message); ``` 以上就是安装JavaMail API和Java激活框架(JAF)的步骤描述。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值