通过URLConnection发送序列化对象的方式实验分布式系统之间的数据交互
2010-07-08 16:33
465 查看
最近接到一个需求,将系统A的数据发送到B系统,B系统处理完后返回数据,本来可以用现有的Axis2框架实现,但是配置比较麻烦,而且WebService比较慢,所以想到用URLConnection发送序列化对象来实现。
下面是客户端代码:
服务端代码如下:
客户端url中如果有中文的话会出现乱码的情况,在调用getObject前需要对url进行编码。
下面是客户端代码:
public static Object getObject(Object obj, String urlStr) throws RuankoException { Object resultObj = null; try{ URL url = new URL(urlStr); URLConnection rulConnection = url.openConnection(); HttpURLConnection httpUrlConnection = (HttpURLConnection) rulConnection; // 设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在 // http 正文内,因此需要设为true, 默认情况下是false; httpUrlConnection.setDoOutput(true); // 设置是否从httpUrlConnection读入,默认情况下是true; httpUrlConnection.setDoInput(true); // Post 请求不能使用缓存 httpUrlConnection.setUseCaches(false); // 设定传送的内容类型是可序列化的java对象 // (如果不设此项,在传送序列化对象时,当WEB服务默认的不是这种类型时可能抛 java.io.EOFException) httpUrlConnection.setRequestProperty("Content-type", "application/x-java-serialized-object"); // 设定请求的方法为"POST",默认是GET httpUrlConnection.setRequestMethod("POST"); // 连接,从上述第2条中url.openConnection()至此的配置必须要在connect之前完成, httpUrlConnection.connect(); // 此处 getOutputStream会隐含的进行connect(即:如同调用上面的connect()方法, // 所以在开发中不调用上述的connect()也可以)。 OutputStream outStrm = httpUrlConnection.getOutputStream(); // 现在通过输出流对象构建对象输出流对象,以实现输出可序列化的对象。 ObjectOutputStream objOutputStrm = new ObjectOutputStream(outStrm); // 向对象输出流写出数据,这些数据将存到内存缓冲区中 objOutputStrm.writeObject(obj); // 刷新对象输出流,将任何字节都写入潜在的流中(些处为ObjectOutputStream) objOutputStrm.flush(); // 关闭流对象。此时,不能再向对象输出流写入任何数据,先前写入的数据存在于内存缓冲区中, // 在调用下边的getInputStream()函数时才把准备好的http请求正式发送到服务器 objOutputStrm.close(); // 调用HttpURLConnection连接对象的getInputStream()函数, // 将内存缓冲区中封装好的完整的HTTP请求电文发送到服务端。 InputStream inStrm = httpUrlConnection.getInputStream(); // <===注意,实际发送请求的代码段就在这里 ObjectInputStream oi = new ObjectInputStream(inStrm); resultObj = oi.readObject(); } catch(Exception e) { throw new Exception(e); } return resultObj; }
服务端代码如下:
ObjectInputStream oi = new ObjectInputStream(request.getInputStream()); //请求信息 NodeContent nodeContentReq = (NodeContent) oi.readObject(); oi.close(); //返回更新对象 response.setContentType("application/x-java-serialized-object"); OutputStream outStrm = response.getOutputStream(); ObjectOutputStream objOutputStrm = new ObjectOutputStream(outStrm); objOutputStrm.writeObject(nodeContentRes); objOutputStrm.flush(); objOutputStrm.close();
客户端url中如果有中文的话会出现乱码的情况,在调用getObject前需要对url进行编码。
String url = "中文"; URI uri = new URI(url,false,"UTF-8"); url = uri.toString();
相关文章推荐
- 通过ajax引擎对象向服务器发送数据的2中方式:get、post
- Network 【用 AFN 通过 POST 方式发送JSON数据的两种形式】
- 请问MVC4是不是类似于html页+ashx页之间用JSON通过AJAX交换数据这种方式、?
- 面对对象之差异化的网络数据交互方式--单机游戏开发之无缝切换到C/S模式
- Activity与Fragment之间的数据交互方式
- PHP如何通过Http Post请求发送Json对象数据?
- PHP如何通过Http Post请求发送Json对象数据?
- Android几种数据存储方式及bean对象序列化
- 用 AFNetworking 通过 POST 方式发送数据
- PHP通过Http Post请求发送Json对象数据?
- 程序使用 HTTP 协议和服务器交互主要是进行数据的提交,通常数据的提交是通过 GET 和 POST 两种方式来完成
- HttpClient通过Post方式发送Json数据
- window.open() POST 方式提交json数据,以及后台的json序列化为对象
- unserialize的这个问题是由一个emlog论坛用户在使用时报错而发现的 问题表现情况如下: emlog缓存的保存方式是将php的数据对象(数组)序列化(serialize)后以文件的形式存放,
- [置顶] HttpClient通过Post方式发送Json数据
- PHP使用serialize和json_encode序列化数据并通过redis缓存文件和$GLOGALS缓存资源对象
- 细粒度依赖(一)通过数据字典找到数据库对象之间的引用关系
- socket通信——通过Udp传输方式,将一段文字数据发送出去
- 关于数据序列化(3),JSON的方式,FastJson序列化对象和List集合示例
- Java多线程与并发应用-(6)-多个线程之间共享对象和数据的方式