servlet java.lang.AbstractMethodError 报错解决方法

在写 Servlet 项目时候定义 FIlter 的时候一直访问不了,然后查看 Console 的时候发现以下错误

抽象方法错误?难道是有抽象方法没有实现。然后我就去我 Maven 项目里面的 Servlet 包下的 Filter.class

public interface Filter {

    default public void init(FilterConfig filterConfig) throws ServletException {}

    public void doFilter(ServletRequest request, ServletResponse response,
                         FilterChain chain)
            throws IOException, ServletException;

    default public void destroy() {}
}

发现有个 init 和 destory 但是想想这不是有默认值么,我是直接写的

public class EncodingFilter implements Filter {

	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("UTF-8");
		chain.doFilter(request, response);
	}
}

之后我就把 init 和 destory 加上了,然后就能运行了。。。像这样

public class EncodingFilter implements Filter {

	public void init(FilterConfig filterConfig) throws ServletException {
	}

	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("UTF-8");
		chain.doFilter(request, response);
	}

	@Override
	public void destroy() {
	}

}

在运行就不报错了,具体什么原因我也没闹明白。可能是 Tomcat 的 servlet 可能和 Maven 包的 servlet 代码不一样导致的。