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. python3:使用for循环打印九九乘法表

    for i in range(1, 10): for j in range(1, i + 1): print(j, '*', i, '=', i * j, end=" ") #en ...

  2. 【Linux】Ubuntu修改root用户密码

    使用vmware安装ubuntu的时候,安装完之后发现没有root用户密码,只有新建用户,这个时候需要重新设置root用户密码 在新建用户下面运行 sudo passwd root

  3. Netty源码分析之NioEventLoop(三)—NioEventLoop的执行

    前面两篇文章Netty源码分析之NioEventLoop(一)—NioEventLoop的创建与Netty源码分析之NioEventLoop(二)—NioEventLoop的启动中我们对NioEven ...

  4. nginx+lua访问流量实时上报kafka

    在nginx这一层,接收到访问请求的时候,就把请求的流量上报发送给kafka storm才能去消费kafka中的实时的访问日志,然后去进行缓存热数据的统计 从lua脚本直接创建一个kafka prod ...

  5. Jquery+CSS实现遮罩效果

    JavaScript: (function ($) { $.fn.ShowMask = function (options) { var defaults = { top: 150, left: 20 ...

  6. NEST refresh flush forcemerge

    public void Refresh() { client.Refresh("employee"); } public void Flush() { client.Flush(& ...

  7. Spring通过注解@Autowired/@Resource获取bean实例时为什么可以直接获取接口而不是注入的类

    问: 这个问题困扰了我好久,一直疑问这个接口的bean是怎么注入进去的?因为只看到使用@Service注入了实现类serviceImpl,使用时怎么却获取的接口,而且还能调用到实现类的方法,难道这个接 ...

  8. Matlab组合模式

    组合模式(Composite),将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性.组合模式的目的是让客户端不再区分操作的是组合对象(Compos ...

  9. php xml解析

    XML处理是开发过程中经常遇到的,PHP对其也有很丰富的支持,本文只是对其中某几种解析技术做简要说明,包括:Xml parser, SimpleXML, XMLReader, DOMDocument. ...

  10. 关于ABViewer的疑问解答

    很多 CAD小伙伴都对 ABViewer 这款软件不陌生吧.ABViewer 是用来处理图纸和工程文档管理的一款通用软件.可以用它来查看,编辑,转换,测量和打印DWG和其他CAD文件,以及3D模型和光 ...