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上下文对象的引用。
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。。。。");
}
本文介绍如何创建并配置Java Web应用中的Filter,实现请求过滤功能。详细解释了Filter的生命周期及其配置方法,并展示了如何在web.xml中定义Filter及拦截路径。

775

被折叠的 条评论
为什么被折叠?



