day21其他监听器在线支付邮件.docx

上传人:b****5 文档编号:3729742 上传时间:2022-11-25 格式:DOCX 页数:17 大小:58.52KB
下载 相关 举报
day21其他监听器在线支付邮件.docx_第1页
第1页 / 共17页
day21其他监听器在线支付邮件.docx_第2页
第2页 / 共17页
day21其他监听器在线支付邮件.docx_第3页
第3页 / 共17页
day21其他监听器在线支付邮件.docx_第4页
第4页 / 共17页
day21其他监听器在线支付邮件.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

day21其他监听器在线支付邮件.docx

《day21其他监听器在线支付邮件.docx》由会员分享,可在线阅读,更多相关《day21其他监听器在线支付邮件.docx(17页珍藏版)》请在冰豆网上搜索。

day21其他监听器在线支付邮件.docx

day21其他监听器在线支付邮件

Day21

其他监听器/在线支付/邮件

1、今天的主要内容

1)、其他监听器

监听者

被监听者

监听到事件对象

HttpSessionActivationListener

HttpSession–监听HttpSession活化和顿化。

HttpSessionEvent 

HttpSessionAttributeListener

HttpSession–监听session的属性变化的。

S.setAttributee();

HttpSessionBindingEvent 

HttpSessionBindingListener

HttpSession-监听哪一个对象,绑定到了session上。

S.setAtrri(name,User);

HttpSessionListener

HttpSesion–监听sessioin创建销毁

HttpSessionEvent

ServletContextAttributeListener

ServletContext–属性变化的

ServletContextListener

ServletContext创建销毁

ServletRequestListener-SerlvetRequestAttibuteListner

Rrequest-创建销毁

Request属性变化

 

2)、在线支付

使用第三方支付。

3)、发邮件。

POP3协议。

SMTP协议及端口号。

4)、POP收邮件协议的协议文本。

5)、SMTP发邮件协议的协议文本各是什么?

6)、通过命令行收发邮件。

控制SMTP的POP3。

7)、用Base64对用户和密码进行编码。

8)、邮件客户端面FoxMail。

9)、JavaMail简介,用java代码发送邮件。

10)、几个主要对象:

Session,MimeMessages,Transport。

11)、发带有符件的图片。

处理中文乱码。

12)、示例-激活账号。

13)、在本机部署邮件服务器。

Eyoumailserver。

补:

内省在数据封装中起的作用?

数据库反射与类反射共同使用带来的方便。

内省

一个核心类:

PropertyDescriptor。

内省本质上是反射。

补:

JNDI

 

2、以下是课上的记录

3、ServletContextListener用于监听SevletContext的创建

在web中的所的监听器都是全局的-都是在项目启动时直接由tomcat创建。

监听器没有顺序。

只是监听的对象不一样。

在一个项目中可以存在多个监听器。

packagecn.itcast.listener;

importjava.io.BufferedReader;

importjava.io.File;

importjava.io.FileNotFoundException;

importjava.io.FileReader;

importjava.io.PrintWriter;

import.URL;

importjavax.servlet.ServletContextEvent;

importjavax.servlet.ServletContextListener;

publicclassMyContextListenerimplementsServletContextListener{

//在启动时读取数据库之前保存的数据

publicvoidcontextInitialized(ServletContextEventsc){

System.err.println("application被创建了:

"+sc.getServletContext());

URLurl=MyContextListener.class.getClassLoader().getResource("count.txt");

Stringpath=url.getFile();

System.err.println(path);

try{

BufferedReaderbf=newBufferedReader(newFileReader(path));

Stringline=bf.readLine();

Integercount=Integer.valueOf(line);

sc.getServletContext().setAttribute("count",count);

System.err.println("初始的值是:

"+count);

}catch(Exceptione){

e.printStackTrace();

}

}

//在销毁这个对象时保存一些数据到数据库或是文件中

publicvoidcontextDestroyed(ServletContextEvente){

System.err.println("销毁了:

"+e.getServletContext());

//保存到文件中去

URLurl=MyContextListener.class.getClassLoader().getResource("count.txt");

Stringpath=url.getFile();

System.err.println(path);

Filefile=newFile(path);

try{

PrintWriterout=newPrintWriter(file);

//获取applicat的数据

Integercount=(Integer)e.getServletContext().getAttribute("count");

out.print(count);

out.close();

}catch(FileNotFoundExceptione1){

e1.printStackTrace();

}

}

}

在项目启动时一次加载所有的配置文件。

HttpSessionBindingListener-此类是用于监听一个Bean是否被放到了Session中。

Personp=newPerson();.

Session.setAttriute(“pp”,p);

实现此类的Bean不需要配置到web.xml。

4、HttpSessionActivationListener-监听一个Sesison被保存到一个文件中的过程

也需要一个Bean。

实现HttpSessionActivationListener接口。

此类也不需要配置到web.xml

Personp=newPerson()implemntsHttpSessionActivationListener{

Actived….

}

Session.setAttribute(“p”,p);

第一步:

书写Bean实现HttpSessionActivationListener

packagecn.itcast.domain;

importjava.io.Serializable;

importjavax.servlet.http.HttpSessionActivationListener;

importjavax.servlet.http.HttpSessionEvent;

publicclassPersonimplementsSerializable,HttpSessionActivationListener{

privateStringname;

publicPerson(){

}

publicPerson(Stringname){

this.name=name;

}

publicStringgetName(){

returnname;

}

publicvoidsetName(Stringname){

this.name=name;

}

publicvoidsessionWillPassivate(HttpSessionEventse){

System.err.println("保存到文件中去了..."+this.getName());

}

publicvoidsessionDidActivate(HttpSessionEventse){

System.err.println("从文件中活化了...."+this.getName());

}

@Override

publicStringtoString(){

return"Person[name="+name+"]";

}

}

第二步:

配置这个项目

\\programfiles\\MyEclipse10\\wk3\\day21\\WebRoot">

saveOnRestart="true">

directory="d:

/a">

第三步:

测试

<%

if(session.getAttribute("p")==null){

inta=newRandom().nextInt(100);

Personp=newPerson(""+a);

session.setAttribute("p",p);

}

//保存cookie

Cookiec=newCookie("JSESSIONID",session.getId());

c.setMaxAge(60*30);

c.setPath(request.getContextPath());

response.addCookie(c);

%>


${p}


<%=session.getId()%>

5、在线支付

第一步:

找一个第三方支付公司开一个账号yeepay

开户以后可以获取以下信息:

1:

自己的开户账号

2:

支付密码=双向加密。

3:

给一个示例代码。

J

p1_MerId=10001126856-账号

keyValue=69cl522AV6q613Ii4W6u8K6XuW8vM1N6bFgyv769220IuYe9u37N4y7rI4Pl=密码

第二步:

开发支付页面

urlvalue='/BuyServlet'/>"method="post">

订单号:


金额:


银行:

交通银行

民生银行

 

第三步:

开发buySerlvet,组成参数

第四步:

加密

PaymentUtiuls

6、邮件

目标:

通过Java代码发送邮件。

邮件协议:

发邮件的:

SMTP(SimpleMailTransportProtocal)

收邮件的协议:

pop3(PostOfficeProtocal3)

IMAP新协议发邮件也可以收邮件。

(一步步的与服务器交互)

SMTP:

Ehlo<空格><你的域名><回车>

Ehlo-与服务器

AuthLogin

请求登录

MailFrom:

发件人的email:

RcptTo:

收件的地址:

eee@

Data

以下是数据

Quit

退出

收发邮件的过程:

一般情况下,smtp和pop3是两个服务器(主机)。

Smtp邮件的端口为25。

POP3端口为110。

7、发邮件示例

安装foxmail:

8、发邮件时,要对用户名和密码进行base64编码

//对用户名和密码进行base64编码

@Test

publicvoidbase64(){

Stringname="wj_leaf12345";

Stringpwd="1qaz2wsx";

BASE64Encoderen=newBASE64Encoder();

name=en.encode(name.getBytes());

pwd=en.encode(pwd.getBytes());

System.err.println(name);

System.err.println(pwd);

}

9、通过java代码发邮件

用java发邮件,必须要导入新的包

mail.jar–发邮件的核心包

activation.jar–对用户和密码加密.

在mail.jar中有三个核心类:

Javax.mail.Session–是指与邮件服务器会话。

整个项目中只要一个就可以了.

Javax.mail.Message(接口)-准备发送数据信息。

MimeMessage-可以设置类型的数据信息。

Transport–它拥有一个方法可以发送Message。

第一步;导入两个jar包

第二步;发简单的邮件

@Test

publicvoidsendMail()throwsException{

//第一步:

声明properties对象放信息

Propertiesprop=newProperties();

//设置连接哪一台服务器

prop.setProperty("mail.host","");

//设置是否验证

prop.setProperty("mail.smtp.auth","true");

//第二步:

声明用户名和密码

Authenticatorauth=newAuthenticator(){

//此访求返回用户和密码的对象

publicPasswordAuthenticationgetPasswordAuthentication(){

PasswordAuthenticationpa=

newPasswordAuthentication("wj_leaf12345","1qaz2wsx");

returnpa;

}

};

////第二步:

获取Session对象

Sessionsession=

Session.getDefaultInstance(prop,auth);

//设置session的调试模式

session.setDebug(true);

//第三步:

声明信息

MimeMessagemm1=

newMimeMessage(session);

//第四步:

设置发件人email

Addressfrom=newInternetAddress("wj_leaf12345@");

mm1.setFrom(from);

//第五步:

设置收件人

mm1.setRecipient(RecipientType.TO,newInternetAddress("wj_leaf12345@"));

mm1.setRecipient(RecipientType.CC,newInternetAddress("549051701@"));

mm1.setRecipient(RecipientType.BCC,newInternetAddress("wj@"));

//第六步:

设置主题

mm1.setSubject("这是用Java发的邮件3");

mm1.setContent("你好,这是用java发的邮件,3333再试一下","text/plain;charset=UTF-8");

//第七步:

Transport.send(mm1);

}

 

第三步:

v发带有超连接的邮件

mm1.setSubject("这是用Java发的邮件sfasdf3");

mm1.setContent("你好,这是用java发的邮件,传智","text/html;charset=UTF-8");

//第七步:

Transport.send(mm1);

第四步:

符件的邮件

@Test

publicvoidsendFile()throwsException{

Propertiesp=newProperties();

p.setProperty("mail.host","");

p.setProperty("mail.smtp.auth","true");

Sessions=Session.getDefaultInstance(p,newAuthenticator(){

@Override

publicPasswordAuthenticationgetPasswordAuthentication(){

returnnewPasswordAuthentication("wj_leaf12345","1qaz2wsx");

}

});

s.setDebug(true);

//声明MimeMessage

MimeMessagemsg=newMimeMessage(s);

msg.setFrom(newInternetAddress("wj_leaf12345@"));

msg.setRecipient(RecipientType.TO,newInternetAddress("wj_leaf12345@"));

msg.setSubject("图片的");

//第一步:

声明多处理的Part

MimeMultipartmm=newMimeMultipart();

//第二步:

声明

MimeBodyPartbody1=newMimeBodyPart();

//第三步:

设置符件

DataSourceds=newFileDataSource(newFile("./img/a.jpg"));

DataHandlerdh=newDataHandler(ds);

body1.setDataHandler(dh);

//必须要设置名称

body1.setFileName(MimeUtility.encodeText("美女.jpg"));

MimeBodyPartbody2=newMimeBodyPart();

//第三步:

设置符件

DataSourceds2=newFileDataSource(newFile("./img/b.jpg"));

DataHandlerdh2=newDataHandler(ds2);

body2.setDataHandler(dh2);

//必须要设置名称

body2.setFileName(MimeUtility.encodeText("美女2.jpg"));

MimeBodyPartbody3=newMimeBodyPart();

//第三步:

设置符件

DataSourceds3=newFileDataSource(newFile("./img/m.mp3"));

DataHandlerdh3=newDataHandler(ds3);

body3.setDataHandler(dh3);

//必须要设置名称

body3.setFileName(MimeUtility.encodeText("世纪末.mp3"));

//将body1添加到mm

mm.addBodyPart(body1);

mm.addBodyPart(body2);

mm.addBodyPart(body3);

msg.setContent(mm);

//发送

Transport.send(msg);

}

10、项目示例-通过邮件激活账号

关键点就在于:

根据用户的给出的email,给这个email发送一个邮件。

这个邮件中应该带有一个激活码?

(32位UUID,64位UUID)。

提供以下功能:

注册功能-只要用户注册成功,就给他发邮件。

RegServlet

接收以下信息:

Name,pwd,email

提供用户激活功能.

接收以下信息:

只接收激活码。

提供用户登录功能:

用户只有激活账号以后才可以登录。

第一步:

创建数据结构

Users表:

Idnamepwdstate

444jack12341

第二个表:

Active

Uidactivecode

createdatabaseactivecharactersetutf8;

useactive;

createtableusers(

idvarchar(32)primarykey,

namevarchar(30),

pwdvarchar(32),

emailvarchar(50)

);

c

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1