核心提示:监听器其他两个监听器-1:HttpSessionBindingListener ?实现此接口类的类,不必在web.xml中进行配置。 ?实现此接口的类,通常是一个JavaBean,一个JavaBean...
监听器
其他两个监听器-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:第五步:输入收件人rcpt to: 第六步:输入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:rcpt to: data from: to: subject:主题 [保留一个空行.] 这是发出的数据 . quit
通过命令行收取邮件:
telnet 127.0.0.1 110 user aaa pwd 123 retr 10 --这是查看第10封信件。 quit
发送邮件的一些细节:
通过命令发送邮件太过繁琐,这里直接写了代码来发送邮件
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 ...............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 Java Mail 你好!","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())); //设置文件名,同时处理中文名
邮件里面是可以内嵌图片来发送的,由于时间原因我没写,就不贴了。