IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Servlets/JSP Java Discussion :

[DEBUTANT]Problème de deployement avec web.xml


Sujet :

Servlets/JSP Java

  1. #1
    Membre actif Avatar de kore62
    Profil pro
    Inscrit en
    Août 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 222
    Points : 205
    Points
    205
    Par défaut [DEBUTANT]Problème de deployement avec web.xml
    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

  2. #2
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    GRAVE: Parse Fatal Error at line 1 column 3: The processing instruction must begin with the name of the target.
    GRAVE: Erreur d'évaluation (parse) dans le fichier web.xml de l'application à jndi:/localhost/papeterie/WEB-INF/web.xml
    Comme l'indiquent les messages d'erreurs, il y a un problème de parsing du web.xml.
    En fait, il y a une erreur à la ligne 1 colonne 3 dans le web.xml.
    Il faut enlever le blanc en colonne 3 et donc coder la première ligne du web.xml comme ceci :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    <?xml version="1.0" encoding="ISO-8859-1"?>

  3. #3
    Membre actif Avatar de kore62
    Profil pro
    Inscrit en
    Août 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 222
    Points : 205
    Points
    205
    Par défaut
    Je vous remercie pour cette réponse rapide. C'est agréable de voir qu'on peut être aidé.. merci encore.

    Certes cette erreur est stupide mais un autre problème doit entrer en jeu.

    J'obtiens un nouveau log comme celui-ci aprés la correction du web.xml:

    4 août 2007 14:13:45 org.apache.catalina.core.StandardContext start
    GRAVE: Error listenerStart
    4 août 2007 14:13:45 org.apache.catalina.core.StandardContext start
    GRAVE: Erreur de démarrage du contexte [/papeterie] suite aux erreurs précédentes
    Pas trés clair ce log... Je vois vraiment pas d'où vient cette erreur.
    Au niveau de la balise Listener je dois préciser ".MonListener" ou ".src.Monlistener"? (sachant que le .class MonListener.class se situe dans "WEB-INF/classes/src")

  4. #4
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Essaie plutôt :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <listener>
       <listener-class>src.MonListener</listener-class>
    </listener>

  5. #5
    Membre actif Avatar de kore62
    Profil pro
    Inscrit en
    Août 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 222
    Points : 205
    Points
    205
    Par défaut
    Désolé Toujours le même log que précedemment. Je remets le contenu du fichier 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
    <?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/web-app_2_4.xsd"
        version="2.4">
    <display-name>papeterie</display-name>
    <context-param>
    <param-name>pilote</param-name>
    <param-value>org.gjt.mm.mysql.Driver</param-value>
    </context-param>
    <context-param>
    <param-name>baseDeDonnees</param-name>
    <param-value>jdbc:mysql://localhost/papeterie</param-value>
    </context-param>
    <listener>
    <listener-class>src.MonListener</listener-class>
    </listener>
    </web-app>
    J'ai un log peut ête plus détaillé:
    4 août 2007 14:34:22 org.apache.catalina.core.StandardContext start
    GRAVE: Error listenerStart
    4 août 2007 14:34:22 org.apache.catalina.core.StandardContext start
    GRAVE: Erreur de démarrage du contexte [/papeterie] suite aux erreurs précédentes
    4 août 2007 14:34:22 org.apache.coyote.http11.Http11BaseProtocol start
    INFO: Démarrage de Coyote HTTP/1.1 sur http-8080
    4 août 2007 14:34:22 org.apache.jk.common.ChannelSocket init
    INFO: JK: ajp13 listening on /0.0.0.0:8009
    4 août 2007 14:34:22 org.apache.jk.server.JkMain start
    INFO: Jk running ID=0 time=0/15 config=null
    4 août 2007 14:34:22 org.apache.catalina.storeconfig.StoreLoader load
    INFO: Find registry server-registry.xml at classpath resource
    4 août 2007 14:34:22 org.apache.catalina.startup.Catalina start
    INFO: Server startup in 1109 ms

  6. #6
    Membre actif Avatar de kore62
    Profil pro
    Inscrit en
    Août 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 222
    Points : 205
    Points
    205
    Par défaut
    J'ai redemarrer Tomcat...
    Bon j'ai relancé mon fichier Ant une seconde fois en ayant fermé tous les navigateurs appelant mon appliweb... Et ca fonctionne!!

    Peut être un probleme d'actualisation... Pourtant mon fichier ant redemarre l'application automatiquement.
    Si vous avez une idee sur la question expliquer moi..

    En tout cas merci c_nvy pour votre aide...
    Enfin un forum où l'on est pas pris pour des taches quand on debute dans une nouvelle technologie..

  7. #7
    Membre actif Avatar de kore62
    Profil pro
    Inscrit en
    Août 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 222
    Points : 205
    Points
    205
    Par défaut Obligation de redemarrer Tomcat a chaque relance de l'applicaion web...
    Quand je modifie mon web.xml pourquoi suis-je obligé de redemarrer Tomcat pour que mon Ant soit appliqué avec succés?

    Sinon j obtiens le log avec le listener... Quelqu'un sait?
    (Sachant que j 'avais deja une fenetre ouverte avec l'ancienne version de la webapplication utilisant le web.xml d'origine comme precedemment).

  8. #8
    Membre averti Avatar de Philcmoi
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 666
    Points : 412
    Points
    412
    Par défaut
    A mon hymble avis, c'est normal. ton site (application web) a besoin pour fonctionner de tomcat. Si tu coupe le site, tomcat coupe si je me trompe pas automatiquement le context de l'appication web. En fait pour faire tourner un site web il faut jammais l'arreter sur ton serveur.
    voila j'espère t'avoir éclairer. Moi aussi quand je coupe mon site web, je doit arreter ou arreter le context (la partie réservée a telle application web de mon serveur d'application.

  9. #9
    Membre averti Avatar de Philcmoi
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 666
    Points : 412
    Points
    412
    Par défaut
    A autre chose, ne mets pas dans une jsp le code de connection à ta basse de donnée car avec un "ouvrir la source" on verra tout ton code.

  10. #10
    Membre actif Avatar de kore62
    Profil pro
    Inscrit en
    Août 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 222
    Points : 205
    Points
    205
    Par défaut
    Merci pour cette precsion. En ce qui concerne le code dans la jsp.. c'est juste un essai, je voulais tester les listener avec une connection jdbc... Merci pour la remarque, j 'en tiendrais compte à l'avenir.

    Bon ben c'est résolu!

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 376
    Points : 431
    Points
    431
    Par défaut
    Citation Envoyé par Philcmoi
    A autre chose, ne mets pas dans une jsp le code de connection à ta basse de donnée car avec un "ouvrir la source" on verra tout ton code.
    Ben non. C'est certes sale, mais je ne vois pas de problème niveau sécurité, en tout cas pas plus que pour une servlet. Le code vu sera le code HTML, qui ne comportera évidemment aucun code relatif à la BDD.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [EAR] Problème JBoss avec web.xml
    Par toufik3119 dans le forum Java EE
    Réponses: 2
    Dernier message: 07/08/2011, 22h24
  2. [DEBUTANT] Problème de lecture avec un fscanf
    Par Pingouin dans le forum C
    Réponses: 26
    Dernier message: 28/05/2006, 18h10
  3. Pb avec web.xml et taglib
    Par Kpone dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 20/03/2006, 11h59
  4. [Tomcat]probleme avec web.xml
    Par The_freeman dans le forum Tomcat et TomEE
    Réponses: 6
    Dernier message: 25/01/2006, 22h32
  5. [Tomcat] Problème avec web.xml
    Par hichamus dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 01/03/2005, 16h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo