////////////////////////////////////////////////////////////////
//
// 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 /////////////////////////////////