Web核心之Filter过滤器

WEB中的三大组件
Servlet
Filter
Listener
Filter*****
过滤器
概念:
过滤器是web中的一个组件,可以用于过滤请求。在服务器目标资源之前优先拦截到请求,对其进行处理,可以放行该请求也可以直接拦截掉。
如果请求被放行,那么该请求的响应也会被过滤器拦截。
作用:
可以完成一系列通用的操作。
编写流程
1. 编写一个类实现Filter接口
2. 实现接口中的方法,重点是doFilter方法
在doFilter方法中,可以调用chain.doFilter实现请求的放行
3. 通过配置告知tomcat服务器Filter的信息
全类名
拦截路径
只要访问的资源路径符合拦截路径的规则,那么该请求就优先被过滤器拦截到
1. 完全路径匹配
2. 目录匹配
3. 扩展名匹配
注意:
Filter的url-pattern配置没有优先级的规则。如果多个Filter拦截规则都能匹配到某个请求的访问路径。
这些Filter都能拦截到这次请求,它们会按照某种规则组成一条过滤器链。
在web.xml中配置

demo1
cn.itcast.web.filter.FilterDemo1

demo1
/*

使用注解配置
@WebFilter
配置请求方式
设置dispatcherTypes属性 分发类型
1. REQUEST:默认值。浏览器直接请求资源
2. FORWARD:转发访问资源

FilterChain
过滤器链
组成
如果多个Filter拦截规则都能匹配到某个请求的访问路径。这些Filter都能拦截到这次请求,它们会按照某种规则组成一条过滤器链。
规则:
1. 如果Filter是使用注解配置,在链中的顺序和类名的字符串顺序一致。
2. 如果Filter是使用web.xml配置,在链中的顺序和filter-mapping标签配置的顺序一致
执行流程
调用chain.doFilter()时,内部实际进行了判断,判断当前过滤器链中是否有下一个过滤器节点。
如果有,则调用其doFilter方法。
如果没有,则放行到目标资源位置。
在一个过滤器链中,只有所有的过滤器都执行了chain.doFilter,那么这次请求才能访问到目标资源。
只要有一个过滤器拦截住没有放行,那么整条过滤器链相当于就没有放行。
登录验证案例
1. 挑选出可以直接放行的资源---登录相关的资源。
2. 使用Filter,拦截所有请求,判断是否登录。
3. 用户是否处于登录状态,是由session中是否存储了user信息决定的。
动态代理*****
在不修改一个类的源码的基础上,动态的修改其方法的执行逻辑。
增强一个类中的方法
1. 继承 前提:目标对象必须是我们自己控制创建的。
2. 装饰者模式
new BufferedReader(new InputStreamReader(new FileInputStream("C://xxx")));
3. 动态代理
代理:代替你去处理一些逻辑。
动态代理:通过api,动态的在运行期生成一个类的对象,作为代理对象使用。
基于JDK的动态代理的规则:我们的被代理对象要实现接口。
代理对象 = Proxy.newProxyInstance()
Proxy.newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler h)
参数:
ClassLoader:被代理对象的类加载器
固定写法:被代理对象.getClass().getClassLoader()
Class<?>[]: 被代理对象实现的所有接口对应的字节码对象
固定写法:被代理对象.getClass().getInterfaces()
InvocationHandler:调用的处理器接口,用于指定代理对象中的所有方法的执行逻辑的。
Object invoke(Object proxy, Method method, Object[] args)---当代理对象的方法被调用时,实际执行的是该方法。该方法的返回值会返回到代理对象调用方法处。
参数:
proxy:代理对象,其实就是Proxy.newProxyInstance方法的返回值,一般不会使用
method:代理对象执行方法时,执行哪个对象,该method就是哪个对象对应的Method对象。
args:代理对象执行方法时,传入的实际参数。

Listener**
监听器
当某个具体的事件发生时,可以执行提前设定好的一段逻辑。监听器封装了这些逻辑。
ServletContextListener
监听ServletContext对象的创建和销毁的监听器。
监听此对象相当于监听了服务器的启动和关闭。
编写流程
写一个类实现ServletContextListener接口
实现接口中的方法
创建
销毁
在web.xml中进行配置

全局初始化参数
在web.xml中,使用context-param标签可以指定key-value键值对的参数,使用ServletContext对象就可以使用key来获取这些参数。

key
value

String value = servletContext.getInitParameter("key");

在web.xml中,在servlet或filter标签下,也可以使用init-param指定key-value键值对的参数
    <init-param>
        <param-name>key</param-name>
        <param-value>value</param-value>
    </init-param>
如果在Filter中,可以使用filterConfig.getInitParameter("key")获取指定的值
如果在Servlet中,可以使用this.getServletConfig().getInitParameter("key")获取指定的值
    

原文地址:https://www.cnblogs.com/maomaodesu/p/12115175.html

时间: 2024-10-22 10:26:38

Web核心之Filter过滤器的相关文章

web.xml中Filter过滤器标签说明

原文:http://www.cnblogs.com/edwardlauxh/archive/2010/03/11/1918618.html 在研究liferay框架中看到Web.xml中加入了过滤器的标签,可以根据页面提交的URL地址进行过滤,发现有几个新标签没用过,下面就介绍以下几个过滤器的标签用法: <!-- 定义Filter --> <filter> <!-- Filter的名字 --> <filter-name>log</filter-name

Web.xml中Filter过滤器标签几个说明

在研究liferay框架中看到Web.xml中加入了过滤器的标签,可以根据页面提交的URL地址进行过滤,发现有几个新标签没用过,下面就介绍以下几个过滤器的标签用法: <!-- 定义Filter --> <filter> <!-- Filter的名字 --> <filter-name>log</filter-name> <!-- Filter的实现类 --> <filter-class>lee.LogFilter</f

Java Web进阶——Filter过滤器

一.过滤器的介绍: 在Servlet规范2.3中定义了过滤器,它是一个服务器端的组件,可以截取用户端的请求与响应信息,并且对这些信息进行过滤. Servlet过滤器本身并不生成请求和响应对象,只是提供过滤功能. Servlet过滤器能够在Servlet被调用之前检查Request对象,并修改Request Header和Request内容. Servlet过滤器可以过滤的Web组件包括Servlet,JSP和HTML等文件. 本文源码——GitHub:  https://github.com/i

Java Web总结十九Filter过滤器

一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,Web开发人员通过Filter技术,对Web服务器管理的所有Web资源:例如Jsp,Servlet,静态图片文件或静态HTML文件等进行拦截,从而实现一些特殊的功能.例如实现URL级别的权限访问控制.过滤敏感词汇.自动登录.压缩响应信息等一些高级功能. Servlet API中提供了一个Filter接口,开发Web应用时,如果编写的Java类实现了这个接口,则把这个Java类称之为过滤器Filter.通过

java web中filter过滤器的使用

编写filter过滤器有两种方法,一种是使用注解配置,另一种是使用web.xml配置,此处使用web.xml配置来实现过滤器 (1)使用web.xml配置过程 <filter> <filter-name>setCharacterFilter</filter-name> <filter-class>com.qst.setCharacterEncodingFilter</filter-class> </filter> <filter

Filter过滤器(1)

Filter也称之为过滤器,它是Servlet技术中比较激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能.例如实现URL级别的权限访问控制.过滤敏感词汇.压缩响应信息等一些高级功能. 其顺序图如下(Servlet API中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter.通过Filt

Filter(过滤器)常见应用

孤傲苍狼 只为成功找方法,不为失败找借口! javaweb学习总结(四十六)——Filter(过滤器)常见应用 一.统一全站字符编码 通过配置参数charset指明使用何种字符编码,以处理Html Form请求参数的中文问题 1 package me.gacl.web.filter; 2 3 import java.io.IOException; 4 import javax.servlet.Filter; 5 import javax.servlet.FilterChain; 6 import

[Java] JSP笔记 - Filter 过滤器

一.什么是Web过滤器 Servlet API 很久以前就已成为企业应用开发的基石,而 Servlet 过滤器则是对 J2EE 家族的相对较新的补充. Servlet 过滤器是可插入的 Web 组件,它允许我们实现 Web 应用程序中的预处理和后期处理逻辑.过滤器支持 servlet 和 JSP 页面的基本请求处理功能,比如日志记录.性能.安全.会话处理.XSLT 转换,等等. 过滤器最初是随 Java Servlet 2.3 规范发布的. Servlet 过滤器是什么?Servlet 过滤器是

Servlet Filter 过滤器

Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源: 例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能. 例如实现URL级别的权限访问控制.过滤敏感词汇.压缩响应信息等一些高级功能. Servlet API中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter. 通过Filter技术,