Flux rss
Collection CommentÇaMarche.net
Rechercher : dans
Par :

[java] probleme quand je fais des methodes

karine, le lundi 2 mai 2005 à 14:15:01 
 Signaler ce message aux modérateurs

Bonjour,

le code que j'ai fait marche nickel (c'est un proxy).
Mais je me dit que ça serait mieux si je le découpais en méthodes pour que ce soit plus clair.

Je mets donc un bout du code dans une méthode et là ça marche plus (pas de bug à l'execution mais les pages ne s'affichent plus correctement)!!

Est-ce que ça vous est déjà arrivé ? Que dois-je faire ?

Merci

1

Edoc, le lundi 2 mai 2005 à 14:17:48

Salut
tu devrais mettre des bouts de code stp.

peut-etre que tu passes des mauvais parametres, ou que tu ne retournes pas la bonne valeur?

Répondre à Edoc

2

karine, le lundi 2 mai 2005 à 14:26:16

Ok, avant j'avais ça :

class Clients extends Thread {
    private Socket client;
    private Statement stmt;
    private int numero;
    private InputStream sin;
    private OutputStream sout;
    public static int port = 80;
    private static String query;
    
    public Clients(Socket client, Statement stmt, int numero){
        try{
            this.client = client;
	    this.stmt = stmt;
	    this.numero = numero;
            start();
        }
        catch (Exception e){System.err.println(e);}
    } // !constructeur
    
    public void run(){
        try{
sin = client.getInputStream();
BufferedReader from_client = new BufferedReader(new InputStreamReader(sin));
sout = client.getOutputStream();
         	    
	    Socket socket = new Socket();
      	   
	    String tmp;
	    boolean fini = false;
	    int position;
    	    int cle = 0;
    	    String url = "";
            String requete = "";
            String user_agent = "";
            String host_client = "";
            String referer = "";
    
	    
	    /*********************************************/ 
	    /* PARTIE TRAITEMENT DE LA REQUETE DU CLIENT */
	    /*********************************************/
	    
            // Lecture de la requete du client
            while (((tmp = from_client.readLine()) != null) && !fini){
	    	System.out.println(tmp);
		
		String regex0 = "^(GET|POST) +(http[^ ]+) +HTTP/(.\\..)$";
		Pattern p0 = Pattern.compile(regex0);
		Matcher m0 = p0.matcher(tmp);
		while (m0.find()){
			for (int i=0; i <= m0.groupCount(); i++){
				System.out.println("Groupe " + i + " : " + m0.group(i));
			}
				
		
		// On récupère la dernière valeur ID ajoutée dans la base
		int cle_avant = 0;
		
		query = "SELECT MAX(ID) FROM traces_clients";
		ResultSet result = stmt.executeQuery(query);
		while ( result.next() )
 		{
 			cle_avant = result.getInt(1);
		}
		
		cle = cle_avant + 1;
		
		query = "INSERT INTO traces_clients(ID,chaine_entiere,methode,URL,norme_HTTP) VALUES ('" + cle + "', '" + m0.group(0) +  "', '" +  m0.group(1) + "', '" + m0.group(2) + "', '" + m0.group(3) + "')";
		stmt.executeUpdate(query);
		}
		
		
                if (tmp.trim().toUpperCase().startsWith("GET")) {
                    position = tmp.trim().toUpperCase().lastIndexOf("HTTP") > 0 ? tmp.toUpperCase().lastIndexOf("HTTP") : tmp.length();
                    url = tmp.trim().substring(11,position-2).trim();
		    requete = tmp;
		    
                } else if (tmp.trim().toUpperCase().startsWith("HEAD") || tmp.trim().toUpperCase().startsWith("POST")) {
				position = tmp.trim().toUpperCase().lastIndexOf("HTTP") > 0 ? tmp.toUpperCase().lastIndexOf("HTTP") : tmp.length();
                    		url = tmp.trim().substring(12,position-2).trim();
				requete = tmp;
			}
		
		// il faut recuperer le User-Agent, le Host et le Referer
		String regex = "^User-Agent: +(.*\\))$";
		Pattern p = Pattern.compile(regex);
		Matcher m = p.matcher(tmp);
		while (m.find()){
			user_agent = m.group(0);
			query = "UPDATE traces_clients SET User_Agent = '" + m.group(1) + "' WHERE ID = " + cle;
			stmt.executeUpdate(query);
		}
		
		String regex2 = "^Host: +(.*)";
		Pattern p2 = Pattern.compile(regex2);
		Matcher m2 = p2.matcher(tmp);
		while (m2.find()){
			host_client = m2.group(1);
		}
		
		String regex3 = "^Referer: +(.*)";
		Pattern p3 = Pattern.compile(regex3);
		Matcher m3 = p3.matcher(tmp);
		while (m3.find()){
			referer = m3.group(1);
		}
		
		// On arrete de lire quand il n'y a plus rien à lire
		String regex4 = "^[a-zA-Z]";
		Pattern p4 = Pattern.compile(regex4);
		Matcher m4 = p4.matcher(tmp);
		if (!m4.find()) {
			fini = true;
			System.out.println("fini " + fini);
			break;
		}
		
            }
       
            System.out.println("Url demandée : " + url + "\n");
	    
	    
	   
	        /***********************************/ 
		/* PARTIE CONNEXION AU SERVEUR WEB */
		/***********************************/
		
	        // Creation de la socket entre le proxy et le serveur Web
	        if (host_client != "") {
			socket = new Socket(InetAddress.getByName(host_client),port);
			System.out.println("socket créé");
		}
		else if (referer != ""){
			socket = new Socket(InetAddress.getByName(referer),port);
			System.out.println("socket créé");
		} else {
			socket = new Socket(InetAddress.getByName(url),port);
			System.out.println("socket créé");
		}
		
		
		PrintStream sortant = new PrintStream(socket.getOutputStream());
		
		// On envoie au serveur Web la requete du client
		if (host_client != "") {
			System.out.println(requete + user_agent + "\r\n" + "Host: " + host_client + "\r\n" + "Pragma: no-cache" + "\r\n" + "Cache-control: no-cache" + "\r\n");
			sortant.println(requete + user_agent+ "\r\n" + "Host: " + host_client + "\r\n" + "Pragma: no-cache" + "\r\n" + "Cache-control: no-cache" + "\r\n");
			
		} else {
			System.out.println(requete + "\r\n" + user_agent + "\r\n" + "Pragma: no-cache" + "\r\n" + "Cache-control: no-cache" + "\r\n");
			sortant.println(requete + user_agent + "\r\n" + "Pragma: no-cache" + "\r\n" + "Cache-control: no-cache" + "\r\n");
			
		}
            	
		
		
		/**************************************/
            	// Lecture de la réponse du serveur Web
		/**************************************/
		
		PrintStream sout = new PrintStream(client.getOutputStream());
		System.out.println("sout");
		InputStream entrant = socket.getInputStream();
		System.out.println("entrant");
		System.out.println("Lecture de la réponse du serveur ...");
		
		byte [] buffer = new byte[4096];
            	int lus;
		String ligne = "";
		
			
		// on lit byte par byte la réponse du serveur Web et on l'envoie au client
		while ((lus = entrant.read(buffer)) != -1) {	
			
			sout.write(buffer,0,lus);
			
		}
			
		
		sout.close(); 
		socket.close();
		System.out.println("socket.close();");
client.close();
		
	}
        catch (Exception e){System.err.println(e);}
    } // ! run() method
	    
} // ! Clients class



Après j'ai transformé comme ça :
class Clients extends Thread {
    private Socket client;
    private static Statement stmt;
    private int numero;
    private InputStream sin;
    private OutputStream sout;
    public static int port = 80;
    private static String query;
    private static int cle;
    private static String url = "";
    private static String requete = "";
    private static String user_agent = "";
    private static String host_client = "";
    private static String referer = "";
	    
    public Clients(Socket client, Statement stmt, int numero){
        try{
            this.client = client;
	    this.stmt = stmt;
	    this.numero = numero;
            start();
        }
        catch (Exception e){System.err.println(e);}
    } // !constructeur
    
    public void run(){
        try{
            
           // sout = client.getOutputStream();
         	    
	    Socket socket = new Socket();
      	   
	    String tmp;
	   
	 
	    /*********************************************/ 
	    /* PARTIE TRAITEMENT DE LA REQUETE DU CLIENT */
	    /*********************************************/
	        System.out.println("appel lire_requete_client(client)" + client);
                lire_requete_client(client);
		System.out.println("retour lire_requete_client(client)" + client);
            	
	        
	        /***********************************/ 
		/* PARTIE CONNEXION AU SERVEUR WEB */
		/***********************************/
		System.out.println("connexion serveur web");
	        // Creation de la socket entre le proxy et le serveur Web
	        if (host_client != "") {
			socket = new Socket(InetAddress.getByName(host_client),port);
			System.out.println("socket créé");
		}
		else if (referer != ""){
			socket = new Socket(InetAddress.getByName(referer),port);
			System.out.println("socket créé");
		} else {
			System.out.println("avant");
			socket = new Socket(InetAddress.getByName(url),port);
			System.out.println("socket créé");
		}
		
		
		PrintStream sortant = new PrintStream(socket.getOutputStream());
		
		// On envoie au serveur Web la requete du client
		if (host_client != "") {
			System.out.println(requete + user_agent + "\r\n" + "Host: " + host_client + "\r\n" + "Pragma: no-cache" + "\r\n" + "Cache-control: no-cache" + "\r\n");
			sortant.println(requete +"\r\n"+ user_agent+ "\r\n" + "Host: " + host_client + "\r\n" + "Pragma: no-cache" + "\r\n" + "Cache-control: no-cache" + "\r\n");
			
		} else {
			System.out.println(requete + "\r\n" + user_agent + "\r\n" + "Pragma: no-cache" + "\r\n" + "Cache-control: no-cache" + "\r\n");
			sortant.println(requete + "\r\n"+user_agent + "\r\n" + "Pragma: no-cache" + "\r\n" + "Cache-control: no-cache" + "\r\n");
			
		}
            	
		
		
		/**************************************/
            	// Lecture de la réponse du serveur Web
		/**************************************/
		
		PrintStream sout = new PrintStream(client.getOutputStream());
		System.out.println("sout");
		InputStream entrant = socket.getInputStream();
		System.out.println("entrant");
		System.out.println("Lecture de la réponse du serveur ...");
		
		byte [] buffer = new byte[4096];
            	int lus;
		String ligne = "";
		
			
		// on lit byte par byte la réponse du serveur Web et on l'envoie au client
		//BufferedReader bin = new BufferedReader(new InputStreamReader(entrant));
		while ((lus = entrant.read(buffer)) != -1) {	
			
			sout.write(buffer,0,lus);
			
		}
			
		
		sout.close(); 
		socket.close();
		System.out.println("socket.close();");
		
client.close();
		System.out.println("client.close");
	}
        catch (Exception e){System.err.println(e);}
    } // ! run() method
    
private static void lire_requete_client(Socket client){
	String tmp;
	boolean fini = false;
	int position;
	
	
	try {
		InputStream sin = client.getInputStream();
        	BufferedReader from_client = new BufferedReader(new InputStreamReader(sin));
	
		while (((tmp = from_client.readLine()) != null) && !fini){
	    		System.out.println(tmp);
		
			String regex0 = "^(GET|POST) +(http[^ ]+) +HTTP/(.\\..)$";
			Pattern p0 = Pattern.compile(regex0);
			Matcher m0 = p0.matcher(tmp);
			while (m0.find()){
				for (int i=0; i <= m0.groupCount(); i++){
					System.out.println("Groupe " + i + " : " + m0.group(i));
				}
				
		
			// On récupère la dernière valeur ID ajoutée dans la base
			int cle_avant = 0;
		
			query = "SELECT MAX(ID) FROM traces_clients";
			ResultSet result = stmt.executeQuery(query);
			while ( result.next() )
 			{
 				cle_avant = result.getInt(1);
			}
		
			cle = cle_avant + 1;
		
			query = "INSERT INTO traces_clients(ID,chaine_entiere,methode,URL,norme_HTTP) VALUES ('" + cle + "', '" + m0.group(0) +  "', '" +  m0.group(1) + "', '" + m0.group(2) + "', '" + m0.group(3) + "')";
			stmt.executeUpdate(query);
			}
		
		
                	if (tmp.trim().toUpperCase().startsWith("GET")) {
                    	position = tmp.trim().toUpperCase().lastIndexOf("HTTP") > 0 ? tmp.toUpperCase().lastIndexOf("HTTP") : tmp.length();
                    	url = tmp.trim().substring(11,position-2).trim();
		    	requete = tmp;
		    
                	} else if (tmp.trim().toUpperCase().startsWith("HEAD") || tmp.trim().toUpperCase().startsWith("POST")) {
					position = tmp.trim().toUpperCase().lastIndexOf("HTTP") > 0 ? tmp.toUpperCase().lastIndexOf("HTTP") : tmp.length();
                    			url = tmp.trim().substring(12,position-2).trim();
					requete = tmp;
				}
		
			// il faut recuperer le User-Agent, le Host et le Referer
			String regex = "^User-Agent: +(.*\\))$";
			Pattern p = Pattern.compile(regex);
			Matcher m = p.matcher(tmp);
			while (m.find()){
				user_agent = m.group(0);
				query = "UPDATE traces_clients SET User_Agent = '" + m.group(1) + "' WHERE ID = " + cle;
				stmt.executeUpdate(query);
			}
		
			String regex2 = "^Host: +(.*)";
			Pattern p2 = Pattern.compile(regex2);
			Matcher m2 = p2.matcher(tmp);
			while (m2.find()){
				host_client = m2.group(1);
			}
		
			String regex3 = "^Referer: +(.*)";
			Pattern p3 = Pattern.compile(regex3);
			Matcher m3 = p3.matcher(tmp);
			while (m3.find()){
				referer = m3.group(1);
			}
		
			// On arrete de lire quand il n'y a plus rien à lire
			String regex4 = "^[a-zA-Z]";
			Pattern p4 = Pattern.compile(regex4);
			Matcher m4 = p4.matcher(tmp);
			if (!m4.find()) {
				fini = true;
				System.out.println("fini " + fini);
				break;
			}
		
            	}
       	
            	System.out.println("Url demandée : " + url + "\n");
		
		
	} catch (Exception e){System.err.println(e);} 

} // ! lire_requete_client()
	    
} // ! Clients class

Répondre à karine

3

Edoc, le lundi 2 mai 2005 à 14:40:44

Arf... c'est un peu lourd maintenant ...desolé.

surtout quand on connait pas le code, c'est super difficile à déchiffer, et sur une page web en plus.

Il faudrait que tu mettes juste ce qui nous intéresse:

-fonctions appelees
-déclarations
-entete des fonctions
-enf ait juste ce qu'il y a d'important !

Répondre à Edoc

4

Edoc, le lundi 2 mai 2005 à 14:42:49

Il faut que tu sois sure d'avoir bien recopié le code dans tes fonctions et que les variables sont bien déclarées (tout en haut si tu en a besoin dans plusieurs fonctions)

;-)

Répondre à Edoc

5

 karine, le lundi 2 mai 2005 à 15:54:27

Merci Edoc,

J'ai tout repris depuis le début et j'ai fait bien attention pour les paramètres et ce que la fonction renvoie.

Maintenant ça marche.

Merci !

Répondre à karine
Java: Les méthodes La notion de fonction et de méthode On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instruction par simple appel de la fonction dans le corps du programme principal. Les fonctions permettent d'exécuter dans plusieurs... www.commentcamarche.net/contents/java/javafonc.php3
La méthode toString() (Résolu) Salut tout l'monde, En clair, mon problème c'est de savoir : 1- à quoi sert la methode toString() en Java. 2- Comment l'utiliser. je ss debutant, c'est vrai,.. mais je crois qu'on est tous passé par là, Merci de bien vouloir illustrer un/des exemple(s) :) www.commentcamarche.net/forum/affich-5552544-la-methode-tostring
[JAVA] Math.random() Salut tout le monde svp la valeur retourner avec la methode Math.random() en java est coprise entre - 0 www.commentcamarche.net/forum/affich-2860952-java-math-random
Le mot-clé static ou les attributs et méthodes de classe en POO(NOTE: Cet article explique la signification du mot-clé static au sein d'une classe. La signification de "static" en C n'a par exemple rien à voir.) Vous êtes débutant en programmation orientée objet. En Java, en C++...ou que sais-je encore.,... www.commentcamarche.net/faq/sujet-14564-le-mot-cle-static-ou-les-attributs-et-methodes-de-classe-en-poo
La methode split en javaBonjour, esq je peut utiliser la méthode split par 2 expressions séparatives? par exemple je veut séparer une chaine de caracteres par des points et des etoiles www.commentcamarche.net/forum/affich-5519846-la-methode-split-en-java
[Java] probleme avec String.replaceAll()Bonjour, j'ai un problème avec l'utilisation de la méthode replaceAll() de la classe String. lorsque je fais texte.replaceAll(text1, text2) il y a un problème lorsque text1 ou text2 contiennent des anti-slash (\). en effet, replaceAll utilise des... www.commentcamarche.net/forum/affich-1411462-java-probleme-avec-string-replaceall
Java : écrire dans un fichierBonjour ! Je souhaiterais écrire dans un fichier à partir d'une application Java. Après avoir lu et parfois rien compris à des tas de tuto, je n'arrive toujours pas à gérer l'écriture dans un fichier de type .txt . Quelqu'un n'aurait pas des... www.commentcamarche.net/forum/affich-1165710-java-ecrire-dans-un-fichier
Java - L'héritageLa notion d'héritage Le concept d'héritage est un des concepts les plus importants de la programmation orientée objet, car il conditionne irréversiblement la façon selon laquelle un code Java est écrit. L'héritage est un mécanisme permettant de... www.commentcamarche.net/contents/java/javaherit.php3
Java - Premier programmePremière application avec Java La première chose à faire est de créer un simple fichier texte (sans mise en forme) et de taper les quelques lignes suivantes : // Votre premiere application en Java class FirstApp { public static void main... www.commentcamarche.net/contents/java/javaprem.php3
Java - L'API JDBCIntroduction à JDBC La technologie JDBC (Java DataBase Connectivity) est un ensemble de classes permettant de développer des applications capables de se connecter à des serveurs de bases de données (SGBD). L'accès aux bases de données avec... www.commentcamarche.net/contents/java/javajdbc.php3