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"); %>
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
.
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.
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:
chown Tomcat_user -R work/
rm -R work/
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é!
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.
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.