Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    102

    Custom HttpURLConnection

    Ciao a tutti ho creato una mia classe MyHttpURLConnection estendendo l'originale

    codice:
    public class MyHttpURLConnection extends java.net.HttpURLConnection
    {	
    	public MyHttpURLConnection(URL u)
    	{
    		super(u);
    	}
    
    	public String scaricaPagina()
    	{
    		InputStream in = super.getInputStream();;
    		BufferedReader bReader = new BufferedReader(new InputStreamReader(in, super.getContentEncoding()));
    		
    		String currentLine;
    		StringBuffer sBuffer = new StringBuffer();
    		while ((currentLine = bReader.readLine()) != null)
    		{
    			sBuffer.append(currentLine);
    		}
    		
    		bReader.close();
    		in.close();
    		
    		return sBuffer.toString();
    	}
    
    	@Override
    	public void disconnect() {}
    
    	@Override
    	public boolean usingProxy()
    	{
    		return false;
    	}
    
    	@Override
    	public void connect() throws IOException {}
    }
    Questo metodo che ho messo è solo uno però è per rendere l'idea che ho aggiunto un metodo per evitare di riscrivere il codice ogni volta che voglio scaricare la pagina. E cosi ho fatto per "automatizzare" altre operazioni

    Il problema è che quando vado a fare (ho esplicitato 1 riga alla volta)
    codice:
    URL url = new URL("http://........");
    URLConnection urlConnection = url.openConnection();
    MyHttpURLConnection http = (MyHttpURLConnection) url.openConnection();
    mi dà questo errore
    codice:
    Exception in thread "main" java.lang.ClassCastException: sun.net.www.protocol.http.HttpURLConnection cannot be cast to MyHttpURLConnection
    	at Main.main(Main.java:27)
    Ho sbagliato qualcosa io? Ci sarà pure un modo per aggiungere metodi custom alla classe già esistente

    Tra l'altro se invece di fare il cast uso il costruttore poi non so come aprire la connessione



    Grazie ciao

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

    Re: Custom HttpURLConnection

    Originariamente inviato da Pegasys
    Ciao a tutti ho creato una mia classe MyHttpURLConnection estendendo l'originale
    Non vedo a che pro e per quale motivo .... visto che non stai specializzando il protocollo HTTP ma soltanto leggendo "qualcosa".
    Sarebbe stato meglio farlo per "incapsulazione", una tua classe che incapsula un (Http)URLConnection.

    Originariamente inviato da Pegasys
    codice:
    URL url = new URL("http://........");
    URLConnection urlConnection = url.openConnection();
    MyHttpURLConnection http = (MyHttpURLConnection) url.openConnection();
    mi dà questo errore
    codice:
    Exception in thread "main" java.lang.ClassCastException: sun.net.www.protocol.http.HttpURLConnection cannot be cast to MyHttpURLConnection
    	at Main.main(Main.java:27)
    Ovviamente .... openConnection() (e tutto quello che ci sta dietro) non "sa" nulla del tuo MyHttpURLConnection e non può restituirlo. Sa solo che a fronte di un certo protocollo indicato nel url (la parte iniziale xyz:// es. http:// o ftp:// ....) va a trovare la implementazione specifica di URLConnection da restituire.
    La gestione dei protocolli è "pluggabile" si possono creare dei nuovi "protocol handler" e agganciarli al framework. Ma lo ripeto ancora: tu non stai cercando di definire un nuovo protocollo!

    Originariamente inviato da Pegasys
    Tra l'altro se invece di fare il cast uso il costruttore poi non so come aprire la connessione
    connect(). E non dovresti fare l'override per renderlo "vuoto" !! La estensione, come ho detto, è discutibile ma ammesso che intendi perseverare su questa strada non devi "svuotare" i metodi "vitali" della classe! La tua estensione dovrebbe fare qualcosa di più (o al massimo di leggermente diverso) .... non di meno.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    102
    Quindi devo creare una classe che contiene al suo interno un oggetto di tipo HttpURLConnection?

    Se così fosse dovrei ricreare tutti i metodi della classe HttpURLConnection per fare il rimando a quelli della classe vera.

    L'avevo estesa per avere a disposizione tutto quello che offre la classe più aggiungere qualche metodo mio

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Pegasys
    Se così fosse dovrei ricreare tutti i metodi della classe HttpURLConnection per fare il rimando a quelli della classe vera.
    Non ho detto che devi fare un "decoratore", cioè un oggetto che "decora" un altro oggetto mantenendo la stessa "interfaccia" (come fanno le classi di I/O, ad esempio).

    Ho detto semplicemente di fare una tua classe qualunque e semplice che contiene/usa al suo interno un (Http)URLConnection. Basta che questa classe offra i metodi che ti servono.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.