过滤器:当訪问一个web资源的时候,过滤器就在你訪问这个web资源的前进行拦截...在放行过后...filter过滤器也能够做一些其它的事情.

编写过滤器的步骤:

1.写一个过滤器类实现filter接口

2.在web.xml文件里进行注冊..

案例1:

(1).过滤器类

package cn.itheima.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse; public class FilterDemo1 implements Filter {
//过滤器初始化的时候调用这种方法
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("init....");
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
System.out.println("过滤....");
//放行
chain.doFilter(request, response);
}
//过滤器对象死亡的时候做的善后工作
public void destroy() {
System.out.println("destory....");
} }

(2).web.xml文件里的配置:

<filter>
<filter-name>FilterDemo1</filter-name>
<filter-class>cn.itheima.filter.FilterDemo1</filter-class>
</filter>
<filter-mapping>
<filter-name>FilterDemo1</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

(3).编写一个servlet进行測试:

package cn.itheima.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class FilterDemo1 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.getWriter().write("Hello world!");
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
} }

执行结果:

当我们启动tomcat的时候,载入day14应用完成的时候init方法运行....

当我们訪问FilterDemo1的时候....假设放行即有doFilter()...就会在页面中看到hello world的字样。

假设没有放行。就不会看到...

当关闭tomcat的时候。我们发现destory方法运行....

因此我们能够总结出filter的生命周期:

生命周期:

当server启动时,web应用载入后,马上创建这个web应用中的全部的过滤器,过滤器创建出来后马上调用init方法运行初始化的操作.

创建出来后一直驻留在内存中为兴许的拦截进行服务.每次拦截到请求后都会导致doFilter方法运行.

在server关闭或web应用被移除出容器时,随着web应用的销毁过滤器对象销毁.销毁之前调用destory方法运行善后工作.

案例2:

(1).我们写两个过滤器FilterDemo1和FilterDemo2

package cn.itheima.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse; public class FilterDemo1 implements Filter {
//过滤器初始化的时候调用这种方法
public void init(FilterConfig filterConfig) throws ServletException {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
System.out.println("filterDemo1....before");
chain.doFilter(request, response);
System.out.println("filterDemo1....after");
}
//过滤器对象死亡的时候做的善后工作
public void destroy() {
} }

package cn.itheima.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse; public class FilterDemo2 implements Filter { public void init(FilterConfig filterConfig) throws ServletException {
} public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
System.out.println("filterDemo2....before");
chain.doFilter(request, response);
System.out.println("filterDemo2....after");
} public void destroy() {
} }

控制台的打印结果是:

filterDemo1....before

filterDemo2....before

filterDemo2....after

filterDemo1....after



过滤器的运行顺序是依据web.xml文件里的mapping的配置顺序运行的。

同一时候init的方法还能够使用filterConfig来获取配置文件里的信息。这里我就不演示了

黑马day14 过滤器概述&amp;生命周期&amp;运行过程的更多相关文章

  1. JVM生命周期与运行过程

    1. Java虚拟机的生命周期 Java虚拟机的生命周期 一个运行中的Java虚拟机有着一个清晰的任务:执行Java程序.程序开始执行时他才运行,程序结束时他就停止.你在同一台机器上运行三个程序,就会 ...

  2. 黑马eesy_15 Vue:03.生命周期与ajax异步请求

    黑马eesy_15 Vue:02.常用语法 黑马eesy_15 Vue:03.生命周期 黑马eesy_15 Vue:04.Vue案例(ssm环境搭建) vue的生命周期与ajax异步请求 1.Vue的 ...

  3. servlet的生命周期与运行时的线程模型

    第 14 章 生命周期 注意 讲一下servlet的生命周期与运行时的线程模型,对了解servlet的运行原理有所帮助,这样才能避免一些有冲突的设计. 如果你不满足以下任一条件,请继续阅读,否则请跳过 ...

  4. 教你理解微信小程序的生命周期和运行原理

    转自:http://blog.csdn.net/tsr106/article/details/53052879  写微信小程序,他的生命周期不能不知道,不知道小程序就会出现各种bug而无法解决.小助君 ...

  5. 理解微信小程序的生命周期和运行原理

    写微信小程序,他的生命周期不能不知道,不知道小程序就会出现各种bug而无法解决.小助君公众号带你学习小程序的生命周期和运行原理. 小程序由两大线程组成:负责界面的线程(view thread)和服务线 ...

  6. 浅尝Spring注解开发_Bean生命周期及执行过程

    Spring注解开发 浅尝Spring注解开发,基于Spring 4.3.12 包含Bean生命周期.自定义初始化方法.Debug BeanPostProcessor执行过程及在Spring底层中的应 ...

  7. Gradle系列之三 Gradle概述以及生命周期

    1 Gradle是一种编程框架 gradle主要由以下三部分组成 1 groovy核心语法 2 build script block 3 gradle api 注:本章所有的代码都在 https:// ...

  8. Servlet概述及其生命周期

    Servlet和传统CGI程序相比的优点:   1. 只需要启动一个操作系统进程以及加载一个JVM,大大降低了系统的开销 2. 如果多个请求需要做同样处理的时候,这时只需要加载一个类,这也大大降低了开 ...

  9. Servlet学习(一)——Servlet的生命周期、执行过程、配置

    1.什么是Servlet Servlet 运行在服务端的Java小程序,是sun公司提供一套规范(接口),用来处理客户端请求.响应给浏览器的动态资源.但servlet的实质就是java代码,通过jav ...

随机推荐

  1. HDU 5654 xiaoxin and his watermelon candy 离线树状数组

    xiaoxin and his watermelon candy Problem Description During his six grade summer vacation, xiaoxin g ...

  2. SYN-Flood防御方法之一Synproxy

    SYN-Flood攻击: 攻击者发送大量的SYN给服务器. 服务器必须针对每一个SYN请求回送一个SYN-ACK 应答包,此时服务器就必须保持一条半开放的连接,直到接收到一个对应的ACK应答包为止. ...

  3. [Javascript] 层控制(隐藏、显示、卷起、展开)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. linux 安装redis zookeeper

    安装redis: http://www.redis.cn/download.html 安装的前提条件: 需要安装gcc:yum install gcc-c++ wget http://download ...

  5. .NET序列化工具Jil、Json.NET和Protobuf的简单测评

    前一段时间逛园子的时候发现有人比较了Jil.Json.NET和Protobuf的性能,一时好奇,也做了个测试,这里记录下来,以供查阅. 前期准备 依赖类库的话,可以通过Nuget在公共组件库总下载,这 ...

  6. 在eclipse环境下使用maven install 命令碰到native2ascii-utf8问题解决方案

    报错语句:Failed to execute goal org.codehaus.mojo:native2ascii-maven-plugin:1.0-beta-1:native2ascii (nat ...

  7. Javascript 正则表达式简述

    本文地址:http://www.cnblogs.com/blackmanba/p/regular-expressions-introduce.html 或者 http://forkme.info/re ...

  8. rmi 工作原理

    rmi 工作原理 (转) 工作SocketJava应用服务器网络应用  RMI(Remote Method Invocation,远程方法调用)是Java的一组拥护开发分布式应用程序的API.RMI使 ...

  9. 最新消息,CDRX7冰点价再返现,你知道么?

    一年一度的七夕又到来了,这不很多的单身狗朋友们都已经自备好了狗粮,准备在家里宅上一天呢? 开个玩笑今天小编就为各位带来了 一个劲爆大消息... Deng/deng/deng/deng..就是备受万众瞩 ...

  10. requests模块的高级用法

    SSL Cert Verification #证书验证(大部分网站都是https) import requests respone=requests.get('https://www.12306.cn ...