Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Serialiser une Applet et d'en ecrire le Contenu sur le disque d' un serveur Web distant

7 réponses
Avatar
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
=AC=ED^@^E{sr^@
java.io.NotSerializableException(Vx^@=E7~F^V5^B^@^@xr^@^]java.io.Objec
tStreamExceptiond=C3=E4k~M9=FB=DF^B^@^@xr^@^Sjava.io.IOExceptionl~@sde%=F0=
=AB^B^@^@xr^@^Sjav
a=2Elang.Exception=D0=FD^_>^Z;^\=C4^B^@^@xr^@^Sjava.lang.Throwable=D5=C65'9=
w=B8=CB^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*<<=FD"9^B^@^@xp^@^@^@!sr^@^[ja=
va.lang
.StackTraceElementa =C5~Z&6=DD~E^B^@^DI^@

lineNumberL^@^NdeclaringClassq^@~^@^FL^@^HfileNameq^@~^@^FL^@

methodNameq^@~^@^Fxp=FF=FF=FF=FDt^@^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=F8t^@^^javax.servlet.http.HttpS=
ervlett
^@^PHttpServlet.javat^@^Gservicesq^@~^@^L^@^@^CUt^@^^javax.servlet.http.Htt=
pServ
lett^@^PHttpServlet.javat^@^Gservicesq^@~^@^L^@^@^@=F7t^@/org.apache.catali=
na.core
.ApplicationFilterChaint^@^[ApplicationFilterChain.javat^@^PinternalDoFilte=
rsq^@
~^@^L^@^@^@=C1t^@/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 =3D new Button();

public Applet4()
{
}


/**
/**
* @param args
*/
public static void main(String[] args)
{
Applet4 applet =3D new Applet4();
Frame frame =3D 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 =3D Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize =3D 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=3Dnew
String("http://172.14.1.141/servlet/servletgraph.FileServlet");
String string4=3Dm_URL;

if(string4.indexOf("?")<0)
string4 +=3D "?";
else
string4 +=3D "&";

string4+=3D"debug=3Dtrue&";
string4+=3D"servletname=3Dwrite&type=3Dobject&";
string4+=3D"cfile=3Dtoto.txt";
URL u=3Dnew URL(string4);

HttpURLConnection urlc =3D (java.net.HttpURLConnection)
u=2EopenConnection();
// 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 =3D new ObjectOutputStream(urlc.getOutputStream());
out.writeObject(this);

if (urlc.getResponseCode() !=3D 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=E9 Servlet

package servletgraph


public class FileServlet extends HttpServlet
{


public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
ObjectInputStream in =3D new ObjectInputStream(req.getInputStream() );
FileOutputStream file =3D new
FileOutputStream(req.getRealPath("/")+czPath);
ObjectOutputStream out =3D new ObjectOutputStream(file);
out.writeObject(in);
out.flush();
out.close();
}
}

7 réponses

Avatar
pcouas
Bonsoir,

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)
Avatar
pcouas
Bonsoir,

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
Avatar
ownowl
Bonsoir,

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

String implemente Serializable, pas ton applet.


pourquoi ne pas passer le jar comme un objet en byte[] par exemple?

Olivier

Avatar
pcouas
Peut tu préciser un peu ?
Merci

Philippe
Avatar
pcouas
Bonjour

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
Avatar
pcouas
Bonsoir,

J'essaye de Serializer une Applet sur le Serveur, en tant que tableau
de byte, mais le nombre d'octets ecrits cote Applet est differents de
celui ecrit coté Servelt ?

Je ne vois pas ou est mon erreur ??
Merci d'avance
Philippe


Cote Applet
void WriteApplet(String filename)
{
ObjectOutputStream out;
System.out.println("Debut Test WRITE APPLET...");

//Serialisation de la frame
try
{
String m_URL=new
String("http://172.16.0.101:8080/infodev/servlet/servletgraph.XXServlet");
String string4=m_URL;
System.out.println("w01 "+string4);

URL u=new URL(string4);

ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(this);
oos.flush();
oos.close();
byte b[] = baos.toByteArray();

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");

String lengthString = String.valueOf(baos.size());
urlc.setRequestProperty("Content-Length", lengthString);
System.out.println("Object is avant ecriture " + lengthString + "
bytes");

out = new ObjectOutputStream(urlc.getOutputStream());
out.write(b);

if (urlc.getResponseCode() != HttpURLConnection.HTTP_OK) {
System.out.println("Error...");
} else {
System.out.println("I have now access to the stream...");
// blaha balaaha blaahahaha
}

out.flush();
out.close();
System.out.println("Fin Test WRITE APPLET...");
}
catch (IOException ioe) {
System.err.println(ioe);
ioe.printStackTrace();
}
}

-------------------------------------------------------------------------

Cote Servlet
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
System.out.println("XXServlet doPost X1 "+new Date());
boolean debug=true;

InputStream in = req.getInputStream();
byte[] bufimage=null;
bufimage = new byte[4 * 1024]; // 4K buffer
int len;
RandomAccessFile f = new
java.io.RandomAccessFile(req.getRealPath("/")+"xxservlet", "rw");
int size = req.getIntHeader("content-length");
bufimage = new byte[size]; // 4K buffer
if(debug) System.out.println("XXServlet bytearray02 "+size);
int nb=0;
while ((len = in.read(bufimage, 0, bufimage.length)) != -1)
{
if(debug) System.out.println("XXServlet bytearray03
content-length "+len);
f.write(bufimage, 0, len); //Fichier
nb=+len;

}
if(debug) System.out.println("XXServlet bytearray05 "+nb);

f.close();

if(debug) System.out.println("XXServlet write04 ");


}
}
Avatar
pcouas
Bonjour,

le code de mon applet donne 2383 bytes
String lengthString = String.valueOf(baos.size());

Et une trace avec EherAll en donne 2062 ??

Pourquoi ?

Merci d'avance Philippe

EtherALL
POST /infodev/servlet/servletgraph.XXServlet HTTP/1.1

Content-Type: application/octet-stream

Method: POST

Content-Length: 2062

User-Agent: Java1.3.1

Host: 172.16.0.101:8080

Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2

Connection: keep-alive



....z........sr..applet8.Applet6..s.a
.....L..button1t..Ljava/awt/Button;xr..java.applet.Applet..[=.&.....L..accessibleContextt.'Ljavax/accessibility/AccessibleContext;xr..java.awt.Panel.$*'...I..containerSerializedDataVersionI..ncomponents[..componentt..[Ljava/awt/Component;L.
dispatchert.
Ljava/awt/LightweightDispatcher;L..layoutMgrt..Ljava/awt/LayoutManager;L..maxSizet..Ljava/awt/Dimension;xr..java.awt.Component...Y.<.....I..componentSerializedDataVersionZ..enabledJ..eventMaskZ..hasFocusI..heightZ..isPackedZ..nameExplicitlySetZ.
newEventsOnlyZ..validZ..visibleI..widthI..xI..yL..accessibleContextq.~..L.
backgroundt..Ljava/awt/Color;L.
changeSupportt."Ljava/beans/PropertyChangeSupport;L..cursort..Ljava/awt/Cursor;L.
dropTargett..Ljava/awt/dnd/DropTarget;L..fontt..Ljava/awt/Font;L.
foregroundq.~..L..localet..Ljava/util/Locale;L..minSizeq.~..L..namet..Ljava/lang/String;L..peerFontq.~..L..popupst..Ljava/util/Vector;L..prefSizeq.~..xp..........................$........ppppppppppsr.
jaz....va.awt.Font..5...Vs...I..fontSerializedDataVersionF..pointSizeI..sizeI..styleL..fRequestedAttributest..Ljava/util/Hashtable;L..nameq.~%!J.....F.
loadFactorI..thresholdxp?fff....w.........sr..java.awt.font.TextAttributekx..
.
F...xr./java.text.AttributedCharacterIterator$Attribute..t&.G....L..nameq.~..xpt..familyt..Dialogsq.~..t..transformsr.
java.awt.font.TransformAttribute...0...Z...L..transformt..Ljava/awt/geom/AffineTransform;xpsr..java.awt.geom.AffineTransform.x..J..b...D..m00D..m01D..m02D..m10D..m11D..m12xp?...............................?...............xsq.~..t..sizesr..java.lang.Float.....~..xpppsr..java.awt.ComponentOrientation...E..c....I..orientationxp....px........ur..[Ljava.awt.Component;...
...u...xp....sr..java.awt.Button.:..x.S....I..buttonSerializedDataVersionL.
actionCommandq.~..L..labelq.~..xq.~.
..........................I.......Apsr..java.awt.Color......3u...F..falphaI..valueL..cst..Ljava/aHTTP/1.1
200 OK

Content-Length: 0

Date: Fri, 23 Dec 2005 07:35:36 GMT

Server: Apache Tomcat/4.1.30 (HTTP/1.1 Connector)