【问题标题】:VirtualServerName Exception when moving from xml to Java config从 xml 移动到 Java 配置时出现 VirtualServerName 异常
【发布时间】:2018-12-27 05:23:26
【问题描述】:

在 Spring Boot 中从 XML 迁移到 Java 配置时出现以下错误。

java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String;
at org.apache.tomcat.websocket.server.WsServerContainer.<init>(WsServerContainer.java:149) ~[tomcat-embed-websocket-8.0.32.jar:8.0.32]
at org.apache.tomcat.websocket.server.WsSci.init(WsSci.java:131) ~[tomcat-embed-websocket-8.0.32.jar:8.0.32]
at org.apache.tomcat.websocket.server.WsContextListener.contextInitialized(WsContextListener.java:39) ~[tomcat-embed-websocket-8.0.32.jar:8.0.32]
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4812) [tomcat-embed-core-8.0.32.jar:8.0.32]
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5255) [tomcat-embed-core-8.0.32.jar:8.0.32]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147) [tomcat-embed-core-8.0.32.jar:8.0.32]
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408) [tomcat-embed-core-8.0.32.jar:8.0.32]
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398) [tomcat-embed-core-8.0.32.jar:8.0.32]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_172]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_172]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_172]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_172]

当我从 SpringBootServletInitializer 扩展类中删除 @ImportResource("classpath:applicationContext.xml") 时出现此错误。

我检查了 pom 依赖层次结构中的 servlet api 版本,它设置为 3.0.1,并且只有一个 servlet api 依赖项,并且没有冲突的较低版本。

我使用的是 Spring Boot 版本1.3.3.RELEASE

【问题讨论】:

  • 你看过this question?
  • 你是对的@Prashant。 This answer很宽很完整
  • 是的,但想知道为什么当我使用 xml 配置时它不是问题。另外添加 javax.servletjavax.servlet-api3.1.0 没有帮助。

标签: java spring spring-boot applicationcontext spring-java-config


【解决方案1】:

getVirtualServerName 已在 Servlet 3.1 的 ServletContext 中添加。

请将您的 servlet-api 更新到最新版本。

【讨论】:

  • 我的 pom 中有 3.0.1 的 servlet api 版本,我误认为它是 3.1,并希望它具有 getVirtualServerName。我删除了 3.0.1 servlet api 依赖项,我不再收到此错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-07
  • 2021-02-02
  • 2011-05-19
  • 2014-05-01
  • 2012-04-13
  • 1970-01-01
相关资源
最近更新 更多