异常堆栈跟踪
org.apache.jasper.JasperException: Unable to load class for JSP
org.apache.jasper.JspCompilationContext.load(JspCompilationContext.java:599)
org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:143)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:321)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:308)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:259)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
java.lang.ClassNotFoundException: org.apache.jsp.redirect_jsp
java.net.URLClassLoader$1.run(Unknown Source)
java.security.AccessController.doPrivileged(Native Method)
java.net.URLClassLoader.findClass(Unknown Source)
org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:131)
org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:63)
org.apache.jasper.JspCompilationContext.load(JspCompilationContext.java:597)
org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:143)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:321)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:308)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:259)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
我的redirect.jsp文件内容
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<% response.sendRedirect("user/list.htm"); %>
答案 0 :(得分:36)
在servletcontainer的封面下,JSP在被执行之前被编译为Java类。
例外
java.lang.ClassNotFoundException: org.apache.jsp.redirect_jsp
表示webcontent文件夹根目录中的redirect.jsp
文件无法编译,这反过来通常意味着它包含 scriptlets中的一些原始Java代码 <% %>
语法错误。您需要修复这些语法错误,以便servletcontainer可以编译这些JSP文件。然而,一般的共识是 scriptlets 是poor practice。您应该考虑Java代码是否更好地属于由Servlet
或Filter
控制的完全Java类。
另一个可能的原因是servletcontainer的工作缓存搞砸了。使用糟糕的IDE插件进行开发时可能会发生这种情况。您想清理工作缓存。在Eclipse中,您可以通过右键单击服务器并选择 Clean 来实现。否则,必须通过删除相关servletcontainer的工作缓存中的所有内容来手动完成。在例如Tomcat的情况下,那就是它的/work
文件夹中的所有内容。
答案 1 :(得分:2)
当磁盘空间不足时,可能会发生这种情况。 Tomcat无法创建类文件,但继续并不恰当地假设它成功,然后抱怨后者。
答案 2 :(得分:1)
此异常的另一个原因可能是缺少写入权限。如果root用户在linux机器上启动了tomcat,它将创建具有所有者root的工作/目录。如果您尝试使用权限较少的特殊用户启动tomcat,则会因此无法编译JSP文件。所以你可以尝试两种解决方案:
chown tomcat_user -R work/
rm -R work/
答案 3 :(得分:0)
我收到此错误是因为我在WAR的pom.xml中有一个JSP API依赖项:
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>compile</scope>
</dependency>
将其更改为固定它:
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
假设这是由于在编译阶段存在重复的类。没有BalusC解释这是一个我从未猜到过的编译问题!
答案 4 :(得分:0)
我也遇到了这个问题,这是由于库jar文件,如jetty-util-6.0.0rc0.jar,jasper-compiler-jdt-5.5.23.jar,jasperreports-3.0.0.jar。 我的回答可能不合适,因为现在我是初学者,但至少你可以尝试...... 谢谢你,
答案 5 :(得分:0)
我在IntelliJ生成的spring模板Spring MVC
hello world示例中遇到了类似的问题。 InternalResourceViewResolver无法解析Hello_JSP.java文件。我不得不将其改为以下依赖
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
希望它可以帮助别人。