The day before, a friend talks about the problem with the servlet and applet sharing the Java object. It is now published that there are many people in this, and there are many in the middle of the world. I hope that the demand for my friends is like this: he wants to pass the page Applet calls a server servlet, and generating a Java object from servlet to another applet, how to let servlet pass objects in real-time to applet this is a problem, there is a solution to use JMS (JavamessageService), after me There will be a narrative in the article. Here I show you a simple implementation, that is, let the applet take the initiative to access the servlet, let servlet return to the Java object. The full code and configuration are given, where the applet part covers the mutual call of JavaScript and Applet. Friends who are not interested in this part can be replied.
First, write objects that need to be passed / ** * Class Person Just A Demo for translate this class to client * @author: rookie * @Datetime: 2002 -7-26 * / package exapplet; import java.io. *; public class pers message must implement the serializable interface to serialize private string m_name; private int m_age; public person () {this (", 0 } public person (string name, int agent) {this.m_name = name; this.m_age = age;} public string getName () {return m_name;} public int getage () {return m_age;} // serializable interface Methods of declaration Private void writeObject (java.io.objectOutputStream out) throws ioException {out.defaultwriteObject ();} // serializable Declared Method in Declaration in Interface Private Void Readobject (java.io.obj ectInputStream 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 fileInputStream (New FileInputStream (New File ("Test.Obj")); Person Q = Ois.ReadObject (); Ois.Close (); System.Out.println (Q.GetName ()); System.Out.println (Q.Getage ());} catch (exception exp) {Exp.PrintStackTrace ();}}} Second step, implement 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")) {// create an updated JavaObject Person p = new Person ( "Liaoyuan", 26); ObjectOutputStream oos = new ObjectOutputStream (new FileOutputStream (new File ( FPATH)))))); OOS.WriteObject (p); oos.close (); DataOutputStream DOS = New DataPutStream (); dos.writebytes ("Server Java Object Updated OK!"); dos.close () ;} else if (act.equals ( "GetObject")) {// return the object to the 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!";}} The third step is to implement the applet package exapplet of the call servlet update object; import java.awt. *; import java.applet. *; Import java.io. *; import java.net. *; import netscape.javaScript. *; public class myapplet extenship 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 = disp.readline (); dis.close (); string [] info = new string [] {txt}; jsobject.getWindow (this) .call ("alert", info);} catch (Exception E) {}}} The fourth step is to implement the applet package exapplet; import java.applet. *; Import java.Applet. *; Import java.io. *; import java.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) {}}} The fifth step, formulated WebServer (I use Tomcat4. 0) Copy the compiled myServlet.class to the corresponding directory, edit the corresponding web.xml file, make sure the following content is correct XML Version = "1.0" Encoding = "UTF-8"?>
posttoApplet servlet-name> exapplet.myservlet servlet-class> servlet > PostToApplet servlet-name> / exapplet / postToApplet url-pattern> servlet-maping> web-app> Sixth step, write HTML file call updated HTML