第一篇的架构中就有提到,通常在开发Web程序时,要连接的外部辅助系统不仅仅只是数据库,还有很多其他的系统需要连接,故而将业务层下面一层叫做Pin, 来做与外部系统的数据交互。这里就列举一些:比如LDAP 服务器,即轻量级目录访问协议的服务器,简单而言是一种优化了读操作的数据库;用来连接其他Web或非Web程序的Web-Service ;邮件服务器;资源管理服务器等等。
很明显,我们的架构是:业务逻辑(Business)层将业务数据模型(Entity)传递给Pin层,Pin层将Entity解析为外部系统能够接受的形式后交由外部系统使用或帮助本系统代管;反方向地,Pin层将外部系统的数据读到并封装成本系统的Entity 后交给Business层做相应处理。
LDAP和Web-Service将会放在后面的两篇。这里,配置两个简单的:邮件服务器,资源管理服务器
1,邮件服务器。用法很容易想到,我们都见过很多的邮件服务器的Web Application,因为
这里笔者就不再废话连篇,上代码:
在@Configuration的ApplicationContext.java文件中ApplicationContext 类体中加入:
- @Bean
- public JavaMailSender mailSender() {
- Properties parameters = WebConfiguration.getSysParams();
- JavaMailSenderImpl jms = new JavaMailSenderImpl();
- jms.setHost((String) parameters.get("mail.smtp.host"));
- jms.setUsername((String) parameters.get("mail.smtp.username"));
- jms.setPassword((String) parameters.get("mail.smtp.password"));
- jms.setDefaultEncoding((String) parameters.get("mail.smtp.encoding"));
- jms.setPort(Integer.parseInt((String) parameters.get("mail.smtp.port")));
- jms.setProtocol((String) parameters.get("mail.transport.protocol"));
- jms.setJavaMailProperties(parameters);
- return jms;
- }
@Bean
public JavaMailSender mailSender() {
Properties parameters = WebConfiguration.getSysParams();
JavaMailSenderImpl jms = new JavaMailSenderImpl();
jms.setHost((String) parameters.get("mail.smtp.host"));
jms.setUsername((String) parameters.get("mail.smtp.username"));
jms.setPassword((String) parameters.get("mail.smtp.password"));
jms.setDefaultEncoding((String) parameters.get("mail.smtp.encoding"));
jms.setPort(Integer.parseInt((String) parameters.get("mail.smtp.port")));
jms.setProtocol((String) parameters.get("mail.transport.protocol"));
jms.setJavaMailProperties(parameters);
return jms;
}
JavaMailSender类在org.springframework.context-support-x.x.x.RELEASE.jar包中,不要忘记导此包入WEB-INF/lib下
当然,还要有JavaMail API的类库,在Spring文档http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/mail.html中写的是
mail.jar和activation.jar
由于activation.jar即JAF已经成为标准的Java组件而被包含在1.6版本以上的JDK中,所以1.6版本以上的JDK不再需要activation.jar,然后新版的JavaMail API应该是6个jars.分别为:mail.jar mailapi.jardsn.jap imap.jar pop3.jarsmtp.jar
Parameters 自然还在sysParams.properties文件中去写。
- mail.store.protocol=pop3
- mail.transport.protocol=smtp
- mail.smtp.encoding=utf-8
- mail.smtp.host=127.0.0.1
- mail.smtp.port=25
- mail.smtp.username=root
- mail.smtp.password=root
- mail.smtp.socketFactory.port=465
- mail.smtp.auth=true
- mail.smtp.timeout=10000
- mail.smtp.starttls.enable=true
- mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
mail.store.protocol=pop3
mail.transport.protocol=smtp
mail.smtp.encoding=utf-8
mail.smtp.host=127.0.0.1
mail.smtp.port=25
mail.smtp.username=root
mail.smtp.password=root
mail.smtp.socketFactory.port=465
mail.smtp.auth=true
mail.smtp.timeout=10000
mail.smtp.starttls.enable=true
mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
而后,在pin层新建接口IMailPin.java, 在pin.imap下新建该接口实现类SpringMailPin.java
代码如下:
- package com.xxxxx.webmodel.pin.impl;
- import java.io.Serializable;
- import javax.annotation.Resource;
- import javax.mail.Message.RecipientType;
- import javax.mail.MessagingException;
- import javax.mail.internet.InternetAddress;
- import javax.mail.internet.MimeMessage;
- import org.springframework.mail.javamail.JavaMailSender;
- import org.springframework.mail.javamail.JavaMailSenderImpl;
- import org.springframework.stereotype.Component;
- import com.xxxxx.webmodel.pin.IMailPin;
- @Component
- public class SpringMailPin implements IMailPin,Serializable {
- private static final long serialVersionUID = -1313340434948728744L;
- private JavaMailSender mailSender;
- public JavaMailSender getMailSender() {
- return mailSender;
- }
- @Resource
- public void setMailSender(JavaMailSender mailSender) {
- this.mailSender = mailSender;
- }
- @Override
- public void testMail() {
- JavaMailSenderImpl jms = (JavaMailSenderImpl)this.mailSender;
- System.out.println(jms.getHost());
- MimeMessage mimeMsg =jms.createMimeMessage();
- try {
- mimeMsg.setSubject("Test James");
- mimeMsg.setFrom(new InternetAddress("xxxxxx@tom.com"));
- mimeMsg.setRecipient(RecipientType.TO, new Inter-netAddress("xxxxx@live.com"));
- mimeMsg.setRecipient(RecipientType.CC, new Inter-netAddress("xxxxxx@yahoo.com"));
- mimeMsg.setRecipient(RecipientType.BCC, new Inter-netAddress("xxxxx@mail.com"));
- mimeMsg.setText("Hello");
- // MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMsg, true, "utf-8");
- // mimeMessageHelper.setFrom("hitmit1314@tom.com");
- // mimeMessageHelper.setTo("palmtale@live.com");
- //
- // mimeMessageHelper.setCc("palmtale@yahoo.com");
- // mimeMessageHelper.setBcc("palmtale@mail.com");
- // mimeMessageHelper.setSubject("Test mail");
- // mimeMessageHelper.setText("Hi, Hello", true);
- mailSender.send(mimeMsg);
- } catch (MessagingException e) {
- e.printStackTrace();
- }
- }
- }