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 :

comment utiliser include d'un fichier de connexion jsp


Sujet :

Servlets/JSP Java

  1. #1
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 104
    Points : 70
    Points
    70
    Par défaut comment utiliser include d'un fichier de connexion jsp
    Salut a tous,
    Bon voila j'ai une page conn.jsp pour établir une connexion a la base donne oracle
    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
     
    <%
     
    try{
            String driverVal = "oracle.jdbc.driver.OracleDriver";
                    Class.forName(driverVal).newInstance();
                    String connectStr = "jdbc:oracle:thin:@127.0.0.1:1521:test";
                    java.sql.Connection conn = DriverManager.getConnection(connectStr, "test","test");
                    
              }
    catch (SQLException esql){
                    out.print("<strong>Erreur base des donn&eacute;es!</strong><br>"+esql.toString()+"<br>");
            }catch (ClassNotFoundException ei){
                    out.print("<strong>Erreur de chargement de driver :</strong><br>"+ei.toString()+"<br>");
            }
    catch (Exception e){
                    out.print("<strong>Erreur :</strong><br>"+e.toString()+"<br>");
            }
    %>
    je dois appeler cette dérnière dans d'autre page avec <%@ include file="conn.jsp" %>

    mon probleme c'est comment faire dans les autres pages comment utiliser les reqêtes quel parametre devrais je appeler ou ne pas appeler!
    pour le moment je fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    String nom=request.getParameter("nom"); 
    String pwd=request.getParameter("pwd"); 
    String typ=request.getParameter("typ"); 
    String q=" select * from LOGIN where LOGIN ='"+nom+"' and PWD='"+pwd+"' and   TYPE ='"+typ+"'  ";
    Statement s=conn.createStatement();
    ResultSet rs=s.executeQuery(q);
    mais conn n'est pas reconnu puisqu'elle n'est pas déclaré dans ce fichier !
    Comment faire SVP !

  2. #2
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Je te suggère de passer par des servlets pour effectuer des accès bases, la logique de présentation ne doit faire que de la présentation.
    Vous avez peut être hâte de réussir et il n'y a rien de mal à cela...
    mais la patience est aussi une vertu; l'échec vous l'enseignera certainement..."

  3. #3
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 104
    Points : 70
    Points
    70
    Par défaut
    je pourrait pas faire de cette façon? au moins pour le moment!

    sinon pour faire une servlet je procede comment?
    j'ai ça mais je ne c'est pas quoi faire par suite :

    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
     
    import java.sql.*;
    import javax.swing.*;
     
    public class ConnectionMysql {
    Connection connec;
    String chaineconnexion = "jdbc:oracle:thin:@127.0.0.1:1521:test";
    String login = "test";
    String pass = "test";
     
    public Connection getConnec() throws Throwable {
    Class.forName("oracle.jdbc.driver.OracleDriver");
    return DriverManager.getConnection(chaineconnexion, login, pass);
    }
    }

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Quelle est la demande au juste ?
    Tu veux partager une connexion entre les différentes pages JSP pendant le cycle de rendu ou autre chose ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 104
    Points : 70
    Points
    70
    Par défaut
    Je voudrais pouvoir me connecter a la base de donne en appelant un fichier et ne pas avoir a chaque fois et dans chaque page jsp à écrire
    ...
    try{
    String driverVal = "oracle.jdbc.driver.OracleDriver";
    Class.forName(driverVal).newInstance();
    String connectStr = "jdbc:oracle:thin:@127.0.0.1:1521:test";
    java.sql.Connection conn = DriverManager.getConnection(connectStr, "test","test");

    ......

    C'est tout!

  6. #6
    Débutant
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 268
    Points : 139
    Points
    139
    Par défaut
    oui le principe est bon ..

  7. #7
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 104
    Points : 70
    Points
    70
    Par défaut
    d'accord mais comment faire?

  8. #8
    Débutant
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 268
    Points : 139
    Points
    139
    Par défaut
    tu as deux solutions , soit faire l'appel à ta connexion dans la servlet et puis aller chercher ce que tu as besoin et le mettre dans la request ou session puis rediriger sur la jsp qui affichera ce que tu auras mis dedans.

    Soit faire la connexion dans la jsp en appelant ta classe de connexion dans une scriptlet.

  9. #9
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 104
    Points : 70
    Points
    70
    Par défaut
    Ok, est ce que c'est comme ça que doit creer la servelet?:

    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
     
    import java.io.*;
    import java.sql.*;
    import java.util.*;
     
    public class connexion {
    	public static void conn(String requete){
    	try{
    		Connection conn = null;
            String driverVal = "oracle.jdbc.driver.OracleDriver";
       		Class.forName(driverVal).newInstance();
    		String connectStr = "jdbc:oracle:thin:@127.0.0.1:1521:cshr";
    		conn = DriverManager.getConnection(connectStr, "cshr","cshr");
    		stmt = conn.createStatement();
    		rs1 = stmt.executeQuery(requete);
    	  }
    catch (SQLException esql){
    		System.out.print("<strong>Erreur base des donn&eacute;es!</strong><br>"+esql.toString()+"<br>");
    	}catch (ClassNotFoundException ei){
    		System.out.print("<strong>Erreur de chargement de driver :</strong><br>"+ei.toString()+"<br>");
    	}
    catch (Exception e){
    		System.out.print("<strong>Erreur :</strong><br>"+e.toString()+"<br>");
    	} 
    	}
    }
    en passant la requête en paramètre?
    et puis dans la page jsp je fais quoi au juste?

    <SERVLET NAME="connexion" CODE="connexion.class" CODEBASE="????"
    INITPARM="???"
    >

    c'est ça? et la requête comment je la passe?

  10. #10
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Ce n'est pas une façon bien propre de procéder.
    En l'occurrence, même si tu créais une classe utilitaire pour l'acquisition d'une connexion, le problème est que tu n'as pas besoin d'acquérir une nouvelle connexion pour une deuxième page jsp, la première peut toujours servir.
    Plus généralement, dans un contexte web, on peut dire que la connexion doit être libérée en fin de phase de rendu (une fois la réponse intégralement envoyée au client).
    Tu pourrais donc utiliser la classe ThreadLocal pour stocker la connexion dans le thread de la requete et l'utiliser tout au long du process (en noubliant pas de la libérer à la destruction du thread).
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 104
    Points : 70
    Points
    70
    Par défaut
    Citation Envoyé par OButterlin Voir le message
    Tu pourrais donc utiliser la classe ThreadLocal pour stocker la connexion dans le thread de la requete et l'utiliser tout au long du process (en noubliant pas de la libérer à la destruction du thread).
    jusqu'à ici je suis perdu comme tu peut voir je ne suis pas forte en ce qui est java du web !

  12. #12
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Ci-joint un exemple de ce que tu peux faire
    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
     
    package com.obia.utils;
     
    import java.sql.Connection;
    import java.sql.DriverManager;
     
    public class ConnectionUtils 
    {
        private static ThreadLocal<Connection> session = new ThreadLocal<Connection>();
     
        /**
         * Acquisition d'une connexion
         */
        public static Connection getConnection()
        {
            Connection connection = null;
            try
            {
                connection = session.get();
                if (connection == null)
                {
                    connection = createConnection();
                    session.set(connection);
                }
            }
            catch (Exception e) {}
            return connection;
        }
     
        /**
         * Fermeture de la connexion
         */
        public static void closeConnection()
        {
            try
            {
                Connection connection = session.get();
                if (connection != null) connection.close();
            }
            catch (Exception e) {}
        }
     
        /**
         * Création d'une connexion
         */
        private static Connection createConnection() throws Exception
        {
            System.out.println("ThreadLocal " + session.hashCode() + " créé");
            Class.forName("org.gjt.mm.mysql.Driver");
            return DriverManager.getConnection("jdbc:mysql:///maDB", "user", "password");
        }
    }
    Au niveau de tes pages JSP, tu n'as qu'à faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ...
    <%
    Connection connection = ConnectionUtils.getConnection();
    ...
    %>
    ...
    Si une page fait un include d'une autre, la deuxième récupérera la même connexion que la première.
    Il faudra faire attention de bien placer la fermeture de la connexion dans la première page, après traitement des "include".

    Idéalement, pour que les connexions soient fermée sans te poser de question, il faudrait passer par un Filtre pour qu'à la fin du cycle request/response tu puisses fermer la connexion via la classe utilitaire.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  13. #13
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 104
    Points : 70
    Points
    70
    Par défaut
    Je vois, merci infiniment
    juste une dernière question :
    quand tu dis : Il faudra faire attention de bien placer la fermeture de la connexion dans la première page, après traitement des "include".
    est ce que tu veux dire que après avoir utilisé un truc comme ça?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Connection connection = ConnectionUtils.getConnection();
    rs= stmt.executeQuery("select * from machin");
    while (rs.next()) {..... }
    connection = ConnectionUtils.closeConnection();

  14. #14
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Petit exemple simple
    page1.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
     
    ...
    <%
    Connection connection = ConnectionUtils.getConnection();
    Statement stmt = connection.createStatement();
    ResultSet rs = stmt.executeQuery("...");
    while (rs.next())
    {
       ...
    }
    %>
    ...
    // Include d'un code complémentaire
    <jsp:include page="page2.jsp"/>
    ...
     
    // Fin de traitement de la page
    <%
    ConnectionUtils.closeConnection();
    %>
    page2.jsp (ici, on ne ferme pas la connexion puisqu'elle est gérée par page1.jsp)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    ...
    <%
    Connection connection = ConnectionUtils.getConnection();
    Statement stmt = connection.createStatement();
    ResultSet rs = stmt.executeQuery("...");
    while (rs.next())
    {
       ...
    }
    %>
    Comme tu peux le constater, ce n'est pas terrible, il faut être sûr lors de la conception du fragment "page2.jsp" que cette page sera TOUJOURS incluse dans une autre qui gèrera la connexion (le problème concerne la fermeture).

    Avec un filtre, tu déporterais la fermeture à la fin du traitement request/response, ce qui éviterait d'avoir à se poser la question du "où dois-je fermer ma connexion".

    Le filtre pourrait ressembler à ceci
    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
     
    public class ConnectionFilter implements Filter
    {
        public void init(FilterConfig filterConfig) throws ServletException {}
        public void destroy() {}
     
        /**
         * Filtrage de la requête http
         */
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
        {
            try
            {
                chain.doFilter(request, response);
            }
            catch (Throwable t)
            {
                System.out.println("doFilter error : " + t.toString());
            }
            finally
            {
                ConnectionUtils.closeConnection();
            }
        }
    }
    Le fichier web.xml devra préciser ce qui est traité par le filtre (ici, tout ce qui se termine par .do)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    ...
        <filter>
            <filter-name>ConnectionFiltre</filter-name>
            <filter-class>com.obia.ConnectionFilter</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>ConnectionFiltre</filter-name>
            <url-pattern>*.do</url-pattern>
        </filter-mapping>
    ...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  15. #15
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 104
    Points : 70
    Points
    70
    Par défaut
    Okey un grand merci OButterlin c'est gentil ton exemple est assez simple
    Merci aussi a tout les autres qui m'ont répondu!

Discussions similaires

  1. Comment utiliser JAXB avec un fichier properties?
    Par sofien dans le forum Persistance des données
    Réponses: 0
    Dernier message: 24/02/2010, 12h28
  2. [Tableaux] comment utiliser "include"
    Par kill-666 dans le forum Langage
    Réponses: 1
    Dernier message: 27/09/2007, 10h35
  3. Comment utiliser session_start() dans un fichier inclus
    Par nicolas2603 dans le forum Langage
    Réponses: 7
    Dernier message: 25/01/2007, 16h00
  4. [C#][Mysql]Comment utiliser plusieurs dataset sur la même connexion
    Par Invité dans le forum Accès aux données
    Réponses: 3
    Dernier message: 05/12/2006, 09h30
  5. Réponses: 8
    Dernier message: 28/01/2005, 08h28

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