Bonjour,
j'essaie de créer, à titre d'exercice, une servlet se connectant à une base de données MYSQL et qui affiche le contenu d'une table à l'écran. Or, je n'arrive pas à me connecter à la base, alors que lorsque j'utilise le même driver dans une classe plus classique, je n'ai aucun problème.
J'ai tenté de m'inspirer de ce qu'il y avait sur le forum et dans le tutoriel http://tomcat.apache.org/tomcat-5.5-...ces-howto.html mais je n'ai pas résolu mon problème, d'autant qu'il semble qu'à chaque nouvelle version d'Apache, les règles de configuration changent.
Tout d'abord, voici les caractéristiques de développement de ma servlet :
- Windows XP
- Java EE 5 SDK
- Apache Tomcat 5.5.28
- MySQL 5.1.36
- Eclipse Galileo
J'ai tout d'abord mis le driver mysql-connector-java-5.1.10-bin dans $CATALINA\common\lib.
J'ai ensuite créé un nouveau projet Projet Web dynamique dans Eclipse que j'ai intitulé EssaiConnexion.
J'ai créé une classe Essai.java dans le package test, ma servlet, qui ne fait que se connecter à la base javatest et affiche le contenu de la table testdata.
Dans le répertoire META-INF, j'ai créé le fichier context.xml, qui contient les informations suivantes :
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 package test; import java.io.IOException; import javax.naming.Context; import javax.naming.InitialContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.sql.DataSource; import com.mysql.jdbc.Connection; /** * Servlet implementation class Essai */ public class Essai extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try{ Context initCtx = new InitialContext(); Context envCtx = (Context) initCtx.lookup("java:comp/env"); DataSource ds = (DataSource) envCtx.lookup("jdbc/Essai"); Connection conn = (Connection) ds.getConnection(); // à compléter conn.close(); } catch(Exception e){ e.printStackTrace(); } } }
[NB : j'ai un avertissement Eclipse car il n'y a ni DTD ni schema associé, mais je ne pense pas que ce soit la cause du problème. Ceci dit, si quelqu'un peut me dire comment éviter cet avertissement, je suis preneuse.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <?xml version="1.0" encoding="UTF-8"?> <Context> <Resource name="jdbc/Essai" auth="Container" type="javax.sql.DataSource" username="toto" password="sesame" driverClassName="com.mysql.jdbc.Driver" url="com.mysql.jdbc.Driver" maxActive="8" maxIdle="4"/> </Context>
Par ailleurs, que mettre dans l'attribut auth - c'est l'auteur de quoi qu'il faut renseigner ?
Enfin, les informations ci-dessus sont-elles complètes ?]
J'ai également modifié le fichier web.xml en ajoutant les lignes ci-dessous sous la balise <web-app>
Quand j'essaie d'exécuter, j'obtiens les erreurs suivantes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <resource-ref> <description> Lien vers la base javatest </description> <res-ref-name> jdbc/Essai </res-ref-name> <res-type> javax.sql.DataSource </res-type> <res-auth> Container </res-auth> </resource-ref>
J'ai ensuite ajouté C:\apache-tomcat-5.5.28\common\lib\mysql-connector-java-5.1.10-bin.jar au CLASSPATH de Windows, mais cela n'a rien changé...
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 org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class 'com.mysql.jdbc.Driver' for connect URL 'com.mysql.jdbc.Driver' at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1150) at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880) at test.Essai.doGet(Essai.java:32) at javax.servlet.http.HttpServlet.service(HttpServlet.java:627) at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 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:213) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172) 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:174) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:873) 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:689) at java.lang.Thread.run(Unknown Source) Caused by: java.sql.SQLException: No suitable driver at java.sql.DriverManager.getDriver(Unknown Source) at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1143) ... 18 more
Merci par avance de votre aide et de votre indulgence :-)
Partager