过滤器Filter和监听器

过滤器Filter(重点)

过滤器Filter:过滤器,用来过滤网站的数据;

  • 处理中文乱码
  • 登录验证...
image-20211004131439605

开发步骤:

  1. 导包

  2. 编写过滤器

    • 导包不要导错

    image-20211004171655151

    • 实现Filter接口,重写对应的方法
    //初始化;web服务器启动就一同初始化
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("characterEncodingFilter初始化");
    }
    
    //chain 链
    /*
    1.过滤中的所有代码,在过滤特定请求时都会执行
    2.必须要让过滤器继续同行   chain.doFilter(request,response);
     */
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");//
    
        System.out.println("characterEncodingFilter执行前");
        chain.doFilter(request, response);//让我们的请求继续走,如果不写这行,那程序到这就停止了
        System.out.println("characterEncodingFilter执行后");
    
    }
    
    //web服务器关闭时,才会被销毁
    public  destroy() {
        System.out.println("characterEncodingFilter销毁");
    }
    
    • 在web.xml中配置Filter
    <filter>
        <filter-name>characterEncodingFilter</filter-name>
        <filter-class>com.yehuw.filter.characterEncodingFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <!--只要是 /filter的任何请求,都会经过这个过滤器-->
        <url-pattern>/filter/*</url-pattern>
    </filter-mapping>
    

监听器Listener

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

  1. 编写一个监听器

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

    <!--配置监听器-->
    <listener>
        <listener-class>com.yehuw.listener.onlineCountListener</listener-class>
    </listener>
    
  3. 看情况是否使用!在GUI编程中经常使用

    public static void main(String[] args) {
     Frame frame = new Frame("中秋节快乐!");
     Panel panel = new Panel(null);
     frame.setLayout(null);
    
     frame.setBounds(300,300,500,500);
     frame.setBackground(Color.blue);
     panel.setBounds(frame.getX()/2,frame.getY()/2,frame.getX()/2,frame.getY()/2);
     panel.setBackground(Color.green);
    
     frame.addWindowListener(new WindowAdapter() {
         @Override
         public void windowClosing(WindowEvent e) {
             System.exit(0);//0是正常退出,1是不正常退出
         }
     });
    
     frame.add(panel);
     frame.setVisible(true);
    }
    
posted @ 2021-10-04 20:25  亜光君  阅读(49)  评论(0)    收藏  举报