Fliter & Listener

Listener

监听器

作用

监听某一事件的发生。状态的改变。

监听器内部实现机制

接口回调

接口回调

A在执行循环,当循环到5的时候, 通知B。

事先先把一个对象传递给 A , 当A 执行到5的时候,通过这个对象,来调用B中的方法。 但是注意,不是直接传递B的实例,而是传递一个接口的实例过去。

web监听器

8个,3类

如何创建监听器

定义一个类,实现相关的监听器接口,然后在web.xml中配置。

也可以直接通过编译器创建。

监听作用域的创建和销毁

作用域 ------ 对应的类 ------- 对应的监听器接口

request — httpServletRequest ----- ServletRequestListener

session — httpSession ---- HttpSessionListener

application — ServletContext------- ServletContextListener

1.request — httpServletRequest ----- ServletRequestListener

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener; public class listenertest2 implements ServletRequestListener{
//监听作用域对象的销毁
public void requestDestroyed(ServletRequestEvent sre) {
//这样写是为了直观看到监听器是否被使用,实际项目中根据需求书写
System.out.println("RequestListener 销毁了");
}
//监听作用域对象的创建
public void requestInitialized(ServletRequestEvent sre) {
//这样写是为了直观看到监听器是否被使用,实际项目中根据需求书写
System.out.println("RequestListener 创建了");
}
}
作用

监听request对象的创建和销毁

作用域
request创建:
访问服务器上的任意资源都会有请求出现。
访问 html: 会
访问 jsp: 会
访问 servlet : 会
request销毁:
服务器已经对这次请求作出了响应。

2.session — httpSession ---- HttpSessionListener

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener; public class listenertest3 implements HttpSessionListener{
//监听作用域对象的创建
public void sessionCreated(HttpSessionEvent se) {
System.out.println("SessionListener 创建了");
}
//监听作用域对象的销毁
public void sessionDestroyed(HttpSessionEvent se) {
System.out.println("SessionListener 销毁了");
}
}
作用

监听session对象的创建与销毁

统计在线人数.

作用域
session的创建
只要调用getSession
html: 不会
jsp: 会 getSession();
servlet: 会
session的销毁
超时 30分钟
非正常关闭 销毁 ​ 正常关闭服务器(序列化)

3.application — ServletContext------- ServletContextListener

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener; public class listenertest1 implements ServletContextListener{
//监听作用域对象的创建
public void contextInitialized(ServletContextEvent sce) {
System.out.println("ContextListener 创建了");
}
//监听作用域对象的销毁
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("ContextListener 销毁了");
}
}
作用

监听application 对象的创建与销毁

利用它来,在servletcontext创建的时候,

  1. 完成自己想要的初始化工作
  2. 执行自定义任务调度。 执行某一个任务。 Timer
作用域

servletcontext创建:

​ 启动服务器的时候

servletContext销毁:

​ 关闭服务器. 从服务器移除项目

监听三个作用域属性状态变更

作用域 --------- 对应监听其属性的监听器接口

servletContext — ServletContextAttributeListener

request — ServletRequestAttributeListener

session — HttpSessionAttributeListener

servletContext — ServletContextAttributeListener

request — ServletRequestAttributeListener

session — HttpSessionAttributeListener

监听HttpSession中的存值状态

这一类监听器不用注册

HttpSessionBindingListener

1. 让javaBean 实现该接口即可

@Override
public void valueBound(HttpSessionBindingEvent event) {
System.out.println("对象被绑定进来了");
}
@Override
public void valueUnbound(HttpSessionBindingEvent event) {
System.out.println("对象被解除绑定");
}
作用

监听对象与session 绑定和解除绑定 的动作

HttpSessionActivationListener

import java.io.Serializable;

import javax.servlet.http.HttpSessionActivationListener;
import javax.servlet.http.HttpSessionEvent; public class bean02 implements HttpSessionActivationListener,Serializable {
int a;
public bean02(int a) {
super();
this.a = a;
}
//get和set方法得写上不然通过jsp的EL表达式取不到值
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public void sessionWillPassivate(HttpSessionEvent se) {
System.out.println("sessoin 钝化");
}
public void sessionDidActivate(HttpSessionEvent se) {
System.out.println("sessoin 活化");
}
}
作用

用于监听现在session的值 是 钝化 (序列化)还是活化 (反序列化)的动作

钝化 (序列化)

把内存中的数据 存储到硬盘上

活化 (反序列化)

把硬盘中的数据读取到内存中。

session的钝化活化的用意何在

session中的值可能会很多, 并且我们有很长一段时间不使用这个内存中的值, 那么可以考虑把session的值可以存储到硬盘上【钝化】,等下一次在使用的时候,在从硬盘上提取出来。 【活化】

如何让session的在一定时间内钝化.

做配置即可

1. 在tomcat里面 conf/context.xml 里面配置

		对所有的运行在这个服务器的项目生效  

2. 在conf/Catalina/localhost/context.xml 配置

		对 localhost生效。  localhost:8080

3. 在自己的web工程项目中的 META-INF/context.xml

		只对当前的工程生效。

	maxIdleSwap : 1分钟不用就钝化
directory : 钝化后的那个文件存放的目录位置,可自定义。 D:\tomcat\apache-tomcat-7.0.52\work\Catalina\localhost\ListenerDemo\wf <Context>
<Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1">
<Store className="org.apache.catalina.session.FileStore" directory="wf"/>
</Manager>
</Context>

Filter

过滤器,对客户端发出的请求进行过滤。在浏览器发出请求后,就由过滤器进行过滤,然后才交给servlet处理。其实过滤器起到拦截作用。

作用
  1. 对一些敏感词汇进行过滤
  2. 统一设置编码
  3. 自动登录

如何使用filter

1.定义一个类实现Filter接口

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class filter02 implements Filter { //过滤器销毁时调用
public void destroy() { }
//在执行过滤时调用
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("fliter02");
//chian的作用是当过滤器检测后,如果不用把请求过滤掉,那么就使用chain把请求传递到下一个地方。
chain.doFilter(request, response);
}
//过滤器创建时调用
public void init(FilterConfig fConfig) throws ServletException { }
}

2.过滤器注册

在web.xml中注册和servlet注册方法基本一样

  <filter>
<display-name>FilterDemo</display-name>
<filter-name>filter02</filter-name>
<filter-class>test4.filter02</filter-class>
</filter>
<filter-mapping>
<filter-name>filter02</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

Filter的生命周期

创建

​ 在服务器启动的时候就创建。

销毁

​ 服务器停止的时候。

Filter执行顺序

  1. 客户端发出请求,先经过过滤器, 如果过滤器放行,那么才能到servlet
  2. 如果有多个过滤器, 那么他们会按照注册的映射顺序 来 排队。 只要有一个过滤器, 不放行,那么后面排队的过滤器以及咱们的servlet都不会收到请求。

Filter细节:

  1. init方法的参数 FilterConfig , 可以用于获取filter在注册的名字 以及初始化参数。 其实这里的设计的初衷与ServletConfig是一样的。
  2. 如果想放行,那么在doFilter 方法里面操作,使用参数 chain
	chain.doFilter(request, response); 放行, 让请求到达下一个目标。
  1. /* 写法格式与servlet一样。

    1. 全路径匹配 以 / 开始

      /LoginServlet

    2. 以目录匹配 以 / 开始 以 * 结束

      /demo01/*

    3. 以后缀名匹配 以 * 开始 以后缀名结束

      *.jsp *.html *.do

  2. 针对 dispatcher 设置

    REQUEST : 只要是请求过来,都拦截,默认就是REQUEST

    FORWARD : 只要是转发都拦截。

    ERROR : 页面出错发生跳转

    INCLUDE : 包含页面的时候就拦截。

JavaWeb之Fliter & Listener的更多相关文章

  1. JavaWeb基础—监听器Listener

    javaWeb三大组件: servlet listener(用的不多) filter 什么叫监听器: 初次相见:AWT 二次相见:SAX(XML解析时)Bundle 绑定 监听器是一个接口,内容由我们 ...

  2. Javaweb基础--->监听器listener(转发)

    JavaWeb中的监听器 1.基本概念 JavaWeb中的监听器是Servlet规范中定义的一种特殊类,它用于监听web应用程序中的ServletContext, HttpSession和 Servl ...

  3. 深入分析JavaWeb Item38 -- 监听器(Listener)高速学习

    一.监听器介绍 1.1.监听器的概念 监听器是一个专门用于对其它对象身上发生的事件或状态改变进行监听和对应处理的对象,当被监视的对象发生情况时,马上採取对应的行动.监听器事实上就是一个实现特定接口的普 ...

  4. 深入分析JavaWeb Item39 -- 监听器(Listener)学习进阶

    一.监听域对象中属性的变更的监听器 域对象中属性的变更的事件监听器就是用来监听 ServletContext, HttpSession, HttpServletRequest 这三个对象中的属性变更信 ...

  5. JavaWeb 三大器--Listener、Filter 和Interceptor 总结

    说明:web.xml的加载顺序是:[Context-Param]->[Listener]->[Filter]->[Servlet],而同个类型之间的实际程序调用的时候的顺序是根据对应 ...

  6. JavaWeb学习笔记--Listener

    JSP中的监听器   Web程序在服务器运行的过程中,程序内部会发生多事件,如Web应用的启动和停止.Session会话的开始和销毁.用户请求的开始和结束等等.有时程序员需要在这些事件发生的时机执行一 ...

  7. javaWeb学习之Listener监听

    ] 一.监听器Listener javaEE包括13门规范 在课程中主要学习 servlet技术 和 jsp技术 其中 servlet规范包括三个技术点:servlet  listener  filt ...

  8. javaweb(4)之Listener&Filter

    监听器 (Listener) 介绍 监听器用于监听 web 应用中某些对象.信息的创建.销毁.增加,修改,删除等动作的发生,然后作出相应的响应处理.当范围对象的状态发生变化的时候,服务器自动调用监听器 ...

  9. JavaWeb 补充(Filter&Listener)

    目录 Filter:过滤器 Listener:监听器 Filter:过滤器 1. 概念:     * 生活中的过滤器:净水器,空气净化器,土匪.     * web中的过滤器:当访问服务器的资源时,过 ...

随机推荐

  1. 利用百度文字识别API识别图像中的文字

      本文将会介绍如何使用百度AI开放平台中的文字识别服务来识别图片中的文字.百度AI开放平台的访问网址为:http://ai.baidu.com/ ,为了能够使用该平台提供的AI服务,你需要事先注册一 ...

  2. eclipse的一些常用快捷键

    掌握了eclipse快捷键功能,能够大大提高开发效率. 这里总结一些eclipse的常用快捷键. 编辑相关快捷键  1. [ALT+/]:此快捷键为用户编辑的好帮手,能为用户提供内容的辅助,不要为记不 ...

  3. 在 Linux 下学习 C 语言有什么好处?

    作者:宅学部落链接:https://www.zhihu.com/question/23893390/answer/832610610来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...

  4. Android给Viewpager默认指定页

    上结果代码 private void setViewPaperItem(int position) { try { Class c = Class.forName("android.supp ...

  5. JavaScript中的this绑定丢失及解决方法

    经常犯的错误:混淆了this绑定规则. 代码如下: var obj = { id: 'vexekefo', cool() { console.log(this.id); } }; var id = ' ...

  6. CSS学习笔记-背景属性

    一.背景尺寸属性:    1.含义:        背景尺寸属性是CSS3中新增的一个属性,专门用于设置背景图片大小 2.格式:        1.1具体像素:             backgro ...

  7. 20个常用的JavaScript字符串方法

    摘要: 玩转JS字符串. 原文:JS 前20个常用字符串方法及使用方式 译者:前端小智 Fundebug经授权转载,版权归原作者所有. 本文主要介绍一些最常用的JS字符串函数. 1. charAt(x ...

  8. 使用bean接收ajax表单提交数据包含文件上传

    这几天写带图片上传的表单提交,一个配置小程序活动弹出框样式的功能,记录一下一些需要注意的地方 首先是 前端 JSP 文件的表单 <form class="search-wrapper& ...

  9. pymysql连接

    import pymysql conn=pymysql.connect(host='localhost',user='root',password='123',db='sg',charset='utf ...

  10. 示例:Oracle表锁、行锁模拟和处理

    for update模拟锁表 --session 1 SQL> select * from tt for update; --session 2 SQL> update tt set id ...