Bonjour,

je lis actuellement le cours de S.Tahe concernant les bases du développement Web, disponible sur votre site, et en essayant d'écrire un des programmes, j'obtiens une erreur que je n'arrivie pas résoudre.

Le programme consiste à gérer une liste de personnes avec un servlet et des pages JSP, en architecture MVC et 3-tiers.
Les opérations possibles sont: liste des personnes,ajout/modification d'une personne,suppression d'une personne.

Voici l'erreur:

GRAVE: "Servlet.service()" pour la servlet jsp a généré une exception
java.lang.ClassNotFoundException: org.apache.taglibs.standard.tlv.JstlCoreTLV
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1355)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1201)
at org.apache.jasper.compiler.TagLibraryInfoImpl.createValidator(TagLibraryInfoImpl.java:653)
at org.apache.jasper.compiler.TagLibraryInfoImpl.parseTLD(TagLibraryInfoImpl.java:246)
at org.apache.jasper.compiler.TagLibraryInfoImpl.<init>(TagLibraryInfoImpl.java:162)
at org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:423)
at org.apache.jasper.compiler.Parser.parseDirective(Parser.java:492)
at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1556)
at org.apache.jasper.compiler.Parser.parse(Parser.java:126)
at org.apache.jasper.compiler.ParserController.doParse(ParserController.java:211)
at org.apache.jasper.compiler.ParserController.parse(ParserController.java:100)
at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:155)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:295)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:276)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:264)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:563)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:305)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Unknown Source)
15 févr. 2007 20:15:46 org.apache.catalina.core.ApplicationDispatcher invoke
GRAVE: "Servlet.service()" pour la servlet jsp a lancé une exception
java.lang.ClassNotFoundException: org.apache.taglibs.standard.tlv.JstlCoreTLV
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1355)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1201)
at org.apache.jasper.compiler.TagLibraryInfoImpl.createValidator(TagLibraryInfoImpl.java:653)
at org.apache.jasper.compiler.TagLibraryInfoImpl.parseTLD(TagLibraryInfoImpl.java:246)
at org.apache.jasper.compiler.TagLibraryInfoImpl.<init>(TagLibraryInfoImpl.java:162)
at org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:423)
at org.apache.jasper.compiler.Parser.parseDirective(Parser.java:492)
at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1556)
at org.apache.jasper.compiler.Parser.parse(Parser.java:126)
at org.apache.jasper.compiler.ParserController.doParse(ParserController.java:211)
at org.apache.jasper.compiler.ParserController.parse(ParserController.java:100)
at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:155)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:295)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:276)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:264)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:563)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:305)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:465)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:398)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:363)
at org.apache.catalina.core.StandardHostValve.throwable(StandardHostValve.java:212)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:134)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Unknown Source)
15 févr. 2007 20:15:46 org.apache.catalina.core.StandardHostValve custom
GRAVE: Exception Processing ErrorPage[exceptionType=java.lang.Exception, location=/WEB-INF/vues/exception.jsp]
org.apache.jasper.JasperException: Impossible de charger ou d'instancier la classe TagLibraryValidator: org.apache.taglibs.standard.tlv.JstlCoreTLV
at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:455)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:465)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:398)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:363)
at org.apache.catalina.core.StandardHostValve.throwable(StandardHostValve.java:212)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:134)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Unknown Source)
(recopie d'écran de Tomcat).
Une erreur d'initialisation (aucune page JSP ne s'affiche) donc, concernant les taglibs.
Voici, maintenant, et puisque l'erreur semble venir de là, les parties de mon programme en rapport avec les taglibs:

WEB.xml:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
 
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
	xmlns="http://java.sun.com/xml/ns/j2ee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/webapp_
2_4.xsd">
	<display-name>mvc-personnes-01</display-name>
	<!-- ServletPersonne -->
	<servlet>
		<servlet-name>personnes</servlet-name>
		<servlet-class>
			istia.st.mvc.personnes.web.Application
		</servlet-class>
		<init-param>
			<param-name>urlEdit</param-name>
			<param-value>/WEB-INF/vues/edit.jsp</param-value>
		</init-param>
		<init-param>
			<param-name>urlErreurs</param-name>
			<param-value>/WEB-INF/vues/erreurs.jsp</param-value>
		</init-param>
		<init-param>
			<param-name>urlList</param-name>
			<param-value>/WEB-INF/vues/list.jsp</param-value>
		</init-param>
 
	</servlet>
	<!-- Mapping ServletPersonne-->
	<servlet-mapping>
		<servlet-name>personnes</servlet-name>
		<url-pattern>/do/*</url-pattern>
	</servlet-mapping>
	<!-- fichiers d'accueil -->
 
	<jsp-config>
		<taglib>
			<taglib-uri>
				http://jakarta.apache.org/taglibs/datetime</taglib-uri>
			<taglib-location>/WEB-INF/datetime.tld</taglib-location>
		</taglib>
		<taglib>
			<taglib-uri>http://jakarta.apache.org/taglibs/core</taglib-uri>
			<taglib-location>/WEB-INF/c.tld</taglib-location>
		</taglib>
	</jsp-config>
 
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
	<!-- Page d'erreur inattendue -->
	<error-page>
		<exception-type>java.lang.Exception</exception-type>
		<location>/WEB-INF/vues/exception.jsp</location>
	</error-page>
 
</web-app>
,

LISTE.jsp (une des vues: celle qui donne la liste des personnes):

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
 
<%@ page language="java" pageEncoding="ISO-8859-1"
	contentType="text/html;charset=ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://jakarta.apache.org/taglibs/datetime" prefix="dt"%>
<html>
<head>
<title>MVC - Personnes</title>
</head>
<body background='<c:url value="/ressources/standard.jpg"/>'>
<h2>Liste des personnes</h2>
<table border="1">
	<tr>
		<th>Id</th>
		<th>Version</th>
		<th>Pr&eacute;nom</th>
		<th>Nom</th>
		<th>Date de naissance</th>
		<th>Mari&eacute;</th>
		<th>Nombre d'enfants</th>
		<th></th>
	</tr>
	<c:forEach var="personne" items="${personnes}">
		<tr>
			<td><c:out value="${personne.id}" /></td>
			<td><c:out value="${personne.version}" /></td>
			<td><c:out value="${personne.prenom}" /></td>
			<td><c:out value="${personne.nom}" /></td>
			<td><dt:format pattern="dd/MM/yyyy">${personne.dateNaissance.time}</dt:format></td>
			<td><c:out value="${personne.marie}" /></td>
			<td><c:out value="${personne.nbEnfants}" /></td>
			<td><a href='<c:url value="/do/edit?id=${personne.id}"/>'>Modifier</a></td>
			<td><a href='<c:url value="/do/delete?id=${personne.id}"/>'>Supprimer</a></td>
		</tr>
	</c:forEach>
</table>
<br>
<a href='<c:url value="/do/edit?id=-1"/>'>Ajout</a>
</body>
</html>
,

le fichier directement en cause: exception.jsp:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
<%@ page language="java" pageEncoding="ISO-8859-1"
	contentType="text/html;charset=ISO-8859-1"%>
<%--@ taglib uri="/WEB-INF/c.tld" prefix="c"--%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page isErrorPage="true"%>
 
<%
response.setStatus(200);
%>
 
<html>
<head>
<title>MVC - Personnes</title>
</head>
<body background='<c:url value="/ressources/standard.jpg"/>'>
<h2>MVC - personnes</h2>
L'exception suivante s'est produite :
<%=exception.getMessage()%>
<br>
<br>
<a href='<c:url value="/do/list"/>'>Retour &agrave; la liste</a>
</body>
</html>
,

je n'ai pas inclus le servlet, il est carrément trop gros (et pas vraiment en rapport avec cette erreur).

A noter: j'ai inclus :
  • c.tld et taglibs-datetime.tld dans WEB-INF
  • standard.jar et jstl.jar (les fichiers jar des taglibs, téléchargés sur le site de jakarta )dans le répertoire WEB-INF/lib
.

Voilà, j'ai mis, j'éspère tout ce qu'il faut pour se faire une idée de l'erreur et de sa cause.

A votre bon coeur, M'sieur-dame!