I\'ve been struggling with Jetty 7 and its support for JSP and JSTL.
My JSP file:
<%@ page language=\"java\" contentType=\"text/html; charset=utf-8\"
java.lang.AbstractMethodError: javax.servlet.jsp.PageContext.getELContext()Ljavax/el/ELContext;
This exception basically means that the mentioned method cannot be found in the runtime classpath, while it was available in the compiletime classpath of either the class or one of its dependencies.
This method is introduced in JSP 2.1 which gets hand in hand with Servlet 2.5. Since Jetty 7 is supposed to support Servlet 2.5 and thus isn't the suspect here, the only cause can be that the web.xml
is declared as Servlet 2.4 or lower instead of Servlet 2.5. So, to fix this particular problem, you need to declare your web.xml
as at least Servlet 2.5. The
tag should look like this:
If that doesn't solve the problem, then the other cause is that the /WEB-INF/lib
or even worse the /JRE/lib
or /JRE/lib/ext
is cluttered with appserver-specific libraries containing an older Servlet API version. E.g. servlet-api.jar
from Tomcat or j2ee.jar
or javaee.jar
from Glassfish, etcetera. You'll need to clean up those classpath folders from any libraries which doesn't belong there, because they get precedence in classloading and will override the appserver's own libraries. Appserver-specific libraries belongs to the appserver in question, not to the webapp or JRE.
That said and apart from the actual problem, the @page
attributes language="java" contentType="text/html; charset=utf-8"
are all superfluous. The language
already defaults to Java and the contentType
already defaults to text/html
and the charset
will already be set to UTF-8
if you set pageEncoding="UTF-8"
. So the following is already sufficient:
<%@page pageEncoding="UTF-8" %>