JavaWeb过滤器

1. Filter概念

  Filter也称之为过滤器,WEB开发人员通过Filter技术可以对web服务器管理的所有web资源:Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能

在这里插入图片描述

2. Filter简介

  Filter也是一个Java类,添加方式和普通的Java类完全相同。自定义的Filter类必须实现Filter接口,实现Filter接口中定义的方法:
  1. init() :初始化时会自动调用
  2. doFilter():request和response经过经过时调用
  3. destroy():销毁时调用
  4. doFilter()方法接受三个参数,分别是request、response和chain。其中request和response用来传递给下一个Filter(如果有多个Filter)或者JSP和Servlet。chain则通过调用其doFilter方法来调用下一个Filter,获得调用原始的JSP或者Servlet等其他内容。

3. Filter生命周期

Init方法
  1. 服务器创建一个Filter对象时会自动调用对象的init方法
  2. 通过init(FilterConfig filterConfig)方法可以获得Filter的初始化参数

destroy方法
  1. 在Web容器卸载 Filter 对象之前被调用,该方法主要用于释放Filter
  2. 占用的资源

4. Filter使用方法

package demo.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;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyFilter implements Filter{

	@Override
	public void destroy() {
		System.out.println("过滤器被销毁");
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		//向上转型
		HttpServletRequest request1 = (HttpServletRequest) request;
		HttpServletResponse response1=(HttpServletResponse) response;
		
		System.out.println("过滤器被执行");
		
		//放行,如果不放行,程序将不会往下执行
		chain.doFilter(request1, response1);
	}

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		System.out.println("过滤器被初始化");
		
	}

}

新建一个类,实现Filter接口,在doFilter方法中编写过滤代码,注意Filter的包是javax.servlet.Filter,不要引错。

过滤器配置
  过滤器一定要放行,否则程序不会往下执行

在这里插入图片描述

配置web.xml文件如下
  如果想要拦截所有目录下的文件,使用 /* 即可完成,每个网页发出请求后都会先经过过滤器,服务器发出响应也会先经过过滤器。

在这里插入图片描述

当在浏览器中输入项目下的文件路径时,控制台会输出过滤器被执行

在这里插入图片描述

在这里插入图片描述

5. 全站字符编码

  由于每个虚拟的java页面都要单独设置请求与响应编码很麻烦,而且不利于管理,这时我们可以选择使用过滤器,完成字符编码。

我的过滤器doFilter.java文件如下

package demo.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;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class CharSetFilter implements Filter {

	@Override
	public void destroy() {
		System.out.println("过滤器被销毁");
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		/**
		 * 请求使用POST
		 * 保证响应时原始数据正常
		 * 文件原始编码与设置的编码都一致
		 */
		HttpServletResponse response2 = (HttpServletResponse) response;
		HttpServletRequest  request2 = (HttpServletRequest) request;
		//设置编码
		request2.setCharacterEncoding("UTF-8");
		response2.setCharacterEncoding("UTF-8");
		response2.setContentType("text/html;charset=UTF-8");
		System.out.println("字符编码过滤器被执行");
		//放行
		chain.doFilter(request2, response2);
	}

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		System.out.println("过滤器被初始化");
	}

}

在这里插入图片描述

web.xml文件配置如下

在这里插入图片描述

JSP文件内容如下

在这里插入图片描述

访问该jsp文件

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sgy_yuebin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值