无法为JSP加载类

时间:2010-12-21 16:58:16

标签: java jsp

异常堆栈跟踪

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"); %>

6 个答案:

答案 0 :(得分:36)

在servletcontainer的封面下,JSP在被执行之前被编译为Java类。

例外

java.lang.ClassNotFoundException: org.apache.jsp.redirect_jsp

表示webcontent文件夹根目录中的redirect.jsp文件无法编译,这反过来通常意味着它包含 scriptlets中的一些原始Java代码 <% %>语法错误。您需要修复这些语法错误,以便servletcontainer可以编译这些JSP文件。然而,一般的共识是 scriptlets poor practice。您应该考虑Java代码是否更好地属于由ServletFilter控制的完全Java类。

另一个可能的原因是servletcontainer的工作缓存搞砸了。使用糟糕的IDE插件进行开发时可能会发生这种情况。您想清理工作缓存。在Eclipse中,您可以通过右键单击服务器并选择 Clean 来实现。否则,必须通过删除相关servletcontainer的工作缓存中的所有内容来手动完成。在例如Tomcat的情况下,那就是它的/work文件夹中的所有内容。

答案 1 :(得分:2)

当磁盘空间不足时,可能会发生这种情况。 Tomcat无法创建类文件,但继续并不恰当地假设它成功,然后抱怨后者。

答案 2 :(得分:1)

此异常的另一个原因可能是缺少写入权限。如果root用户在linux机器上启动了tomcat,它将创建具有所有者root的工作/目录。如果您尝试使用权限较少的特殊用户启动tomcat,则会因此无法编译JSP文件。所以你可以尝试两种解决方案:

  1. 使用chown tomcat_user -R work/
  2. 更改tomcat工作文件夹的所有权
  3. 使用rm -R work/
  4. 以较低权限启动tomcat之前删除工作目录

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

希望它可以帮助别人。