1、Servlet 过滤器有以下目的

  1. 在客户端的请求访问后端资源之前,拦截这些请求。
  2. 在服务器的响应发送回客户端之前,处理这些响应。

2、Filter接口

  1.每一个过滤器都需直接或间接继承Filter接口

  2.Filter的创建

    在web服务器启动时会将配置在web.xml中的过滤器保存至内存中。

  3.Filter的方法

    init():在Filter的生命周期中执行一次,在Filter创建的时候执行,可用于初始化参数、修改参数等操作。

    doFilter():做拦截操作的时候执行

    destroy():在Filter的生命中执行一次,在卸载Filter容器前被调用,用于回收Filter所占用的资源。

3、Filter的配置 

<!--过滤器测试-->
<filter>
<filter-name>TestFilter</filter-name>
<filter-class>com.controller.TestFilter</filter-class>
<init-param>
<param-name>oneLink</param-name>
<param-value>/test1</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>TestFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>ERROR</dispatcher>
</filter-mapping>

  在web.xml中添加如上配置。其中com.controller.TestFilter为自己实现的过滤器,其代码如下:

package com.controller;

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;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class TestFilter implements Filter { private String oneLink;
private String[] linkArr; public void init(FilterConfig filterConfig) throws ServletException {
oneLink = filterConfig.getInitParameter("oneLink");
if (!isNull(oneLink)) {
linkArr = oneLink.split(",");
}
return;
} public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
throws IOException, ServletException {
HttpServletResponse httpResponse = (HttpServletResponse) servletResponse;
boolean isEqual = false;
for (String link : linkArr) {
String str = ((HttpServletRequest) servletRequest).getServletPath();
if(((HttpServletRequest) servletRequest).getServletPath().equals(link)){
isEqual = true;
break;
}
} if (isEqual) {
filterChain.doFilter(servletRequest, servletResponse);
} else {
httpResponse.sendRedirect("/test2");
filterChain.doFilter(servletRequest, servletResponse);
}
} public void destroy() {
} private boolean isNull(Object obj){
return obj == null || obj.equals("") ? true : false;
} }

  这样一个简单的过滤器就配置完成。

4、Filter配置参数介绍

<filter>
<filter-name>TestFilter</filter-name>
<filter-class>com.controller.TestFilter</filter-class>
<init-param>
<param-name>oneLink</param-name>
<param-value>/test1</param-value>
</init-param>
</filter>
<filter-name>:配置过滤器名称
<filter-class>com.controller.TestFilter</filter-class>:配置过滤器的实现类

<init-param>:配置需要出示化的一些参数名、参数值
注:其中<init-param>中配置的参数在web服务启动时可通过Filter中的init方法获取,如filterConfig.getInitParameter("oneLink")
<filter-mapping>
<filter-name>TestFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
<url-pattern>:配置过滤请求规则
<dispatcher>:配置过滤规则,请参考web.xml里<filter-mapping>中的<dispatcher>作用

servlet之filter过滤器的更多相关文章

  1. 【Servlet】Filter过滤器的编写和配置

    Servlet的Filter介绍 在Servlet作为过滤器使用时,它可以对客户的请求进行过滤处理,当它处理完成后,它会交给下一个过滤器处理,就这样,客户的请求在过滤链里一个个处理,直到请求发送到目标 ...

  2. servlet中filter(过滤器)的学习使用

    servlet过滤器是小型的web组件,它能够处理传入的请求和传出的响应.Filter 不是一个servlet,它不能产生一个response,它能够在一个request到达servlet之前预处理r ...

  3. 6.Servlet、Filter过滤器以及监听器

    Servlet 是运行在Web服务器端的Java程序,它使用Java语言编写,与Java程序的区别是Servlet对象主要封装了对HTTP请求的处理,并且它的运行需要Servlet容器的支持,在Jav ...

  4. java Servlet中的过滤器Filter

    web.xml中元素执行的顺序listener->filter->struts拦截器->servlet. 1.过滤器的概念 Java中的Filter 并不是一个标准的Servlet ...

  5. Servlet的学习之Filter过滤器技术(1)

    本篇将讲诉Servlet中一项非常重要的技术,Filter过滤器技术.通过过滤器,可以对来自客户端的请求进行拦截,进行预处理或者对最终响应给客户端的数据进行处理后再输出. 要想使用Filter过滤器, ...

  6. Servlet中的过滤器Filter详解

    加载执行顺序 context-param->listener->filter->servlet web.xml中元素执行的顺序listener->filter->stru ...

  7. Servlet中的过滤器Filter

    链web.xml中元素执行的顺序listener->filter->struts拦截器->servlet. 1.过滤器的概念 Java中的Filter 并不是一个标准的Servlet ...

  8. [转]Servlet的学习之Filter过滤器技术

    本篇将讲诉Servlet中一项非常重要的技术,Filter过滤器技术.通过过滤器,可以对来自客户端的请求进行拦截,进行预处理或者对最终响应给客户端的数据进行处理后再输出. 要想使用Filter过滤器, ...

  9. 【Servlet】Java Serlvet Filter 过滤器

    Filter的设计思想Filter是一种AOP(aspect-oriented programming)的设计思想 : 面向切面编程.用于的请求和响应都会走 使用filter的登录案例我们通过一张图片 ...

随机推荐

  1. django中migration文件是干啥的

    昨天很蠢的问leader git push的时候会不会把本地的数据库文件上传上去,意思是django中那些migration文件修改之后会不会上传. 然后得知不会,因为所有的数据库都存在本机的mysq ...

  2. 多播程序设计(基于UDP协议)

    首先要搞清楚多播IP地址有哪些 D类IP地址就是多播地址,范围是224.0.0.0 ~ 239.255.255.255 其中又划分为以下类别 D类地址的划分 类别 地址范围 描述 局部链接地址(本地网 ...

  3. zabbix监控系列(1)之zabbix-server安装

    推荐使用yum来安装 第一步:LAMP平台 zabbix使用php开发的,所以依赖于LAMP或者LNMP平台,由于http+mysql用yum安装及其方便,所以我在这里使用yum安装. yum -y ...

  4. Maven中的dependencyManagement 意义

    1.在Maven中dependencyManagement的作用其实相当于一个对所依赖jar包进行版本管理的管理器. 2.pom.xml文件中,jar的版本判断的两种途径 1:如果dependenci ...

  5. 签名有元程序集 Signed Friend Assemblies

    下面的例子演示了创建签名程序集和有元程序集.这就要求两个程序集都是强命名,在下面的例子中,两个程序集都用了同一个秘钥,也可以用不同的秘钥. 1. 生成秘钥, 这个在前面的博客中有说明,生成秘钥文件sn ...

  6. C#读写文本和连接数据库

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  7. UDP SOCKET网络通信 C#

    接收端 using System; using System.Net; using System.Net.Sockets; using System.Text; using System.Thread ...

  8. Runner站立会议08

    会议时间:2016.4.27  21.10~21.25 地点:基教负一层 今天:看日历的代码,网上下的,没有注释 明天:继续看代码 困难:代码看不懂 会议照片: 燃尽图:

  9. ecshop广告-》单张,多张

    //读取广告 function get_ad_id($ad_id){ //读取指定ad_id广告 $sql = 'select * from '. $GLOBALS['ecs']->table( ...

  10. Redis学习——SDS字符串源码分析

    0. 前言 这里对Redis底层字符串的实现分析,但是看完其实现还没有完整的一个概念,即不太清楚作者为什么要这样子设计,只能窥知一点,需要看完redis如何使用再回头来体会,有不足之处还望告知. 涉及 ...