day037 listener & Timer & 发送邮件工具类

1 WEB监听器

1.1 概述

Web监听器就是一个组件,可以对其他的内容,进行监视控制,当被监视的内容,发生指定的行为时,web监听器就可以给出相应的处理方案。

事件源:被监视的内容。

监听器:监视别人的东西,称为监听器。

事件:作用于事件源上的行为。

事件源对事件行为描述出来的一个对象,就是事件对象(事件对象可以包含事件源)。

1.2 Web中的事件源

一共有3个事件源:

(1)HttpServletRequest   请求对象

(2)HttpSession         session

(3)ServletContext       工程对象

1.3 Web中的监听器

Web中一共提供了8个监听器,分别监听上述的3个事件源。

8个监听器分为3类:

第1类:监视事件源的创建与销毁。(事件源的生命周期)

HttpServletRequestListener

HttpSessionListener

ServletContextListener

第2类:监视事件源的属性值变化。(属性值的增删改查)

HttpServletRequestAttributeListener

HttpSessionAttributeListener

ServletContextAttributeListener

第3类:监视session对象与javaBean的关系的两个监听器。

绑定与解绑定:

HTTPSessionBinDingListener

活化与钝化:

HttpSessionActivationListener

1.4 监听器的创建步骤

1:编写一个类,实现相应的接口。(实现8个监听器之一)

2:在web.xml中配置监听器。(前两类需要配,第3类不需要配)

1.5 监听器方法中的形式参数--事件对象

通过事件对象可以获取事件源对象,也可以获取与事件触发时的相关信息。

例如:

session属性变化的监听器,就可以获取session对象和session对象中发生变化的属性名和属性值。

相关API:

String

getName()     获取发送变化的属性名

HttpSession

getSession()     获取发送变化的session对象

Object

getValue()     获取发送变化的属性值

 

1.6 Web中特殊的监听器

与session相关的监听器中有两个特殊的监听器,特殊的监听器不需要在web.xml中进行配置。

特殊的监听器必须由javaBean来实现这两个接口中的其中之一。

实现接口的javaBean就会自动感知自己是否被session绑定或解绑定,活化或钝化。

名称解释:

绑定:

将javaBean对象保存到session对象中,就是绑定。

解绑定:

将javaBean对象从session中移除,就是解绑定。

活化:

从硬盘中将对象读取到内存中。

钝化:

从内存中将对象序列化到硬盘上。

2 定时器任务类Timer

2.1 Java中的定时器

java.util.Timer类:在java中也可以使用一个线程,单独的对某个任务进行延迟执行或周期性执行,这个定时器类就是Timer类。

2.2 Timer的使用

2.2.1 构造方法

直接使用空参数的构造方法即可:

Timer() 创建一个新计时器。

2.2.2 常用API

 void

schedule(TimerTask task, Date time)
在指定的时间(time)执行指定的任务(task)。

 void

schedule(TimerTask task, Date firstTime, long period)
在指定的时间(firstTime)开始,每间隔指定的时间(period)执行任务(task)

 void

schedule(TimerTask task, long delay)
从当前时间开始,延迟(delay)时间后执行指定的任务(task)。

 void

schedule(TimerTask task, long delay, long period)
从当前时间开始,延迟(delay)时间后,每间隔(period)时间循环执行指定的任务(task)。

TimerTask 就是一个Runnable接口的一个实现类,但是是一个抽象类,如果我们想创建一个TimerTask 类型的对象,就必须继承TimerTask这个类,重写run方法(因为实现了Runnable接口所以肯定有run方法),会由Timer对象自动调用run方法。

3 电子邮件

3.1 电子邮件概述

所谓的电子邮件就是在邮件服务器上的一个账户和一片空间,使用这个账号可以进行邮件发送或邮件接收。

邮件服务器:实质上就是一台电脑,安装了一个邮件服务器的软件。

3.2 电子邮件的发送与读取流程

邮件发送的流程示意图.png

3.3 电子邮件的发送与接收协议介绍

发送协议:SMTP协议,用于多台邮件服务器之间进行邮件交互。

发邮件的端口号:  25

 

接收协议:POP3协议,用于账户与服务器之间邮件的查收。

收邮件的端口号:  110

3.4 易邮邮件服务器的安装与使用

1:安装步骤;(直接下一步)

2:会提示无法使用浏览器;忽略即可;

image.png

3:配置服务器;

image.png

4:账号添加;(注册)

image.png

5:安装客户端软件(FoxMail),配置账户

image.png

image.png

image.png

3.5 使用java代码发送电子邮件

使用mail.jar可以完成电子邮件的发送。

Java代码发送邮件的步骤:(了解)

1:创建一个session会话对象(邮件服务器上的session会话对象);

2:设置登录的账户和密码;(设置发件人)

3:编写邮件内容;(发给谁)

4:发送邮件;(工具类的静态方法)

读已经编写好的工具类:

mustang_MailUtils

package 

import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;

public class mustang_MailUtils {

    public static void sendMail(String email, String emailMsg)
            throws AddressException, MessagingException {
        // 1.创建一个程序与邮件服务器会话对象 Session

        Properties props = new Properties();//注意:这里键值对中的键是固定死的
        //设置发送的协议
        props.setProperty("mail.transport.protocol", "SMTP");
        
        //设置发送邮件的服务器
        props.setProperty("mail.host", "smtp.126.com");//不走外网的话可以填localhost
        props.setProperty("mail.smtp.auth", "true");// 指定验证为true

        // 创建验证器
        Authenticator auth = new Authenticator() {
            public PasswordAuthentication getPasswordAuthentication() {
                //设置发送人的帐号和密码
                return new PasswordAuthentication("abc", "a");
            }
        };

        Session session = Session.getInstance(props, auth);

        // 2.创建一个Message,它相当于是邮件内容
        Message message = new MimeMessage(session);

        //设置发送者
        message.setFrom(new InternetAddress("abc@126.com"));

        //设置发送方式与接收者
        message.setRecipient(RecipientType.TO, new InternetAddress(email)); 

        //设置邮件主题
        message.setSubject("邮件主题");
        // message.setText("这是一封激活邮件,请<a href='#'>点击</a>");

        //设置邮件内容
        message.setContent(emailMsg, "text/html;charset=utf-8");

        // 3.创建 Transport用于将邮件发送
        Transport.send(message);
    }
}

使用举例:

package 

import javax.mail.MessagingException;
import javax.mail.internet.AddressException;

public class MyTest {

    public static void main(String[] args) throws Exception {
        //给自己的b账户发邮件
        MyMailUtils.sendMail("b@estore.com","嘿嘿");
        System.out.println("完事...");
    }

}

4 综合案例-发生日祝福

4.1 需求

当服务器启动的时候,查询数据库中今天过生日的用户,并给这些用户发送生日祝福邮件;

4.2 技术分析

1:要想知道服务器已经启动了,就需要使用web中的监听器来完成;

2:延迟一定的时间或每间隔一定的时间做事情,需要使用java中的定时任务完成;

3:使用java程序,发送电子邮件;

4.3 步骤实现

1:环境搭建;(监听器,service,dao,domain,utils)

2:创建数据库和模型类及三层包结构;

3:编写一个监听器;(监听ServletContext对象的创建);当触发的时候,查询数据库中今天过生日的所有用户,发送祝福邮件;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值