java servlet监视器_servlet(二)、监听器 javax.servlet.Filter

servlet(二)、监听器 javax.servlet.Filter

一、什么是监听器

javaWeb规范包括三个技术点:servlet 、listener 、filter;监听器就是监听某个对象的的状态变化的组件。监听器是一个java类,用来监听其他javaBean的变化。在javaWeb中监听器是用来监听三个对象(request、session、servletConfig)的状态。监听器的相关概念事件源:

1、被监听的对象(三个域对象 request,session,servletContext)

2、监听器:监听事件源对象, 事件源对象的状态的变化都会触发监听器 。

3、注册监听器:将监听器与事件源进行绑定。

4、响应行为:监听器监听到事件源的状态变化时,所涉及的功能代码(程序员编写代码)

二、javaWeb的监听器

1、监听的域对象

1) request

2) session

3) servletConfig

2、事件源和监听器绑定的过程

通过配置web.xmlwancheng

3、servlet提供的监听器

servlet提供了8个监听器

1) 第一类:监听三个域对象的创建和销毁的监听器3个

对象类型

对应的监听器

ServletContext

ServletContextListener

HttpSession

HttpSessionListener

HttpServletRequest

ServletRequestListener

2) 第二类:监听三个域对象变更的监听器(属性添加,属性移除,属性替换)3个

对象类型

对应的监听器

ServletContext

ServletContextAttributeListener

HttpSession

ServletRequestAttributeListener

HttpServletRequest

HttpSessionAttributeListener

3) 第三类:监听HttpSession对象中的JavaBean的状态的改变.(绑定,解除绑定,钝化和活化)2个

对象类型

对应的监听器

HttpSession

HttpSessionBindingListener(绑定,解除绑定)

HttpSession

HttpSessionActivationListener(钝化和活化)

三、监听实例——三大域对象的创建与销毁的监听器

1、ServletContextListener

ServletContextListener监听器的主要作用(相当于监听tongcat启动和关闭):

1) 初始化的工作:初始化对象;初始化数据。比如加载数据库驱动,对连接池的初始化。

2) 加载一些初始化的配置文件;比如spring的配置文件。

3) 任务调度(定时器Timer/TimerTask)

监听ServletContext域的创建与销毁的监听器,Servlet域的生命周期:在服务器启动创建,服务器关闭时销毁;监听器的编写步骤:

1) 编写一个监听器类去实现监听器接口

2) 覆盖监听器的方法

3) 需要在web.xml中进行配置(注册)

例子:

2、HttpSessionListener

监听Httpsession域的创建与销毁的监听器。HttpSession对象的生命周期:第一次调用request.getSession时创建;销毁有以下几种情况(服务器关闭、session过期、 手动销毁)

例子:统计在线人数,每一个浏览器访问都会记录一次,当一个浏览器退出时就会让在线人数减掉1.

在src/main/webapp下新建一个名为web的包,并在web包下面新建两个类,分别是:

CountLoginListen.java

package web;

import javax.servlet.ServletContext;

import javax.servlet.http.HttpSession;

import javax.servlet.http.HttpSessionEvent;

import javax.servlet.http.HttpSessionListener;

public class CountListener implements HttpSessionListener {

private int count = 0;

public void sessionCreated(HttpSessionEvent se) {

count++;

HttpSession session = se.getSession();

ServletContext sct = session.getServletContext();

sct.setAttribute("count", count);

}

public void sessionDestroyed(HttpSessionEvent se) {

count--;

HttpSession session = se.getSession();

ServletContext sct = session.getServletContext();

sct.setAttribute("count", count);

}

}

LoginOutServlet.java

package web;

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

public class LogoutServlet extends HttpServlet {

public void service(HttpServletRequest request, HttpServletResponse response) throws IOException {

response.setContentType("text/html;charset=utf8");

PrintWriter out = response.getWriter();

HttpSession session = request.getSession();

session.invalidate();

out.close();

}

}

2) 配置web.xml

web.CountListener

h

web.LogoutServlet

h

/logout

3) 在webapp下新建一个jsp文件,名为:index.jsp

pageEncoding="utf-8"%>

Insert title here

当前有

登出

3、ServletRequestListener

三、监听实例——三大域对象的属性的变化

1、ServletContextAttibuteListener

2、HttpSessionBindingListener

3、HttpSessionActivationListener

三、监听实例——三大域对象的属性的变化

1、

2、

3、

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值