监听器就是监听某个对象的的状态变化的组件
监听器的相关概念:
事件源:被监听的对象---主要三个域对象request ,session ,servletContext
监听器:监听事件源对象事件源对象的状态的变化都会触发监听器
响应行为:监听器监听到事件源的状态变化时所涉及的功能代码
一.各域对象对应的监听器展示
ServletContext | HttpSession | ServletRequest | |
---|---|---|---|
域对象的创建及销毁 | ServletContextListener | HttpSessionListener | ServletRequestListener |
域对象内的属性变化 | ServletContextAttributeListener | HttpSessionAttributeListener | ServletRequestAttributeListener |
二.案例演示
注意:监听器类上方需要加入@WebListener注解
1.测试准备
项目工程:
2.代码展示
***index.jsp
<%--
Created by IntelliJ IDEA.
User: WHW
Date: 2019/7/31
Time: 19:56
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>监听器</title>
</head>
<body>
<fieldset>
<input type="button" value="点击测试"
onclick="location.href='${pageContext.request.contextPath}/do'">
</fieldset>
</body>
</html>
***DoSomethingServlet.java
package com.howie.controller;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
/**
* @Author weihuanwen
* @Date 2019/7/31 19:59
* @Version 1.0
*/
@WebServlet(urlPatterns = "/do")
public class DoSomethingServlet extends HttpServlet {
public boolean vertifyStr(String str){
return str != null && !"".equals(str);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//request相关操作
req.setAttribute("request","1");
req.setAttribute("request","2");
req.removeAttribute("request");
//获取ServletContext对象
ServletContext servletContext = req.getServletContext();
servletContext.setAttribute("servletContext","1");
servletContext.setAttribute("servletContext","2");
servletContext.removeAttribute("servletContext");
//获取session对象
HttpSession session = req.getSession();
session.setAttribute("session","1");
session.setAttribute("session","2");
session.removeAttribute("session");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
}
}
***MyListener.java
package com.howie.listener;
import javax.servlet.*;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
/**
* @Author weihuanwen
* @Date 2019/7/31 22:29
* @Version 1.0
*/
@WebListener
public class MyListener implements
ServletContextListener,
ServletContextAttributeListener,
HttpSessionListener,
HttpSessionAttributeListener,
ServletRequestListener,
ServletRequestAttributeListener {
@Override
public void attributeAdded(ServletContextAttributeEvent servletContextAttributeEvent) {
System.out.println(">>>>>ServletContext中添加数据");
}
@Override
public void attributeRemoved(ServletContextAttributeEvent servletContextAttributeEvent) {
System.out.println(">>>>>ServletContext中移除数据");
}
@Override
public void attributeReplaced(ServletContextAttributeEvent servletContextAttributeEvent) {
System.out.println(">>>>>ServletContext中替换数据");
}
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
System.out.println("ServletContext初始化....");
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
System.out.println("ServletContext被销毁....");
}
@Override
public void attributeAdded(ServletRequestAttributeEvent servletRequestAttributeEvent) {
System.out.println(">>>>>request中添加数据");
}
@Override
public void attributeRemoved(ServletRequestAttributeEvent servletRequestAttributeEvent) {
System.out.println(">>>>>request中移除数据");
}
@Override
public void attributeReplaced(ServletRequestAttributeEvent servletRequestAttributeEvent) {
System.out.println(">>>>>request中替换数据");
}
@Override
public void requestDestroyed(ServletRequestEvent servletRequestEvent) {
System.out.println("Request被销毁....");
}
@Override
public void requestInitialized(ServletRequestEvent servletRequestEvent) {
System.out.println("Request初始化....");
}
@Override
public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) {
System.out.println(">>>>>session中添加数据");
}
@Override
public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) {
System.out.println(">>>>>session中移除数据");
}
@Override
public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) {
System.out.println(">>>>>session中替换数据");
}
@Override
public void sessionCreated(HttpSessionEvent httpSessionEvent) {
System.out.println("Session被创建....");
}
@Override
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
System.out.println("Session被销毁....");
}
}
3.测试:
①前端展示:
②点击按钮后控制台输出:
Request初始化....
>>>>>request中替换数据
>>>>>request中添加数据
>>>>>request中替换数据
>>>>>request中移除数据
>>>>>ServletContext中添加数据
>>>>>ServletContext中替换数据
>>>>>ServletContext中移除数据
>>>>>session中添加数据
>>>>>session中替换数据
>>>>>session中移除数据
Request被销毁....