7、 过滤器Filter、监听器Listener、邮箱

1 过滤器Filter

1.1 概念

⽣活中的过滤器:净⽔器,空⽓净化器,⼟匪
web中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,完成⼀
些特殊的功能。

Servlet规范:
  三大核心: Servlet Filter Listener

过滤器: 符合条件放行, 不符合条件拦截
       过滤器可以有多个
       进入资源, 按正序访问; 返回响应按倒序返回
       过滤的资源可以自定义

过滤器的作⽤:
⼀般⽤于完成通⽤的操作。如:登录验证、统⼀编码处理、敏感字符过滤...

1. 2 过滤器的使用步骤

  1.实现接口 Filter
  2.实现方法 init destroy doFilter
  3.注册 web.xml

 doFilter(request, response, chain)
 FilterChain: 过滤器链, 执行顺序取决于filter-mapping顺序
    // 放行 - 递归
    chain.doFilter(request, response);

Servlet[url-pattern]: 通过这个路径来访问这个Servlet资源
Filter[url-pattern]: 访问哪些资源时, 需要执行这个过滤器
@WebFilter("/*")//访问所有资源之前,都会执⾏该过滤器
public class FilterDemo1 implements Filter {
 @Override
 public void init(FilterConfig filterConfig) throws ServletException {
 }
 @Override
 public void doFilter(ServletRequest servletRequest, ServletResponse
servletResponse, FilterChain filterChain) throws IOException,
ServletException {
 System.out.println("filterDemo1被执⾏了....");
 //放⾏
 filterChain.doFilter(servletRequest,servletResponse);
 }
 @Override
 public void destroy() {
 }}

1.3 过滤器细节

1.3.1 web.xml配置

<filter>
 <filter-name>demo1</filter-name>
 <filter-class>com.zzxx.web.filter.FilterDemo1</filter-class>
</filter> <filter-mapping>
 <filter-name>demo1</filter-name>
 <!-- 拦截路径 -->
 <url-pattern>/*</url-pattern>
</filter-mapping>

1.3.2 过滤器执⾏流程

1. 执⾏过滤器
2. 执⾏放⾏后的资源
3. 回来执⾏过滤器放⾏代码下边的代码

1.3.3 过滤器⽣命周期⽅法

  1. init:在服务器启动后,会创建Filter对象,然后调⽤init⽅法。只执⾏⼀次。⽤于加载资源

  2. doFilter:每⼀次请求被拦截资源时,会执⾏。执⾏多次

  3. destroy:在服务器关闭后,Filter对象被销毁。如果服务器是正常关闭,则会执⾏destroy⽅法。只执⾏⼀次。⽤于释放资源

     Filter对象的⽣命周期:
     	Filter何时创建:服务器启动时就创建该filter对象;
     	Filter何时销毁:服务器正常关闭时filter销毁。
    

FilterAPI详解:

1.init(FilterConfig filterConfig)
其中参数 filterConfig 代表该 Filter 对象的配置信息的对象,内部封装是该 filter 的配置信息。

@Override
public void init(FilterConfig filterConfig) throws ServletException {
 System.out.println("Filter1创建...");
 String filterName = filterConfig.getFilterName();
 ServletContext servletContext = filterConfig.getServletContext();
 String driver = filterConfig.getInitParameter("driver");
}
  1. doFilter(ServletRequest, ServletResponse, FilterChain)
    其中的参数:
    ServletRequest/ServletResponse:每次在执⾏doFilter⽅法时web容器负责创建⼀个request和⼀个response对象作为doFilter的参数传递进来。该request和response就是在访问⽬标资源的service⽅法时的request和response。
    FilterChain:过滤器链对象,通过该对象的doFilter⽅法可以放⾏该请求。

在这里插入图片描述

1.3.4 过滤器配置详解

1. 拦截路径配置
	1. 具体资源路径:/index.jsp 只有访问index.jsp资源时,过滤器才会被执⾏
	2. 拦截⽬录:/user/* 访问/user下的所有资源时,过滤器都会被执⾏
	3. 后缀名拦截: *.jsp 访问所有后缀名为jsp资源时,过滤器都会被执⾏
	4. 拦截所有资源:/* 访问所有资源时,过滤器都会被执⾏
  1. 拦截⽅式配置:资源被访问的⽅式
    注解配置:设置dispatcherTypes属性
    REQUEST:默认值。浏览器直接请求资源
    FORWARD:转发访问资源
    INCLUDE:包含访问资源
    ERROR:错误跳转资源
    ASYNC:异步访问资源

web.xml配置
设置标签即可

1.3.5 过滤器链

执⾏顺序:如果有两个过滤器:过滤器1和过滤器2
	过滤器1
	过滤器2
	资源执⾏
	过滤器2
	过滤器1
过滤器先后顺序问题
	注解配置:按照类名的字符串⽐较规则⽐较,值⼩的先执⾏
	如: AFilter 和 BFilter,AFilter就先执⾏了。
	web.xml配置: <filter-mapping>谁定义在上边,谁先执⾏

1.4 总结Filter的作⽤

1. 公共代码的提取
2. 可以对request和response中的⽅法进⾏增强(装饰者模式/动态代理)
3. 进⾏权限控制

2 监听器Listener

2.1 概念

概念:web的三⼤组件之⼀,监听某个对象的的状态变化的组件
事件监听机制:
事件:⼀件事情
事件源 :事件发⽣的地⽅,被监听的对象【三个域对象request、session、
servletContext】
监听器 :⼀个对象,事件源对象的状态的变化都会触发监听器
注册监听:将事件、事件源、监听器绑定在⼀起。 当事件源上发⽣某个事件后,执⾏监听器代码
响应⾏为:监听器监听到事件源的状态变化时所涉及的功能代码,也称监听器代码

2.2 监听器种类

第⼀维度:按照被监听的对象划分:ServletRequest域、HttpSession域、ServletContext域
第⼆维度:监听的内容分:监听域对象的创建与销毁的、监听域对象的属性变化的
在这里插入图片描述

2.3 监听三⼤域对象的创建与销毁的监听器

1. 监听ServletContext对象的创建与销毁的监听器:ServletContextListener
	1. ServletContext的⽣命周期
		何时创建:服务器启动创建
		何时销毁:服务器关闭销毁
		
	2. 监听器的编写步骤
		1. 编写⼀个监听器类去实现监听器接⼝
		2. 覆盖监听器的⽅法
		3. 需要在web.xml中进⾏配置 --- 注册
	3. 监听的⽅法

在这里插入图片描述
4. 配置⽂件 – web.xml

<!-- 监听ServletContext对象创建与销毁的监听器 -->
<listener>
 <listenerclass>com.zzxx.listener.create.MyServletContextListener</listenerclass>
</listener>
5. ServletContextListener监听器的主要作⽤
	1. 初始化的⼯作:初始化对象、初始化数据 ---- 加载数据库驱动、连接池的初始化
	2. 加载⼀些初始化的配置⽂件:例如spring的配置⽂件
	3. 任务调度:例如定时器,Timer/TimerTask

2.4 监听三⼤域对象内容改变的监听器

域对象的通⽤的⽅法:
	1. setAttribute(name, value)
		触发添加属性的监听器的⽅法
		触发修改属性的监听器的⽅法
		
	2. getAttribute(name)
	3. removeAttribute(name)
		触发删除属性的监听器的⽅法

2.5 与session中绑定的对象相关的监听器(对象感知监听器)

1. 即将要被绑定到session中的对象有⼏种状态
		绑定状态:就⼀个对象被放到session域中
		解绑状态:就是这个对象从session域中移除了
		钝化状态:是将session内存中的对象持久化(序列化)到磁盘
		活化状态:就是将磁盘上的对象再次恢复到session内存中
		
		⾯试题:当⽤户很多时,怎样对服务器进⾏优化?
		
2. 绑定与解绑的监听器:HttpSessionBindingListener

在这里插入图片描述](https://img-blog.csdnimg.cn/1e137020cb6a4d6b8860e9edc66f6271.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSpIOmYsyDlnKgg57q_4oKs,size_20,color_FFFFFF,t_70,g_se,x_16)

<Context>
 <!-- maxIdleSwap:session中的对象多⻓时间不使⽤就钝化 -->
 <!-- directory:钝化后的对象的⽂件写到磁盘的哪个⽬录下,配置钝化的对
象⽂件在 work/catalina/localhost/钝化⽂件 -->
 <Manager
className="org.apache.catalina.session.PersistentManager"
maxIdleSwap="1">
 <Store className="org.apache.catalina.session.FileStore"
directory="bonnie" />
 </Manager>
</Context>
  1. 监听器代码

在这里插入图片描述

2.6 监听器: Listener(接口) 6+2

  1.域对象相关  ServletContext  HttpSession  HttpServletRequest
    a 和域的创建和销毁有关    b 和域内容的改变有关

    a 域对象的创建和销毁 - 生命周期
      ServletContext: 服务器开启创建, 服务器关闭销毁
      HttpSession: 第一次调用 getSession() 创建, invalidate()销毁
      HttpServletRequest: 请求发送创建, GC销毁
    b 域内容的改变: setAttribute() removeAttribute()

  2.监听器的作用:
    监测到对应的行为, 针对这个行为作出对应的事情

  3.实现步骤:
    1.实现接口
    2.实现方法
    3.注册 web.xml

  4.2个监听器, 和session域中的对象有关 - 对象感知监听器
    a 对象添加到session中 和 对象从session中移除
    b 在session中的对象的钝化和活化
    使用: 添加在对象上, 而且不需要注册

    钝化: 服务器关闭时, session对象中的数据从内存中 存储到 磁盘中
         默认 tomcat/work/应用/SESSIONS.ser文件
    活化: 服务器开启时, session数据从文件中 恢复到 内存中
    对象->字节: 序列化   字节->文件: 持久化

    钝化和活化的意义: 用磁盘空间来交换内存空间
        设置钝化时间

3 邮箱服务

3.1 邮箱服务器的基本概念

1. 邮件的客户端:可以只安装在电脑上的也可以是⽹⻚形式的
2. 邮件服务器:起到邮件的接受与推送的作⽤
3. 邮件发送的协议:
		协议:就是数据传输的约束
		接受邮件的协议:POP3 IMAP
		发送邮件的协议:SMTP

在这里插入图片描述

3.2 邮件的发送和接收过程

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值