web-dev-qa-db-fra.com

Impossible de charger la classe pour JSP

Trace de pile d'exception

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)

Mon contenu du fichier redirect.jsp

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

Sous les couvertures du conteneur servlet, les fichiers JSP sont compilés en classes Java avant d'être exécutés.

L'éxéption

Java.lang.ClassNotFoundException: org.Apache.jsp.redirect_jsp

signifie que la compilation du fichier redirect.jsp située à la racine de votre dossier webcontent a échoué, ce qui signifie souvent qu'il contient du code Java brut dans scriptlets<% %> qui contient des erreurs de syntaxe. Vous devez corriger ces erreurs de syntaxe afin que servletcontainer puisse compiler ces fichiers JSP. Le consensus général est cependant que scriptlets sont une mauvaise pratique . Vous devez déterminer si le code Java n'appartient pas à une classe Java digne de ce nom, contrôlée par une variable Servlet ou une variable Filter.

Une autre cause possible est que le cache de travail de servletcontainer est endommagé. Cela peut arriver lors du développement avec un mauvais plugin IDE. Vous souhaitez nettoyer le cache de travail. Dans Eclipse, par exemple, vous pouvez le faire en cliquant avec le bouton droit de la souris sur le serveur et en choisissant Clean. Sinon, vous devez le faire manuellement en supprimant tout le contenu du cache de travail du conteneur servlet en question. Dans le cas par exemple de Tomcat, il s’agit alors de tout ce qui se trouve dans son dossier /work.

36
BalusC

Cela peut se produire sans raison apparente lorsque vous manquez d'espace disque. Tomcat ne peut pas créer le fichier de classe mais continue et suppose de manière inappropriée qu'il a réussi, puis se plaint ensuite.

2
user3338098

Une autre raison de cette exception pourrait être le manque d'autorisation en écriture. Si Tomcat a été démarré sur la machine Linux par un utilisateur root, il créera un répertoire travail/répertoire avec le propriétaire root. Si vous essayez de démarrer Tomcat avec un utilisateur spécial disposant d'autorisations moindres, la compilation des fichiers JSP échouera à cause de cela. Vous pouvez donc essayer deux solutions:

  1. Changer la propriété du dossier de travail Tomcat en utilisant chown Tomcat_user -R work/
  2. Supprimez le répertoire de travail avant de démarrer Tomcat en tant qu'utilisateur disposant d'autorisations moindres à l'aide de rm -R work/
1
Maksim Savchuk

Je recevais cette erreur parce que j'avais une dépendance d'API JSP dans le pom.xml de mon WAR:

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

Le changer pour ceci le corrige:

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

On suppose que cela est dû à la présence d'une classe en double pendant la phase de compilation. Sans BalusC expliquer que c'est un problème de compilation que je n'aurais jamais deviné!

0
Simon Gibbs

Je faisais également face à ce problème qui est dû aux fichiers jar de la bibliothèque tels que jetty-util-6.0.0rc0.jar, jasper-compiler-jdt-5.5.23.jar, jasperreports-3.0.0.jar . Ma réponse peut ne convient pas, car je suis débutant, mais au moins, vous pouvez essayer ... Merci.

0
Darshil

J'ai eu un problème similaire sur l'exemple de modèle de ressort Spring MVC hello world, généré par IntelliJ. InternalResourceViewResolver ne résoudrait pas le fichier Hello_JSP.Java. Je devais le changer pour la dépendance suivante

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

J'espère que ça peut aider quelqu'un.

0
Yoku