Erro ao enviar imagem Applet x Servlet (ObjectOutputStream x ObjectInputStream)

Olá!

Estou enfrentando um problema quando vou enviar uma imagem de um applet para o servlet.

A imagem envia beleza! só que o applet trava ao ficar esperando a resposta do servlet.

e quando não implemento o retorno de uma resposta a imagem não eh enviada para o servlet.

segue o código:

SERVLET


import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.swing.ImageIcon;
import java.nio.Buffer;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.JOptionPane;

public class NewServlet extends HttpServlet {

    public Image img = null;
    private static final String CONTENT_TYPE = "text/html; charset=windows-1252";

    public void doGet(HttpServletRequest req,
            HttpServletResponse resp) throws ServletException,
            IOException {
        doPost(req, resp);
    }

    public void doPost(HttpServletRequest req,
            HttpServletResponse resp) throws ServletException,
            IOException {


        PrintWriter pw = new PrintWriter(new File("C:\\tmp\\log.txt"));
        try {
            ObjectInputStream objin = new ObjectInputStream(req.getInputStream());

            try {
                ImageIcon icon = (ImageIcon) objin.readObject();
                objin.close();

                Image im = icon.getImage();

                BufferedImage img = new BufferedImage(im.getWidth(null), im.getHeight(null), 1);
                Graphics2D g2d = img.createGraphics();
                g2d.drawImage(im, 0, 0, null);
                g2d.dispose();
                
                try {
                    JOptionPane.showMessageDialog(null, im);
                    ImageIO.write(img, "JPG", new File("C:\\tmp\\testando.jpg"));
                    JOptionPane.showMessageDialog(null, "Documento salvo com sucesso!", "Documento salvo!", 1);

                } catch (IOException ex) {
                    Logger.getLogger(FormMain.class.getName()).log(Level.SEVERE, null, ex);
                }

                pw.println("Registro salvo/alterado com sucesso!");



            } catch (Exception e) {                
                pw.println(e.toString());
            }

        } catch (Exception ex) {           
            pw.println(ex.toString());
        }

        pw.flush();
        pw.close();

APPLET

public void UploadImage(Image img) {
        
        
        try {
            String path = "http://localhost:8080/ScannerBrsWeb/NewServlet";
            URL url = new URL(path);
            System.out.println((new StringBuilder()).append("Enviando a imagem para:\n").append(path).toString());
            HttpURLConnection conn = (HttpURLConnection)url.openConnection(); 
            
            
            ImageIcon icon = new ImageIcon(img);           
                 
            
            //conn.setDoInput(true);
            conn.setDoOutput(true);
            conn.setUseCaches(false);
            conn.setRequestProperty("Content-type", "application/x-java-serialized-object");
            ObjectOutputStream out = new ObjectOutputStream(conn.getOutputStream());
            out.writeObject(icon);
            out.flush();
            out.close();
//            ObjectInputStream ins = new ObjectInputStream(conn.getInputStream());            
//            ins.close();
//            String mensagem;
//            int c;
//            for (mensagem = ""; (c = ins.read()) != -1; mensagem = (new StringBuilder()).append(mensagem).append((char) c).toString());
//            JOptionPane.showMessageDialog(null, mensagem);
        } catch (Exception e) {
            System.out.println("Erro.... \n"+e);
        }
        
        
    }

O código comentado é o exemplo que eu fiz como expliquei acima.

Agradeço qualquer ajuda.

Eis aqui a solução do problema:

Brax!