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

时间:2012-01-23 09:32:29

标签: 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 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)

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>

1 个答案:

答案 0 :(得分:11)

  

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

此方法在Servlet 3.0中为introduced。此错误至少可能包含以下原因:

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

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

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

  4. 要解决此问题,

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

      <?xml version="1.0" encoding="UTF-8"?>
      <web-app 
          xmlns="http://java.sun.com/xml/ns/javaee"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
          version="3.0">
      
          <!-- Config here. -->
      
      </web-app>
      
    2. 确保您正在部署到Servlet 3.0兼容容器。如果JBoss AS 至少版本6.0.0。

    3. 确保/WEB-INF/lib中没有这些库。他们不属于那里。这是一个常见的初学者错误,“解决”他们在IDE中遇到的编译错误。另请参阅How do I import the javax.servlet API in my Eclipse project?

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