Filter & Listener

本文介绍了Java Web开发中过滤器(Filter)和监听器(Listener)的使用。编码过滤器`CharacterEncodingFilter`确保了UTF-8的统一编码,防止中文乱码问题,同时实现了登录验证的权限拦截。而`OnlineCountListener`作为会话监听器,实时统计在线人数。通过在web.xml配置文件中声明,这两个组件可以全局影响应用程序的行为。
摘要由CSDN通过智能技术生成

1. FIlter

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

  • 处理中文乱码;
  • 登录验证

image-20210125170104205

1.1 编码过滤

public class CharacterEncodingFilter implements Filter {

    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("编码过滤器初始化");
    }

    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        servletRequest.setCharacterEncoding("utf-8");
        servletResponse.setCharacterEncoding("utf-8");
        servletResponse.setContentType("text/html");

        filterChain.doFilter(servletRequest, servletResponse);
    }

    public void destroy() {
        System.out.println("编码过滤器销毁");
    }
}
<filter>
  <filter-name>CharacterEncodingFilter</filter-name>
  <filter-class>com.yang.filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>CharacterEncodingFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

/*:表示所有的请求都会经过过滤器

1.2 权限拦截

public class SysFilter implements Filter {

    public void init(FilterConfig filterConfig) throws ServletException {

    }

    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) servletRequest;
        HttpServletResponse resp = (HttpServletResponse) servletResponse;
        if (req.getSession().getAttribute(Constant.USER_SESSION) == null) {
            resp.sendRedirect(req.getContextPath() + "/login.jsp");
        }
        filterChain.doFilter(req, resp);
    }

    public void destroy() {

    }
}

2. Listener

在线人数统计

public class OnlineCountListener implements HttpSessionListener {
    public void sessionCreated(HttpSessionEvent se) {
        ServletContext sct = se.getSession().getServletContext();
        Integer onlineCount = (Integer) sct.getAttribute("onlineCount");
        if (onlineCount == null) {
            onlineCount = 1;
        }else{
            onlineCount+=1;
        }
        sct.setAttribute("onlineCount", onlineCount);
    }

    public void sessionDestroyed(HttpSessionEvent se) {
        ServletContext sct = se.getSession().getServletContext();
        Integer onlineCount = (Integer) sct.getAttribute("onlineCount");
        onlineCount -= 1;

        sct.setAttribute("onlineCount", onlineCount);
    }
}
<listener>
  <listener-class>com.yang.listener.OnlineCountListener</listener-class>
</listener>

```xml
<listener>
  <listener-class>com.yang.listener.OnlineCountListener</listener-class>
</listener>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值