监听器、过滤器

本文展示了如何实现一个HttpSessionListener来统计网站的在线人数,并通过监听器跟踪session的创建和销毁。同时,介绍了在用户登录验证过程中,如何将用户信息存入session并在后续请求中检查用户是否已登录。此外,还提供了过滤器的概念,用于拦截用户访问,确保只有登录用户可以访问特定资源。

实现一个监听器的接口;(有N种)

  1. 编写一个监听器

    实现监听器的接口

    //统计网站在线人数:统计session
    public class OnlineCountListener implements HttpSessionListener {
        //创建session监听:看你的一举一动
        //一旦创建一个session就会触发一次这个事件!
        public void sessionCreated(HttpSessionEvent se) {
            ServletContext ctx = se.getSession().getServletContext();
            System.out.println(se.getSession().getId());
            Integer onlineCount = (Integer) ctx.getAttribute("OnlineCount");
            if (onlineCount==null){
                onlineCount=new Integer(1);
    
            }else {
                int count = onlineCount.intValue();
                onlineCount =  new Integer(count++);
            }
    
            ctx.setAttribute("OnlineCount",onlineCount);
    
        }
        //销毁session监听
        //一旦销毁session就会触发一次这个事件!
        public void sessionDestroyed(HttpSessionEvent se) {
            ServletContext ctx = se.getSession().getServletContext();
            Integer onlineCount = (Integer) ctx.getAttribute("OnlineCount");
            if (onlineCount==null){
                onlineCount=new Integer(0);
    
            }else {
                int count = onlineCount.intValue();
                onlineCount =  new Integer(count--);
            }
    
            ctx.setAttribute("OnlineCount",onlineCount);
        }
    }
    
    
  2. 配置监听器(web.xml中注册)

    <!--    注册监听器-->
    <listener>
        <listener-class>com.xu.listener.OnlineCountListener</listener-class>
    </listener>
    
  3. 看情况是否使用

13、过滤器、监听器的常见应用

监听器:GUI(图形界面编程)编程中经常使用

public static void main(String[] args) {
        Frame frame = new Frame("教师节快乐");//新建一个窗体
        Panel panel = new Panel(null);//面板
        frame.setLayout(null);//设置窗体的布局

        frame.setBounds(300,300,400,400);//设置大小
        frame.setBackground(Color.blue);//设置背景颜色

        panel.setBounds(50,50,100,100);
        panel.setBackground(Color.yellow);

        frame.add(panel);

        frame.setVisible(true);

        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                super.windowClosing(e);
            }
        });

    }

用户登录之后才能进入主页,用户注销后就不能进入主页!拦截器

  1. 用户登录之后向,Session中放入用户的数据

    String username = req.getParameter("username");//获取页面上的值
    if (username.equals("admin")){
        req.getSession().setAttribute(Constant.USER_SESSION,req.getSession().getId());//用户名正确---放入session的值
        resp.sendRedirect("/sys/success.jsp");
    }else {
        resp.sendRedirect("/error.jsp");
    }
    
  2. 进入主页的时候要判断用户是否已经登录;(判断session是否为空)

    HttpServletRequest request = (HttpServletRequest) servletRequest;
    //因为ServletRequest不可以调用session,所以进行强转
    HttpServletResponse response = (HttpServletResponse) servletResponse;
    if (request.getSession().getAttribute(Constant.USER_SESSION)==null){
        response.sendRedirect("/error.jsp");
    }
    
    filterChain.doFilter(servletRequest,servletResponse);
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值