java servlet拾遗(5)-过滤器
java servlet拾遗(5)-过滤器
haoran_10 发表于1年前
java servlet拾遗(5)-过滤器
  • 发表于 1年前
  • 阅读 10
  • 收藏 1
  • 点赞 0
  • 评论 0

一、什么是过滤器,为什么需要

    在应用中,比如登录、浏览商品、加入购物车等等,有一些通用处理,比如存储用户的请求日志,对用户的权限进行拦截,等等,

如果在每个请求都重写一遍,非常费时,而且代码不可维护,此时我们就需要一个统一的处理,当进行上面的请求时,都会先经过一组处理,在进行特定的请求。这就是过滤器。

 

二、Servlet规范定义

    javax.servlet.Filter 接口,不是在http包下,是一个不跟协议有关的组件

过滤器本身不生成任何ServletRequest对象和ServletResponse对象,它为组件提供如下的方法    

(1)、过滤器在web组件被调用之前,检查ServetRequest对象,修改请求头和请求body,或者做一些预处理

(2)、过滤器在wbe组件被调用之后,检查ServletResponse对象,修改相应头和响应正文

如图所示:

  (3)、多个过滤器串联在一起,可以协同过滤

如图所示 :



  (4)、使用的时候,要定义好过滤的规则,如下(基于注解形式)

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;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebFilter(urlPatterns="/api/order/*")
public class MyFilter implements Filter {
	
	public void doFilter(ServletRequest req, ServletResponse res,FilterChain filter) throws IOException, ServletException {
		HttpServletRequest request = (HttpServletRequest) req;//一般发布为http应用,可以直接转换为HttpServletRequest
		HttpServletResponse response = (HttpServletResponse) res;//一般发布为http应用,可以直接转换为HttpServletResponse
		
		//TODO 前置预处理1
		
		filter.doFilter(request, response);
		
		//TODO 后置处理
	}
	
	@Override
	public void init(FilterConfig config) throws ServletException {
		//做一些启动配置
	}
	@Override
	public void destroy() {
		//做一些容器销毁时垃圾回收
	}
}

  如果是 /api/order/开头的请求,都会经过这个拦截。

 

三、小结

其实拦截器就是责任链模式,就是为了对公共的组件就行抽象化,统一处理。

共有 人打赏支持
粉丝 27
博文 88
码字总数 80846
×
haoran_10
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: