过滤器(Filter)和监听器(Listener)的使用

1. 过滤器(Filter)

1.1 过滤器定义

过滤器实际上就是对web资源进行拦截,做一些处理后再交给下一个过滤器或servlet处理,通常都是用来拦截
request进行处理的,也可以对返回的response进行拦截处理
在这里插入图片描述

过滤器的特点:在servlet之前和之后都会被执行

1.2 Filter使用

  1. 创建一个类实现Fiter接口(javax.servlet.Filter)例如:以下代码是简单的字符编码过滤器

    @WebFilter(filterName = "encodingFilter",urlPatterns = "/*")
    public class EncodingFilter implements Filter {
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            //初始化过滤器
        }
    
        @Override
        public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
            //具体的执行逻辑
            req.setCharacterEncoding("utf-8");
            resp.setCharacterEncoding("utf-8");
            resp.setContentType("text/html;charset = utf-8");
            //执行完过滤跳转到原请求目的地
            chain.doFilter(req,resp);
        }
        @Override
        public void destroy() {
            //关闭过滤器
        }
    }
    
  2. 部署Filter过滤器

    方式一:在web.xml文件中部署

    <filter>
    	<filter-name>过滤器名称</filter-name>
    	<filter-class>过滤器所在的路径</filter-class>
    </filter>
    <filter-mapping>
    	<filter-name>过滤器名称</filter-name>
    	<url-pattern>需要过滤的资源或请求</url-pattern>
    </filter-mapping>
    

    方式二:通过@WebFilter注解部署

    如上面字符编码过滤器代码所示。

    @WebFilter常用属性如下:

    属性名类型描述
    filterNameString指定过滤器的 name 属性,等价于
    valueString[]该属性等价于 urlPatterns 属性。但是两者不应该同时使用。
    urlPatternsString[]指定一组过滤器的 URL 匹配模式。等价于标签。
    servletNamesString[]指定过滤器将应用于哪些 Servlet。取值是 @WebServlet 中的 name 属性的取值,或者是 web.xml 中 的取值。

1.3 Fiter使用场景

1.防止用户未登录就执行后续操作
  String name=(String)session.getAttribute("key");
  if(name==null){
  	//跳转到登录页面
  }
2.设置编码方式--统一设置编码
3.加密解密(密码的加密和解密)
4.非法文字筛选
5.下载资源的限制
......

2. 监听器(Listener)

2.1 监听器定义及分类

监听器就是监听某个域对象的的状态变化的组件。

监听器的相关概念:

  • 事件源:被监听的对象(三个域对象request、session、servletContext)
  • 监听器:监听事件源对象事件源对象的状态的变化都会触发监听器
  • 注册监听器:将监听器与事件源进行绑定
  • 响应行为:监听器监听到事件源的状态变化时所涉及的功能代码(程序员编写代码)

分类:

第一维度按照被监听的对象划分:ServletRequest域、HttpSession域、ServletContext域

第二维度按照监听的内容分:监听域对象的创建与销毁的、监听域对象的属性变化的

2.2 监听器使用

根据不同的监听域,实现不同的接口来创建Listener监听器。比如我们创建一个类来监听Session对象的创建与销毁:

@webListenet
public class MySessionListener implements HttpSessionListener{
    @Override
    public void sessionCreated(HttpSessionEvent se) {
        System.out.println("session创建");
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        System.out.println("session销毁");
    }
}

监听器部署

在web.xml文件中添加以下代码

<listener>
	<listener-class>监听器所在的路径</listener-class>                                    
</listener>

或者使用@WebListener注解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

AnswerCoder

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

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

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

打赏作者

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

抵扣说明:

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

余额充值