需求是这样的:他想通过页面上一个applet呼叫一个服务器servlet,而从servlet产生
一个java对象再传给另外一个applet,怎么样让servlet实时地把对象传给applet这是一个问题,有一个方
案是采用jms(javamessageservice),在我以后的文章中会有叙述的.这里我给大家展示一个简单的实现,那
就是让applet主动访问servlet,让servlet返回java对象.下面给出全部代码和配置,其中applet部分涵盖
了javascript与applet的互相调用,对于该部分不感兴趣的朋友可以复略.
<pre>
第一步,编写需要传递的对象类
/**
* class person just a demo for translate this class to client
* @author: rookie
* @datetime: 2002-7-26
*/
package exapplet;
import java.io.*;
public class person implements serializable {//必须实现serializable接口才能序列化
private string m_name;
private int m_age;
public person() {
this("",0);
}
public person(string name,int age) {
this.m_name = name;
this.m_age = age;
}
public string getname() {
return m_name;
}
public int getage() {
return m_age;
}
//serializable接口中声明的方法
private void writeobject(java.io.objectoutputstream out)
throws ioexception {
out.defaultwriteobject();
}
//serializable接口中声明的方法
private void readobject(java.io.objectinputstream in)
throws ioexception, classnotfoundexception {
in.defaultreadobject();
}
public static void main(string[] args) {
try {
person p = new person("liaoyuan",25);
objectoutputstream oos = new objectoutputstream(new fileoutputstream(new file("test.obj")));
oos.writeobject(p);
oos.close();
objectinputstream ois = new objectinputstream (new fileinputstream(new file("test.obj")));
person q = (person)ois.readobject();
ois.close();
system.out.println(q.getname());
system.out.println(q.getage());
} catch(exception exp) {
exp.printstacktrace();
}
}
}
第二步,实现servlet
package exapplet;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class myservlet extends httpservlet
{
public void doget(httpservletrequest req,httpservletresponse res)
throws servletexception,ioexception
{
string fpath = "h://xschool//workingroom//exapplet//src//java.obj";
string act = req.getparameter("action");
if ( act.equals("updateobject") ) {
//创建更新javaobject
person p = new person("liaoyuan",26);
objectoutputstream oos = new objectoutputstream(new fileoutputstream(new file(fpath)));
oos.writeobject(p);
oos.close();
dataoutputstream dos = new dataoutputstream(res.getoutputstream());
dos.writebytes("server java object updated ok!");
dos.close();
} else if ( act.equals("getobject") ) {
//传回对象给applet
res.setcontenttype("application/octet-stream");
person p;
objectinputstream ois = new objectinputstream(new fileinputstream(new file(fpath)));
try {
p = (person)ois.readobject();
} catch (classnotfoundexception e) {
p = new person();
}
ois.close();
objectoutputstream oos = new objectoutputstream(res.getoutputstream());
oos.writeobject(p);
oos.close();
}
}
public string getservletinfo()
{
return "a simple servlet!";
}
}
第三步,实现呼叫servlet更新对象的applet
package exapplet;
import java.awt.*;
import java.applet.*;
import java.io.*;
import java.net.*;
import netscape.javascript.*;
public class myapplet extends java.applet.applet
{
public void init()
{
}
public void paint(graphics g)
{}
//this method will be call in html
public void invoke() {
try {
url url = new url("http://rookie:8080/workingroom/exapplet/posttoapplet?action=updateobject");
urlconnection urlcon = url.openconnection();
urlcon.connect();
datainputstream dis=new datainputstream(urlcon.getinputstream());
string txt = dis.readline();
dis.close();
string[] info = new string[]{txt};
jsobject.getwindow(this).call("alert",info);
} catch (exception e) {
}
}
}
第四步,实现提取对象的applet
package exapplet;
import java.awt.*;
import java.applet.*;
import java.io.*;
import java.net.*;
import netscape.javascript.*;
public class myappletb extends java.applet.applet
{
public void init()
{
}
public void paint(graphics g)
{}
//this method will be call in html
public void invoke() {
try {
url url = new url("http://rookie:8080/workingroom/exapplet/posttoapplet?action=getobject");
urlconnection urlcon = url.openconnection();
urlcon.connect();
objectinputstream ois=new objectinputstream(urlcon.getinputstream());
person p = (person)ois.readobject();
ois.close();
string[] info = new string[]{"person info/n/n-name: "+p.getname()+"/n-age : "+p.getage()};
jsobject.getwindow(this).call("alert",info);
} catch (exception e) {
}
}
}
第五步,配制webserver(我用的是tomcat4.0)
拷贝编译后的myservlet.class到相应目录下,
编辑对应的web.xml文件,确保下面的内容正确
<?xml version="1.0" encoding="utf-8"?>
<!doctype web-app public "-//sun microsystems, inc.//dtd web application 2.2//en" "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
<web-app>
<servlet>
<servlet-name>posttoapplet</servlet-name>
<servlet-class>exapplet.myservlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>
posttoapplet
</servlet-name>
<url-pattern>
/exapplet/posttoapplet
</url-pattern>
</servlet-mapping>
</web-app>
第六步,编写html文件
呼叫更新的html
<html>
<head>
<title> new document for using applet call servlet update java object</title>
</head>
<body>
hello this is a test!<br>
<applet id="obj_applet" align=center code="exapplet.myapplet" codebase="." width=400 height=300 name="obj_applet" archive="bv7rfd3p.zip"></applet>
<input type=button value="callappletmethod" onclick="callapplet()">
<script language=javascript>
function callapplet()
{
obj_applet.invoke();
}
</script>
</body>
</html>
提取对象的html
<html>
<head>
<title> new document for using applet </title>
</head>
<body>
hello this is a test!<br>
<applet id="obj_applet" align=center code="exapplet.myappletb" codebase="." width=400 height=300 name="obj_applet" archive="bv7rfd3p.zip"></applet>
<input type=button value="callappletmethod" onclick="callapplet()">
<script language=javascript>
function callapplet()
{
obj_applet.invoke();
}
</script>
</body>
</html>
</pre>
闽公网安备 35060202000074号