day21其他监听器在线支付邮件.docx
- 文档编号:3729742
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:17
- 大小:58.52KB
day21其他监听器在线支付邮件.docx
《day21其他监听器在线支付邮件.docx》由会员分享,可在线阅读,更多相关《day21其他监听器在线支付邮件.docx(17页珍藏版)》请在冰豆网上搜索。
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-与服务器 Auth 请求登录 Mail 发件人的email: Rcpt 收件的地址: 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发的邮件, //第七步: 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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- day21 其他 监听器 在线 支付 邮件