过滤器

  过滤请求和响应

  作用:
        自动登录.
        统一编码.
        过滤关键字
        ....

  Filter是一个接口

编写filter步骤:

  • 1.编写一个类

a.实现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 TestFilter implements Filter {

    @Override
    public void destroy() {
        // TODO Auto-generated method stub
    }

    @Override
    public void doFilter(ServletRequest arg0, ServletResponse arg1,
            FilterChain arg2) throws IOException, ServletException {
        // TODO Auto-generated method stub
    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {
        // TODO Auto-generated method stub
    }
}

b.重写方法

  • 2.编写配置文件

a.注册filter

<filter>
        <filter-name>TestFilter</filter-name>
        <filter-class>com.TestFilter</filter-class>
</filter>

b.绑定路径

<filter-mapping>
    <filter-name>TestFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
  • 3.测试

Filter接口的方法:
    init(FilterConfig config):初始化操作
    doFilter(ServletRequest request, ServletResponse response, FilterChain chain):处理业务逻辑
    destroy() :销毁操作
filter的生命周期(了解)
    filter单实例多线程
    filter在服务器启动的时候 服务器创建filter 调用init方法 实现初始化操作
    请求来的时候,创建一个线程 根据路径调用dofilter 执行业务逻辑
    当filter被移除的时候或者服务器正常关闭的时候 调用destory方法 执行销毁操作.
FilterChain:过滤链
    通过chain的dofilter方法,可以将请求放行到下一个过滤器,直到最后一个过滤器放行才可以访问到servlet|jsp
    doFilter()放行方法
★url-pattern配置
    3种
    完全匹配    必须以"/" 开始  例如: /a/b
    目录匹配    必须以"/" 开始 以"*"结束  例如:/a/b/*
    后缀名匹配    以"*."开始 以字符结束   例如 :  *.jsp  *.do  *.action
例如:
    afilter  路径  /*
    bFilter  路径  /demo4
★一个资源有可能被多个过滤器匹配成功,多个过滤器的执行顺序是按照web.xml中filter-mapping的顺序执行的

filterConfig:(了解)
        过滤器的配置对象
        作用:
            获取全局管理者
            获取当前filter的名称
            获取当前filter的初始化参数
    
filter-mapping的子标签(理解)
        servlet-name:匹配那个servlet 值写的是serlvet标签中servlet-name的值
            建议:不要在一个filter中重复的匹配servlet
                例如: serlvet的url-pattern为  /a/b/hello   serlvetname:HelloServlet
                    如果filter中的url-pattern  /*
                    最好不要在写 servlet-name:HelloServlet

<filter>
    <filter-name>Name4ServletFilter</filter-name>
    <filter-class>com.servletname.Name4ServletFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>Name4ServletFilter</filter-name>
    <servlet-name>Demo11Servlet</servlet-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

    不要这样写    
      url-pattern和servlet-name都会拦截Demo11Servlet
      在7.0版本回执行两次
        dispatcher:
            匹配哪种请求
            默认的是REQUEST,一旦显式的写出来哪种请求,默认就不起作用了
                理解
                    REQUEST:从浏览器发送过来的请求(默认) 理解
                    FORWARD:转发过来的请求 理解
                了解
                    ERROR:因服务器错误而发送过来的请求
                    INCLUDE:包含过来的请求
      通过filter实现服务器统一错误页面

<error-page>
    <error-code>404</error-code>
    <location>/404.jsp</location>
</error-page>
<error-page>
    <error-code>500</error-code>
    <location>/500.jsp</location>
</error-page>

Fiilter的更多相关文章

  1. [RxJS] Resubscribing to a Stream with Repeat

    When you complete a stream, there’s no way to restart it, you must resubscribe. This lesson shows ho ...

  2. 第五章:大数据 の HBase 进阶

    本课主题 HBase 读写数据的流程 HBase 性能优化和最住实践 HBase 管理和集群操作 HBase 备份和复制 引言 前一篇 HBase 基础 (HBase 基础) 简单介绍了NoSQL是什 ...

  3. 虚拟机创建及安装ELK

    虚拟机创建及安装ELK 作者:高波 归档:学习笔记 2018年5月31日 13:57:02 快捷键: Ctrl + 1    标题1 Ctrl + 2    标题2 Ctrl + 3    标题3 C ...

  4. Django的models操作

    一.先看单表操作 增 方式1: models.book.objects.create( Book_name = "aaa", Book_info = "bbb" ...

  5. Spring MVC表单提交中文数据出现乱码

    http://jiessiedyh.iteye.com/blog/475541 http://bigcat.easymorse.com/?p=474 Spring MVC 教程,快速入门,深入分析 h ...

  6. javaweb应用程序概述

    1.HTTP(超文本传输协议),它是一种主流的B/S架构中应用的通信协议.具有以下特点: 1.1.无状态:服务不会记录客户端每次提交的请求,服务器一旦响应客户端之后,就会结束本次的通信过程,客户端下一 ...

  7. API 网关知识看这篇就足够了!

    本文已经收录自 JavaGuide (60k+ Star[Java学习+面试指南] 一份涵盖大部分Java程序员所需要掌握的核心知识.) 本文授权转载自:https://github.com/java ...

  8. [TimLinux] JavaScript 元素动态显示

    1. css的opacity属性 这个属性用于:设置元素的不透明级别,取值范围:从 0.0 (完全透明)到 1.0(完全不透明),元素所在的文本流还在.这个属性的动态变化可以用来设置元素的淡入淡出效果 ...

  9. kotlin高阶函数实战&DSL入门

    传统函数演示: 这里以电视节目“非诚勿扰”为例,男人去从一大堆美女当中挑选出自己中意的对象,比如台上有24位妹子,其档案如下: 接下来第一个男嘉宾出场啦,如下: 下面用代码来实现一下,比较简单: 先定 ...

随机推荐

  1. [转]springmvc+mybatis需要的jar包与详解

    1.antlr-2.7.6.jar:  项目中没有添加,hibernate不会执行hql语句 2.Aopalliance.jar: 这个包是AOP联盟的API包,里面包含了针对面向切面的接口,通常Sp ...

  2. C++调用python(C++)

    C++源代码:python部分就是正常的python代码 #include <string.h> #include <math.h> #include "iostre ...

  3. LOIC Download

    { //https://github.com/NewEraCracker/LOIC }

  4. Windows 设置IP解决方案

    { super + e / windows + e Mouse Right play down network link }

  5. 【转载】浅谈Linux内存管理机制

    经常遇到一些刚接触Linux的新手会问内存占用怎么那么多? 在Linux中经常发现空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然.这是Linux内存管理的一个优秀特性,在 ...

  6. csps模拟84Smooth,Six,Walker题解

    题面:https://www.cnblogs.com/Juve/articles/11733280.html smooth: 暴力强筛到7e7有60分... 正解: 维护一个队列,存所有的B-光滑数, ...

  7. springMVC 400 错误

    1. 今天发现一个奇葩的问题, springMVC出现400错误, 查了很久发现是因为一个参数为int型,而前台传得是String. 这是bug么.

  8. 如何清除本机DNS缓存

    如何清除本机DNS缓存 在实际应用过程中可能会遇到DNS解析错误的问题,就是说当我们访问一个域名时无法完成将其 解析到IP地址的工作,而直接输入网站IP却可以正常访问,这就是因为DNS解析出现故障造成 ...

  9. Ubuntu Error: No module named 'apt_pkg' 怎么办?

    版权声明:任何博客都可以转载,但必须标注来源 https://blog.csdn.net/nikoong/article/details/79612615 ubuntu经常用要添加PPA源,就是使用如 ...

  10. 基础数据类型汇总补充,python集合与深浅拷贝

    一.基础数据类型汇总补充 1.查看str所有方法方式 2.列表:在循环中删除元素,易出错或报错(飘红) lis = [11,22,33,44,55] # for i in range(len(lis) ...