对于JspFactory类型,方法getJspApplicationContext(ServletContext)是未定义的

时间:2010-02-24 15:27:42

标签: eclipse jsp

这是我在尝试运行JSP文件时在浏览器屏幕上看到的内容。

  

方法getJspApplicationContext(ServletContext)未定义类型JspFactory

堆栈跟踪:

  

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.JspServlet.serviceJspFile(JspServlet.java:342)           org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)           javax.servlet.http.HttpServlet.service(HttpServlet.java:856)

当我运行它时,在Tomcat窗口上抛出了jasper异常。

4 个答案:

答案 0 :(得分:31)

  

方法getJspApplicationContext(ServletContext)未定义类型JspFactory

在JSP 2.1中引入了method。导致此问题的原因有三个:

  1. 您使用的是旧版本的JSP容器(例如,您需要至少Tomcat 6.0)。

  2. 您在web.xml中声明了错误的Servlet版本。 JSP 2.1与Servlet 2.5密切相关,因此至少应根据Servlet 2.5规范声明web.xml(您仍需要支持Servlet 2.5 / JSP 2.1的servlet容器)。

  3. 您已将旧版本的特定于应用程序服务器的库复制到webapp /WEB-INF/lib中,例如servlet-api.jarjsp-api.jar等。你应该从不这样做。它只会导致类加载冲突。在你的webproject中删除它们,然后在appserver中保留/取消它们。

答案 1 :(得分:4)

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

还解决了问题

答案 2 :(得分:1)

  

方法getJspApplicationContext(ServletContext)未定义   类型JspFactory

当您的项目需要引用服务器运行时时,也会发生这种情况:

  • 在Eclipse的“Project Explorer”中右键单击您的项目
  • 选择“构建路径|配置构建路径”
  • 点击“图书馆”标签
  • 点击“添加图书馆”
  • 选择“服务器运行时”,然后单击“下一步”
  • 选择“Apache Tomcat 7”或任何服务器运行时版本。

注意:对于ANT构建也会发生此错误,对于这种情况,您需要在ANT build.xml文件中引用目标运行时...以下引用本地tomcat安装,并使用其“lib”编译时的文件夹:

<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>

来自this url

答案 3 :(得分:1)

对于Maven,我还必须将jsp-api依赖项添加为这样提供的jar :(其他一些依赖项将其拉入,我无法弄清楚哪一个,但是这个修复了它)

<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>