Java日志二十七「Filter」

**

Filter

**
Filter翻译为过滤器,当客户端向服务器端发送一个请求时,如果有对应的过滤器进行拦截,过滤器可以改变请求的内容、或者重新设置请求协议的相关信息等,然后再将请求发送给服务器端的Servlet进行处理。当Servlet对客户端做出响应时,过滤器同样可以进行拦截,将响应内容进行修改或者重新设置后,再响应给客户端浏览器。在上述过程中,客户端与服务器端并不需要知道过滤器的存在。

下图说明了过滤器的原理:
在这里插入图片描述
在上图,多个过滤器形成了一个过滤器链,每个过滤器执行自己的操作,直到到达Servlet。

下面来看代码:

@WebFilter(value = "/*")//里面的路径代表访问所有的资源都要经过这个过滤器
public class Filter_practice1 implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

        //对request对象的请求消息增强
        System.out.println("过滤器被执行了...");

        //放行
        filterChain.doFilter(servletRequest,servletResponse);

        //对response对象的响应消息增强
        System.out.println("过滤器又被执行了...");
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("init...");
    }

    @Override
    public void destroy() {
        System.out.println("destroy...");
    }

在客户端和服务器端(index.jsp)加上了一个Filter,现在我们来访问index.jsp来看一下控制台的输出。

过滤器被执行了...
index.jsp
过滤器又被执行了...

根据这个结果我们可以知道,在客户端访问index.jsp的时候,Filter进行了一些操作(这里是输出一句话),然后把请求消息放行。然后index.jsp对客户端发送响应消息的时候,又经过Filter,做了一些操作(输出一句话),然后放行了响应消息,发送给客户端。

关于Filter还有的地方就是@WebFilter注解,上面Filter传递的路径参数代表访问这个服务器的所有资源都要经过此Filter,我们可以根据需求更改这个路径。

此外,dispatcherTypes也是常用的一个参数。设置dispatcherTypes属性时有五个值:
1.REQUEST:默认值,浏览器直接请求资源时才会执行
2.FORWARD:转发访问资源时才会执行
3.INCLUDE:包含访问资源时才会执行
4.ERROR:错误跳转资源时才会执行
5.ASYNC:异步访问资源时才会执行

例如

//转发资源时执行的Filter
@WebFilter(value="/*",dispatcherTypes = {DispatcherType.FORWARD})

//浏览器直接请求资源与转发资源时执行的Filter
@WebFilter(value="/*",dispatcherTypes = {DispatcherType.FORWARD,DispatcherType.REQUEST})
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值