前段時(shí)間給公司做LMS系統(tǒng),需要在 Applet與Servlet間進(jìn)行數(shù)據(jù)通信,查了很多的資料,看了很多高人寫的,竟不得要領(lǐng),許是高人都太高了,以高人之心度了菜鳥之腹,后來自己結(jié)合高人的指點(diǎn),多方摸索,終于算是整成功了,通己痛,以及人之痛,決定以菜鳥的角度寫出來跟大家交流交流,希望大家多多給出寶貴的意見:
1、用輸入輸出流傳遞對(duì)象:
import java.net.*;
import java.util.*;
URL url=new URL(getCodeBase(), ServletURL);
/**
*這里,getCodeBase()將返回applet所在的絕對(duì)路徑,ServletURL是你的servlet與applet的相對(duì)路徑
*/
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連接獲得輸出流,這個(gè)輸出流被連接到公共網(wǎng)關(guān)程
*序的(服務(wù)器端)的標(biāo)準(zhǔn)輸入流上
*/
Hashtable setMsg = new Hashtable();
setMsg.put("action","getparam");
outStream.writeObject(setMsg);
outStream.flush();
outStream.close();
/**
*把要傳送的有關(guān)數(shù)據(jù)對(duì)象(可以是任何一種對(duì)象,包括你自己定義的類。這里以Hashtable為例)寫入輸出流
*發(fā)送完畢關(guān)閉輸出流。
*/
ObjectInputStream inStream = new ObjectInputStream ( con.getInputStream() );
/**
* 這里,con.getInputStream() ,從URLConnection連接獲得輸入流
*值得提醒的是在執(zhí)行這一語句前servlet將不會(huì)做任何GET/POST操作
*本人當(dāng)初就虧在這里急著測(cè)試OutputStream的效果,卻不起任何作用。
*/
Hashtable getMsg=(Hashtable)inStream.readObject();
/**
*通過輸入流獲取從servlet傳回的對(duì)象。
*/
public void doGet( final HttpServletRequest req ,final HttpServletResponse res ) throws IOException {
ObjectInputStream in = new ObjectInputStream ( req.getInputStream() );
/**
*通過Servlet對(duì)象的req參數(shù)的getInputStream()得到輸入流
*然后通過該對(duì)象的readObject()方法得到JAVA對(duì)象
*(這個(gè)對(duì)象即我們?cè)赼pplet中用con.getOutputStream() 所寫入的對(duì)象)。
*/
Hashtable getMsg=new Hashtable();
try{
getMsg=(Hashtable)in.readObject();
/**
*注意這里的對(duì)象類型必須和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對(duì)象的req參數(shù)的getOutputStream()所得到的輸出流新生成一個(gè)對(duì)象輸出流ObjectOutputStream
*類型的對(duì)象,然后通過該對(duì)象的writeObject()方法輸出JAVA對(duì)象
*(這個(gè)對(duì)象即我們?cè)赼pplet中用con.getInputStream() 所得到的對(duì)象)。
*/
}
2、在URL地址后附加參數(shù)以GET的方式實(shí)現(xiàn)參數(shù)的傳遞:
這種方法比較簡單,就是在url后面加"?p1=1&p2=2",然后在servlet中,用request.getParameter("p1")獲取參數(shù)。不過從servlet中穿數(shù)據(jù)回applet,卻仍只能是用對(duì)象模式,具體如上面說的一樣,這里就不多說了
聯(lián)系客服