过滤器

本文介绍了Servlet过滤器的基本概念、特点、作用和工作原理。过滤器作为服务器与客户端请求和响应的中间层,用于拦截和修改请求或响应。文中详细讲解了过滤器的创建过程,包括实现Filter接口和配置web.xml,以及多个过滤器的使用顺序。同时,讨论了过滤器的生命周期,包括初始化、过滤操作和销毁阶段。最后,通过代码示例展示了如何使用过滤器控制用户必须登录才能访问用户信息。
摘要由CSDN通过智能技术生成

1.基本概念

过滤器(Filter)是服务器与客户端请求与响应的中间层组件,在实际项目开发中过滤器主要用于对浏览器的请求进行过滤处理,将过滤后的的请求再转给下一个资源。与其他web应用程序组件不同的是,过滤器采用了“”的方式进行处理。当需要限制用户访问某些资源或者在处理请求时提前处理某些资源的时候,就可以使用过滤器完成。

2.特点
  • Servlet过滤器可能检查和修改ServletRequest和ServletResponse对象
  • 可以指定Servlet过滤器和特定的URL关联,只有当客户请求访问此URL时,才会触发该过滤器工作
  • 多个Servlet过滤器可以被串联起来,形成管道效应,协同修改请求和响应对象
  • 所有支持Java Servlet规范2.3的Servlet容器,都支持Servlet过滤器
3.作用

(1)在HttpServletRequest 到达Servlet 之前,拦截客户的HttpServletRequest ;根据需要检查HttpServletRequest ,也可以修改HttpServletRequest 头和数据。

(2) 在HttpServletResponse 到达客户端之前,拦截HttpServletResponse ;根据需要检查HttpServletResponse ,可以修改HttpServletResponse 头和数据。

4.工作原理

过滤器是一个可插入的自由组件,也就是说客户端和服务器之间可以插入过滤器的个数是可选的,当插入多个过滤器时,就形成过滤链。客户端浏览器在访问web服务器的某个具体资源的时候,请求经过过滤器1,过滤器1将code1代码块进行相关处理之后,再将请求传递给过滤链中的下一个过滤器2,(过滤器的执行顺序以配置文件中配置的顺序为准)过滤器2处理完之后,request就传递的Servlet完成相应的逻辑。这个请求在通过过滤链并被服务器处理之后,一个响应将以相反的顺序通过该链发送回去。这样,请求和响应都得到了处理。

在这里插入图片描述

5.过滤器的创建过程
  • 实现javax.servlet.Filter接口
  • 实现init方法,读取过滤器的初始化参数
  • 实现doFilter方法,完成对请求或响应的过滤
  • 调用FilterChain接口对象的doFilter方法,向后续的过滤器传递请求或响应

过滤器的默认代码如下:

package com.dlj.filter;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;

/**
 * Servlet Filter implementation class DemoFilter
 */
@WebFilter("/DemoFilter")
public class DemoFilter implements Filter {
   

    /**
     * Default constructor. 
     */
    public DemoFilter() {
   //构造方法
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see Filter#destroy()
	 */
	public void destroy() {
   //过滤器销毁
		// TODO Auto-generated method stub
	}

	/**
	 * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
	 */
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
   //执行过滤操作
		// TODO Auto-generated method stub
		// place your code here

		// pass the request along the filter chain
		chain.doFilter(request, response);
	}

	/**
	 * @see Filter#init(FilterConfig)
	 */
	public void init(FilterConfig fConfig) throws ServletException {
   //过滤器初始化
		// TODO Auto-generated method stub
	}

}

过滤器的配置:(两种方式二选一即可)
(1) 直接通过注解的方式

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值