Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件
等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。过滤器根据请求的URL分析确定要拦截什么样的请求。所谓的拦截就是在真正请求资源之前将代表请求的request对象和代表响应的response对象截获从而实现:
1.在资源执行之前做一些额外的操作
2.在资源之后做一些额外的操作
3.控制是否允许访问的资源
一、Filter开发分为二个步骤
1.编写java类实现Filter接口,并实现(三个方法)其doFilter方法
2.在 web.xml 文件中使用<filter>和<filter-mapping>元素对编写的filter类进行注册,并设置它所能拦截的资源
package com.jjyy.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;
/**
* filter测试
* @author JiangYu
*
*/
public class TestFilter implements Filter {
public void destroy() {
System.out.println();
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
System.out.println("执行之前操作。。。。");
chain.doFilter(request, response);
System.out.println("执行之后操作。。。。");
}
public void init(FilterConfig config) throws ServletException {
System.out.println();
}
}
web,xml中
注册Filter
<span style="white-space:pre"> </span><filter>
<filter-name>FilterTest01</filter-name>
<filter-class>com.jjyy.filter.TestFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>FilterTest01</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
二、Filter链
1.在一个web应用中,可以开发编写多个Filter,这些Filter组合起来称之为一个Filter链
2.web服务器根据Filter在web.xml文件中的注册顺序<mapping>,决定先调用哪个Filter,当第一个Filter的doFilter方法被调用时,web服务器会创建一个代表Filter链的
FilterChain对象传递给该方法。在doFilter方法中,开发人员如果调用了FilterChain对象的doFilter方法,则web服务器会检查FilterChain对象中是否还有filter,如果有,则
调用第2个filter,如果没有,则调用目标资源。
三、Filter的生命周期
1.init(FilterConfig filterConfig)throws ServletException
和我们编写的Servlet程序一样,Filter的创建和销毁由WEB服务器负责。 web 应用程序启动时,web 服务器将创建Filter 的实例对象,并调用其init方法进行初始化(注
filter对象只会创建一次,init方法也只会执行一次)开发人员通过init方法的参数,可获得代表当前filter配置信息的FilterConfig对象
注意:FilterConfig接口
FilterConfig接口代表web.xml中对当前过滤器的配置信息
2.doFilter(ServletRequest,ServletResponse,FilterChain)
每次filter进行拦截都会执行
在实际开发中方法中参数request和response通常转换为HttpServletRequest和HttpServletResponse类型进行操作
所有对当前资源访问进行拦截的过滤器按照拦截顺序就组成了一个过滤器链.这个过滤器链的最后一个节点是要访问的资源
Filter中调用FilterChain提供了doFilter方法,这个方法一旦被调用就表明当前过滤器没有问题了,请执行过滤器链的下一个节点.如果下一个节点是资源则直接执行了资源
3.destroy()
在Web容器卸载 Filter 对象之前被调用
四、filter注册web.xml
<span style="white-space:pre"> </span><filter>
<filter-name>Demo1Filter</filter-name> <!-- 给过滤器起一个名字 -->
<filter-class>com.itheima.filter.Demo1Filter</filter-class> <!--过滤器的处理类 -->
<init-param>
<!--可以配置当前过滤器的初始化信息,可以配置多个,在Filter中利用FilterConfig对象来获取 -->
<param-name>name1</param-name>
<param-value>value1</param-value>
</init-param>
</filter>
<filter-mapping>
<!-- 一个Filter可以配置多个filter-mapping -->
<filter-name>Demo1Filter</filter-name>
<url-pattern>/servlet/Demo1Servlet</url-pattern>
<!-- 一个Filtermapping中可以配置多个url-partten,这个url-partten的写法和servlet-mapping中的写法相同-->
<url-pattern>/servlet/*</url-pattern>
<url-pattern>/*</url-pattern>
<url-pattern>*.do</url-pattern>
<servlet-name>Demo3Servlet</servlet-name>
<!-- 也可以配置多个servlet-name,其中填入servlet的名字明确的通知要拦截哪个名字的Servlet -->
<dispatcher>REQUEST</dispatcher>
<!-- 配置拦截哪种方式的对资源的访问可以是REQUEST/FORWARD/INCLUDE/ERROR四个值之中的一个,可以配置多个dispatcher,如果一个都不配则默认是REQUEST -->
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
分享到:
相关推荐
例如,`bf_create(size_t capacity, uint8_t num_hashes)`用于创建一个布隆过滤器,`bf_insert(bloom_filter* filter, const void* item)`用于插入元素,`bf_query(bloom_filter* filter, const void* item)`用于...
本文将深入探讨Laravel Eloquent Filter的相关知识点,帮助开发者更好地理解和应用这一功能。 1. **Eloquent ORM基础** 在理解Eloquent Filter之前,首先需要了解Eloquent ORM的基础概念。Eloquent ORM提供了一个...
例如,`HttpServletFilter`是Servlet API中定义的一个基础过滤器类型,可以拦截HTTP请求和响应。 6. **配置过滤器**:在`web.xml`文件中配置过滤器,指定其过滤范围、初始化参数以及过滤器链的顺序。 7. **Filter...
### 过滤器基础知识 #### 一、过滤器概述 过滤器(Filter)是一种轻量级的、可扩展的应用程序组件,它可以在客户端请求到达目标资源(如Servlet、JSP等)之前对其进行预处理,或者在请求处理完毕后对响应进行后...
在IT行业中,实时用户过滤器(Live User Filter)是一种常见的前端技术应用,它主要用于动态地根据用户的输入来筛选和展示数据。在Web开发领域,HTML、CSS和JavaScript是构建此类功能的基础工具。以下是对这些知识点...
- **创建过滤器**:通过`grid.columns[i].filter`属性为特定列创建过滤器,并设置初始过滤条件。 - **应用过滤器**:调用`store.filter()`方法,传入过滤配置对象或过滤器数组,应用过滤条件。 - **清除过滤器**...
以上介绍的是Vue过滤器的基础知识。开发者在实际开发中,还需要关注过滤器的性能问题。由于过滤器是作用在数据变化上的,过度使用可能会导致性能问题。特别是当使用链式过滤器时,应该确保不会对性能造成过度影响。 ...
【描述】:“2007年百度程序设计大赛Astar初赛题,实习生小胖的百度网页过滤器,老师给我选的软件工程课程设计,其实只是一个简单的程序。基础比较好的朋友可以参考,基础一般的可以学学。” 这段描述提供了更多...
总之,Socket通信是网络编程的基础,封包处理确保了数据在网络中的安全传输,而Filter过滤器则提供了对数据处理的灵活性和控制力。这三个知识点相互结合,构成了构建复杂网络应用的关键技术栈。深入理解并熟练运用...
这里,`filter-name`用于标识过滤器,`filter-class`指定过滤器类的全限定名。`filter-mapping`定义了过滤器与哪些URL路径关联,`url-pattern`用来指定匹配规则。 在Java配置方式(如Spring Boot)中,可以通过注解...
首先,让我们了解一下Java过滤器的基础知识。在Java Servlet规范中,Filter接口定义了过滤器的行为。一个过滤器可以通过实现`doFilter()`方法来拦截请求和响应,并对其进行处理。通过在web.xml配置文件中定义过滤器...
本篇文章将深入探讨FFmpeg过滤图的基础知识,以及如何利用字幕过滤器添加字幕。 1. FFmpeg过滤图基础: FFmpeg过滤图是一个图形化的表示,展示了输入流如何通过一系列过滤器到达输出流的过程。过滤器可以是视频...
标题中的“cors-filter-1.7-sources.jar.zip”指的是一个包含了CORS过滤器源代码的压缩文件,版本为1.7。CORS(Cross-Origin Resource Sharing)是Web应用程序的一种安全机制,允许浏览器从不同源(如不同域名、端口...
"Cors-filter-1.7.jar"是专门为处理跨域请求而设计的一个过滤器,它可以被添加到Geoserver的应用程序上下文中,以支持CORS。这个过滤器允许Geoserver响应来自不同源的HTTP请求,从而解决了JavaScript同源策略带来的...
在Java Web开发中,过滤器(Filter)和监听器(Listener)是两个非常重要的概念,它们主要用于增强应用程序的功能和管理应用程序的生命周期。本篇将详细阐述这两个知识点。 **过滤器(Filter)** 过滤器是在...
【标题】"前端项目-ionic-filter-bar.zip" 涉及的是一个基于Ionic框架的过滤器栏(filter bar)指令,用于在Ionic应用中创建一个动画化的头栏过滤UI。 【描述】中提到的"A filter directive UI for Ionic apps that...
#### Java 文件名过滤器基础概念 在Java中,`java.io.File` 类提供了一个强大的API来处理文件和目录。为了更方便地查找和处理具有特定扩展名的文件,Java提供了`FilenameFilter`接口,该接口可以被用来创建自定义的...
综上所述,"过滤器例子下载实例"是一个学习Servlet Filter的好资源,它帮助我们理解如何利用Filter实现用户登录检查,从而控制对Web资源的访问。通过实践这个示例,开发者可以更好地掌握Filter的用法,并将其应用到...
总之,"windows file filter system frame"这个资源可能是一个宝贵的起点,为那些想要深入学习和开发Windows文件过滤驱动的人提供必要的知识和实例。通过学习和实践,开发者能够构建出满足特定需求的定制化文件系统...
很烦人哦,那就试试这个吧,可以解决所有的乱码,里面有说明教你怎么配”中,主要涉及的知识点是通过配置Servlet过滤器来解决JSP页面与Servlet交互时的字符编码问题。 首先,我们需要理解为什么会出现乱码。乱码...