Filter过滤器(笔记)

Filter过滤器

介绍

当客户端发送请求,需要访问后台的某个Servlet时,如果设置有过滤器,需先经过过滤器处理后方可访问想要访问的Servlet,起到过滤的作用。其中,过滤器可能有多个,一个处理完毕后将会传递给下一个,直到所有必须经过过滤器都通过才能到达Servlet。通常用来过滤来自客户端的request请求数据,但也可以过滤来自response的数据,这是一个双向的过程。大致过程如下:
在这里插入图片描述

使用

public class LoginFilter implements Filter{

	@Override
	public void destroy() {
		System.out.println("过滤器已销毁");
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		HttpServletRequest req = (HttpServletRequest) request;
		HttpServletResponse resq = (HttpServletResponse)response;
		
		if(req.getRequestURI().endsWith("/index.html"))
		{
			resq.sendRedirect("login.html");
		}
		else
		{
			chain.doFilter(req, resq);
		}
		
	}

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		System.out.println("过滤器初始化完成");
	}

}

新建一个过滤器对象,需要实现Filter接口(javax.servlet.Filter)。其中,init方法在服务器启动时便会调用,而destroy方法则是在服务器关闭时调用。
通过强制转换,将父对象ServletRequest和ServletResponse分别转换为子对象HttpServletRequest和HttpServletResponse,便于使用子对象的一些方法。
request对象有两个方法如下:

req.getRequestURI();
req.getRequestURI();

主要区别,一个是部分URL,一个是完整URL
在这里插入图片描述
由于在配置web.xml文件时,设置过滤的URL为所有
在这里插入图片描述
所以当进入过滤器后,需要判断出需要进行过滤处理的请求,而不需要的就直接放过,这里放过需要用到第三个参数chain。调用doFilter并传入所需的参数即可传入下一个过滤器或者转到servlet,这里的参数必须是之前使用过的。比如,上例中将传入的两个参数强转了,则传入下一个的也必须是强转之后的。

过滤器执行顺序

在web.xml配置文件中,先声明的过滤器先执行。也就是说,过滤器的执行先后是由web.xml文件中各过滤器声明的先后顺序来决定的。如果想要在访问某个Servlet之前执行过滤器,那么可以将过滤器的声明放在该servlet前面。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值