Filter (过滤器) Listener(监听器)

Filter过滤器

1. 概念

  • Javaweb中的过滤器可以拦截请求(request)和响应(response)
  • 过滤器中拦截到的request和response 和servlet中的request和response是同一个
  • 一般用于完成通用的操作。如:登录验证、统一编码处理(response.setContentType())

2. 快速入门

2.1 定义一个类,实现接口Filter,复写方法

public class FilterDemo1 implements Filter {
		    @Override
		    public void init(FilterConfig filterConfig) throws ServletException {
		    }
		    
		    @Override
		    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)throws IOException, ServletException {
		        System.out.println("filterDemo1被执行了....");
                //放行
		        filterChain.doFilter(servletRequest,servletResponse);
		    }
		    @Override
		    public void destroy() {
		    }
		}

2.2 配置拦截路径

配置拦截路径可以使用web配置文件web.xml,也可以使用注解注入

2.2.1 web.xml 方法
<filter>
        <filter-name>demo1</filter-name>
        <filter-class>com.ruandy.web.filter.FilterDemo1</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>demo1</filter-name>
		<!-- 匹配拦截路径, /* 匹配所有路径-->
        <url-pattern>/*</url-pattern>
    </filter-mapping>
2.2.2 注解方法
@WebFilter("/*")//  /* 匹配所有路径,访问所有资源之前,都会执行该过滤器
public class FilterDemo1 implements Filter {
      ...
}

3. 过滤器生命周期方法

  1. init:在服务器启动后,会创建Filter对象,然后调用init方法。只执行一次。用于加载资源
  2. doFilter:每一次请求被拦截资源时,会执行。执行多次
  3. destroy:在服务器关闭后,Filter对象被销毁。如果服务器是正常关闭,则会执行destroy方法。只执行一次。用于释放资源

4. 拦截路径匹配

  1. 具体资源路径: /index.jsp 只有访问index.jsp资源时,过滤器才会被执行
  2. 拦截目录: /user/* 访问/user下的所有资源时,过滤器都会被执行
  3. 后缀名拦截: *.jsp 访问所有后缀名为jsp资源时,过滤器都会被执行
  4. 拦截所有资源:/* 访问所有资源时,过滤器都会被执行

Listener(监听器)

1. 概念:web的三大组件之一。

  • 事件监听机制
    • 事件 :一件事情
    • 事件源 :事件发生的地方
    • 监听器 :一个对象
  • 注册监听:将事件、事件源、监听器绑定在一起。 当事件源上发生某个事件后,执行监听器代码

2. ServletContextListener监听器

监听ServletContext对象的创建和销毁

  • 方法:
    • void contextDestroyed(ServletContextEvent sce) :ServletContext对象被销毁之前会调用该方法
    • void contextInitialized(ServletContextEvent sce) :ServletContext对象创建后会调用该方法

步骤:

  • 定义一个类,实现ServletContextListener接口
  • 复写方法
  • 配置
    • web.xml
    <listener>
    <listener-class>com.ruandy.web.listener.ContextLoaderListener</listener-class>
    </listener>
    
    • 注解:
      • @WebListener
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
拦截器、过滤器监听器是在软件开发中常用的三种组件,用于对请求进行干预、选择和获取事件细节。它们的区别如下[^1][^2]: 1. 拦截器(Interceptor): 拦截器用于在请求进行中干预其进展,并可以控制是否终止请求的执行。拦截器可以在请求前、请求后或请求完成后执行特定的操作,例如记录日志、权限验证等。 2. 过滤器Filter): 过滤器用于从一堆东西中选择符合特定要求的内容。它可以定义一些规则或条件,根据这些规则或条件来过滤出符合要求的内容。过滤器通常用于对请求进行预处理或后处理,例如请求参数的校验、字符编码的转换等。 3. 监听器Listener): 监听器用于获取事件发生的细节,而不对事件的执行过程进行干预。当特定事件发生时,监听器可以捕获该事件并执行相应的操作。监听器通常用于记录日志、统计数据等。 示例代码如下: ```java // 拦截器示例 public class MyInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 在请求前执行的操作 return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { // 在请求后执行的操作 } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { // 在请求完成后执行的操作 } } // 过滤器示例 public class MyFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { // 过滤器初始化操作 } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // 过滤器处理请求的操作 chain.doFilter(request, response); } @Override public void destroy() { // 过滤器销毁操作 } } // 监听器示例 public class MyListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { // 监听器初始化操作 } @Override public void contextDestroyed(ServletContextEvent sce) { // 监听器销毁操作 } } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值