IDEA Listener 模板设置


IDEA Listener 模板

1. IDEA 提供的默认模板

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import javax.servlet.http.HttpSessionBindingEvent;

@WebListener()
public class Listener implements ServletContextListener,
        HttpSessionListener, HttpSessionAttributeListener {

    // Public constructor is required by servlet spec
    public Listener() {
    }

    // -------------------------------------------------------
    // ServletContextListener implementation
    // -------------------------------------------------------
    public void contextInitialized(ServletContextEvent sce) {
      /* This method is called when the servlet context is
         initialized(when the Web application is deployed). 
         You can initialize servlet context related data here.
      */
    }

    public void contextDestroyed(ServletContextEvent sce) {
      /* This method is invoked when the Servlet Context 
         (the Web application) is undeployed or 
         Application Server shuts down.
      */
    }

    // -------------------------------------------------------
    // HttpSessionListener implementation
    // -------------------------------------------------------
    public void sessionCreated(HttpSessionEvent se) {
        /* Session is created. */
    }

    public void sessionDestroyed(HttpSessionEvent se) {
        /* Session is destroyed. */
    }

    // -------------------------------------------------------
    // HttpSessionAttributeListener implementation
    // -------------------------------------------------------

    public void attributeAdded(HttpSessionBindingEvent sbe) {
      /* This method is called when an attribute 
         is added to a session.
      */
    }

    public void attributeRemoved(HttpSessionBindingEvent sbe) {
      /* This method is called when an attribute
         is removed from a session.
      */
    }

    public void attributeReplaced(HttpSessionBindingEvent sbe) {
      /* This method is invoked when an attibute
         is replaced in a session.
      */
    }
}

a. @WebListener

  • 没有配置值的时候 () 可以带上也可以省略,所以 @WebListener() 也可以直接写成 @WebListener。监听器没有地址,不管任何地方创建了 Session 域都会监听,任何地方创建了 Request 域都会监听,所有类型的监听器都一样的。

b. attribute

  • 带 attribute 的监听器是监听域对象的属性增删改的;
  • 不带 attribute 的监听器是监听域对象的创建与销毁的。

c. Listener 接口

  • Listener 可以监听三大域对象 HttpServletRequest、HttpSession、ServletContext,对应的可以实现 ServletContextListenerHttpSessionListenerServletRequestListener。监听哪个实现哪个接口即可。
  • Listener 是实现类,必须重写所有接口的方法。如果子类是非抽象类,则必须实现接口中的所有方法; 如果子类是抽象类,则可以不实现接口中的所有方法,因为抽象类中允许有抽象方法的存在。
  • 监听器底层其实用到了监听者模式。

2. 打开模板设置

在这里插入图片描述

3. 推荐模板内容

  • 监听器在 Web 开发中使用的比较少,监听器的使用方式都差不多,这里推荐用监听器中使用率比较高的 ServletContextListenner 和 HttpSessionListener 来做模板。
  • 这是统计在线人数时用到的 Listener,用户在退出时需要销毁 Session(request.getSession().invalidate();)。
#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end
#parse("File Header.java")
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import javax.servlet.http.HttpSessionBindingEvent;

@javax.servlet.annotation.WebListener
public class ${Class_Name} implements ServletContextListener,
        HttpSessionListener {

	@Override
	public void contextInitialized(ServletContextEvent servletContextEvent) {
        // 获取上下文域对象
        ServletContext servletContext = servletContextEvent.getServletContext();
        // 初始化在线人数
        servletContext.setAttribute("number", 0);
	}

	@Override
	public void contextDestroyed(ServletContextEvent servletContextEvent) {

	}

        
	// 会话建立,在线人数+1
	@Override
	public void sessionCreated(HttpSessionEvent httpSessionEvent) {
        // 获取Session域对象
        HttpSession session = httpSessionEvent.getSession();
        // 获取上下文域对象
        ServletContext servletContext = session.getServletContext();
        // 取出在线人数
        Integer number = (Integer) servletContext.getAttribute("number");
        // +1
        servletContext.setAttribute("number", number + 1);
	}

	// 会话销毁,在线人数-1
	@Override
	public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
        // 获取Session域对象
        HttpSession session = httpSessionEvent.getSession();
        // 获取上下文域对象
        ServletContext servletContext = session.getServletContext();
        // 取出在线人数
        Integer number = (Integer) servletContext.getAttribute("number");
        // -1
        servletContext.setAttribute("number", number - 1);
	}
}

原文链接:https://qwert.blog.csdn.net/article/details/105791068

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值