概述
Tomcat7只支持jdk1.7及以下,若是jdk1.8则需要用tomcat8及以上,否则可能会报错,比如default关键字的使用。
现象:war包本地运行没问题,一到uat环境启动就报错。继承Filter时,因为init(),destroy()有关键字default修饰,没有重写。
@Slf4j
@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class ForwardFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
String url = request.getRequestURL().toString();
//健康检测地址不转发
if (!url.contains("README/release_note")) {
log.info("source url:" + url);
String descUrl = transformToDescUrl(url);
log.info("desc url:" + descUrl);
///yutaiappapidev/admin/css/pages/login1.css
try {
request.getRequestDispatcher(descUrl).forward(request, response);//重新走ZUUL,进入网关流程
} catch (Exception e) {
e.printStackTrace();
log.info("error: " + e.getMessage());
}
}
}
}
本地tomcat插件是1.9版本,启动时没有报错;但是uat环境tomcat是1.7版本,不支持jdk1.8的关键字,所以每次启动都会报:filterStart Exception starting filter java.lang.AbstractMethodError 抽象方法错误。
解决方案是重写init()方法和destroy()方法
所以要注意tomcat与jdk的版本兼容问题
default关键字
在JDK1.8中,接口中的方法可以有方法体,但需要关键字default来修饰,使用default来修饰的称之为默认方法,默认方法通过实例对象来调用。
默认方法有自己的方法体,用于提供一套默认的实现,这样子类对于该方法就不需要强制来实现(可以不用强制实现),可以选择使用默认的实现,也可以重写自己的实现。当为接口扩展方法时,只需要提供该方法的默认实现即可,至于对应的实现类可以重写也可以使用默认的实现,这样所有的实现类不会报语法错误:Xxx不是抽象的, 并且未覆盖Yxx中的抽象方法。
default关键字可以让接口中的方法可以有默认的方法体,当一个类实现这个接口时,可以不用去实现这个方法。
public interface Default {
//接口中的方法可以有方法体
default void method(){
System.out.println("method in interface");
}
}
public class DefaultImpl implements Default {
@Override
public void method() {
System.out.println("method in DefaultImpl");
}
}
public class TestDefault {
public static void main(String[] args) {
//1,DefaultImpl子类可以不实现有default修饰的方法,但是在tomcat中会报错。
//DefaultImpl aDefault = new DefaultImpl();
//aDefault.method();
//2,如果子类重写接口中default修饰的方法,则调用自己的方法
DefaultImpl aDefault = new DefaultImpl();
aDefault.method();
}
}
最后
以上就是光亮鞋子为你收集整理的20201029 Tomcat与JDK的版本兼容问题的全部内容,希望文章能够帮你解决20201029 Tomcat与JDK的版本兼容问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复