Java Servlet之Filte(过滤器)详解


提示:以下是本篇文章正文内容,下面案例可供参考

一、Filter是什么?

webServlet有三大组件:Servlet Filter(过滤器) Listerner (监听器)

生活中中的过滤器有哪些?

​ 净水器的滤芯 空心滤芯 鱼网

网络中拦截器:

​ 有些网站必须是在登录下才能访问,比如咱们测评系统,一打开网址,就是登录页面

​ 必须先登录的一些网站
过滤器有什么作用?

​ 验证信息登录,处理字符问题,过滤跳转等

WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。

就是咱们请求一个资源的时候,先通过Filter进行拦截,如果你能符合我的条件我就放行。让你继续去请求资源,如果你不符合我的条件,我就不让你去请求这个资源

二、Filter的入门案例

1.自定义一个类去实现一个接口Fileter

2.重写方法

3.配置Filter

​ 注解写法(只用这种情况)

​ 配置写法

e n d end end没有出来什么意思?index.jsp被拦截了?为什么他被拦截了?过滤器我写的是/*,就意味着所有的

资源都要被拦截。

代码如下(示例):

package com.qfedu.b_filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

//@WebFilter("/*") 我要去拦截你所有的资源
@WebFilter("/*")

public class FilterDemo1 implements Filter {
   
   
    //写着构造方法的目的,目的是为了让你知道这个FilterDemo1被实例化了没?
    public FilterDemo1(){
   
   
        System.out.println("我是FilterDemo1的构造方法");
    }

    public void destroy() {
   
   
        System.out.println("FilterDemo1这个过滤器被销毁");
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
   
   
        //是核心方法,一般的业务逻辑写在这个地方
        System.out.println("doFilter called ....");
//        chain.doFilter(req, resp);  放行代码
        //如果这个地方没有写chain.doFilter(req,resp);
        //代码走到这个地方,资源就会被拦截,不再往下走了
        chain.doFilter(req,resp);//放行,先走的是Servlet,再回到我们的过滤器
        /*
        * if语句,该放行的就写一个chain.doFilter(req,resp);//放行
        * 不该放行的话,让他跳转到其它页面
        * */
        System.out.println("放行完以后资源访问继续");
    }

    public void init(FilterConfig config) throws ServletException {
   
   
        System.out.println("FilterDemo1这个过滤器被初始化");
    }

}

三、Filter注解和配置文件的写法

优先选择注解写法,方便简单,两者只能选择其一

3.1配置文件的写法

① 需要在web.xml文件写配置
web.xml文件代码如下

代码如下(示例):

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <filter>
        <filter-name>FilterDemo2</filter-name>
        <filter-class>com.qfedu.b_filter.FilterDemo2</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>FilterDemo2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>
package com.qfedu.b_filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

public class FilterDemo2 implements Filter {
   
   
    public void destroy() {
   
   
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
   
   
        chain.doFilter(req, resp);
    }

    public void init(FilterConfig config) throws ServletException {
   
   

    }

}

3.2注解的写法【推荐使用】

代码如下(示例):

package com.qfedu.b_filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小yu别错过

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值