Serialiser une Applet et d'en ecrire le Contenu sur le disque d' un serveur Web distant
Le
pcouas
Bonsoir,
Je tente de Serialiser une Applet et d'en ecrire le Contenu via le
disque d'un serveur Web distant.
Si mon applet le fait en local en tant qu'application cela fonctionne,
si je le fait avec la servlet, j'ai une erreur de Serialisation
Ou est mon erreur !!
Merci d'avance
Philippe
Message d'erreur
’^@^E{sr^@
java.io.NotSerializableException(Vx^@ç~F^V5^B^@^@xr^@^]java.io.Objec
tStreamExceptiondÃäk~M9ûß^B^@^@xr^@^Sjava.io.IOExceptionl~@sde%ð=
«^B^@^@xr^@^Sjav
a.lang.ExceptionÐý^_>^Z;^\Ä^B^@^@xr^@^Sjava.lang.ThrowableÕÆ5'9=
w¸Ë^C^@^CL^@^Ecau
set^@^ULjava/lang/Throwable;L^@^MdetailMessaget^@^RLjava/lang/String;[^@
stackTracet^@^^[Ljava/lang/StackTraceElement;xpq^@~^@^Ht^@^Yjava.io.ObjectI=
nputS
treamur^@^^[Ljava.lang.StackTraceElement;^BF*<<ý"9^B^@^@xp^@^@^@!sr^@^[ja=
va.lang
.StackTraceElementa Å~Z&6Ý~E^B^@^DI^@
lineNumberL^@^NdeclaringClassq^@~^@^FL^@^HfileNameq^@~^@^FL^@
methodNameq^@~^@^Fxpÿÿÿýt^@^Zjava.io.ObjectOutputStreamt^@^WObjectO=
utputStream.j
avat^@^LwriteObject0sq^@~^@^L^@^@^A3t^@^Zjava.io.ObjectOutputStreamt^@^WObj=
ectOu
tputStream.javat^@^KwriteObjectsq^@~^@^L^@^@^A8t^@^Xservletgraph.FileServle=
tt^@^
PFileServlet.javat^@^FdoPostsq^@~^@^L^@^@^Bøt^@^^javax.servlet.http.HttpS=
ervlett
^@^PHttpServlet.javat^@^Gservicesq^@~^@^L^@^@^CUt^@^^javax.servlet.http.Htt=
pServ
lett^@^PHttpServlet.javat^@^Gservicesq^@~^@^L^@^@^@÷t^@/org.apache.catali=
na.core
.ApplicationFilterChaint^@^[ApplicationFilterChain.javat^@^PinternalDoFilte=
rsq^@
~^@^L^@^@^@Át^@/org.apache.catalina.core.ApplicationFilterChaint^@^[Appli=
cationF
ilterChain.javat^@^HdoFiltersq^@~^@^L^@^@^A^@t^@-org.apache.catalina.core.S=
tanda
rdWrapperValvet^@^YStandardWrapperValve.javat^@^Finvokesq^@~^@^L^@^@^B~Ct^@=
Forg.
apache.catalina.core.StandardPipeline$StandardPipelineValveContextt^@^UStan=
dardP
ipeline.javat^@
Cote Applet
package applet8;
import java.applet.Applet;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.Button;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.*;
import java.io.*;
import java.net.*;
public class Applet4 extends Applet
{
private Button button1 = new Button();
public Applet4()
{
}
/**
/**
* @param args
*/
public static void main(String[] args)
{
Applet4 applet = new Applet4();
Frame frame = new Frame();
frame.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
frame.add(applet, BorderLayout.CENTER);
frame.setTitle("Applet Frame");
applet.init();
applet.start();
frame.setSize(300, 300);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = frame.getSize();
frame.setLocation((d.width - frameSize.width) / 2, (d.height -
frameSize.height) / 2);
frame.setVisible(true);
}
public void init()
{
this.setLayout(null);
button1.setLabel("button1");
button1.setBounds(new Rectangle(150, 65, 73, 23));
button1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
button1_actionPerformed(e);
}
});
this.add(button1, null);
}
private void button1_actionPerformed(ActionEvent e)
{
ObjectOutputStream out;
try
{
String m_URL=new
String("http://172.14.1.141/servlet/servletgraph.FileServlet");
String string4=m_URL;
if(string4.indexOf("?")<0)
string4 += "?";
else
string4 += "&";
string4+="debug=true&";
string4+="servletname=write&type=object&";
string4+="cfile=toto.txt";
URL u=new URL(string4);
HttpURLConnection urlc = (java.net.HttpURLConnection)
u.openConnection();
// Set the Post (true) or Get (false) method.
urlc.setDoOutput(true);
urlc.setDoInput(true);
urlc.setUseCaches(false);
urlc.setAllowUserInteraction(false);
urlc.setRequestProperty("Content-type",
"application/octet-stream");
// urlc.setRequestProperty("Content-Type", "java-internal/" +
this.getClass().getName());
out = new ObjectOutputStream(urlc.getOutputStream());
out.writeObject(this);
if (urlc.getResponseCode() != HttpURLConnection.HTTP_OK) {
System.out.println("Error");
// throw new Exception("Access error. ");
} else {
System.out.println("I have now access to the stream");
// blaha balaaha blaahahaha
}
out.flush();
out.close();
}
catch (IOException ioe) {
System.err.println(ioe);
ioe.printStackTrace();
}
}
}
Coté Servlet
package servletgraph
public class FileServlet extends HttpServlet
{
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
ObjectInputStream in = new ObjectInputStream(req.getInputStream() );
FileOutputStream file = new
FileOutputStream(req.getRealPath("/")+czPath);
ObjectOutputStream out = new ObjectOutputStream(file);
out.writeObject(in);
out.flush();
out.close();
}
}
Je tente de Serialiser une Applet et d'en ecrire le Contenu via le
disque d'un serveur Web distant.
Si mon applet le fait en local en tant qu'application cela fonctionne,
si je le fait avec la servlet, j'ai une erreur de Serialisation
Ou est mon erreur !!
Merci d'avance
Philippe
Message d'erreur
’^@^E{sr^@
java.io.NotSerializableException(Vx^@ç~F^V5^B^@^@xr^@^]java.io.Objec
tStreamExceptiondÃäk~M9ûß^B^@^@xr^@^Sjava.io.IOExceptionl~@sde%ð=
«^B^@^@xr^@^Sjav
a.lang.ExceptionÐý^_>^Z;^\Ä^B^@^@xr^@^Sjava.lang.ThrowableÕÆ5'9=
w¸Ë^C^@^CL^@^Ecau
set^@^ULjava/lang/Throwable;L^@^MdetailMessaget^@^RLjava/lang/String;[^@
stackTracet^@^^[Ljava/lang/StackTraceElement;xpq^@~^@^Ht^@^Yjava.io.ObjectI=
nputS
treamur^@^^[Ljava.lang.StackTraceElement;^BF*<<ý"9^B^@^@xp^@^@^@!sr^@^[ja=
va.lang
.StackTraceElementa Å~Z&6Ý~E^B^@^DI^@
lineNumberL^@^NdeclaringClassq^@~^@^FL^@^HfileNameq^@~^@^FL^@
methodNameq^@~^@^Fxpÿÿÿýt^@^Zjava.io.ObjectOutputStreamt^@^WObjectO=
utputStream.j
avat^@^LwriteObject0sq^@~^@^L^@^@^A3t^@^Zjava.io.ObjectOutputStreamt^@^WObj=
ectOu
tputStream.javat^@^KwriteObjectsq^@~^@^L^@^@^A8t^@^Xservletgraph.FileServle=
tt^@^
PFileServlet.javat^@^FdoPostsq^@~^@^L^@^@^Bøt^@^^javax.servlet.http.HttpS=
ervlett
^@^PHttpServlet.javat^@^Gservicesq^@~^@^L^@^@^CUt^@^^javax.servlet.http.Htt=
pServ
lett^@^PHttpServlet.javat^@^Gservicesq^@~^@^L^@^@^@÷t^@/org.apache.catali=
na.core
.ApplicationFilterChaint^@^[ApplicationFilterChain.javat^@^PinternalDoFilte=
rsq^@
~^@^L^@^@^@Át^@/org.apache.catalina.core.ApplicationFilterChaint^@^[Appli=
cationF
ilterChain.javat^@^HdoFiltersq^@~^@^L^@^@^A^@t^@-org.apache.catalina.core.S=
tanda
rdWrapperValvet^@^YStandardWrapperValve.javat^@^Finvokesq^@~^@^L^@^@^B~Ct^@=
Forg.
apache.catalina.core.StandardPipeline$StandardPipelineValveContextt^@^UStan=
dardP
ipeline.javat^@
Cote Applet
package applet8;
import java.applet.Applet;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.Button;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.*;
import java.io.*;
import java.net.*;
public class Applet4 extends Applet
{
private Button button1 = new Button();
public Applet4()
{
}
/**
/**
* @param args
*/
public static void main(String[] args)
{
Applet4 applet = new Applet4();
Frame frame = new Frame();
frame.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
frame.add(applet, BorderLayout.CENTER);
frame.setTitle("Applet Frame");
applet.init();
applet.start();
frame.setSize(300, 300);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = frame.getSize();
frame.setLocation((d.width - frameSize.width) / 2, (d.height -
frameSize.height) / 2);
frame.setVisible(true);
}
public void init()
{
this.setLayout(null);
button1.setLabel("button1");
button1.setBounds(new Rectangle(150, 65, 73, 23));
button1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
button1_actionPerformed(e);
}
});
this.add(button1, null);
}
private void button1_actionPerformed(ActionEvent e)
{
ObjectOutputStream out;
try
{
String m_URL=new
String("http://172.14.1.141/servlet/servletgraph.FileServlet");
String string4=m_URL;
if(string4.indexOf("?")<0)
string4 += "?";
else
string4 += "&";
string4+="debug=true&";
string4+="servletname=write&type=object&";
string4+="cfile=toto.txt";
URL u=new URL(string4);
HttpURLConnection urlc = (java.net.HttpURLConnection)
u.openConnection();
// Set the Post (true) or Get (false) method.
urlc.setDoOutput(true);
urlc.setDoInput(true);
urlc.setUseCaches(false);
urlc.setAllowUserInteraction(false);
urlc.setRequestProperty("Content-type",
"application/octet-stream");
// urlc.setRequestProperty("Content-Type", "java-internal/" +
this.getClass().getName());
out = new ObjectOutputStream(urlc.getOutputStream());
out.writeObject(this);
if (urlc.getResponseCode() != HttpURLConnection.HTTP_OK) {
System.out.println("Error");
// throw new Exception("Access error. ");
} else {
System.out.println("I have now access to the stream");
// blaha balaaha blaahahaha
}
out.flush();
out.close();
}
catch (IOException ioe) {
System.err.println(ioe);
ioe.printStackTrace();
}
}
}
Coté Servlet
package servletgraph
public class FileServlet extends HttpServlet
{
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
ObjectInputStream in = new ObjectInputStream(req.getInputStream() );
FileOutputStream file = new
FileOutputStream(req.getRealPath("/")+czPath);
ObjectOutputStream out = new ObjectOutputStream(file);
out.writeObject(in);
out.flush();
out.close();
}
}

Poser une question


Je crois avoir compris mon erreur.
En fait le Jar coté serveur, ne connais pas les Package
java.awt.Applet.
Donc il n'arrive pas à Serialiser (Hypothèse à verifer)
Mon pb est plus grave, J'arrive par le reseau à Serialiser une String,
mais pas une Applet toute simple.
Alors que sur le disque local, cela est bon ???
Cordialement
Ph Couas
pourquoi ne pas passer le jar comme un objet en byte[] par exemple?
Olivier
Merci
Philippe
J'essaye de Lire le contenu depuis la Servlet en tant que ByteArray,
mais j'ai le message d'erreur suivant
java.io.StreamCorruptedException: invalid stream header
Pourtant je suis en resp.setContentType("application/octet-stream");
coté servlet
Cordialement
Philippe