Java Mail System和电子商务的集成
2009-01-08
作者:邢云
引 言
对于电子商务网站的用户来说,他们需要的是一个稳定,美观的购物环境,和一个设计良好的购物流程。但是在线购买之余,用户们也需要一些交流和反馈,这就需要留言簿,论坛,电邮等一些模块同样设置在网站中。但是这些模块大多在网站中分散设计,用户使用起来很不方便,对于后台管理来说,分散而非集中的电子商务模块是耗费成本的。本文集中讲述了其中的一个模块:电邮部分如何与电子商务集成。它的设计模式,同样可以适用于其他各个模块。
程序功能模块和分化
Java Mail System包含了如下三个部分:
(1)类似于Outlook的客户端软件Java Mail Box,允许用户在当前系统中配置其他网站的电邮,包括发送邮件,接收邮件,包括图片,HTML文档,附件的处理。
(2)服务器端的电邮Java Mail Web Service,使用JavaMail构建了一个SMTP,IMAP的服务器(或者是POP3,协议可以更改)。电子商务网站中的用户在注册成功的同时,就拥有了该系统的一个帐号,无需再配置,可以收发邮件一些操作,对服务器的文件夹进行常规操作。
(3)与电子商务的集成:Tomcat的JNDI解决方案,实现了电子商务系统和Java mail system的连接,当用户的注册信息,和其他在电子商务网站中的信息用JDBC写入数据库后,JNDI指向了共同的CONNECTING POOL,这些,一方面通过修改TOMCAT的配置文件,令一方面,JSP的页面元素中,指明JNDI
Java Mail System: Java Mail Box
运用面向对象的原理,将程序分为显示模块,逻辑模块,和各个显示间的通信。用户名,密码,SMTP服务器等等用户信息,用Java Bean描述。它和电子商务的集成,主要是让用户方便的调出这个邮件工具,来配置在其他网站上的电邮,点击连接即显示面板。
Java Mail Box当中用了18个类,网页中的APPLET标记需要引用包派生自JApplet的CLASS文件:
当浏览器读到此行时,它会创建到一个连接WEB服务器来提取CLASS文件,内嵌与浏览器中的JAVA解释器的类加载器接着从该文件中加载CLASS文件,加载过程中,类加载器必须解析此类中使用的其他类,这样,类加载器才会知道它需要加载更多的类才会运行该APPLET,因此,浏览器就会创建到该服务器的另外的连接来提取这些类,通常要耗费几分钟的时间。打包成JAR文件,可以使用另一个HTTP请求下载。JAR包括了JAVA MAIL BOX所需要的所有图形,类,属性文件,减少了下载的,时间。然后从APPLET调用 在JSP中指向APPLET,就实现了JAVA MAIL BOX的集成。
Java Mail System: Java Mail Web Service
Java Mail Web Service的设计结构,取决于电子商务如何实现。这里,两者采用的都是一个经典的MVC。即:Java Bean 做逻辑,JSP做显示层,Servlet做Controller,同样,还是用BEAN封装了用户的信息,由于JSP的容器使用了Apache的Tomcat,这个电邮服务器可看作一个3层结构,如图:

图一:电子邮件服务器的3层结构
集成:JNDI方面
【Naming Service的查询模型】

图二:Naming Service 的查询模型
可以看到,对于一个Client来说,一个Naming Service 提供了对于一个对象(Object)到名字(Name)的绑定和查询(Binding and Lookup),以提供对于资源的访问,就是说,对于一个程序,访问这个Name就等于访问了其绑定的Object
JNDI(Java Naming and Directory interface)是JAVA提供的命名服务解决方案,它的灵魂是Context接口,并且用 SubContext和InitialContext来辅助。
【Tomcat中的JNDI配置】
Tomcat中,指明JNDI,需要对两个文件作出修改,并且要确定做到参数一致:系统服务器配置文件SERVER.XML和应用描述文件WEB.XML,描述如下:
type="javax.mail.Session"/> ——>JNDI所属类名
集成:JDBC连接缓冲池方面
在DATASOURCE中事先建立了多个数据库连接,这些数据库保存到连接池(CONNECT POOL)中,JAVA程序访问数据库时,只需要从连接池中取出空闲状态的数据库连接,当程序访问数据库结束,再将数据库连接放回到连接池,这样可以提高访问数据库的效率,如果WEB 应用每一次都接收到用户的客户请求,都和数据库建立一个连接,数据库操作结束就断开连接,这样会耗费大量的时间和资源,因为数据库每一次配置链接都要将CONNECTION对象加载到内存中,再验证用户名和密码。
例如,当一个电子商务网站的用户进行操作的时候,下订单,提交(Commit),撤销(DrawBack)涉及到一个状态BEAN的HASHMAP的清空和添加。用户的在线时间是10多分钟左右,而实际操作数据库的连接时间,是微秒级的。显然,必须要用到连接池技术。
集成:JNDI,JDBC共同放置实现
DataSource对象是由TOMCAT提供的,因此不能在程序中采用创建一个实例的方式来生成DataSource对象,而需要JNDI,来获得DataSource的应用

图三:在JNDI和JDBC的共同放置下,实现了一个用户和数据库的访问
【程序中InitialContext()的应用】
Context ctx = new InitialContext();
if(ctx == null ) throw new Exception("No Context");
Session mailsession =(Session)ctx.lookup("java:comp/env/mail/session");
结束语
采用了JAVA MAIL API后,电子商务网站的设计模式,直接影响着Java Mail System 的实现。有时候,需要访问SQL ,Oracle,Cloudscape不同的数据库,就需要运用DAO和工厂模式来设计一致接口,同理可以设想,将一个通用的模式来实现Java Mail System和电子商务的连接,其意义在于,为其他的模块连接提供了一个模板。有了这些辅助功能,一个电子商务功能才更丰富,自身也更有吸引力。
参考文献:
1《JAVA2 核心技术》 卷Ⅰ原理 机械工业出版社 2002年2月
2《JAVA2核心技术》 卷Ⅱ高级特性 机械工业出版社 2002年4月
3 《JSP应用开发详解(第二版)》飞思科技产品研发中心 电子工业出版社 2004年3月
4《JSP应用开发详解(第二版)》 飞思科技产品研发中心 电子工业出版社 2004年3月
5《J2EE企业级应用开发》飞思科技产品研发中心 电子工业出版社 2003年8月
6《Tomcat与Java Web开发技术详解》飞思科技产品研发中心 电子工业出版社2004年4月
7《Mastering JSP》 Todd Cook SYBEX 2003年3月
8《VC++ SMTP协议电子邮件传送剖析》 朗锐 01空间 2003年9月12日
9《JavaMail操作的总结》土人制造编程园地JAVA讨论区 the_east_key 2004年4月15日
10《用JAVA开发EMAIL工具之接收邮件》冯睿 UML软件工程组织 2002年12月20日
11《用JAVA MAIL API编写可带附件的邮件程序》 邢雅莉 赛迪网 2001年9月11日
12《Cloudscape和Websphere Application Server:使用核心JDBC API》 Bennett Falt
IBM Data Management Group http://www.developworks.ibm.com
13《创建J2EE中的邮件发送和接收程序》 苏洋 赛迪网 2002年9月4日
14《JAVA的网络编程,用JAVA实现SMTP服务器》谷和启 赛迪网 2003年3月21日
15《JNDI overview, Part 1: An introduction to naming services》 java one
16JNDI Documentation http://www.java.sun.com/products/doc.html 17JAVA MAIL API Online
