Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Passaggio parametri da Java applet a php con metodi post e get

    Ciao a tutti,
    ho bisogno di passare dei parametri alla pagina php da una applet
    la pagina PHP funziona se invocata o direttamente o da una pagina html
    segue il codice php e java

    Grazie
    ---PHP
    codice:
    <html>
    	<body>
    		<?php
    			$FileContent = $_POST['FileContent'];
    			
    			
    	$fn = "wFile1.txt";		
    
    	$fp = fopen($fn,"w");
    	flock($fp,2);
    	fputs($fp,$FileContent);
    	flock($fp,3);
    	fclose($fp);
    
    	/*verifica*/
    	$fn = "wFile2.txt";		
    	/* scrivere un nuovo numero */
    	$fp = fopen($fn,"w");
    	flock($fp,2);
    	fputs($fp,"verify");
    	flock($fp,3);
    	fclose($fp);
    
    		?>
    	</body>
    
    </html>
    --java
    codice:
    import java.applet.Applet;
    import java.awt.*;
    import java.net.*;
    import java.io.*;
    import java.io.Writer;
    
    
    public class wFile1 extends Applet{
    	public String str;	
    	
    	public void init(){
    
    		
    	}//init
    	
    	
    	public void paint(Graphics g){
    		boolean b = true;
    
    		g.drawString("Start paint",1,10);
    		b=Writ_e("What_File_Contains");
    		g.drawString(str,1,20);
    		if (b == true)
    			g.drawString("Ok",1,30);
    		else
    		 	g.drawString("Fail",1,30);
    	}//paint
    	
    	public boolean Writ_e(String varFileContent)
    	{
    		boolean log = false;
    		try
    		{
    		String params = URLEncoder.encode ("FileContent", "UTF-8") + "=" +
    		URLEncoder.encode (varFileContent, "UTF-8");
    		
    		URL url = new URL ("http://127.0.0.1/wFile1.php");
    		
    		URLConnection conn = url.openConnection();
    
    		conn.setDoOutput(true);
    		
    		OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream());
    		
    		out.write(params);
    		str = params;
    		log = true;
    		}//try
    		catch (IOException a)
    		{
    		 System.out.println("Error URL 2");
    		}//catch
    		
    		return log;		
    	}//Writ_e
    	
    }//wFile1

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Passaggio parametri da Java applet a php con metodi post e get

    Originariamente inviato da lotdox
    codice:
    	public void paint(Graphics g){
    		boolean b = true;
    
    		g.drawString("Start paint",1,10);
    		b=Writ_e("What_File_Contains");
    		g.drawString(str,1,20);
    		if (b == true)
    			g.drawString("Ok",1,30);
    		else
    		 	g.drawString("Fail",1,30);
    	}//paint
    	
    	public boolean Writ_e(String varFileContent)
    	{
    		boolean log = false;
    		try
    		{
    		String params = URLEncoder.encode ("FileContent", "UTF-8") + "=" +
    		URLEncoder.encode (varFileContent, "UTF-8");
    		
    		URL url = new URL ("http://127.0.0.1/wFile1.php");
    		
    		URLConnection conn = url.openConnection();
    
    		conn.setDoOutput(true);
    		
    		OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream());
    		
    		out.write(params);
    		str = params;
    		log = true;
    		}//try
    		catch (IOException a)
    		{
    		 System.out.println("Error URL 2");
    		}//catch
    		
    		return log;		
    	}//Writ_e
    No alt! Innanzitutto c'è una questione importantissima: fare I/O e peggio ancora sui socket nel contesto del paint(Graphics) .... NON va assolutamente bene!
    È inappropriato al massimo.

    A parte questo a livello tecnico il metodo Writ_e mi pare che vada in gran parte bene, salvo 2 cose:

    1) scrivi i parametri con la write() ed è corretto ma per poter avere la certezza che tutto "esca" davvero sulla rete dovresti fare anche un bel flush().

    2) I parametri/valori sono "encodati" correttamente con URLEncoder.encode specificando correttamente UTF-8. Il punto è che la stringa risultante della query, dopo l'encoding, è (e deve rimanere tale) in puro ASCII. Tutti i caratteri particolari sono stati appunto encodati con apposite sequenze di caratteri ASCII.
    Il problema è che se usi OutputStreamWriter come hai fatto, i caratteri vengono codificati in byte secondo il charset di "default" della piattaforma ... quale sia ... non lo so, dipende (e potrebbe non essere appropriato).
    Ma la stringa di query è in ASCII e tale deve rimanere anche nello stream inviato. Quindi devi specificare il charset "US-ASCII".

    Se usi OutputStreamWriter:

    ... new OutputStreamWriter(conn.getOutputStream(), "US-ASCII");

    Altrimenti potresti anche solo usare l'output stream e scrivere i byte che ottieni da

    params.getBytes("US-ASCII")

    (il flush vale lo stesso).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Ciao Andbin,
    ho riscritto il codice.
    Il problema è che non funziona dappertutto
    ad esempio, con xampp funziona, su altervista no.
    Il fatto è che non viene nemmeno scritto il file di verifica (quello che non ha bisogno di parametri per intenderci) e non vengono nemmeno scritte le risposte (Ok o Fail!).
    Vorrei solo capire se devo sbattere la testa su java o sulle impostazioni del server.
    Al di là della codifica UTF-8 piuttosto che US-ASCII come giustamente mi hai fatto notare, ma in questo caso, se anche sbagliassi a postare il parametro, dovrebbe comunque scrivere il file vuoto, o sbaglio?

    codice:
    import java.applet.Applet;
    import java.awt.*;
    import java.net.*;
    import java.io.*;
    import java.io.Writer;
    
    
    
    public class wFile2 extends Applet{
    	public String str;	
    	public int b = 0;
    	
    	public void init(){
    	}//init
    	
    	public void start(){
    		b=Writ_e("What_File_Contains");
    	}
    	
    	public void paint(Graphics g){
    		g.drawString("Start paint",1,10);
    		//b=Writ_e("What_File_Contains");
    		//g.drawString(str,1,20);
    		if (b == 1) //Ok
    			g.drawString("Ok",1,30);
    		else
    		 	g.drawString("Fail",1,30);
    	}//paint
    	
    	public int Writ_e(String varFileContent)
    	{
    		int log = 0;
    
    		try
    		{
    				// Construct data
    			    String data = URLEncoder.encode("FileContent", "US-ASCII") + "=" + URLEncoder.encode(varFileContent, "US-ASCII");
    			    //data += "&" + URLEncoder.encode("key2", "UTF-8") + "=" + URLEncoder.encode("value2", "UTF-8");
    			
    			    // Send data
    			    //URL url = new URL("http://hostname:80/cgi");
    			    URL url = new URL("http://127.0.0.1:80/wFile2.php");
    			    URLConnection conn = url.openConnection();
    			    conn.setDoOutput(true);
    			    OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
    			    wr.write(data);
    			    wr.flush();
    				//return 1;
    				
    			    // Get the response
    			    BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
    			    String line;
    			    while ((line = rd.readLine()) != null) {
    			        // Process line...
    			    }
    			    wr.close();
    			    rd.close();
    			    System.out.flush();
    			    log = 1;
    			    b=1
    			} catch (Exception e) {
    				b=0;
    				//return log;
    			}
    		
    		return log;		
    	}//Writ_e
    	
    }//wFile1

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da lotdox
    codice:
    String data = URLEncoder.encode("FileContent", "US-ASCII") + "=" + URLEncoder.encode(varFileContent, "US-ASCII");
    No, qui va UTF-8.

    Originariamente inviato da lotdox
    codice:
    OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
    È qui che devi passare al costruttore di OutputStreamWriter il "US-ASCII"
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    codice:
    OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream(), "US-ASCII");
    però continua a non funzionare...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.