【JavaWeb】(7)过滤器

1. 介绍

定义:过滤器是一个服务端的组件,它可以截取用户端的请求与响应信息,并对这些信息过滤。

生命周期:

其中实例化是在Web项目启动的时候执行,只会执行一次;初始化也只会执行一次;过滤会执行多次,每一次接受请求都会执行一次;销毁是在Web容器关闭的时候执行。

2. 实现过滤器

过滤器实现了javax.servlet.Filter接口,需要我们实现3个方法:

init():这是过滤器的初始化方法,Web容器创建过滤器实例后将调用这个方法。这个方法中可以读取web.xml文件中过滤器的参数。

doFilter():这个方法完成实际的过滤操作。这个地方是过滤器的核心方法。当用户请求访问与过滤器关联的URL时,Web容器将先调用过滤器的doFilter方法。FilterChain参数可以调用chain.doFilter方法,将请求传给下一个过滤器(或目标资源),或利用转发、重定向将请求转发到其它资源。

destroy():Web容器在销毁过滤器实例前调用该方法,在这个方法中可以释放过滤器占用的资源。(大多数情况用不到)

Web.xml配置:

<filter>标签只能配置一个,而<filter-mapping>标签可以配置多个。

一个简单的Web.xml配置:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
	http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
	<display-name></display-name>
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
    <filter>
        <filter-name>FirstFilter</filter-name>
        <filter-class>com.thr.filter.FirstFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>FirstFilter</filter-name>
        <url-pattern>/index.jsp</url-pattern>
        <dispatcher>REQUEST</dispatcher>
    </filter-mapping>
</web-app>

过滤器可以改变用户的请求的Web资源,也就是可以改变用户请求的路径。

过滤器不能直接返回数据,不能直接处理用户请求。

3. 过滤器链

多个过滤器同时过滤一个页面时,会按照它们在Web.xml中配置的顺序先后执行doFilter的开始部分,然后执行doFilter处理,然后相反的顺序执行doFilter的结束部分。

4. 过滤器分类

在Servlet2.5中:

(1). REQUEST:用户直接访问页面时,Web容器将会调用过滤器,如果没有配置的话,默认的是REQUEST

(2). FORWARD:目标资源是通过RequestDIspatcher的forward访问时,该过滤器将被调用。

(3). INCLUDE:目标资源是通过RequestDIspatcher的include访问时,该过滤器将被调用。

(4). ERROR:目标资源是通过声明式异常处理机制调用时,过滤器将被调用。

使用重定向并且REQUEST时,可能会产生死循环。

使用请求转发并且FORWARD时,可能会产生死循环。

在Servlet3.0中新增了ASYNC:支持异步处理。

@WebFilter:用于将一个类声明为过滤器,该注解将会在部署时被容器处理,容器将根据具体的属性配置将相应的类部署为过滤器。

使用@WebFilter,可以不必在Web.xml中配置即可完成对过滤器的配置。

@WebFilter的常用属性:

可以在Web.xml中配置FilterConfig的初始化参数,在过滤器里可以通过getInitParameter获取初始化参数。

5. 应用场景

(1). 对用户请求进行统一认证

(2). 编码转换

(3). 对用户发送的数据进行过滤替换

(4). 转换图像格式

(5). 对响应的内容进行压缩

一个解决中文乱码的思路:在过滤器中进行request.setCharacterEncoding("utf-8")设置。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-25 19:05:10

【JavaWeb】(7)过滤器的相关文章

[javaweb]Java过滤器与包装设计模式的实用案例.

在filter中可以得到代表用户请求和响应的request.response对象,因此在编程中可以使用Decorator(装饰器)模式对request.response对象进行包装,再把包装对象传给目标资源,从而实现一些特殊需求. 一.Decorator设计模式 1.1.Decorator设计模式介绍 当某个对象的方法不适应业务需求时,通常有2种方式可以对方法进行增强: 编写子类,覆盖需增强的方法. 使用Decorator设计模式对方法进行增强. 在阎宏博士的<JAVA与模式>一书中开头是这样

JavaWeb之过滤器

时间: Talk is cheap  Show me the code JavaWeb三大组件:    Servlet.Listener.Filter    都需要在web.xml中进行配置,Listener中的两个感知监听器不需要配置. --过滤器概述 过滤器是JavaWeb的三大组件之一,它与Servlet很相似,不过过滤器是用来拦截请求的,而不是处理请求的. 当用户请求某个Servlet或其他资源(JSP.css.html)时,会先执行部署在这个请求上的Filter,如果Filter"放行

JavaWeb servlet过滤器

一.Filter简介: *************************************************************************************** Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件 或静态 html 文件等进行拦截,从而实现一些特殊的功能.例如实现URL级别的权限访问控制.过滤敏感词汇.压缩响应信

深入分析JavaWeb Item36 -- 过滤器Filter高级应用

在filter中可以得到代表用户请求和响应的request.response对象,因此在编程中可以使用Decorator(装饰器)模式对request.response对象进行包装,再把包装对象传给目标资源,从而实现一些特殊需求. 一.Decorator设计模式 1.1.Decorator设计模式介绍 当某个对象的方法不适应业务需求时,通常有2种方式可以对方法进行增强: 编写子类,覆盖需增强的方法. 使用Decorator设计模式对方法进行增强. 使用代理 在阎宏博士的<JAVA与模式>一书中

JavaWeb的过滤器Filter

Filter的作用是在请求到达web资源(HTML.css.Servlet.Jsp)之前拦截,做一个预处理. 创建一个类实现Filter接口,在web.xml中对文件进行配置 1 <filter> 2 <filter-name>Filter的别名</filter-name> 3 <filter-class>Filter的全类名</filter-class> 4 </filter> 5 <filter-mapping> 6

javaweb登陆过滤器实现

在web.xml中配置登陆过滤器: <!-- 配置登陆过滤器 --> <filter> <filter-name>loginFilter</filter-name> <filter-class>weijiabin.BBS.Utils.LoginFilter</filter-class> <init-param> <param-name>passUrl</param-name> <param-v

javaweb-Servlet过滤器Filter

一.在javaweb学习中javaweb过滤器是一个非常重要的学习内容在web开发阶段的中Javaweb过滤器可以很好的优化代码,同时减少许多不必要的代码,将代码很好的集合在一起,这样的操作可以减少许多不必要的代码,同时大大的减少程序的运行. 二.正对于javaweb的过滤器Filter可以从以下几个方面进行讲解 1.Javaweb的概念 javaweb是一个服务器组键,他可以截取用户端的请求以及响应的信息,并且对信息进行过滤. 2.过滤器的api  Servlet过滤器API包含了3个接口,它

JavaWeb--Servlet过滤器Filter和SpringMVC的HandlerInterceptor(Session和Cookie登录认证)

拦截一些请求进行处理,比如通过它来进行权限验证,或者是来判断用户是否登陆,日志记录,编码,或者限制时间点访问等等,是非常有必要的.所以就有了此篇文章啦. 文章结构:(1)Servlet过滤器Filter:(2)SpringMVC的HandlerInterceptor:(3)对比认知. 一.Servlet过滤器Filter: 此部分是从赵四大佬那里学来的,并补充自己的认知 (1)概念: 能够对Servlet容器的请求和响应对象进行检查和修改. Servlet过滤器本身并不产生请求和响应对象,它只能

struts.serve.static.browserCache

(一).Struts第一天 1. JavaWeb知识回顾 n 客户端编程 HTLM/CSS/JS n XML技术 会写XML * 基本语法 * DTD * Schema 会读XML * Dom4J读取XML n Servlet/JSP编程 JavaWeb开发,开发web网站! ServletApi ! 几个接口的用法! 面向接口编程! n 数据库 MySQL数据库! CRUD语法! n Jdbc 编程 JdbcApi 接口! n JavaWeb增强 过滤器.Listener.文件上传&下载.国际

Filter-入门

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