1、API

a、生命周期(和servletcontext相似):

(1)创建:服务器启动的时候创建(执行init方法)。

(2)销毁:服务器关闭的时候销毁(执行destory方法)。

b、filterConfig.getFilterName():读取配置文件中的名字。

getInitParameter():读取配置文件中的初始化配置参数。
public class FilterDemo implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        String s1=filterConfig.getFilterName();
        String s2=filterConfig.getInitParameter("zhai");
        System.out.println(s1);
        System.out.println(s2);
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

    }

    @Override
    public void destroy() {

    }

配置文件:

<filter>
    <filter-name>FilterDemo</filter-name>
    <filter-class>pers.zhb.filter.FilterDemo</filter-class>
    <init-param>
        <param-name>zhai</param-name>
        <param-value></param-value>
    </init-param>
</filter>
    <filter-mapping>
        <filter-name>FilterDemo</filter-name>
        <url-pattern>/filter</url-pattern>
    </filter-mapping>

2、配置文件:

(1)全名匹配:

<filter>
    <filter-name>FilterDemo</filter-name>
    <filter-class>pers.zhb.filter.FilterDemo</filter-class>
</filter>
    <filter-mapping>
        <filter-name>FilterDemo</filter-name>
        <url-pattern>/servlet1</url-pattern>
    </filter-mapping>

即访问的虚拟路径名必须为servlet1,匹配的是全部的名字。

(2)目录匹配:

<filter>
    <filter-name>FilterDemo</filter-name>
    <filter-class>pers.zhb.filter.FilterDemo</filter-class>
</filter>
    <filter-mapping>
        <filter-name>FilterDemo</filter-name>
        <url-pattern>/abc/*</url-pattern>
    </filter-mapping>

即必须为abc目录下的资源。

(3)后缀名匹配:

<filter>
    <filter-name>FilterDemo</filter-name>
    <filter-class>pers.zhb.filter.FilterDemo</filter-class>
</filter>
    <filter-mapping>
        <filter-name>FilterDemo</filter-name>
        <url-pattern>*.jsp</url-pattern>
    </filter-mapping>

3、dispatcher:访问的方式。

(1)REQUEST:默认值,代表直接访问某个资源时执行此filter。

在部队REQUEST参数进行配置的时候:

创建两个Servlet,由servlet1请求转发到servlet2:

Servlet1:

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("Servlet1运行了");
        request.getRequestDispatcher("servlet2").forward(request,response);
    }

Servlet2:

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    System.out.println("Servlet2运行了");
    }

过滤器:

 public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        filterChain.doFilter(servletRequest,servletResponse);
        System.out.println("过滤器运行了");
    }

当在配置文件中添加了dispatcher属性后:

    <filter>
        <filter-name>FilterDemo</filter-name>
        <filter-class>pers.zhb.filter.FilterDemo</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>FilterDemo</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
    </filter-mapping>

只有访问Servlet1的时候有过滤器,因为请求转发的时候,只有第一次的时候是直接访问,请求转发到Servlet2的时候不是直接访问。

当把Servlet1改为重定向到Servlet2的时候,Servlet1和Servlet2触发过滤器:

   protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("Servlet1运行了");
        response.sendRedirect(request.getContextPath()+"/servlet2");
    }

因为重定向是对服务器的重新访问,而请求转发发生在服务器内部。

(2)FORWARD:

 <filter>
        <filter-name>FilterDemo</filter-name>
        <filter-class>pers.zhb.filter.FilterDemo</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>FilterDemo</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>FORWARD</dispatcher>
    </filter-mapping>

只有转发的时候才能触发过滤器:

  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("Servlet1运行了");
        response.sendRedirect(request.getContextPath()+"/servlet2");
    }
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    System.out.println("Servlet2运行了");
    }  

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("Servlet1运行了");
       request.getRequestDispatcher("/servlet2").forward(request,response);
    }
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("Servlet2运行了");
    }

(3)INCLUDE:包含其他资源的时候触发过滤器。

(4)ERROR:发生错误的时候触发过滤器。

过滤器的API的更多相关文章

  1. WEBAPI使用过滤器对API接口进行验证

    用户登录控制器:[ActionFilter]自定义过滤器 用户信息:var userData = new JObject();                   userData.Add(" ...

  2. Hbase学习(三)过滤器 java API

    Hbase学习(三)过滤器 HBase 的基本 API,包括增.删.改.查等. 增.删都是相对简单的操作,与传统的 RDBMS 相比,这里的查询操作略显苍白,只能根据特性的行键进行查询(Get)或者根 ...

  3. MVC和Web API 过滤器Filter [转]

    ASP.NET MVC 支持以下类型的操作筛选器: ·        授权筛选器.这些筛选器用于实现IAuthorizationFilter和做出关于是否执行操作方法(如执行身份验证或验证请求的属性) ...

  4. Web Api 过滤器之 ExceptionFilter 异常过滤器

    一.服务器出现异常,会统一向客户端返回 500 的错误. [RoutePrefix("api/test")] public class TestController : ApiCo ...

  5. MVC和Web API 过滤器Filter

    MVC和Web API Filter(过滤器) ASP.NET MVC 支持以下类型的操作筛选器: ·        授权筛选器.这些筛选器用于实现IAuthorizationFilter和做出关于是 ...

  6. Servlet过滤器

    Servlet过滤器 [TOC] 1.过滤器的基本概念 1.1.基本概念 过滤器(Filter)属于tomcat服务器中的Servlet功能.在普通的javaweb服务中,jsp中的请求要被Servl ...

  7. [Java] JSP笔记 - Filter 过滤器

    一.什么是Web过滤器 Servlet API 很久以前就已成为企业应用开发的基石,而 Servlet 过滤器则是对 J2EE 家族的相对较新的补充. Servlet 过滤器是可插入的 Web 组件, ...

  8. DELPHI下API简述(1800个API)

    DELPHI下API简述 http://zero.cnbct.org/show.asp?id=144 auxGetDevCaps API 获取附属设备容量 auxGetNumDevs API 返回附属 ...

  9. Filter过滤器(1)

    Filter也称之为过滤器,它是Servlet技术中比较激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 ht ...

随机推荐

  1. 【EBS】取数SQL-平均成本更新的物料事务处理追溯到应付发票

    SELECT hou.name,--组织 aia.invoice_num,--发票编号 msib.segment1,--物料编码 mmt.transaction_id--物料事务处理 FROM mtl ...

  2. 矩阵优化DP类问题应用向小结

    前言 本篇强调应用,矩阵的基本知识有所省略(也许会写篇基础向...). 思想及原理 为什么Oier们能够想到用矩阵来加速DP呢?做了一些DP题之后,我们会发现,有时候DP两两状态之间的转移是定向的,也 ...

  3. 【leetcode-91 动态规划】 解码方法

    一条包含字母 A-Z 的消息通过以下方式进行了编码: 'A' -> 1 'B' -> 2 ... 'Z' -> 26 给定一个只包含数字的非空字符串,请计算解码方法的总数. 示例 1 ...

  4. Windows7平台下gitblit服务器安装

    在日常开发工作中,我们通常使用版本控制软件管理团队的源代码,常用的SVN.Git.与SVN相比,Git有分支的概念,可以从主分支创建开发分支,在开发分支测试没有问题之后,再合并到主分支上去,从而避免了 ...

  5. win add static arp

    win add static arp > arp -s "192.168.0.2" "00-0a-35-01-fe-c0" > arp -a | f ...

  6. Java调用Http/Https接口(2)--HttpURLConnection/HttpsURLConnection调用Http/Https接口

    HttpURLConnection是JDK自身提供的网络类,不需要引入额外的jar包.文中所使用到的软件版本:Java 1.8.0_191. 1.服务端 参见Java调用Http接口(1)--编写服务 ...

  7. aria2 adduri

    demo, ok import 'package:flutter/material.dart'; import 'package:permission_handler/permission_handl ...

  8. Firebird 审计追踪

    Firebird 打开审计追踪功能,即在服务器上打开日志记录功能,根据配置记录不同类型的服务器执行情况. 1.首先修改Firebird.conf文件,打开审计功能: AuditTraceConfigF ...

  9. EF 批量增删改 EntityFramework.Extensions

    EntityFramework.Extensions 1.官方网站  http://entityframework-extensions.net/ 2 破解版  Z.EntityFramework.E ...

  10. uboot中的mmc命令(转)

    转载地址:https://blog.csdn.net/a624731186/article/details/37700205 一:mmc的命令如下: 1:对mmc读操作 mmc read addr b ...