java.lang.NoSuchMethodError:javax.servlet.ServletContext.getEffectiveSessionTrackingModes()Ljava / util / Set;

我想有一个servlet来处理来自独立java程序的输入。 如何在jboss中部署这个servlet。 我将servlet.class文件放在WEB-INF / classes中,在web.xml中我将servlet url映射为“.do”。 从我的Java客户端程序,我打开使用URL对象连接到servlet。 使用localhost:8080 / .do。 但是我得到了以下错误:

  错误[org.apache.catalina.connector.CoyoteAdapter]请求处理期间容器中发生exception或错误: 
   java.lang.NoSuchMethodError:javax.servlet.ServletContext.getEffectiveSessionTrackingModes()Ljava / util / Set;
            在
      org.apache.catalina.connector.CoyoteAdapter.postParseRequest(CoyoteAdapter.java:567)
            在org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:359)
            在org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877)
            在org.apache.coyote.http11.Http11Protocol $ Http11ConnectionHandler.process(Http11Protocol.java:654)
             at org.apache.tomcat.util.net.JIoEndpoint $ Worker.run(JIoEndpoint.java:951)

web.xml文件内容:

 ;   ReverseServlet ReverseServlet   ReverseServlet /*.do   

java.lang.NoSuchMethodError:javax.servlet.ServletContext.getEffectiveSessionTrackingModes()Ljava / util / Set;

Servlet 3.0中引入了此方法。 此错误至少可能包含以下原因:

  1. 您的web.xml至少未声明符合Servlet 3.0。

  2. 您的servlet容器至少不支持Servlet 3.0。

  3. 您在/WEB-INF/lib中具有旧版本的servlet容器特定库。

要解决这个问题,

  1. 确保您的web.xml根声明符合Servlet 3.0:

         
  2. 确保您正在部署到Servlet 3.0兼容容器。 如果JBoss AS 至少是 6.0.0版本。

  3. 确保在/WEB-INF/lib没有这些库。 他们不属于那里。 这是一个常见的初学者错误,“解决”他们在IDE中遇到的编译错误。 另请参见如何在Eclipse项目中导入javax.servlet API?

您已声明您的web.xml符合Servlet 2.2。 这绝对是错误的。 相应地修复它。