服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

servlet传送对象给applet使用


  需求是这样的:他想通过页面上一个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>

扫描关注微信公众号