Figure 1    JavaASPHandler.java


 ////////////////////////////////////////////////////////////////
 //
 // JavaASPHandler.java
 //
 
 import java.util.*;
 import com.ms.asp.*;
 import com.ms.com.*;
 import com.ms.win32.*;
 
 /**
  * Class to demonstrate Java/COM integration working through an ASP page.
  */
 public class JavaASPHandler
 {
     /**
      * A simple test case to call from an ASP script.
      * @param request The request object from the current scripting context
      * @param response The response object to write responses back to the page
      */
     public void handleRequest(IRequest request, IResponse response)         
     {
         // Get the form value
         IRequestDictionary dict = request.getForm();
         Variant v = dict.getItem(new Variant("InputValue"));
 
         // Write a response back to the page
         String s = "The value you entered was: " +  v.toString();
         s += "<p>The value doubled is: " + v.toInt() * 2;
         response.Write(new Variant(s));
     }      
 }
 
 ///////////////////////////// End of File /////////////////////////////////

Figure 2   IResponse and IRequest


 public interface interface com.ms.asp.IResponse extends java.lang.Object implements com.ms.com.IUnknown 
 {
     public static final com.ms.com._Guid iid;
     public abstract com.ms.com.Variant getExpires();
     public abstract void putExpires(int);
     public abstract void AppendToLog(java.lang.String);
     public abstract com.ms.com.Variant getExpiresAbsolute();
     public abstract void putExpiresAbsolute(double);
     public abstract void BinaryWrite(com.ms.com.Variant);
     public abstract void Add(java.lang.String, java.lang.String);
     public abstract boolean IsClientConnected();
     public abstract boolean getBuffer();
     public abstract void putBuffer(boolean);
     public abstract void Redirect(java.lang.String);
     public abstract void Write(com.ms.com.Variant);
     public abstract java.lang.String getCharSet();
     public abstract void putCharSet(java.lang.String);
     public abstract void Pics(java.lang.String);
     public abstract void AddHeader(java.lang.String, java.lang.String);
     public abstract void Clear();
     public abstract java.lang.String getStatus();
     public abstract java.lang.String getContentType();
     public abstract void putContentType(java.lang.String);
     public abstract void putStatus(java.lang.String);
     public abstract void WriteBlock(short);
     public abstract com.ms.asp.IRequestDictionary getCookies();
     public abstract void Flush();
     public abstract java.lang.String getCacheControl();
     public abstract void End();
     public abstract void putCacheControl(java.lang.String);
 }
 
 public interface interface com.ms.asp.IRequest extends java.lang.Object implements com.ms.com.IUnknown 
 {
     public static final com.ms.com._Guid iid;
     public abstract com.ms.asp.IRequestDictionary getBody();
     public abstract java.lang.Object getItem(java.lang.String);
     public abstract com.ms.com.Variant BinaryRead(com.ms.com.Variant);
     public abstract com.ms.asp.IRequestDictionary getServerVariables();
     public abstract int getTotalBytes();
     public abstract com.ms.asp.IRequestDictionary getClientCertificate();
     public abstract com.ms.asp.IRequestDictionary getForm();
     public abstract com.ms.asp.IRequestDictionary getCookies();
     public abstract com.ms.asp.IRequestDictionary getQueryString();
 }
 

Figure 5    Communicating Between Applets

Applet12.html


 <html>
 <body>
 <h1>Applet 1</h1><p>
 <applet code=Applet1.class width=100 height=100>
 </applet><p>
 <h1>Applet 2</h1><p>
 <applet code=Applet2.class width=100 height=100>
 </applet>
 </body>
 <html>
Applet1.java

 /////////////////////////////////////////////////////////////////
 //
 // Applet1.java
 //
 
 import java.applet.*;
 import java.awt.*;
 import java.awt.event.*;
 
 /**
  * Applet communication example
  * @author Jonathan Locke
  */
 public class Applet1 extends Applet
 {
     TextField f;
 
     /**
      * Initialize Applet1
      */
     public void init()
     {
         // Create a text field as wide as the applet
         setLayout(new GridLayout(1, 0));
         add(f = new TextField(30));
         f.addTextListener
         (
             new TextListener()
             {
                 public void textValueChanged(TextEvent e)
                 {
                     // Call the setText method of Applet2
                     Applet2.setText(f.getText());
                 }
             }
         ); // f.addTextListener
     }
 }
 
 ///////////////////////////////// End of File /////////////////////////////////
Applet2.java

 /////////////////////////////////////////////////////////////////
 //
 // Applet2.java
 //
 
 import java.applet.*;
 import java.awt.*;
 
 /**
  * Applet communication example.
  * @author Jonathan Locke
  */
 public class Applet2 extends Applet
 {
     static Label l;
 
     /**
      * Initialize Applet2
      */
     public void init()
     {
         // Create a label spanning the width of the applet
         setLayout(new GridLayout(1, 0));
         add(l = new Label());
     }
 
     /**
      * Sets Applet2's text to a new value
      * @param text New text for applet to display
      */
     static public void setText(String text)
     {
         l.setText(text);
     }
 }
 
 ///////////////////////////////// End of File /////////////////////////////////

Figure 7   AppletContext


 public interface AppletContext
 {
     AudioClip getAudioClip(URL url);
     Image getImage(URL url);
     Applet getApplet(String name);
     Enumeration getApplets();
     void showDocument(URL url);
     public void showDocument(URL url, String target);
     void showStatus(String status);
 }
 
 /////////////////////////////////////////////////////////////////
 //
 // SetText.java
 //
 
 /**
  * Interface used by Applet4 to accept input from Applet3
  * @author Jonathan Locke
  */
 public interface SetText
 {
     public void setText(String text);
 }
 
 ///////////////////////////////// End of File /////////////////////////////////

Figure 8   Applet3.java


 /////////////////////////////////////////////////////////////////
 //
 // Applet3.java
 //
 
 import java.applet.*;
 import java.awt.*;
 import java.awt.event.*;
 
 /**
  * Demonstrate Applet communication through java.applet.AppletContext
  * @author Jonathan Locke
  */
 public class Applet3 extends Applet
 {
     TextField f;
 
     /**
      * Initialize Applet3
      */
     public void init()
     {
         // Create a text field as wide as the applet
         setLayout(new GridLayout(1, 0));
         add(f = new TextField(30));
         f.addTextListener
         (
             new TextListener()
             {
                 public void textValueChanged(TextEvent e)
                 {
                     // Call the setText method of Applet4
                     Applet a4 = getAppletContext().getApplet("Applet4");
 
                     // Cast the Applet4 object to obtain its SetText
                     // interface and then call the setText method
                     // through that interface.
                     ((SetText)a4).setText(f.getText());
                 }
             }
         ); // f.addTextListener
     }
 }
 
 ///////////////////////////////// End of File /////////////////////////////////

Figure 9   Applet4.java


 /////////////////////////////////////////////////////////////////
 //
 // Applet4.java
 //
 
 import java.applet.*;
 import java.awt.*;
 
 /**
  * Applet communication example.
  * @author Jonathan Locke
  */
 public class Applet4 extends Applet implements SetText
 {
     Label l;
 
     /**
      * Initialize Applet4
      */
     public void init()
     {
         // Create a label spanning the width of the applet
         setLayout(new GridLayout(1, 0));
         add(l = new Label());
     }
 
     /**
      * Sets Applet4's text to a new value
      * @param text New text for applet to display
      */
     public void setText(String text)
     {
         l.setText(text);
     }
 }
 
 ///////////////////////////////// End of File /////////////////////////////////

Figure 10   Applet34.html


 <html>
 <body>
 <h1>Applet 3</h1><p>
 <applet code=Applet3.class width=100 height=100>
 </applet><p>
 <h1>Applet 4</h1><p>
 <applet name=Applet4 code=Applet4.class width=100 height=100>
 </applet>
 </body>
 <html>

Figure 11    StaticFinalizer.java


 /////////////////////////////////////////////////////////////////
 //
 // StaticFinalizer.java
 //
 
 /**
  * Demonstration of how to finalize a class variable
  * @author Jonathan Locke
  */
 public class StaticFinalizer
 {
     static int nativeResource;
     static int objectCount;
 
     public StaticFinalizer()
     {
         synchronized (this)
         {
             if (objectCount == 0)
             {
                 System.out.println("Creating native resource");
                 nativeResource = 123; // Create imaginary mutex handle
             }
             objectCount++;
         }
         System.out.println("Creating object (" + objectCount + ")");
     }
 
     public void finalize() throws Throwable
     {
         super.finalize();
         System.out.println("Freeing object (" + objectCount + ")");
         synchronized (this)
         {
             if (0 == --objectCount)
             {
                 System.out.println("Freeing native resource " + nativeResource);
                 nativeResource = 0;
             }
         }
     }
 
     /**
      * Main application entrypoint.
      * @param arg Command line arguments
      */
     static public void main(String[] arg)
     {
         for (int i = 0; i < 5; i++)
         {
             new StaticFinalizer();
         }
         System.gc();
         System.runFinalization();
     }
 }
 
 ///////////////////////////////// End of File /////////////////////////////////