2010-12-21 31 views
14

Excepción Seguimiento de la pilaNo se puede cargar la clase para 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) 

Mis contenido del archivo redirect.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<% response.sendRedirect("user/list.htm"); %> 

Respuesta

35

Bajo las cubiertas de la servletcontainer, JSP se compilan a las clases de Java antes de que sean ejecutados.

La excepción

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

significa que el archivo redirect.jsp en la raíz de la carpeta de contenido web no pudo recopilar la cual a su vez a menudo significa que contiene algo de código Java prima en scriptles<% %> que contiene errores de sintaxis. Debe corregir esos errores de sintaxis para que el servletcontainer pueda compilar esos archivos JSP. Sin embargo, el consenso general es que scriptlets son poor practice. Debería considerar si ese código Java no pertenece mejor a una clase completa de Java, controlada por Servlet o Filter.

Otra posible causa es que la memoria caché de trabajo del servletcontainer está en mal estado. Esto puede suceder cuando se desarrolla con un plugin IDE pobre. Desea limpiar el caché de trabajo. En, por ejemplo, Eclipse, puede hacer eso haciendo clic con el botón derecho del mouse en el servidor y seleccionando Limpiar. De lo contrario, tiene que hacerse manualmente eliminando todo en la memoria caché de trabajo del servletcontainer en cuestión. En el caso de, por ejemplo, Tomcat, eso es todo en el lado de su carpeta /work.

+0

acaba de actualizar mi código redirect.jsp. . ¿Hay algún cambio que deba hacerse – theJava

+0

Tenía el mismo error y borrar todo del directorio/work resolvió mi problema. Gracias BalusC !!! – Frank

+0

Recibo este error con un servidor tomcat 6. No hay scriptlets en el archivo redirect.jsp y traté de eliminar todo de la carpeta/work. Después de volver a cargar la página, puedo ver que el archivo redirect_jsp.java se vuelve a crear en la carpeta '/ work', pero sigo recibiendo los mismos errores. ¿Alguna idea sobre cómo depurar aún más esto? – AlexBrand

0

que estaba recibiendo este error porque tenía una dependencia API JSP en pom.xml de mi GUERRA:

<dependency> 
    <groupId>javax.servlet.jsp</groupId> 
    <artifactId>jsp-api</artifactId> 
    <version>2.1</version> 
    <scope>compile</scope> 
</dependency> 

Si lo cambia a este arreglaron:

<dependency> 
    <groupId>javax.servlet.jsp</groupId> 
    <artifactId>jsp-api</artifactId> 
    <version>2.1</version> 
    <scope>provided</scope> 
</dependency> 

Se supone que esto es debido a una clase duplicada está presente durante la fase de compilación. ¡Sin BalusC explicando que es un problema de compilación que nunca hubiera adivinado!

0

También me enfrentaba a este problema que se debe a los archivos jar de biblioteca como jetty-util-6.0.0rc0.jar, jasper-compiler-jdt-5.5.23.jar, jasperreports-3.0.0.jar. Mi respuesta puede no ser adecuada porque ahora soy un principiante, pero al menos se puede intentar ... gracias u ,

0

tuve problema similar en la plantilla de primavera ejemplo del mundo Spring MVC hola, generada por IntelliJ. InternalResourceViewResolver no resolvería el archivo Hello_JSP.java. Tuve que cambiarlo a la dependencia siguiente

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

esperan que los pueda ayudar a alguien.

2

Esto puede suceder sin una razón aparente cuando se queda sin espacio en disco. Tomcat no puede crear el archivo de clase, pero sigue adelante y asume de manera inapropiada que fue exitoso, y luego se queja más tarde.

1

Otra razón para esta excepción podría ser la falta de permiso de escritura. Si tomcat fue iniciado en la máquina Linux por un usuario raíz, creará trabajo/directorio con la raíz del propietario.Si intentas iniciar tomcat con un usuario especial que tenga menos permisos, no podrá compilar archivos JSP por eso. Así que usted puede tratar de dos soluciones:

  1. cambiar la propiedad de carpeta de trabajo Tomcat utilizando el directorio de trabajo chown tomcat_user -R work/
  2. Quitar antes de iniciar Tomcat como usuario con permisos de menores usando rm -R work/
Cuestiones relacionadas