Filter(1)—基础知识
来源:互联网 发布:c 数据采集 编辑:程序博客网 时间:2024/06/05 07:34
一、过滤器(Filter)
1.概述:
JavaWeb的一个重要组件,可以对请求和响应拦截 Filter的基本功能是对Servlet容器调用Servlet过程中进行拦截,从而在Servlet进行响应处理的前后实现一些特殊 的功能。 Filter程序是一个实现了Filter接口的Java类,与Servlet程序相似,它由Servlet容器进行调用和执行。 Filter程序需要在web.xml文件中进行注册和设置它所要拦截的资源。 Filter程序可以拦截JSP、Servlet、静态图片文件、和静态HTML文件
2.接口:Filter、Filterchain、FilterConfig。
3.工作原理:
当在web.xml中注册了一个Filter来对某个Servlet程序进行拦截处理时,这个Filter就成了Servlet容器和Servlet 程序的通信线路上的一道关卡,该Filter可以对Servlet容器发送给Serrvlet程序的请求和Servlet程序回送给Servlet容器的 响应信息进行拦截,可以决定是否继续将请求传递给Servlet程序,以及对请求和响应信息是否进行修改。 在一个web应用可以注册多个Filter程序,每个Servlet可以对一个或一组Servlet程序进行拦截。 若有多个Filter程序对某个Servlet程序的访问过程进行拦截,当针对该Servlet的请求到达时,web容器对将把这多个Filter 程序组合一个Filter链(过滤器链),Filter链中各个Filter拦截顺序与他们在应用程序web.xml中映射的顺序一致。
4.创建一个简单的Filter
创建一个继承Filter接口的Java类,在web.xml中注册并配置,其中<url-pattern>指定该Filter可以拦截那些资源, 即,可以通过哪些url访问该Filter。 映射Filter,<filter-mapping>元素用于设置一个Filter所拦截的元素。 <filter-mapping> <filter-name></filter-name>:用于设置filter的注册名称,该值必须是在<filter>元素中声明过的 <url-pattern></url-pattern>:设置filter所拦截的请求路径(过滤器关联的url样式) <servlet-name></servlet-name>:指定过滤器所拦截的Servlet名称 <dispatcher></dispatcher>:指定过滤器所拦截的资源被Servlet容器调用的方式,可以设置多个<dispatcher> 子元素用来指定Filter对资源的多种调用方式进行拦截,其值:request(默认)、include、forward、error </filter-mapping> <dispatcher>其值的含义: request:当用户直接访问页面时,web容器将会调用过滤器,如果目标资源是通过RequestDispatcher的include() 或forword()方法访问时,那么该过滤器就不会被调用。即get或post请求 include:如果目标资源是通过RequestDispatcher的include()方法访问时,该过滤器才会被调用,除此之外, 不会被调用,即<jsp:forward page=""/>、<%@ page errorPage=""%> forward:如果目标资源是通过RequestDispatcher的forward()方法访问时,该过滤器才会被调用,除此之外, 不会被调用,即<jsp:include=""/> error:如果目标资源是通过声明式异常处理机制调用时,那么过滤器将会被调用,除此之外,过滤器不会被调用。 即在webx.xml中声明节点: <error-page> <exception-type>java.lang.ArithmeticException</exception-type> <location>/demo1/test.jsp</location> </error-page> 拦截方式: ①、Servlet名称 ②、资源访问的请求路径(url样式)
5.相关的API
Filter接口: ①init(FilterConfig filterConfig):类似于Servlet的init()方法,在创建Filter对象之后,立即被调用,且只 被调用一次,Filter对象在Servlet容器加载当前web应用时被创建。Filter对象是单例的。 >FilterConfig类似于Servlet的ServletConfig,可以在webx.xml文件中配置Filter的初始化参数, 配置方式也和Servlet类似 ②doFilter(ServletRequest request, ServletResponse response, FilterChain chain):真正进行拦截的代码,每次拦截都会调用该方法。 >FilterChain:Filter链,多个FIlter链可以构成一个Filter >doFilter:把请求传给FIlter链的下一个Filter,若当前Filter没有下一个Filter,就把请求给目标Servlet(JSP) >Filter链的执行顺序是按照web.xml中Filter的<filter-mapping>的书写顺序执行。 注意:Filter链执行顺序:web.xml配置的第一个Filter先执行,不管第一个Filter代码有没有执行完,只要 遇到doFilter()就把控制权交给下一个Filter,直到下一个Filter代码执行遇到doFilter(),控制权继续 下移,若这是Filter链上最后一个Filter,则执行Servlet或JSP,再执行最后一个Filter中doFilter之后 的代码,控制权再向上移,直到第一个Filter,最后执行第一个Filter doFilter()中doFilter之后的代码。 ③destroy()
6.自定义一个Filter抽象类
阅读全文
0 0
- Filter(1)—基础知识
- javaWeb基础知识----过滤器Filter
- Filter基础知识(一)
- openstack nova 基础知识——scheduler的filter和weight
- openstack nova 基础知识——scheduler的filter和weight
- ADO基础知识: Filter过滤数据
- 过滤器基础知识--Filter(一)
- WDM Filter 驱动的一点基础知识
- 布隆过滤器(Bloom Filter)基础知识
- 重新学javaweb---过滤器 Filter基础知识
- Filter的创建和使用以及基础知识
- 前端基础知识总结1——基础知识
- JSP(1)—基础知识
- Listener(1)—基础知识
- JS笔记(1) —— filter,includes
- 过滤器filter学习1—基本认识
- Android基础知识之Manifest中的Intent-filter元素
- 【Android基础知识】Intent和Intent Filter详细解析
- PAT 甲级练习 1001
- tomcat跑报No suitable driver,但是用java application跑不报错
- Android自定义View——从零开始实现书籍翻页效果(四)
- 导入数据进入solr中
- 微软Win10轻松转换MBR为GPT官方教程
- Filter(1)—基础知识
- Android自定义View——从零开始实现书籍翻页效果(性能优化篇)
- VirtualBox上Centos7的网络配置(物理机与虚拟机,虚拟机与外网)
- 迭代求立方根
- mysql数据库如何完全卸载以便重装?
- hibernateTransactionManager的问题
- Linux常用软件安装
- ElasticSearch-映射与分析
- 微信订阅号和服务号的区别