这是我在尝试运行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异常。
答案 0 :(得分:31)
方法getJspApplicationContext(ServletContext)未定义类型JspFactory
在JSP 2.1中引入了method。导致此问题的原因有三个:
您使用的是旧版本的JSP容器(例如,您需要至少Tomcat 6.0)。
您在web.xml
中声明了错误的Servlet版本。 JSP 2.1与Servlet 2.5密切相关,因此至少应根据Servlet 2.5规范声明web.xml
(您仍需要支持Servlet 2.5 / JSP 2.1的servlet容器)。
您已将旧版本的特定于应用程序服务器的库复制到webapp /WEB-INF/lib
中,例如servlet-api.jar
,jsp-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
当您的项目需要引用服务器运行时时,也会发生这种情况:
注意:对于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>