Filter:过滤器

概念:当访问服务器的资源是,过滤器可以将请求拦截下来,完成一些特殊的功能

快速入门:

  1. 步骤:

    • 定义一个类,实现接口Filter
    • 复写方法
    • 配置拦截路径
package com.data.web.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter("/*")//访问所有资源之前,都会执行该过滤器
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("Filter被执行了");//当访问资源是,过滤器就会被执行
//放行
filterChain.doFilter(servletRequest,servletResponse);//放行之后才可以访问资源
} @Override
public void destroy() { }
}
过滤器的执行流程
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<%
System.out.println("执行index.jsp.....");
%>
</body>
</html>
package com.data.web.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter("/*")
public class FilterDemo2 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("filterDemo2执行了....");
filterChain.doFilter(servletRequest,servletResponse);
//放行后可以对响应的数据增强
System.out.println("filterDemo2回来了....");
} @Override
public void destroy() { }
}
filterDemo2执行了....
执行index.jsp.....
filterDemo2回来了....
过滤器的生命周期

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

doFilter方法:每一次请求被拦截资源时,会执行,执行多次

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

过滤器配置详解
  • 拦截路径配置

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

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

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

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

  • 拦截方式配置:

    注解配置:过滤器会根据设置dispatcherTypes属性的值来决定要不要执行

    REQUEST:默认值。浏览器直接请求资源

    FORWARD:只有是转发访问的资源,过滤器才会执行

    INCLUDE:包含访问资源

    ERROR:错误跳转资源

    ASYNC:异步访问资源

    web.xml配置:设置标签即可

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

执行顺序:如果有两个过滤器:过滤器1和过滤器2

1.过滤器1

2.过滤器2

3.资源执行

4.过滤器2

5.过滤器1

过滤器先后顺序问题:

1.注解配置:按照类名的字符串比较规则比较,值小的先执行

2.web.xml配置:谁定义在上边,谁先执行

笔记-JavaWeb学习之旅15的更多相关文章

  1. 笔记-JavaWeb学习之旅5

    CP30的演示 package cn.itcast.datasourcejdbc; import com.mchange.v2.c3p0.ComboPooledDataSource; import j ...

  2. 笔记-JavaWeb学习之旅7

    JavaScript基础 概念:一门客户端脚本语言,运行在客户端浏览器中,每一个浏览器都有JavaScript的解析引擎,是一个脚本语言,不需要编译,直接就可以被浏览器解析执行. JavaScript ...

  3. 笔记-JavaWeb学习之旅3

    数据库的设计 1.多表之间的关系 一对一 一对一关系实现,可以在任意一方添加唯一外键指向另一方的主键 一对多 在多的一方建立外键指向一的一方建立主键 多对多 多对多关系实现需要借助第三张中间表.中间表 ...

  4. 笔记-JavaWeb学习之旅19

    Redis:redis是一款高性能的NOSQL系列的非关系型数据库 NOSQL: Not Only SQL ,意即"不仅仅是SQL",是一项全新的数据库理念,泛指非关系型数据库 r ...

  5. 笔记-JavaWeb学习之旅18

    AJAX:ASynchronous JavaScript And XML 异步的JavaScript 和XML 异步和同步:客户端和服务器端相互通信的基础上 同步:客户端操作后必须等待服务器端的响应, ...

  6. 笔记-JavaWeb学习之旅17

    1.过滤选择器 首元素选择器:first 获得选择的元素中的第一个元素 尾元素选择器:last获得选择元素中的最后一个元素 非元素选择器:not(selector) 不包括指定内容的元素 偶数选择器: ...

  7. 笔记-JavaWeb学习之旅16

    增强对象的功能 动态代理:在内存中形成代理类 实现步骤: 代理对象和真实对象实现相同的接口 代理对象 = Proxy.newProxyInstance(); 使用代理对象调用真实对象的方法 增强方法 ...

  8. 笔记-JavaWeb学习之旅14

    JSTL:JavaServer Pages Tag Library JSP标准标签库 if标签 <%@ page import="java.util.ArrayList" % ...

  9. 笔记-JavaWeb学习之旅10

    Servlet server applet运行在服务器端的小程序,servlet就是一个接口,定义了Java类被浏览器访问到的规则(Java类重写这个接口,就可以被浏览器(tomcat)识别) Ser ...

随机推荐

  1. 让我们再谈谈 iOS 安全

    前言 安全方面的话题总是聊不完的.这不,国外一家有名的专门攻击别人的安全公司 Hacking Team 自己被 Hack 了,结果有 400 多 G 的攻击资料泄漏出来,包括一些 0-day 的漏洞. ...

  2. webpack笔记1

    1.设置多个入口起点 多用于提取公共类库 a.利用commonChunkPlugin const webpack= require('webpack'); const path = require(' ...

  3. css设置文件编码

    在外部css文件的顶部,写入下面代码: @charset "UTF-8";

  4. 网站桌面端和手机端不同url的设置

    你的网站在搜索引擎中表现怎样很大程度上依赖于你的你的网站对于不同设备上的设计. 下面介绍了怎样基于URL构造来优化你的网站对于搜索引擎的支持. 决定你网页的URL构造 Determine the UR ...

  5. linux命令学习笔记(51):lsof命令

    lsof(list open files)是一个列出当前系统打开文件的工具.在linux环境下,任何事物都以文件的形式存在, 通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件.所以如传输控制协 ...

  6. linux命令学习笔记-eval命令详解

    功能说明:重新运算求出参数的内容. 语 法:eval [参数] 补充说明:eval可读取一连串的参数,然后再依参数本身的特性来执行. 参 数:参数不限数目,彼此之间用分号分开. .eval命令将会首先 ...

  7. 从CWnd::GetSafeHwnd实现得到的知识

    在看MFC源码的过程中,有个地方一直不解,看如下代码 BOOL CFrameWnd::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWO ...

  8. 如何运行jnlp文件

    运行DOS命令: C:\Users\thinkpad>javaws D:\***.jnlp 如提示“应用程序已被java安全阻止”则进入控制面板->Java  打开java控制面板,在安全 ...

  9. zero to one (4)

    复盘--天下武功唯快不破 There is no martial art is indefectible, while the fastest speed is the only way for lo ...

  10. Mysql常用命令行大全(一)

    登录到mysql中,然后在mysql的提示符下运行下列命令,每个命令以分号结束. 1. 显示数据库列表. show databases; 缺省有两个数据库:mysql和test. mysql库存放着m ...