Filter过滤器

过滤器

filter:过滤器,过滤网站数据,

  • 处理中文乱码
  • 登录验证
    在这里插入图片描述
    开发步骤:
    1、导包
    2、编写过滤器
  • 导包不要错(servlet)
  • 实现filter接口,重写对应的方法即可
import javax.servlet.*;
import java.io.IOException;

public class CharacterEncodingFilter implements Filter {
    //初始化    服务器开启
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("CharacterEncodingFilter初始化");
    }
    //chain 链
    /*
    1、过滤中所有代码在过滤器特定请求的时候都会执行
    2、必须要让过滤器继续转交    filterChain.doFilter(servletRequest,servletResponse);

     */
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        servletRequest.setCharacterEncoding("UTF-8");
        servletResponse.setCharacterEncoding("UTF-8");
        servletResponse.setContentType("text/html;charset=UTF-8");
        System.out.println("CharacterEncodingFilter放行前");
        filterChain.doFilter(servletRequest,servletResponse);//让我们的请求继续走,如果不写,我们的请求就会停止了
        System.out.println("CharacterEncodingFilter放行后");
    }
    //销毁     服务器关闭
    public void destroy() {
        System.gc();
        System.out.println("CharacterEncodingFilter销毁");
    }
}
  • web.xml中配置filter过滤器
    <filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>com.prj.filter.CharacterEncodingFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/servlet/*</url-pattern><!--servlet的任何请求都会走过滤器-->
    </filter-mapping>

监听器

实现监听器的接口
1、编写一个监听器:实现监听器的接口,重写里面的方法。

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

//统计网站在线人数
public class OnlineCountListener implements HttpSessionListener {
    //创建session监听:看你的一举一动
    //一旦创建session就会出发一次这个事件
    public void sessionCreated(HttpSessionEvent se) {
        ServletContext ctx = se.getSession().getServletContext();
        System.out.println("session的id"+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+1);
        }
        ctx.setAttribute("onlineCount",onlineCount);
    }
    //销毁session监听
    //一旦session销毁就会触发这个事件
    public void sessionDestroyed(HttpSessionEvent se) {
            ServletContext ctx = se.getSession().getServletContext();
            //se.getSession().invalidate();
            Integer onlineCount = (Integer)ctx.getAttribute("OnlineCount");
            if (onlineCount==null){
                onlineCount=new Integer(0);
            }else{
                int count =onlineCount.intValue();
                onlineCount=new Integer(count-1);
            }
            ctx.setAttribute("onlineCount",onlineCount);
    }
    /*
    销毁情况:
    1、手动销毁se.getSession().invalidate();
    2、配置session过期时间
     */
}

2、配置监听器:

    <listener>
        <listener-class>com.prj.listener.OnlineCountListener</listener-class>
    </listener>

3、看情况是否使用

常见应用

  • 登录拦截
    用户登录之后才能进入首页,用户注销之后不能进入首页
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

金帛大王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值