过滤器——Filter,它是JavaWeb三大组件之一。另外两个是Servlet和Listener。
它是在2000年发布的Servlet2.3规范中加入的一个接口。是Servlet规范中非常实用的技术。
它可以对web应用中的所有资源进行拦截,并且在拦截之后进行一些特殊的 *** 作。
常见应用场景:URL级别的权限控制;过滤敏感词汇;中文乱码问题等等。
2、Filter介绍- Filter是一个接口。如果想要实现过滤器功能,必须实现该接口!
- 核心方法
返回值方法名作用 voidinit(FilterConfig config)初始化方法 void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
对请求资源和响应资源过滤voiddestroy()销毁方法 -
-
配置方式:
-
注解方式
-
配置文件
-
编写过滤器
public class FilterDemo1 implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
String requestURI = req.getRequestURI();
if (requestURI.contains("favicon.ico")) {
return;
}
System.out.println("FilterDemo1拦截到了请求");
}
}
配置过滤器
FilterDemo1
com.itheima.web.filter.FilterDemo1
FilterDemo1
/*
注意: 我们在配置过滤器的拦截规则时,使用了/*,表明访问当前应用下任何资源,此过滤器都会起作用。除了这种全部过滤的规则之外,它还支持特定类型的过滤配置。(添加具体的过滤拦截页面)
4、FilterConfig介绍FilterConfig是一个接口,代表过滤器的配置对象,可以加载一些初始化参数。
核心方法:
代码示例:
配置FilterDemo2
FilterDemo2 com.itheima.web.filter.FilterDemo2 filterInitParamName filterInitParamValue FilterDemo2 /ServletDemo1
在FilterDemo2的doFilter方法中添加下面的代码
//根据名称获取过滤器的初始化参数 String paramValue = filterConfig.getInitParameter("filterInitParamName"); System.out.println(paramValue); //获取过滤器初始化参数名称的枚举 EnumerationinitNames = filterConfig.getInitParameterNames(); while(initNames.hasMoreElements()){ String initName = initNames.nextElement(); String initValue = filterConfig.getInitParameter(initName); System.out.println(initName+","+initValue); } //获取ServletContext对象 ServletContext servletContext = filterConfig.getServletContext(); System.out.println(servletContext); //获取过滤器名称 String filterName = filterConfig.getFilterName(); System.out.println(filterName);
5、FilterChain
- FilterChain是一个接口,代表过滤器链对象。由Servlet容器提供实现类对象,直接使用即可。
- 过滤器可以定义多个,就会组成过滤器链。
- 核心方法:
返回值方法名作用 voiddoFilter(ServletRequest request, ServletResponse response)放行方法 如果有多个过滤器,在第一个过滤器中调用下一个过滤器,依次类推。直到到达最终访问资源。如果只有一个过滤器,放行时,就会直接到达最终访问资源。
-
配置方式
-
注解方式:@WebFilter(拦截路径)
-
配置文件方式
-
-
多个过滤器使用顺序:
的配置前后顺序决定过滤器的调用顺序,也就是由映射配置顺序决定。
- 创建:当应用加载实例化对象并执行init初始化方法。
- 服务:对象提供服务的过程,执行doFilter方法。
- 销毁:当应用卸载或服务器停止时,对象销毁,执行destroy方法。
我们的过滤器目前拦截的是请求,但是在实际开发中,我们还有请求转发和请求包含,以及由服务器触发调用的全局错误页面。默认情况下过滤器是不参与过滤的,要想使用,需要我们配置。配置的方式如下:
9、过滤器与Servlet的区别FilterDemo1 com.itheima.web.filter.FilterDemo1 trueFilterDemo1 /ServletDemo1 REQUEST ERROR FORWARD INCLUDE ASYNC
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)