2010-12-21 42 views
14

异常堆栈跟踪无法加载类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"); %> 

回答

35

下servletcontainer的封面,JSP的被编译成Java类得到执行之前。

例外

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

redirect.jsp文件在你的web内容的文件夹的根目录无法编译而这又往往意味着它包含小脚本<% %>其中包含语法错误,一些原始的Java代码。您需要修复这些语法错误,以便servletcontainer可以编译这些JSP文件。然而,普遍的共识是小脚本poor practice。您应该考虑该Java代码是否更好地属于由ServletFilter控制的完全Java类。

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

+0

刚刚更新我的redirect.jsp中的代码使用chown tomcat_user -R work/

  • 删除工作目录开始Tomcat作为具有较小权限的用户之前tomcat的工作文件夹的所有权变更。 。是否需要做任何更改 – theJava 2010-12-21 17:15:37

  • 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解释这是一个编译问题,我从来没有猜到!

    0

    我也遇到了这个问题,这是由于库jar文件,如jetty-util-6.0.0rc0.jar,jasper-compiler-jdt-5.5.23.jar,jasperreports-3.0.0.jar。 我的回答可能不正确,因为现在我是个初学者,但至少你可以试试... ... 谢谢U,

    0

    我对春天模板Spring MVC Hello World示例类似的问题,用的IntelliJ产生。 InternalResourceViewResolver不会解析Hello_JSP.java文件。我不得不将其更改为以下依赖

    <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> </dependency>

    希望它可以帮助别人。

    2

    当磁盘空间不足时,这种情况可能没有明显的原因。 Tomcat无法创建类文件,但继续前进,不适当地认为它是成功的,然后抱怨后者。

    1

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

    1. 使用rm -R work/
    相关问题