(个人学习笔记)过滤器、使用监听器统计在线人数

本文介绍了Servlet过滤器的概念和工作原理,包括如何在web.xml中配置过滤器映射,并展示了如何通过实现Filter接口进行过滤操作。同时,文章探讨了Servlet监听器的使用,特别是HttpSessionListener接口在统计在线人数中的应用,详细解析了web.xml中的相关配置项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Servlet 过滤器

过滤器是一个实现了 javax.servlet.Filter 接口的 Java 类。javax.servlet.Filter 接口定义了三个方法:

序号方法 & 描述
1public void doFilter (ServletRequest, ServletResponse, FilterChain)该方法完成实际的过滤操作,当客户端请求方法与过滤器设置匹配的URL时,Servlet容器将先调用过滤器的doFilter方法。FilterChain用户访问后续过滤器。
2public void init(FilterConfig filterConfig)web 应用程序启动时,web 服务器将创建Filter 的实例对象,并调用其init方法,读取web.xml配置,完成对象的初始化功能,从而为后续的用户请求作好拦截的准备工作(filter对象只会创建一次,init方法也只会执行一次)。开发人员通过init方法的参数,可获得代表当前filter配置信息的FilterConfig对象。
3public void destroy()Servlet容器在销毁过滤器实例前调用该方法,在该方法中释放Servlet过滤器占用的资源。

实现javax.servlet.Filter接口:

public class Filter implements javax.servlet.Filter{

    @Override
    public void destroy() {

    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse resp,
            FilterChain filter) throws IOException, ServletException {
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
        filter.doFilter(req, resp);
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

}
Web.xml 中的 Servlet 过滤器映射(Servlet Filter Mapping):
定义过滤器,然后映射到一个 URL 或 Servlet,这与定义 Servlet,然后映射到一个 URL 模式方式大致相同。在部署描述符文件 web.xml 中为 filter 标签创建下面的条目:
<filter>
        <filter-name>filter</filter-name>
        <filter-class>com.bdqn.filter.Filter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>filter</filter-name>
        <url-pattern>/filter</url-pattern>
    </filter-mapping>

Web 应用程序可以根据特定的目的定义若干个不同的过滤器。

web.xml配置各节点说明:

filter 指定一个过滤器。
filter-name 用于为过滤器指定一个名字,该元素的内容不能为空。
filter-class 元素用于指定过滤器的完整的限定类名。
init-param 元素用于为过滤器指定初始化参数,它的子元素 param-name 指定参数的名字, param-value 指定参数的值。
在过滤器中,可以使用FilterConfig接口对象来访问初始化参数。
filter-mapping 元素用于设置一个 Filter 所负责拦截的资源。一个Filter拦截的资源可通过两种方式来指定:Servlet 名称和资源访问的请求路径
filter-name 子元素用于设置filter的注册名称。该值必须是在 filter 元素中声明过的过滤器的名字
url-pattern 设置 filter 所拦截的请求路径(过滤器关联的URL样式)
servlet-name 指定过滤器所拦截的Servlet名称。

Servlet监听器:

监听器是web应用程序事件模型的一部分,当web应用的的某些状态发生改变时,会产生相应的事件。监听器可以接收这些事件,并可以在事件发生时做相关的处理。

通过实现HttpSessionListener接口实现在线人数统计:

public class Listening implements HttpSessionListener{

    @Override
    public void sessionCreated(HttpSessionEvent event) {
        ServletContext context= event.getSession().getServletContext();
        Object count=context.getAttribute("count");
        int count1;
        if (count==null) {
            count1=1;
        }else {
            count1=(Integer)count;
            count1++;
        }
        context.setAttribute("count", count1);
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent event) {
        ServletContext context= event.getSession().getServletContext();
        Object count=context.getAttribute("count");
        int count1=0;
        if (count==null) {
            count1=0;
        }else {
            count1=(Integer)count;
            count1--;
        }
        context.setAttribute("count", count);
    }
}
Web.xml 中的 Servlet 监听器的配置:
<listener>
<listener-class>com.bdqn.listen.Listening</listener-class>
</listener>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值