Servlet、Filter、Listener是JavaWeb的三大组件,给Web开发提供了很大的便利。

  • 什么是Filter?

Filter,过滤器。类似与生活中的净水器、空气净化器。

JavaWeb中Filter的作用:当浏览器请求访问服务器的资源时,过滤器可以将请求拦截下来,完成一下特殊的功能。例如:登录验证、统一编码处理、敏感字符过滤等。

  • Filter的基本使用

(1)定义一个类,实现接口Filter。

(2)实现Filter接口的方法

(3)配置拦截路径。可以用web.xml进行配置;Servlet 3.0以后还可以用注解进行配置。

示例1(注解配置):

@WebFilter("/index.jsp")
public class FilterDemo1 implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException { } @Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("过滤请求req的代码");
filterChain.doFilter(servletRequest,servletResponse); // 放行请求
System.out.println("增强响应resp的代码");
} @Override
public void destroy() { }
}

示例2(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>filter1</filter-name>
<filter-class>com.chichung.web.filter.FilterDemo1</filter-class>
</filter>
<filter-mapping>
<filter-name>filter1</filter-name>
<url-pattern>/index.jsp</url-pattern>
</filter-mapping>
</web-app>

上面两个示例的输出结果都是:

过滤请求req的代码
index...
增强响应resp的代码

说明,Filter的执行顺序是:

(1)执行过滤器放行代码上边的代码

(2)执行放行代码 filterChain.doFilter(servletRequest,servletResponse)

(3)执行放行后的资源 index.jsp

(4)回来执行过滤器放行代码下边的代码

所以Filter可以对请求对象进行过滤,还可以对响应对象进行功能上的增强,再返回给客户端。

  • 关于拦截的配置

上面讲了一下两种配置拦截的两种方式。

下面是拦截路径的几种方式:

(1)具体资源路径: /index.jsp   只有访问index.jsp资源时,过滤器才会被执行

(2)拦截目录: /user/*    访问/user下的所有资源时,过滤器都会被执行

(3)后缀名拦截: *.jsp        访问所有后缀名为jsp资源时,过滤器都会被执行

(4)拦截所有资源:/*        访问所有资源时,过滤器都会被执行

还有就是拦截方式的配置。什么是拦截方式呢?我们有些请求是直接访问jsp文件,有些请求是先访问Servlet,然后Servlet通过请求转发到到jsp显示。直接访问jsp文件我们可以用上面的示例代码解决,但是请求转发或者其他方式呢?

* 注解配置:
                * 设置dispatcherTypes属性
                    1. REQUEST:默认值。浏览器直接请求资源
                    2. FORWARD:转发访问资源
                    3. INCLUDE:包含访问资源
                    4. ERROR:错误跳转资源
                    5. ASYNC:异步访问资源
* web.xml配置
                * 设置<dispatcher></dispatcher>标签即可

  • 过滤器的生命周期

Filter接口的三个方法:

1. init:在服务器启动后,会创建Filter对象,然后调用init方法。只执行一次。用于加载资源

2. doFilter:每一次请求被拦截资源时,会执行。执行多次

3. destroy:在服务器关闭后,Filter对象被销毁。如果服务器是正常关闭,则会执行destroy方法。只执行一次。用于释放资源

  • 过滤器链(配置多个过滤器)

执行顺序:如果有两个过滤器:过滤器1和过滤器2
            1. 过滤器1
            2. 过滤器2
            3. 资源执行
            4. 过滤器2
            5. 过滤器1

过滤器先后顺序问题:

1. 注解配置:按照类名的字符串比较规则比较,值小的先执行。例如: AFilter 和 BFilter,AFilter就先执行了。

2. web.xml配置: <filter-mapping>谁定义在上边,谁先执行。

Filter过滤器-JavaWeb三大组件之一的更多相关文章

  1. 学习笔记_过滤器概述(过滤器JavaWeb三大组件之一)

    过滤器Filter Filter和Lister是Servlet规范里的两个高级特性.不同于Servlet,它们不用于处理客户端请求,只用于对request.response进行修改或者对context ...

  2. 学习笔记_Filter小结(过滤器JavaWeb三大组件之一)

    Filter小结 Filter的三个方法: l  void init(FilterConfig):在Tomcat启动时被调用: l  void destroy():在Tomcat关闭时被调用: l  ...

  3. 学习笔记_过滤器详细_2(过滤器JavaWeb三大组件之一)

    过滤器详细 5 四种拦截方式 我们来做个测试,写一个过滤器,指定过滤的资源为b.jsp,然后我们在浏览器中直接访问b.jsp,你会发现过滤器执行了! 但是,当我们在a.jsp中request.getR ...

  4. 学习笔记_过滤器详细(过滤器JavaWeb三大组件之一)

    过滤器详细 1 过滤器的生命周期 我们已经学习过Servlet的生命周期,那么Filter的生命周期也就没有什么难度了! (l)  init(FilterConfig):在服务器启动时会创建Filte ...

  5. JavaWeb三大组件—过滤器filter

    JavaWeb三大组件 1. 都需要在web.xml中进行配置ServletListener(2个感知监听器不需要配置)Filter 2. 过滤器 它会在一组资源(jsp.servlet..css.. ...

  6. JavaWeb三大组件(Servlet、Filter、Listener)

    JavaWeb三大组件指的是:Servlet.Filter.Listener,这三个组件在JavaWeb开发中分别提供不同的功能,然而很多人可能只用过其中一个或者两个(Servlet.Filter,比 ...

  7. JavaWeb三大组件(Servlet,Filter,Listener 自己整理,初学者可以借鉴一下)

    JavaWeb三大组件(Servlet,Filter,Listener 自己整理,初学者可以借鉴一下) Reference

  8. JavaWeb三大组件

    一.JavaWeb三大组件 Servlet,Listener,Filter.它们在JavaWeb开发中分别提供不同的功能. JavaWeb三大组件都必须在Web.xml中配置 二.三大组件 1.Ser ...

  9. 转-JavaWeb三大组件之Listener监听器

    JavaWeb三大组件之Listener监听器一.概述1,它是一个接口,内容由我们来实现 2,它需要注册,例如注册在按钮上 3,监听器中的方法,会在特殊事件发生时被调用 二.JavaWeb中的监听器1 ...

随机推荐

  1. 【纪中集训2019.3.11】Cubelia

    题目: 描述 给出长度为\(n\)的数组\(a\)和\(q\)个询问\(l,r\). 求区间\([l,r]\)的所有子区间的前缀和的最大值之和: 范围: $n \le 2 \times 10^5 , ...

  2. 【THUSC2017】巧克力

    题目描述 ​“人生就像一盒巧克力,你永远不知道吃到的下一块是什么味道.” ​ 明明收到了一大块巧克力,里面有若干小块,排成n行m列.每一小块都有自己特别的图案ci,j,它们有的是海星,有的是贝壳,有的 ...

  3. tensorflow四维tensor的形状以及函数tf.argmax( )的笔记

    关于tensorflow里多维数组(主要是四维)的组织形式之前一直没弄懂,最近遇到相关问题,算是搞清楚了一些东西,特别记下来,免得自己又遗忘了. 三维形式能很简单的脑补出来三维的形状,不再赘述. 之前 ...

  4. Java基础-IO流对象之内存操作流(ByteArrayOutputStream与ByteArrayInputStream)

    Java基础-IO流对象之内存操作流(ByteArrayOutputStream与ByteArrayInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.内存 ...

  5. vue2.0实战记录

    1. 初始化项目vue init webpack caseone cd caseonecnpm installcnpm install less less-loader -Dcnpm install ...

  6. 机器学习算法整理(一)线性回归与梯度下降 python实现

    回归算法 以下均为自己看视频做的笔记,自用,侵删! 一.线性回归 θ是bias(偏置项) 线性回归算法代码实现 # coding: utf-8 ​ get_ipython().run_line_mag ...

  7. Django 2.0.1 官方文档翻译: 快速安装向导 (Page5)

    快速安装向导 (Page 5) 在你使用 Django 前,你需要先安装它.我们有一个完整的安装向导,它包含所有涉及的内容,这个向导会指导你进行一个简单的.最小化的安装,当你通过浏览介绍内容的时候,这 ...

  8. 织梦自定义表单通过ajax提交的实现方法

    自定义表单通过ajax判断,提交不用跳转页面,提高用户体验.具体方法如下: html表单代码部分,就提交按钮改成botton,,添加onclick事件 表单代码: <form action=&q ...

  9. python json 访问与字符串截取

    # req = requests.Request(url=url, headers=headers, data=data) # html = requests.get(req) # print(htm ...

  10. 对某道ctf的一点点记录

    题目:http://ctf5.shiyanbar.com/web/pcat/index.php 是一道注入的题,主要利用了offset 和 group by with rollup的知识 1.offs ...