开发者

The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory

This is what I got on the browser screen when I try to run the JSP file.

The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory

Stacktrace:

org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:92) org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330) org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:439) org.apache.jasper.compiler.Compiler.compile(Compiler.java:334) org.apache.jasper.compiler.Compiler.compile(Compiler.java:312) org.apache.jasper.compiler.Compiler.compile(Compiler.java:299) org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:586) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317) org.apache.jasper.servlet.Js开发者_StackOverflow中文版pServlet.serviceJspFile(JspServlet.java:342) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267) javax.servlet.http.HttpServlet.service(HttpServlet.java:856)

And the jasper exception is thrown on the Tomcat window when I ran it.


The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory

That method was introduced in JSP 2.1. There are 3 causes for this problem:

  1. You're using an too old version of the JSP container (you need for example at least Tomcat 6.0).

  2. You've declared the wrong Servlet version in web.xml. JSP 2.1 goes hand in hand with Servlet 2.5, so your web.xml should at least be declared as per the Servlet 2.5 spec (you still need a Servlet 2.5 / JSP 2.1 capable servletcontainer for that).

  3. You've duplicated older versioned appserver-specific libraries into webapp's /WEB-INF/lib, like servlet-api.jar, jsp-api.jar and so on. You should never do that. It will only result in classloading collisions. Get rid of them in your webproject and leave/untouch them there in the appserver.


<dependency>
   <groupId>javax.servlet</groupId>
   <artifactId>servlet-api</artifactId>
   <version>${servlet.version}</version>
   <scope>provided</scope>
</dependency> 

also fixes the issues


The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory

This can also happen when your project requires a reference to a server runtime:

  • Right click on your project in Eclipse's "Project Explorer"
  • Choose "Build Path | Configure Build Path"
  • Click on the "Libraries" tab
  • Click "Add Library"
  • Select "Server Runtime" and click "Next"
  • Choose "Apache Tomcat 7", or whatever your server runtime version should be.

Note: This error can also happen for ANT builds, and for that case, you need to reference a target runtime in your ANT build.xml file... The following references a local tomcat installation, and uses its "lib" folders when doing the compile:

<project name="tomcat-demo" default="compile" basedir=".">
    <property name="tomcat-home" value="/path/to/your/tomcat/apache-tomcat-7" />

    <path id="project-classpath">
        <fileset dir="WebContent/WEB-INF/lib" includes="*.jar" />
        <fileset dir="${tomcat-home}/bin" includes="*.jar" />
        <fileset dir="${tomcat-home}/common/lib" includes="*.jar" />
        <fileset dir="${tomcat-home}/server/lib" includes="*.jar" />
    </path>
   ...
</project>

Snagged from this url:


For Maven, I also had to add the jsp-api dependency as a provided jar like this: (Some other dependency was pulling it in, I could never figure out which one, but this fixed it up)

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>servlet-api</artifactId>
  <version>2.5</version>
  <scope>provided</scope>
</dependency>   
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>jsp-api</artifactId>
  <version>2.0</version>
  <scope>provided</scope>
</dependency>     
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜