栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JavaWeb——过滤器Filter

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JavaWeb——过滤器Filter

目录

1. 功能

1.1 功能介绍1.2 使用方法 2. 配置

2.1 方法1 xml配置2.2 方法2 注解 3. Filter生命周期

3.1 测试代码3.2 结果展示3.3 两个Filter的调用顺序3.4 小结 4. 过滤器使用场景

4.1 案例(屏蔽敏感词)

1. 功能 1.1 功能介绍

用来拦截传入的请求和传出的响应。修改或以某种方式处理正在客户端和服务端之间交换的数据流。 1.2 使用方法

与使用Servlet类似,Filter是Java WEB提供的一个接口,开发者只需要自定义一个类并且实现该接口即可。

2. 配置 2.1 方法1 xml配置

xml


	
	character
	
	filter.CharacterFilter



	character
	/Login
	/test

CharacterFilter

public class CharacterFilter implements Filter{
	@Override
	public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
			throws IOException, ServletException {
		// TODO Auto-generated method stub
		servletRequest.setCharacterEncoding("utf-8");
		filterChain.doFilter(servletRequest, servletResponse);
	}
}

注: doFilter方法中处理完业务逻辑之后必须添加filterChain.doFilter(servletRequest, servletResponse);否则请求/响应无法向后传递,一直停留在过滤器中。

2.2 方法2 注解
@WebFilter("Login")
3. Filter生命周期 3.1 测试代码

加上2.1中的代码

package 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;

public class CharacterFilter implements Filter{

	public CharacterFilter() {
		System.out.println("通过无参数构造创建了对象");
	}
	
	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		System.out.println("destory...");
	}

	@Override
	public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
			throws IOException, ServletException {
		// TODO Auto-generated method stub
		System.out.println("doFilter...");
		servletRequest.setCharacterEncoding("utf-8");
		filterChain.doFilter(servletRequest, servletResponse);
	}

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		// TODO Auto-generated method stub
		System.out.println("init...");
	}

}

3.2 结果展示

配置完成后,当Tomcat启动时,通过反射机制调用Filter的无参构造函数创建实例化对象,同时调用init方法执行初始化操作。


中间可以很多次调用doFilter方法。

当关掉Tomcat服务后,便会调用destory方法,来销毁Filter对象。

3.3 两个Filter的调用顺序

	
	character
	
	filter.CharacterFilter



	character
	/Login
	/test



	
	my
	
	filter.MyFilter



	my
	/Login

如果设置两个Filter,按照在web.xml中的顺序调用,比如在上述代码中,先调用character,再调用my。

3.4 小结

无参数构造函数
只调用一次,当Tomcat启动时调用(Filter一定要进行配置)init方法
只调用一次,当Filter的实例化对象创建完成之后调用doFilter方法
调用多次,访问Filter的业务逻辑都写在Filter中destory方法
只调用一次,Tomcat关闭时调用多个Filter的调用顺序
同时配置多个Filter,Fliter的调用顺序是由web.xml中的配置顺序来决定的,卸载上面的配置先调用,因为web.xml是从上到下顺序读取的。 4. 过滤器使用场景

统一处理中文乱码屏蔽敏感词控制资源的访问权限 4.1 案例(屏蔽敏感词)

WordFilter

@Override
	public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
			throws IOException, ServletException {
		// 将敏感词换成"**"
		String name = servletRequest.getParameter("name");
		System.out.println(name+"1");
		name = name.replaceAll("敏感", "**");
		System.out.println(name+"2");
		filterChain.doFilter(servletRequest, servletResponse);
	}

test.jsp

<%@page import="bysj01.User"%>
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>




Insert title here


	

结果展示

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/727895.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号