最近在把jboss從4.2.2升級到6.0.0時候,遇到各種各樣的問題,主要都是類版本衝突,好容易把問題都找出來伺服器run起來之前,第一次訪問拋出了這個異常
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)
at java.lang.Thread.run(Thread.java:679) [:1.6.0_22]
搜了一下,下面這篇文章講得比較仔細,果斷分享之
http://stackoverflow.com/questions/8969497/java-lang-nosuchmethoderror-javax-servlet-servletcontext-geteffectivesessiont
貼出內容:
java.lang.NoSuchMethodError: javax.servlet.ServletContext.getEffectiveSessionTrackingModes()Ljava/util/Set;
This method is introduced in
Servlet 3.0. This error can have at least the following causes:
Your web.xml
is
not declared conform at least Servlet 3.0.
Your servlet container does not support at least Servlet 3.0.
You have servlet container specific libraries of an older version in /WEB-INF/lib
.
To solve this problem,
Ensure that your web.xml
root
declaration conforms 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>
Ensure that you're deploying to a Servlet 3.0 compatible container. In case of JBoss AS that would be at least version 6.0.0.
Ensure that you don't have those libraries in /WEB-INF/lib
.
They do not belong there. This is a common beginner's mistake to "solve" compilation errors they faced in their IDE. See also How
do I import the javax.servlet API in my Eclipse project?
You've declared your web.xml
conform
Servlet 2.2. This is definitely wrong. Fix it accordingly.