Applet与Servlet的通信

前段时间给公司做LMS系统,需要在 Applet与Servlet间进行数据通信,查了很多的资料,看了很多高人写的,竟不得要领,许是高人都太高了,以高人之心度了菜鸟之腹,后来自己结合高人的指点,多方摸索,终于算是整成功了,通己痛,以及人之痛,决定以菜鸟的角度写出来跟大家交流交流,希望大家多多给出宝贵的意见: 

1、用输入输出流传递对象:

Applet:

import java.net.*;
import java.util.*;

URL url=new URL(getCodeBase(), ServletURL);
/**
*这里,getCodeBase()将返回applet所在的绝对路径,ServletURL是你的servlet与applet的相对路径
*/
URLConnection con = url.openConnection();
con.setDoOutput(true); 
con.setUseCaches(false);
con.setRequestProperty("Content-Type", "application/octet-stream"); 
ObjectOutputStream outStream = new ObjectOutputStream ( con.getOutputStream() );
/**
* 这里,con.getOutputStream() ,从URLConnection连接获得输出流,这个输出流被连接到公共网关程
*序的(服务器端)的标准输入流上 
*/
Hashtable setMsg = new Hashtable(); 
setMsg.put("action","getparam");
outStream.writeObject(setMsg); 
outStream.flush(); 
outStream.close(); 
/**
*把要传送的有关数据对象(可以是任何一种对象,包括你自己定义的类。这里以Hashtable为例)写入输出流
*发送完毕关闭输出流。
*/
ObjectInputStream inStream = new ObjectInputStream ( con.getInputStream() ); 
/**
* 这里,con.getInputStream() ,从URLConnection连接获得输入流
*值得提醒的是在执行这一语句前servlet将不会做任何GET/POST操作
*本人当初就亏在这里急着测试OutputStream的效果,却不起任何作用。
*/
Hashtable getMsg=(Hashtable)inStream.readObject(); 
/**
*通过输入流获取从servlet传回的对象。
*/

Servlet:

public void doGet( final HttpServletRequest req ,final HttpServletResponse res ) throws IOException {
ObjectInputStream in = new ObjectInputStream ( req.getInputStream() );
/**
*通过Servlet对象的req参数的getInputStream()得到输入流
*然后通过该对象的readObject()方法得到JAVA对象
*(这个对象即我们在applet中用con.getOutputStream() 所写入的对象)。
*/ 
Hashtable getMsg=new Hashtable();
try{
getMsg=(Hashtable)in.readObject();
/**
*注意这里的对象类型必须和applet中的一致。
*/
}
catch(Exception e){}
action=(String)getMsg.get("action");
Hashtable msgs=new Hashtable();
msgs.put("uname","test");
ObjectOutputStream out = new ObjectOutputStream( res.getOutputStream() );
out.writeObject(msgs);
out.close();
/**
*通过Servlet对象的req参数的getOutputStream()所得到的输出流新生成一个对象输出流ObjectOutputStream
*类型的对象,然后通过该对象的writeObject()方法输出JAVA对象
*(这个对象即我们在applet中用con.getInputStream() 所得到的对象)。
*/ 
}

2、在URL地址后附加参数以GET的方式实现参数的传递:

这种方法比较简单,就是在url后面加"?p1=1&p2=2",然后在servlet中,用request.getParameter("p1")获取参数。不过从servlet中穿数据回applet,却仍只能是用对象模式,具体如上面说的一样,这里就不多说了

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值