我是靠谱客的博主 光亮鞋子,最近开发中收集的这篇文章主要介绍20201029 Tomcat与JDK的版本兼容问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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的版本兼容问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(31)

评论列表共有 0 条评论

立即
投稿
返回
顶部