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.