Filter基础
搭建HttpFilter抽象类
package com.atguigu.filter;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public abstract class HttpFilter implements Filter {
private FilterConfig filterConfig;
/**
* 提供获取FilterConfig的方法
* @return
*/
public FilterConfig getFilterConfig(){
return filterConfig;
}
public ServletContext getServletContext(){
return filterConfig.getServletContext();
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig=filterConfig;
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest req=(HttpServletRequest) servletRequest;
HttpServletResponse res=(HttpServletResponse) servletResponse;
doFilter(req,res,filterChain);
}
public abstract void doFilter(HttpServletRequest servletRequest, HttpServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException;
@Override
public void destroy() {
Filter.super.destroy();
}
}
无法直接注册HttpFilte,因为他是抽象的无法实例化,需要创建一个新的类来继承他,注册这个新的类。
web.xml
<filter>
<filter-name>TestHttpFilter</filter-name>
<filter-class>com.atguigu.filter.TestHttpFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>TestHttpFilter</filter-name>
<!-- 测试使用,注册自己的路径-->
<url-pattern>/TestHttpFilter</url-pattern>
</filter-mapping>
name就是类名,class必须是类的全类名,用于反射注册,url为要过滤的路径,可以通过/*来模糊匹配所有请求路径,用于解决乱码问题。
Listener