// caches the class
into a Hashtable
classList.put(className,
c);
}
Listing 2.
try {
c = findSystemClass(name);
System.out.println("Resolved
" + name + " locally");
}
// If Class is Not Local, Attempt to
Resolved it From Downloaded Classes
catch (ClassNotFoundException e) {
System.out.println("Resolving
Class: " + name);
classRequested
= (Class) classList.get(name);
if (classRequested
== null) {
System.out.println("Resolving
" + name + " remotely");
// If a Class
has not been resolved previously then
// attempt
to load it from the last Web site that was
// accessed.
loadClassName( name );
c = ourClass;
}
}
return c;
Listing 3.
public void loadClassName(String name) {
String URLlocation;
try {
URLlocation
= new String("http://" + serv + dir + "/" + name + ".class");
registerJavaClass(URLlocation);
}
catch (Exception e) {
e.printStackTrace();
}
}
Listing 4.
Object obj = c.newInstance();
…
// set the parameters for the static
main method
Class array1[] = {Class.forName("[Ljava.lang.String;")};
// gets the static main method
m1 = c.getMethod("main", array1);
// invoke the static main method
m1.invoke(obj, object_array);
Listing 5: urlclassloader.java
import java.net.*;
import java.io.*;
import java.util.*;
class URLClassLoader extends ClassLoader {
Class ourClass=null;
Hashtable classList=null;
int vector_counter;
String directory=null;
String server=null;
String className=null;
String UnresolvedURL=null;
String temporaryURL=null;
boolean flagClass;
static int counter1;
public URLClassLoader() {
super();
classList = new Hashtable();
}
public void registerJavaClass(String URLlocation) throws IOException {
String filename=null;
int slash_index=0;
InputStream input=null;
URL u=null;
DataInputStream data=null;
try {
u = new URL(URLlocation);
temporaryURL = new String(URLlocation);
filename = new String(u.getFile());
slash_index = filename.lastIndexOf("/");
className =
new String(filename.substring(slash_index+1,
filename.length() - 6));
directory =
new String(filename.substring(0,
slash_index));
server = new String(u.getHost());
input = u.openStream();
data = new DataInputStream(input);
byte classBytes[] =
downloadByteCodesFromURL(data);
data.close();
input.close();
input = null;
u = null;
System.gc();
ourClass =
createClassFromByteCodes(classBytes,
true);
} catch (Exception e) {
if (input != null) {
input.close();
if (data != null) {
data.close();
}
}
u = null;
UnresolvedURL =
new String(URLlocation);
ourClass = null;
throw new IOException("Problems
Defining " +
"Network Class +++++++++++++++>");
}
}
public byte[] downloadByteCodesFromURL(
DataInputStream in) {
ByteArrayOutputStream outStream
=
new ByteArrayOutputStream();
while (true) {
try {
outStream.write(in.readByte());
}
catch (IOException e) {
break;
}
}
return outStream.toByteArray();
}
public synchronized Class
createClassFromByteCodes(byte[] array,
boolean resolve) {
Class c = null;
try {
c = defineClass(className, array,
0, array.length);
if (resolve) {
resolveClass(c);
classList.put(className, c);
}
}
catch (ClassFormatError
e) {
e.printStackTrace();
}
return (c);
}
public synchronized Class loadClass(String
name,
boolean resolve)
throws ClassNotFoundException {
Class c = null;
Class classRequested;
// Attempt to Load the
Class Locally First
try {
c = findSystemClass(name);
System.out.println("Resolved
" + name +
" locally");
}
// If Class is Not Local,
Attempt to
// Resolve it From Downloaded
Classes
catch (ClassNotFoundException e) {
System.out.println("Resolving
Class: " +
name);
classRequested =
(Class) classList.get(name);
if (classRequested
== null) {
System.out.println("Resolving
" + name +
" remotely");
// If a Class has
not been resolved
// previously then
attempt to load it
// from the last
web site that was accessed.
loadClassName( name
);
c = ourClass;
}
}
return c;
}
public void loadClassName(String name)
{
String URLlocation;
try {
URLlocation = new String("http://"
+ server
+ directory + "/" + name + ".class");
registerJavaClass(URLlocation);
} catch (Exception e)
{
e.printStackTrace();
}
}
public Class getTheClass() {
return (ourClass);
}
}
Listing 6: trigger.java
import java.awt.*;
import java.net.*;
import java.io.*;
import java.lang.reflect.*;
import java.awt.event.*;
import java.util.*;
import URLClassLoader;
public class trigger extends Frame implements ActionListener{
URLClassLoader loader=null;
TextField tf = null;
Button bt = null;
public trigger() {
super("Trigger Application");
setLayout(new BorderLayout());
tf = new TextField();
bt = new Button("Execute Java Application");
bt.addActionListener(this);
add("North",
new Label("Enter URL for
loading Java application"));
add("Center", tf);
add("South", bt);
loader = new URLClassLoader();
setSize(300, 100);
}
public void actionPerformed(ActionEvent
evt) {
String URLLocation = tf.getText();
if (URLLocation != null) {
executeApplication(URLLocation);
}
}
public void executeApplication(
String URLlocation) {
try {
loader.registerJavaClass(URLlocation);
Class c = loader.getTheClass();
startJavaApplication(c,
"New Application");
}
catch (IOException e) {
System.out.println("Error
loading URL Class");
}
}
public void startJavaApplication(
Class c, String label) {
try {
Object obj = c.newInstance();
String[] array = new String[2];
array[0] = new String(label);
Object object_array[] = {array};
Method m1;
// set the parameters for main method
Class array1[] =
{Class.forName("[Ljava.lang.String;")};
// get the static main
method
m1 = c.getMethod("main",
array1);
// invoke the static main
method
m1.invoke(obj, object_array);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (ClassNotFoundException
e) {
e.printStackTrace();
} catch (InvocationTargetException
e) {
e.printStackTrace();
} catch (IllegalArgumentException
e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (NullPointerException e) {
e.printStackTrace();
}
}
public static void main(String args[])
{
trigger application = new trigger();
application.show();
}
}