Session的活化与钝化钝化和通过代码(Java)发送邮件(QQ,新浪)

监听器

其他两个监听器-1:

HttpSessionBindingListener
•实现此接口类的类,不必在web.xml中进行配置。
•实现此接口的类,通常是一个JavaBean,一个JavaBean通过实现此接口,可以感知自己是否添加到了Session中。或是感知自己是否从Session中移除。
示例:
public class Person implements HttpSessionBindingListener {
public void valueBound(HttpSessionBindingEvent arg0) {
System.err.println("我被添加到了Sesion中"+arg0.getName());
}
public void valueUnbound(HttpSessionBindingEvent arg0) {
System.err.println("我从Session中被移除了....");
}
}

其他两个监听器-2-会话的持久化:
HttpSessionActivationListener
•实现此接口的JavaBean,可以感知自己被活化(从硬盘到内存)和钝化(从内存到硬盘)的过程。
•如果需要同时保存Session中的JavaBean则JavaBean也要实现Serializable序列化接口。
•实现此接口的JavaBean与HttpSessionBindingListener一样,不必配置到web.xml中。
•要实现此功能,必须要先配置以下信息:
 

第一步:书写一个JavaBean,并实现HttpSessionActivationListener接口如下:

第二步:JSP页面,判断是否存在Person,如果没有将Person放到Session中:

第三步:配置Tomcat的Server.xml文件或是将配置好的xml发布文件放到CATALIINA_HOME\conf\Catalina\localhost目录下(也就是小钢炮):

 

配置文件如下:
lirectory=“d:/a”是指Session文件保存的目录。

 

第四步:测试
1:多次开启新的浏览器窗口,并记录SESSIONID。
2:使用shutdown.bat关闭tomcat应用。
3:观察指定的目录下是否存在*.session文件。
4:再次重新启动tomcat,并使用 http://localhost:8080/project;jsessionid=xxxxx 指定sessionid的方式访问服务器。
5:观察是否为关闭tomcat之前的同一个Session。
6:一般情况下,PersistentManager持久化Session与Cookie共同使用。
7:HttpSessionActivationListener只做为监听类,监听自己是否钝化或是活化。

E-Mail协议简介:

邮件服务器,按照提供的服务类型,可以分为发送邮件的服务器我接收邮件的服务器。
发送邮件的服务器使用发送协议,现在常用的是SMTP协议。所以,通常发邮件的服务器也称为SMTP服务器。
接收邮件的服务器使用接收协议,现在常用的是POP3协议或IMAP协议,所以通常也被称为POP3或IMAP服务器。
目前经常见到的服务器为SMTP和POP3服务器。如大家在注册了126的邮箱之后,它的发邮件服务器为smtp.126.com:25,而收邮件服务器则为pop3.126.com:110.(冒号后面的为端口号)。
当然,发邮件服务器和收邮件服务器也可能是同一台主机,但端口号一定不相同。默认发邮件服务器的端口为25,收邮件的端口为110.
 

邮件发送的工作图:

邮件收/发协议:

SMTP协议-发邮件协议
•全称为SimpleMail Transfer Protocol(简单邮件传输协议),它定义了邮件客户端软件与SMTP服务器之间、以及两台SMTP服务器之间的通讯规则。端口一般为25.
POP3协议-收邮件协议
•全称为PostOffice Protocol(邮局协议),它定义了邮件客户端软件与POP3服务器的通讯规则。端口一般为110.
IMAP协议-对POP3的扩展
•全称为InternetMessage Access Protocal(Internet消息访问协议),它是对POP3协议的一种扩展,定义了邮件客户端软件与IMAP服务器的通讯规则。
 

通过命令行发送邮件的步骤如下:

第一步:与服务器建立连接。

•telnet smtp.126.com 25

第二步:先和服务器打个招乎。Ehlo someTxt

第三步:请求登录:auth login.

•输入用户名:经过base64编码以后的。

•输入密码,也是经过base64编码以后的。

第四步:输入发件人mail from:<wangjian_me@126.com>

第五步:输入收件人rcpt to:<wangjianme@sohu.com> 

第六步:输入data命令然后回车,开始输入数据。

•可选的输入from:<…>

•可选的输入to:<..>

•subject:主题

第七步:输入.(点)单行,表示数据结束。

第八步:输入quit退出。

接收邮件:pop3:

telnet pop3.126.com 110


user wj_leaf12345

pass 1qaz2wsx


lstat  - 显示总体信息。


list - 列出所有信件。



retr 1 - 显示第一封信件。


quit  -退出

有在命令行窗口,使用telnet从bbb用户向aaa用户发邮件:

telnet 127.0.0.1 25

ehlo bbb

auth login

YmJi

MTIz

mail from:<bbb@wj.com>

rcpt to:<aaa@wj.com>

data

from:<bbb@wj.com>

to:<aaa@wj.com>

subject:主题

  [保留一个空行.]

这是发出的数据

.

quit


 

 

通过命令行收取邮件:

telnet 127.0.0.1 110
user aaa
pwd 123
retr 10  --这是查看第10封信件。
quit


发送邮件的一些细节:

1、邮件头和邮件体之间必须要使用空行分隔。
2、邮件头是指:
•From  示例:发送者是谁,from:<aaa@aa.com>
•To 示例:to:<bbb@aa.com>
•Subject :主题如:subject:XXXXX
•Cc  :抄送 cc:<abc@aa.com>
•Bcc : 暗送 bcc:<aaa@aa.com>
•[空行]
•数据部分

 

 

 

通过命令发送邮件太过繁琐,这里直接写了代码来发送邮件

canJavaMail

 

JavaMailDemo.java

package cn.hncu;

import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;

import org.junit.Test;

public class JavaMailDemo {
	
	@Test//发送一封简单邮件
	public void test1() throws Exception{
		//1.创建一个进行邮件发送会话的session对象
		Properties p=new Properties();
		p.setProperty("mail.host", "smtp.sina.com");// qq: smtp.qq.com
		p.setProperty("mail.smtp.auth", "true");
		p.setProperty("mail.smtp.port", "25");//QQ: 官网上给出发送端口为587/465,但是我这里只有587成功了
		
		Session session=Session.getDefaultInstance(p,new Authenticator() {
			@Override
			protected PasswordAuthentication getPasswordAuthentication() {
				PasswordAuthentication pa=new PasswordAuthentication("hncujava@sina.com", "hncu1234567");//QQ: 用户名为QQ邮箱,密码是QQ给的16位SMTP口令
				return pa;
			}
		});
		
		session.setDebug(true);//设置让程序和邮件服务器进行问答式交互
		
		//2.声明一封邮件-----MimeMessage
		MimeMessage msg=new MimeMessage(session);
		msg.setFrom(new InternetAddress("hncujava@sina.com"));
		msg.setRecipient(RecipientType.TO, new InternetAddress("544863212@qq.com"));
		
		//设置邮件发送的内容
		msg.setSubject("JAVA 发送邮件");
		msg.setContent("Hello  World <a href='http://www.hncu.net'>...............</a>2016.12.19", "text/html;charset=utf-8");
		
		//3.发送
		Transport.send(msg);
	}
	
	@Test//发送一封带附件的邮件
	public void test2() throws Exception{
		Properties p=new Properties();
		p.setProperty("mail.host", "smtp.qq.com");
		p.setProperty("mail.smtp.auth", "true");
		p.setProperty("mail.smtp.port", "587");
		
		Session session=Session.getDefaultInstance(p, new Authenticator() {
			@Override
			protected PasswordAuthentication getPasswordAuthentication() {
				PasswordAuthentication pwd=new PasswordAuthentication("862482770@qq.com", "ifhqsxukotsvbfje");
				return pwd;
			}
		});
		
		MimeMessage msg=new MimeMessage(session);
		msg.setFrom(new InternetAddress("862482770@qq.com"));
		msg.setRecipient(RecipientType.TO, new InternetAddress("544863212@qq.com"));
		
		msg.setSubject("带附件的邮件");
		
		/以下部分和简单邮件不同之处/
		//body1-------邮件正文 
		MimeBodyPart body1=new MimeBodyPart();
		body1.setContent("Hello <a href='http://www.hncu.net'> Java Mail</a> 你好!","text/html;charset=utf-8");
		
		//body2-------附件(图片)
		MimeBodyPart body2=new MimeBodyPart();
		body2.setDataHandler(new DataHandler(new FileDataSource("./imgs/4.jpg")));
		body2.setFileName(MimeUtility.decodeText("良辰"));
		
		//body3-------附件(图片)
		MimeBodyPart body3=new MimeBodyPart();
		body3.setDataHandler(new DataHandler(new FileDataSource("./imgs/5.jpg")));
//		body3.setFileName("美景");这种方式会乱码
		body3.setFileName(MimeUtility.encodeText("美景"));
		
		//body4-------附件(图片)
		MimeBodyPart body4=new MimeBodyPart();
		body4.setDataHandler(new DataHandler(new FileDataSource("./imgs/1.txt")));
//		body3.setFileName("美景");这种方式会乱码
		body4.setFileName(MimeUtility.encodeText("文件.txt"));
		
		//把三个body封装成一个MimeMultipart对象,然后设进msg.setContent()中去
		MimeMultipart mm=new MimeMultipart();
		mm.addBodyPart(body1);
		mm.addBodyPart(body2);
		mm.addBodyPart(body3);
		mm.addBodyPart(body4);
		msg.setContent(mm);
		///
		
		Transport.send(msg);
	}
}


 

简单邮件发送:

带有附件的邮件:附件可以下载

 

处理中文附件乱码:

MimeBodyPart mb = new MimeBodyPart();

DataHandler dh = new DataHandler(new FileDataSource("./imgs/美女.jpg"));

mb.setDataHandler(dh);

mb.setFileName(MimeUtility.encodeText(dh.getName()));

//设置文件名,同时处理中文名

 

 

 


邮件里面是可以内嵌图片来发送的,由于时间原因我没写,就不贴了。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值