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

    [JAVA] Come testare applicazione in locale

    Buongiorno,

    ho un metodo di una classe che prende in input un httpServletRequest e un httpServletRespose.

    Questa classe deve processare richieste http e fornire richieste sempre mediante lo stesso protocollo.

    Come faccio a testare la classe in locale?

    public void processImage(HttpServletRequest request, HttpServletResponse response) {

    //esamina la request

    //scrivi la response

    }

  2. #2
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    Immagino lavorerai con delle servlet. Quindi una cosa del tipo...

    codice:
    import javax.servlet.*;
    import javax.servlet.http.*;
    
    public class TuaServlet extends HttpServlet
    {
      public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException
      {
        processImage(request, response);
    
        return;
      }
    ... dovrebbe funzionare.

  3. #3
    Perfetto, grazie 1000!

    Invece di aprire nuova discussione continuo qui.

    Richiedo un'immagine al server mediante httpServletRequest.

    L'immagine è nel body della response sotto forma di array di byte.

    Quando vado a decodificare l'immagine e a scriverla in locale l'immagine è delle giuste dimensioni ma completamente nera!!!

    byte[] a = mockResponse.getContentAsByteArray();

    InputStream in = new ByteArrayInputStream(a);

    Image image = ImageIO.read(in);

    File outputfile = new File("/home/cicciopasticcio/wowo.jpg");

    ImageIO.write((RenderedImage)image, "jpg", outputfile);

    Ho tralasciato la gestione delle eccezioni. Ho comunque verificato che le sequenze di byte dal server al client sono le stesse, dunque non c'è errore di trasmissione.

  4. #4
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    Non sono espertissimo nella gestione degli stream grafici... però approfondisco volentieri l'argomento. Se poi c'è qualcuno più pratico che ti può aiutare, meglio così!

    Puoi postare anche il codice che produce l'immagine?

  5. #5
    Grazie 1000

    Eccolo


    Image image = ImageIO.read(url);

    BufferedImage bu = new BufferedImage(image.getWidth(null),image.getHeight (null),BufferedImage.TYPE_INT_RGB);

    ByteArrayOutputStream bas = new ByteArrayOutputStream();

    ImageIO.write(bu,requestHeaders.get(FORMAT), bas);

    response.setContentType("image/" + requestHeaders.get(FORMAT));

    OutputStream os = response.getOutputStream();

    os.write(bas.toByteArray());

    os.close();
    Se dal server creo un nuovo file proprio come cerco di fare dal client l'immagine viene bene!!!!

  6. #6
    InputStream in = new ByteArrayInputStream(a);
    Image image = ImageIO.read(in);
    Con queste 2 istruzioni, se non sbaglio, creo un immagine a partire dall'InputStream che ho precedentemente inizializzato dall'array di Byte.

    Dunque com'è possibile che, se dal client al server i due array di byte sono identici, riesco a stampare l'immagine giusta nel server e nel client è nera?

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328

    Moderazione

    Perchè, invece di usare i tag QUOTE, non usi gli apopsiti tag CODE per postare il codice?

    PS: controlla la dimensione dei due file generati... potrebbero intervenire problematiche con l'encoding dei byte...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  8. #8
    Ok, scusami...

    Comunque le dimensioni sono le stesse.

    Adesso ho provato una seconda soluzione ma la storia è la stessa...

    codice:
    BufferedImage bi = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB); // retrieve image
    
    		File outputfile = new File("/home/cicciopasticcio/Scrivania/asdc.jpg");
    
    		ImageIO.write(bi, "png", outputfile);
    Se poi vado a stampare i valori contenuti nell'array di byte restituito dal server, mi accorgo che non vengono modificati: dunque server e client elaborano l'immagine a partire dallo stesso array.

    Dove sbaglio?

  9. #9
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    Penso di aver capito qual è il problema. Quando gli dici:

    codice:
    BufferedImage bu = new BufferedImage(image.getWidth(null),image.getHeight(null),BufferedImage.TYPE_INT_RGB);
    stai creando una NUOVA immagine "nera", avente le stesse dimensioni dell'immagine che hai caricato. Poi tu vai a scrivere sullo stream di output questa nuova immagine, NON quella che invece vorresti inviare!
    Non ho provato, ma ti dovrebbe essere sufficiente eliminare tutti i riferimenti alla variabile "bu" ed usare invece solo la "image" (che puoi dichiarare come BufferedImage).

    Io ho fatto una semplice prova con il codice:

    codice:
    BufferedImage image = ImageIO.read(url);
    
    response.setContentType("image/jpg");
    
    ImageIO.write(image, "jpg", response.getOutputStream());
    invece del tuo, ma ho notato che l'immagine che viene ritornata e salva il client ha una dimensione in byte diversa da quella originale. Fai delle prove, ma comunque per il resto la logica del tuo algoritmo mi sembra corretta

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.