过滤器Filter、Filter的生命周期,以及常用方法

本文介绍如何创建并配置Java Web应用中的Filter,实现请求过滤功能。详细解释了Filter的生命周期及其配置方法,并展示了如何在web.xml中定义Filter及拦截路径。

Filter

创建一个Filter:过滤器就是一个普通的类,它需要实现javax.servlet.Filter接口

package cn.itsource._01_filterchain;

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 HelloFilter implements Filter{

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		
		
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		
	}

	@Override
	public void destroy() {
		
		
	}

}


在web.xml中配置过滤器:

<!-- 
  	配置一个过滤器 :filter
  		filter-name:filter的名称
  		filter-class:全限定名(通过反射去创建这个过滤器对象)
   -->
   <filter>
   		<filter-name>hello</filter-name>
   		<filter-class>cn.itsource._01_hello.HelloFilter</filter-class>
   </filter>
   <!-- 
   		url-pattern:要拦截的资源路径
   		以前Servlet代码的是暴露给外面访问的路径 : 让外面可以通过这个路径 访问这个资源
   	要拦截的资源路径: 当有一个资源要访问的时候,可以通过这里的规则看是否要进行过滤
    -->
   <filter-mapping>
   		<filter-name>hello</filter-name>
   		<url-pattern>/hello</url-pattern>
   </filter-mapping>

servlet的生命周期:整个生命周期由Servlet容器进行管理

执行构造方法1,第一次访问时】 -> 执行初始化方法【1,第一次访问】 -> 执行核心方法【n,每次访问】 ->销毁【正常关闭Tomcat

 Fitler的生命周期:整个生命周期由Servlet容器进行管理

 执行构造方法【1,tomcat启动时】 -> 执行初始化方法【1,tomcat启动时】 -> 执行核心方法【n,每次访问】 ->销毁【正常关闭Tomcat

注:在初始化方法的时候,容器为我们提供了一个FilterConfig初始化对象

在执行核心代码的时候,为我们提供了ServletRequest,ServletResponse,FilterChain对象


过滤器初始化配置(FilterConfig)

FilterConfig对象具有一个getInitParameter方法,它能够访问部署描述符文件(web.xml)中分配的过滤器初始化参数。
String getFilterName():得到filter的名称。
  String getInitParameter(String name): 返回在部署描述中指定名称的初始化参数的值。如果不存在返回null.
  Enumeration getInitParameterNames():返回过滤器的所有初始化参数的名字的枚举集合。
  public ServletContext getServletContext():返回Servlet上下文对象的引用。

web.xml文件:
<filter>
		<filter-name>hello</filter-name>
		<filter-class>cn.itsource._01_hello.HelloFilter</filter-class>
		<!-- 设置一些参数:解决硬编码问题 -->
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
</filter>

@Override
	public void init(FilterConfig config) throws ServletException {
		/**
		 * 通过config可以拿到我们配置的参数
		 * 	还可以拿到:过滤器名字,所有的参数名称,上下文对象(ServletContext)
		 */
		String name = config.getInitParameter("encoding");
		System.out.println(config.getFilterName());
		System.out.println("你的名字叫:"+name);
		//System.out.println("init。。。。");
	}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值