错误:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String;

最近刚刚开始用SpringBoot做项目,之前项目跑得好好的,就启动不起来了,后来终于解决了这个错误,这种错误出现原因很多吧,我这只能算一种原因。

直接进入正题,我遇到的导致出现这个报错的原因:maven项目中引入了多个版本的servlet-api的jar包,项目加载时候加载错了类(加载到servlet-api包中的类),getVirtualServerName我只在SpringBoot内嵌的Tomcat的包里见到了!

解决方案:Servlet-api 3.1.0以及之后的版本中才有getVirtualServerName,确保项目中使用的是这个版本3.1.0以及之后,或者直接排除所有Servlet-api,使用SpringBoot内嵌的tomcat.

一.SpringBoot版本是2.0.0 ,该版本下内嵌Tomcat的jar中就使用了自己的ServletContext,官方文档中标注了该方法在servlet-api 3.1.0才出现,我下载了3.1-b01也是没有该方法的! 所以意味着我们项目如果用了Servlet-api,那版本不得低于3.1.0

二.如果知道项目引入了别的Servlet-api,排除步骤,仅供参考,每个人都可能不一样!

可以查看项目的依赖,很明显发现了servlet-api 2.3 的版本,注意这可能不是你自己引入的(自己引入的解决方法就不用我说了,自己删掉dependency),别的项目引入的话,解决起来就可以参考下面的步骤。

我也不太了解maven类加载机制,所以说下我觉得可能出现的几个问题,出现这个错误我认为就是加载的是Servlet-api 3.1.0之前的版本(和当前SpringBoot版本不匹配),项目中正好因为我把

axis-saaj的依赖放在了pom文件依赖最前面,而axis-saaj依赖中正好包含了servlet-api的jar,而且用的版本是2.3.0;  如果我将axis-saaj的依赖放在pom依赖最后面,容器又可以正常启动起来

了!

三.我们就按照axis-saaj在最前面,我们不知道哪个依赖用了servlet-api的情况来排错! jar包那么多,依赖那么多,这次偶然,下次呢?

POM文件中我们右击 Diagram---》 Show Dependencies 来查看依赖图

老实说在下面这么大的网状图里找到servlet-api的jar,确实有点困难,先说找到后咋办吧,在servlet-api上右键exclude(快捷键Shift+Delete),即可排除这个版本的servlet-api;

既然找到这个这么困难,还有一种最直接的解决方案:如果项目使用的SpringBoot内嵌的Tomcat,手动添加一个Servlet-api 3.1放到Dependencies里最前面,也可以解决问题.

强烈any一款IDEA插件,谁用谁知道,我也是今天才发现! Maven Helper

Maven Helper安装方式就不介绍了,IDEA settings  Plugin中搜索 Maven  Helper,安装、重启就可以使用了. 直接上图,怎么解决这种jar冲突的问题

Maven Helper使用方式:  安装成功以后,打开POM文件,红色箭头中内容出现就是安装成功.

切换到依赖分析面板,Dependency Analyzer,然后搜索冲突的jar,在All Dependency界面就可以Exclude,很方便的找到冲突的jar,servlet-api 2.3排除掉,是不是很好很强大呢?

四.解决方案

综上来看,最优的解决方案是在<Dependencies>下添加Servlet-api 3.1的依赖,最为直接、暴力。此外,也强烈给大家介绍了Maven  Helper插件排除jar依赖的方法

  1. <dependency>
  2. <groupId>javax.servlet</groupId>
  3. <artifactId>javax.servlet-api</artifactId>
  4. <version>3.1.0</version>
  5. <scope>provided</scope>
  6. </dependency>

SpringBoot报错:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String;的更多相关文章

  1. Caused by: java.lang.NoSuchMethodError: javax.servlet.ServletContext.getClassLoader()Ljava/lang/ClassLoader;

    运行tomat  报错: Caused by: java.lang.NoSuchMethodError: javax.servlet.ServletContext.getClassLoader()Lj ...

  2. java.lang.NoSuchMethodError: javax.servlet.ServletContext.getContextPath()Ljava/lang/String;

    问题描述:在eclipse3.7中启动tomcat6时一直出现这个错误, java.lang.NoSuchMethodError: javax.servlet.ServletContext.getCo ...

  3. idea启动springboot项目 报错:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getClassLoader()Ljava/lang/ClassLoader;

    有一次启动springboot项目的时候,报了一个非常奇怪的错误,说是找不到servletContext,springboot不是自带tomcat的吗? 在网上找了好久,说是用以下方式解决. 解决方式 ...

  4. Spring boot Unable to start embedded Tomcat报错 java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()

    Spring boot Unable to start embedded Tomcat 报错 java.lang.NoSuchMethodError: javax.servlet.ServletCon ...

  5. 【原】tomcat 7 启动报错:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getSessionCookieConfig()Ljavax/servlet/SessionCookieConfig的解决

    现象: tomcat 7 启动报错:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getSessionCookieConfig() ...

  6. tomcat7 启动项目报错 java.lang.NoSuchMethodError: javax.servlet.ServletContext.getSessionCookieConfig()

    JDK版本:jdk1.8.0_77 Tomcat 版本:apache-tomcat-7.0.47 异常重现步骤: 1.完成项目部署 2.启动Tomcat 异常头部信息:java.lang.NoSuch ...

  7. tomcat 7 启动报错:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getSessionCookieConfig()Ljavax/servlet/SessionCookieConfig的解决

    现象: tomcat 7 启动报错:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getSessionCookieConfig() ...

  8. maven项目 @Resource报错 ava.lang.NoSuchMethodError: javax.annotation.Resource.lookup()Ljava/lang/String;

    @Resource 出错 java.lang.NoSuchMethodError: javax.annotation.Resource.lookup() maven项目中,使用@Resource报错. ...

  9. idea 启动java项目报错 java: 程序包javax.servlet.http不存在

    File -- Project Structure

随机推荐

  1. 无法获得锁 /var/lib/dpkg/lock - open

    关于 apt-get update 更新的时候出现 无法获得锁 /var/lib/dpkg/lock - open 解决 直接删除这个锁文件即可: sudo rm /var/lib/dpkg/lock ...

  2. rem 是如何实现自适应布局的

    摘要:rem是相对于根元素<html>,这样就意味着,我们只需要在根元素确定一个px字号,则可以来算出元素的宽高.本文讲的是如何使用rem实现自适应.· rem这是个低调的css单位,近一 ...

  3. 通过HttpClient发起Get请求,获取Json数据,然后转为java数据,然后批量保存数据库;

    Json转java所需Jar包: commons-beanutils-1.8.0.jar,commons-collections-3.2.1.jar,commons-lang-2.5.jar,comm ...

  4. rest_framework登录组件,权限组件

    昨日回顾: -HyperlinkedIdentityField(用来生成url),传三个参数 -实例化序列化类的时候,BookSerializer(ret, many=True, context={' ...

  5. CSS3变换、过渡、动画效果

    为元素创建圆角 1.四个相同的圆角 -webkit-border-radius:10px; border-radius:10px; 2.一个圆角 -webkit-border-top-left-rad ...

  6. windows下qt的.exe的dll文件怎么配齐

    用qt自带的windeploy工具即可 win键打开开始菜单 找到qt目录下的qt for desktop(mingw)并打开 qtcreater或者vs打开要部署的项目,构建成release模式,运 ...

  7. future项目上报

    private String name;//预警名称 private String detail;//详细 用于定义位置和报错信息,越多越好private String code;//编码 1001是 ...

  8. 接口测试工具之Postman笔记

    根据学习内容对Postman进行的个人总结,对于Postman说明.安装方法等说明性文字就不赘述了. 下面是页面中元素的和输入说明: New collection:集合可以把同一平台.系统,或功能的接 ...

  9. Hadoop 和 MPP 的比较

    如果我们回顾5年前会发现,那就是当时Hadoop不是大多数公司的选择,特别是那些要求稳定和成熟的平台的企业. 在这一刻,选择非常简单:当您的分析数据库的大小超过5-7 TB时,您只需启动MPP迁移项目 ...

  10. SQL 经典应用

    SQL Server日常维护常用的一些脚本整理. 1.sql server开启clr权限: exec sp_configure 'clr enabled', 1 GO RECONFIGURE GO A ...