掘金日新计划 · 8 月更文挑战第41天--Listener监听器(二)-内置对象Listener

103 阅读1分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第41天,点击查看活动详情

今天带大家来学习一下内置对象监听器的简单实用

1.创建控制器包controller并且创建HelloController类文件

image.png

package com.example.firstlistenner.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@Controller
@RequestMapping("hello")
public class HelloController {
    @GetMapping("test")
    @ResponseBody
    public String testListener(HttpServletRequest request, HttpServletResponse response) throws IOException {
//        System.out.println("testListener");
        response.getWriter().println("hello world");
        request.getServletContext().setAttribute("sc","12");
        request.getSession().setAttribute("sesstion","2");
        request.setAttribute("request-attr1","request-attr-value1");
        return "{"code":"ok"}";
    }
}

代码说明:

  • request.getServletContext().setAttribute("sc","12");:设置request请求属性
  • request.getSession().setAttribute("sesstion","2");:设置session属性

2.创建servelet包并且创建FirstListenner类文件

image.png

public class FirstListenner  implements ServletContextListener, HttpSessionListener, ServletRequestListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("ServletContext初始化");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("ServletContext销毁");
    }

    @Override
    public void requestInitialized(ServletRequestEvent sre) {
        HttpServletRequest request= (HttpServletRequest) sre.getServletRequest();
        System.out.println("ServletRequest请求被创建,URI:"+request.getRequestURL());
    }
    @Override
    public void requestDestroyed(ServletRequestEvent sre) {
        System.out.println("ServletRequest请求被销毁");
    }


    @Override
    public void sessionCreated(HttpSessionEvent se) {

        HttpSession session = se.getSession();
        System.out.println("session被创建,SessonId:"+session.getId());
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        System.out.println("session已被销毁");
    }

代码说明:

  • FirstListenner implements ServletContextListener, HttpSessionListener, ServletRequestListener:FirstListener类实现ServletContextListener类,HttpSessionListener和ServletRequestListener类
  • 重写六个方法,每个监听器都有一个监听器创建方法和监听器销毁方法

3.web.xml配置监听器监听类

image.png

<listener>
    <listener-class>com.example.firstlistenner.servelet.FirstListenner</listener-class>
</listener>

4.重启应用

servletListener初始化 image.png serveletRequest初始化和销毁 image.png 浏览器访问:http://localhost:8086/hello/test image.png 我们发现先创建了ServletRequest,然后创建session,接着ServletRequest被销毁
刷新url查看控制台输出(这时候没有创建session) image.png 如果重新创建一个无痕窗口,发现session又被重新创建了 image.png

5.总结

监听器首先创建ServletContext,接着调用ServletResquest,如果有session,创建HttpSessionListener,销毁ServletRequest