Listener: 监听器

监听作用域的创建与销毁

  • ServletContextListener:应用作用域监听器,监听服务器启动与关闭
package com.javakc.web1.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
//应用作用域监听器,监听服务器启动与关闭
@WebListener
public class CustomServletContextListener implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("监听到服务器正在启动中...");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("监听到服务器正在关闭中...");
    }
}

数据字典

package com.javakc.web1.listener;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import java.util.HashMap;
import java.util.Map;

//应用作用域监听器,监听服务器启动与关闭
@WebListener
public class CustomServletContextListener2 implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("监听到服务器正在启动中...");

        //数据字典
        /*Map<Integer, Object> genderMap = Map.of(1, "男", 2, "女", 3, "保密");
        Map<Integer, Object> levelMap = Map.of(1, "初级", 2, "中级", 3, "高级");*/

        Map<Integer, Object> genderMap = new HashMap<>();
        genderMap.put(1, "男");
        genderMap.put(2, "女");
        genderMap.put(3, "保密");

        Map<Integer, Object> levelMap = new HashMap<>();
        levelMap.put(1, "初级");
        levelMap.put(2, "中级");
        levelMap.put(3, "高级");

        ServletContext context = sce.getServletContext();
        context.setAttribute("gender", genderMap);
        context.setAttribute("level", levelMap);
    }
}
package com.javakc.web1.listener;

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 java.io.IOException;

@WebServlet(
        name = "UserServlet",
        urlPatterns = "/user.do",
        loadOnStartup = 0
)
public class UserServlet1 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println(request.getServletContext().getAttribute("level"));
        System.out.println(request.getServletContext().getAttribute("gender"));
    }
}
  • HttpSessionListener:会话作用域监听器,监听用户登陆与退出
package com.javakc.web1.listener;

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

//会话作用域监听器
@WebListener
public class CustomHttpSessionListener1 implements HttpSessionListener {
    @Override
    public void sessionCreated(HttpSessionEvent httpSessionEvent) {
        System.out.println("监听用户登录");
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
        System.out.println("监听用户退出");
    }
}
package com.javakc.web1.listener;

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;

@WebServlet(
        name = "UserServlet",
        urlPatterns = "/user.do",
        loadOnStartup = 0
)
//会话作用域创建
public class UserServlet2 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //创建会话作用域
        HttpSession session1 = request.getSession();
    }
}
package com.javakc.web1.listener;

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;

@WebServlet(
        name = "LogoutServlet",
        urlPatterns = "/logout.do",
        loadOnStartup = 0
)
//会话作用域销毁
public class UserServlet3 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        HttpSession session = request.getSession(false);
        //单独销毁,立即销毁
        if (null != session) {
            //立即销毁
            session.invalidate();
        }
    }
}
  • ServletRequestListener:请求作用域监听器,监听请求发出与响应返回
package com.javakc.web1.listener;

import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.annotation.WebListener;

@WebListener
public class CustomServletRequestListener implements ServletRequestListener {
    @Override
    public void requestInitialized(ServletRequestEvent servletRequestEvent) {
        System.out.println("监听请求的发出");
    }

    @Override
    public void requestDestroyed(ServletRequestEvent servletRequestEvent) {
        System.out.println("监听响应的返回");
    }
}
package com.javakc.web1.user;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.Writer;

@WebServlet(
        name = "UserServlet",
        urlPatterns = "/user.do",
        loadOnStartup = 0
)
//Servlet环境搭建
public class UserServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("UserServlet doGet method!");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("UserServlet doPost method!");

        //响应类型
        response.setContentType("text/html;charset=utf-8");
        Writer writer = response.getWriter();
        writer.write("<input type=\"text\">");
        writer.write("<input type=\"button\" value=\"搜索\">");
        writer.close();
    }
}

监听作用域的属性改变事件

  • ServletContextAttrubiteListener:监听应用作用域属性的改变
package com.javakc.web1.listener;

import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
import javax.servlet.annotation.WebListener;

@WebListener
public class CustomServletContextAttributeListener implements ServletContextAttributeListener {
    //添加属性
    @Override
    public void attributeAdded(ServletContextAttributeEvent scae) {
        //输出属性名称和值
        System.out.println(scae.getName() + ":" + scae.getValue());
    }

    //修改属性
    @Override
    public void attributeReplaced(ServletContextAttributeEvent scae) {
        System.out.println("修改属性");
    }

    //删除属性
    @Override
    public void attributeRemoved(ServletContextAttributeEvent scae) {
        System.out.println("删除属性");
    }
}
package com.javakc.web1.listener;

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 java.io.IOException;

@WebServlet(
        name = "UserServlet",
        urlPatterns = "/user.do",
        loadOnStartup = 0
)
//应用作用域
public class UserServlet5 extends HttpServlet {

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取应用作用域
        ServletContext context = request.getServletContext();

        //从应用作用域获取属性
        Object username1 = context.getAttribute("username");
        System.out.println("第一次从请求作用于获取属性:" + username1);

        //向应用作用域中写入属性
        context.setAttribute("username", "admin");

        //从应用作用域获取属性
        Object username2 = context.getAttribute("username");
        System.out.println("第二次从请求作用于获取属性:" + username2);

        //从应用作用域中移除属性
        context.removeAttribute("username");

        //从作用域中获取属性值
        Object username3 = context.getAttribute("username");
        System.out.println("第三次从请求作用于获取属性:" + username3);
    }
}
  • HttpSessionAttrubiteListener:监听会话作用域属性的改变
package com.javakc.web1.listener;

import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;

@WebListener
public class CustomHttpSessionAttributeListener implements HttpSessionAttributeListener {
    @Override
    public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) {
        System.out.println("监听会话作用域属性添加");
    }

    @Override
    public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) {
        System.out.println("监听会话作用域属性移除");
    }

    @Override
    public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) {
        System.out.println("监听会话作用域属性替换");
    }
}
  • ServletRequestAttrubiteListener:监听请求作用域属性的改变
package com.javakc.web1.listener;

import javax.servlet.ServletRequestAttributeEvent;
import javax.servlet.ServletRequestAttributeListener;
import javax.servlet.annotation.WebListener;

@WebListener
public class CustomServletRequestAttributeListener implements ServletRequestAttributeListener {
    @Override
    public void attributeAdded(ServletRequestAttributeEvent servletRequestAttributeEvent) {
        System.out.println("请求作用域属性添加");
    }

    @Override
    public void attributeRemoved(ServletRequestAttributeEvent servletRequestAttributeEvent) {
        System.out.println("请求作用域属性移除");
    }

    @Override
    public void attributeReplaced(ServletRequestAttributeEvent servletRequestAttributeEvent) {
        System.out.println("请求作用域属性替换");
    }
}
package com.javakc.web1.context;

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 java.io.IOException;

@WebServlet(
        name = "UserServlet",
        urlPatterns = "/user.do",
        loadOnStartup = 0
)
//请求作用域
public class UserServlet1 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //从作用域中获取属性值
        Object username1 = request.getAttribute("username");
        System.out.println("第一次从请求作用于获取属性:" + username1);

        //向作用域中写入属性值
        request.setAttribute("username", "admin");

        //从作用域中获取属性值
        Object username2 = request.getAttribute("username");
        System.out.println("第二次从请求作用于获取属性:" + username2);

        //从作用域中移除属性
        request.removeAttribute("username");

        //从作用域中获取属性值
        Object username3 = request.getAttribute("username");
        System.out.println("第三次从请求作用于获取属性:" + username3);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值