2011-06-14 2 views
0

code JSP:Désérialise un objet Java provenant d'une page JSP?

<% 
ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
ObjectOutputStream output = new ObjectOutputStream(stream); 
output.writeObject(new BigDecimal("111")); 
output.flush(); 
output.close(); 

response.getOutputStream().write(stream.toByteArray()); 

out.clear(); 
out = pageContext.pushBody(); 
%> 

code au client, (réponse est un objet de org.apache.http.HttpResponse)

HttpEntity entity = response.getEntity(); 
InputStream is = entity.getContent(); 

byte[] buff = new byte[1024]; 
is.read(buff); 

ByteArrayInputStream bi = new ByteArrayInputStream(buff); 

ObjectInputStream oi = new ObjectInputStream(bi); 

Je reçois l'exception:

Exception in thread "main" java.io.StreamCorruptedException: invalid stream header: 3C68746D 
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:783) 
    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:280) 
+0

utilisez-vous sur http ou un autre protocole – shinynewbike

+0

bien sûr, http ...... –

+2

Toute raison d'utiliser JSP au lieu d'un servlet plus simple? – artbristol

Répondre

0

Peut-être un autre endroit les données étant écrit directement dans le flux de sortie sous forme d'octets. Le flux de réponse a un mélange de flux d'objets et d'octets. Ce qui échoue lors du décodage car vous traitez le contenu entier comme un flux d'objets.

1
ObjectOutputStream oos = null; 
HttpURLConnection uc = null; 
try 
{ 
URL url = new URL("http://12.13.152.12:7077/client.jsp"); 
uc= (HttpURLConnection) url.openConnection(); 
uc.setRequestMethod("POST"); 
uc.setUseCaches (false); 
uc.setDefaultUseCaches(false); 
uc.setDoInput(true); 
uc.setDoOutput(true); 
uc.setRequestProperty ("Content-Type","application/octet-stream;charset=UTF-8"); 
uc.connect(); 
oos = new ObjectOutputStream(uc.getOutputStream()); 
oos.writeObject(new String("hello")); 
} 
catch(Exception ee) 
{ 
} 
finally 
{ 
    oos.flush(); 
    oos.close(); 
    oos = null; 
    uc.disconnect(); 
} 
    **in client side** 
*client.jsp* 
InputStream inputStream = null; 
ObjectInputStream ois = null; 
try 
{ 
    inputStream = request.getInputStream(); 
    ois = new ObjectInputStream(inputStream); 
    String companyName`enter code here`=""; 
    String temp = (String)ois.readObject(); 
    System.out.println("temp "); 
} 
0
// JAVA code uses Apache HttpClient 
public void testObjectStream() { 
     try { 
       HttpClient client = new DefaultHttpClient(); 
       HttpPost httpPost = new HttpPost("http://localhost:8084/test_serialize.jsp"); 
       httpPost.setEntity(new SerializableEntity(new String("testing 123"), false)); 
       HttpResponse response = client.execute(httpPost); 
       StatusLine statusLine = response.getStatusLine(); 
       int statusCode = statusLine.getStatusCode(); 
       if (statusCode == 200) { 
         HttpEntity entity = response.getEntity(); 
         InputStream content = entity.getContent(); 
         ObjectInputStream ois = new ObjectInputStream(content); 
         System.out.println("obj : " + (String)ois.readObject()); 

       } else { 
         System.out.println("failed : " + statusCode); 
       } 
     } catch (Exception e) { 
       System.out.println(e.toString()); 
     } 
} 

// JSP page (DO NOT ADD LINE BREAKS or the JSP will take control of the outputstream before you can) 
// test_serialize.jsp - This JSP will read an object from the inputstream (a String in our test) and write it back to the outputstream 

<%@ page import="java.util.*, java.io.*" %><% 
    InputStream inputStream = request.getInputStream(); 
    ObjectInputStream ois = new ObjectInputStream(inputStream); 
    String temp = (String)ois.readObject(); 
    ObjectOutputStream oos = new ObjectOutputStream(response.getOutputStream()); 
    oos.writeObject(new String(temp)); 
%> 
Questions connexes