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

java.lang.NoSuchMethodError:javax.servlet.ServletContext.getEffectiveSessionTrackingModes()Ljava/util/Set;,java,servlets,jboss,Java,Servlets,Jboss,我想要一个servlet来处理来自独立java程序的输入。如何在jboss中部署这个servlet。我将servlet.class文件放在WEB-INF/classes中,并在WEB.xml中将servlet url映射为“.do”。从Java客户端程序中,我使用URL对象打开了与servlet的连接。使用localhost:8080/.do。但我得到以下错误: ERROR [org.apache.catalina.connector.CoyoteAdapter] An exception or

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

ERROR [org.apache.catalina.connector.CoyoteAdapter] An exception or error occurred in the container during the request processing: java.lang.NoSuchMethodError: javax.servlet.ServletContext.getEffectiveSessionTrackingModes()Ljava/util/Set; at org.apache.catalina.connector.CoyoteAdapter.postParseRequest(CoyoteAdapter.java:567) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:359) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:654) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:951) 错误[org.apache.catalina.connector.CoyoteAdapter]请求处理期间容器中发生异常或错误: 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) 位于org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:951) web.xml文件内容:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "java.sun.com/j2ee/dtds/web-app_2_2.dtd">; 
<web-app> 
     <servlet>
         <servlet-name>ReverseServlet</servlet-name> 
         <servlet-class>ReverseServlet</servlet-class> 
     </servlet> 
     <servlet-mapping>
          <servlet-name>ReverseServlet</servlet-name> 
          <url-pattern>/*.do</url-pattern> 
     </servlet-mapping> 
</web-app>

; 
反向小瓶
反向小瓶
反向小瓶
/*.做
java.lang.NoSuchMethodError:javax.servlet.ServletContext.getEffectiveSessionTrackingModes()Ljava/util/Set

此方法在Servlet3.0中。此错误可能至少有以下原因:

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

  • 您的servlet容器至少不支持servlet 3.0

  • /WEB-INF/lib
    中有旧版本的特定于servlet容器的库

  • 要解决这个问题,

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

    
    
  • 确保您正在部署到与Servlet 3.0兼容的容器。如果是JBoss AS,则至少是版本6.0.0

  • 确保
    /WEB-INF/lib
    中没有这些库。他们不属于那里。这是初学者在“解决”IDE中遇到的编译错误时经常犯的错误。另见


  • 您已经声明了您的
    web.xml
    conformservlet 2.2。这绝对是错误的。相应地修复它。

    如果可能,还可以修改servlet代码。您在服务器中提到的方法似乎不存在,或者web.xml ReverseServlet ReverseServlet ReverseServlet/*中存在某些键入错误。执行Servlet代码链接您好,请从“注释”部分删除web.xml内容。我已经在你的“问题”中添加了这些内容。在添加内容时,我注意到元素后面有分号(;)。删除分号并重新部署应用程序。也许它会对你起作用。你能详细解释一下吗。der不是doctype之后的分号。我觉得这只是答案的一半。显然,运行Servlet2.2应用程序而不遇到此异常是可能的;在Servlet 3.0发布之前,并不是所有的站点都被破坏。@ruakh:我不知道这是不可能的。如果您自己实际上无法在Servlet 3.0容器上运行Servlet 2.2 webapp,则您的webapp与答案中的第3点冲突。OP没有指定他尝试使用Servlet 3.0。你的回答甚至说“你已经声明了你的
    web.xml
    conformServlet2.2。这绝对是错误的”,但我看不出有任何根据。问题显然是两件事之间的版本不匹配;您的答案是将2.2内容更改为3.0,但OP可能实际上需要将3.0内容更改为2.2。@ruakh:OP的
    web.xml
    行中的
    就是这样做的。不,您误解了我。“您已经声明了您的
    web.xml
    ConformServlet2.2”部分显然是正确的;这是“这绝对是错误的”部分,我看不出有任何根据。