Bonjour tout le monde...
Je suis actuellement entrain de développer une première application à l'aide de JSP.. J'utilise TOMCAT 5.5 et MYSQL 5 installés tout les deux en local et JDK 5..

Au départ pas de problème de déployment, j'arrivais à faire des connexions via jdbc en incluant le code de connection dans chaque page jsp. Du style, j ai une page connectionClient.jsp avec le code suivant:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<%
//Declaration des variables
String identifiantCh = request.getParameter("identifiant"), motDePasseCh = request.getParameter("motDePasse");
boolean isPresent = false;
int idClient=0;
 
//Connexion a la base de donnees
Class.forName("com.mysql.jdbc.Driver");
        java.sql.Connection cnx = java.sql.DriverManager.getConnection(urlbase, login, pwd);
 
java.sql.Statement requete = cnx.createStatement();
ResultSet rs = requete.executeQuery("SELECT * FROM client");
 
//Suite du traitement
Maintenant, ce qu je voudrais c'est créer un ContextListener qui me charge intialement le driver jdbc de la base afin de supprimer de chaque page jsp l'appel systématique à la ligne de code suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Class.forName("com.mysql.jdbc.Driver");
Donc pour cela j ai creer une classe MonListener comme suit:
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
package src;
import java.sql.*;
import javax.servlet.*;
 
public class MonListener implements ServletContextListener{
//Methodes a implementer declaree dans l'interface ServletContextListener
public void contextInitialized(ServletContextEvent sce){
try{
   ServletContext application = sce.getServletContext();
   String pilote = application.getInitParameter("pilote"); 
   Class.forName(pilote);
}catch(Exception e){
}//trycatch
}//contextInitialized
 
public void contextDestroyed(ServletContextEvent sce){
//instructions executees a l'arret de l'application
}//contextDestroyed
}//class MonListener
et j'ai créé le fichier web.xml suivant:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
<? xml version="1.0" encoding="ISO-8859-1"?>
<web-app 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/web-app_2_4.xsd"
    version="2.4">
<context-param>
<param-name>pilote</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
</context-param>
<listener>
<listener-class>.MonListener</listener-class>
</listener>
</web-app>
Soit je place le fichier web.xml en dehors de mon dossier WEB-INF de mon application sachant que WEB-INF contient un dossier "/classes/src/*.class".
Lorsque je veux acceder à ma page connexionClient.jsp, j'obtiens cette erreur:

org.apache.jasper.JasperException: Impossible de compiler la classe pour la JSP:

Une erreur s'est produite à la ligne: 18 dans le fichier jsp: /connexionClient.jsp
The local variable pilote may not have been initialized
15: //Connexion a la base de donnees
16: //Class.forName("com.mysql.jdbc.Driver");
17:
18: String pilote = application.getInitParameter(pilote);
19:
20: java.sql.Connection cnx = java.sql.DriverManager.getConnection(urldatabase, login, lot de passe);
21: //String bd = application.getInitParameter("baseDeDonnees");


Stacktrace:
org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:85)
org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:435)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:298)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:277)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:265)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:564)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:299)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
Soit je place le fichier web.xml mais Tomcat m'envoie cette erreur au moment du déployement:
ECHEC - L'application pour le chemin de contexte /papeterie n'a pas puêtredémarrée
Voici l'erreur en détail dans le fichier manager.log:

4 août 2007 11:31:20 org.apache.tomcat.util.digester.Digester fatalError
GRAVE: Parse Fatal Error at line 1 column 3: The processing instruction must begin with the name of the target.
org.xml.sax.SAXParseException: The processing instruction must begin with the name of the target.
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLScanner.scanPI(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDispatcher.dispatch(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1562)
at org.apache.catalina.startup.ContextConfig.applicationWebConfig(ContextConfig.java:352)
at org.apache.catalina.startup.ContextConfig.start(ContextConfig.java:1044)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:261)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4148)
at org.apache.catalina.manager.ManagerServlet.start(ManagerServlet.java:1176)
at org.apache.catalina.manager.HTMLManagerServlet.start(HTMLManagerServlet.java:542)
at org.apache.catalina.manager.HTMLManagerServlet.doGet(HTMLManagerServlet.java:105)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
at java.lang.Thread.run(Unknown Source)
4 août 2007 11:31:20 org.apache.catalina.startup.ContextConfig applicationWebConfig
GRAVE: Erreur d'évaluation (parse) dans le fichier web.xml de l'application à jndi:/localhost/papeterie/WEB-INF/web.xml
org.xml.sax.SAXParseException: The processing instruction must begin with the name of the target.
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1562)
at org.apache.catalina.startup.ContextConfig.applicationWebConfig(ContextConfig.java:352)
at org.apache.catalina.startup.ContextConfig.start(ContextConfig.java:1044)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:261)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4148)
at org.apache.catalina.manager.ManagerServlet.start(ManagerServlet.java:1176)
at org.apache.catalina.manager.HTMLManagerServlet.start(HTMLManagerServlet.java:542)
at org.apache.catalina.manager.HTMLManagerServlet.doGet(HTMLManagerServlet.java:105)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
at java.lang.Thread.run(Unknown Source)
4 août 2007 11:31:20 org.apache.catalina.startup.ContextConfig applicationWebConfig
GRAVE: S'est produite à la ligne 1 colonne 3
4 août 2007 11:31:20 org.apache.catalina.startup.ContextConfig start
GRAVE: Cette application est marquée comme non disponible suite aux erreurs précédentes
4 août 2007 11:31:20 org.apache.catalina.core.StandardContext start
GRAVE: Error getConfigured
4 août 2007 11:31:20 org.apache.catalina.core.StandardContext start
GRAVE: Erreur de démarrage du contexte [/papeterie] suite aux erreurs précédentes