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 step, 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 Person IMPLEMENTS SERIALIZABLE {/ Must implement the serializable interface to serialize private string m_name; private int m_age;
Public Person () {this ("", 0);} public person (interson) {this.m_name = name; this.m_age = age;} public string getname () {return m_name;} public int GetAMe; () {RETURN M_AGE;
Method for declaration in // Serializable interface Private void writeObject (java.io.objectOutputstream out) throws ioException {out.defaultwriteObject ();}
Method in // Serializable Interface 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 fileInputStream (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 ();}}}
The second step, implemented Servletpackage 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 update 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")) {// back 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 (classnotfoundexcep) Tion E) {p = new person ();} Ois.close (); ObjectOutputStream OOS = New ObjectOutputStream (Res. GetOutputStream (); OOS.WriteObject (p); oos.close ();}} public string getServletInfo ) {RETURN "A Simple Servlet!";}}
Step 3, implement the appletPackage Exapplet; import java.applet. *; Import java.io. *; Import java.io. *; Import java.javascript. *; Import java.javaScript. * ;. Import java.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 = disp.readline (); dis.close (); string [] info = new string [] {txt}; JSObject.getWindow (this) .call ("Alert", INFO);} Catch (Exception E) {}}} The fourth step, implementing an appletPackage 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) {}}}
Step 5, formulate WebServer (I use Tomcat4.0) copy 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-mapping> web-app> Step 6, write HTML file call updated HTML
new document for useing applet call servlet Update Java Object title> hEAD> Hello this is a test!