Filter过滤器(1)初步认识

1.认识一下filter是一个什么东西。

新建一个filter(命名为Filter)。步骤( idea):File-new-Create New Filter
在这里插入图片描述

白色数字1,@WebFilter(FilterName = “filter”)很显然,说明这是一个过滤器,名字是filter
白色数字2,我们给起的类名
白色数字3 ,实现Filter接口

黄色数字123,三个函数,destroy,doFilter,init,直接从函数名理解就是销毁,执行,初始化…

  • init:服务器启动,filter对象初始化时执行
  • dofilter:进入到这个过滤器的时候执行
  • destroy:服务器关闭,filter对象销毁时执行

2.filter用来做什么?

过滤器自然是用来过滤的,没用filter时所有的请求都能到达servlet,如下图黑色路线。用了filter之后,浏览器发送的请求需要先经过filter过滤再进入到servlet,如下图红色线路。

在这里插入图片描述

3.filter怎么用

知道过滤器是什么,有什么功能,接下来就是怎么使用它。
首先要对过滤器进行配置,这里介绍两种方式。

第一种就是第一步创建的时候默认的注解方式,很简单。但是这种方式只能用于自己写的filter。

//以下三种等价
@WebFilter("/hello")
@WebFilter(value = "/hello")
@WebFilter( urlPatterns = "/hello")
//常用设置
@WebFilter(filterName = "Filter",
           urlPatterns = "/hello",
           dispatcherTypes{DispatcherType.FORWARD,DispatcherType.REQUEST},
           initParams = { @WebInitParam(name = "encoding", value = "utf-8")})

第二种是在web.xml文件中进行配置

 <!--名字和所在包-->
    <filter>
        <!--这里的名字可以自定义,一般默认和自己定义的类名相同-->
        <filter-name>Filter</filter-name>
        <filter-class>filter.Filter</filter-class> 
        <!--根据需要改变默认参数,下面是处理编码格式,-->
        <!--<init-param>-->
        <!--    <param-name>encoding</param-name>-->
        <!--    <param-value>UTF-8</param-value>-->
        <!--</init-param>-->
    </filter>
    
    <!--需要过滤的路径-->
    <filter-mapping>
        <!--这里的filter-name一定要和上面的filter-name相同-->
        <filter-name>Filter</filter-name>
        <url-pattern>/hello</url-pattern>
        <!--<dispatcher>FORWARD</dispatcher>-->
        <!--<dispatcher>REQUEST</dispatcher>-->
    </filter-mapping>

接下来开始实践一下吧!
(1)首先创建一个filter,和一个servlet如下

public class Filter implements javax.servlet.Filter {
    public void destroy() {
        System.out.println("过滤器销毁");
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        System.out.println("过滤...");
        //放行
        chain.doFilter(req, resp);
    }

    public void init(FilterConfig config) throws ServletException {
        System.out.println("过滤器创建");
    }

}
@WebServlet("/hello")
public class Servlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("收到get请求");
    }
}

(2)在web.xml中配置filter,常见的一些配置如下

 <!--名字和所在包-->
    <filter>
        <!--这里的名字可以自定义,一般默认和自己定义的类名相同-->
        <filter-name>Filter</filter-name>
        <filter-class>filter.Filter</filter-class> 
    </filter>
    
    <!--需要过滤的路径-->
    <filter-mapping>
        <!--这里的filter-name一定要和上面的filter-name相同-->
        <filter-name>Filter</filter-name>
        <url-pattern>/hello</url-pattern>
    </filter-mapping>

(3)启动项目,服务器开启,此时过滤器创建
在这里插入图片描述
访问/hello并发起请求
在这里插入图片描述

得到以下结果
在这里插入图片描述
(4)关闭服务器,然后看到以下结果
在这里插入图片描述
结束啦!以上是对过滤器的初步认识和了解!

4.关于filter的url和DispatcherType

1.路径:

  • “/*”:所有(包括jsp)
  • “/”:所有(不包括jsp)
  • “/hello”:指定路径
  • “/hello/hi/*”:指定路径开头的所有
  • “*.jsp”:所有jsp
  • “*.html”:所有html

2.拦截方式:五种!常用的以下两种…

  • DispatcherType.FORWARD:用于过滤转发,较少使用!(下图蓝色线路)
  • DispatcherType.REQUEST:用于过滤除转发外的请求,这个是默认情况。(下图紫色线路)

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值