servlet003:监听器

监听器就类似于js里面的事件,比如鼠标点击事件,键盘事件等。触发就有响应。同样它也是一个普通的java类实现了一个接口ServletRequestListenner,才变成监听器。
同样也有request,response,session,application等多个监听器。实现对不同会话范围的监听。

  • 制作监听器,
    1.定义一个类,让这个类实现监听器接口
    2.实现抽象方法,这个方法的名字就表示了这个方法什么时候执行!
    其实就是时间
    在这里插入图片描述
    监听器做好了之后,需要在web.xml中配置
    在这里插入图片描述

当打开浏览器,访问页面的时候会话就开始了,监听器也开始监听会话,但是监听什么时候结束了?关掉浏览器监听器还是没有结束,我们知道当第一次会话的时候服务器会给客户端发送一个叫jsessionid的cookie。当我们关闭浏览器,客户端的jsessionid销毁了,但是服务器端的没有销毁,所以认定监听器还没有执行完毕,这个jsessionid在服务器端默认保存时间30分钟,30分钟过后就会自动销毁,监听器也就执行完了。但是我们也可以在客户端这边手动销毁jsessionid,需要使用

session.invalidate

每次开客户端浏览器,确实会触发sessionCreated方法,但是关闭浏览器不会让会话销毁,必须调用session.invalidate才能销毁i会话,从而触发sessionDestoryed方法。

致此我们可以利用监听器销毁jsessionid(安全退出)才算退出的原理,可以统计当前在线人数

package com.z.listener;

import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class MyListener implements HttpSessionListener{
	private int count=0;
	@Override
	public void sessionCreated(HttpSessionEvent se) {
		System.out.println("会话创建了");
		count++;
		System.out.println("在线人数"+count+"个");
		se.getSession().getServletContext().setAttribute("count",count);
	}
	@Override
	public void sessionDestroyed(HttpSessionEvent se) {
		System.out.println("会话销毁了");
		System.out.println("在线人数"+count+"个");
		se.getSession().getServletContext().setAttribute("count",count);
	}
}

PageContext pageContext = null;
HttpSession session = null;
ServletContext application = null;
ServletConfig config = null;
JspWriter out = null;
Object page = this;
JspWriter _jspx_out = null;
PageContext _jspx_page_context = null;

  • 过滤器里面处理缓存
    禁止浏览器缓存所有动态页面的过滤器:
    1,有3个HTTP响应头字段都可以禁止浏览器缓存当前页面,他们在Servlet中的代码如下:
response.setDateHeader("Expires",-1);//指定昂也在缓存中的过期时间
response.setHeader("Cache-Control","no-cache");//http消息头,控制网页的缓存
response.setHeader("Cache-Control","no-store")//禁止浏览器缓存
response.setHeader("Pragma","no-cache");//禁止浏览器从缓存中浏览页面类容
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值