As I mentioned in Chapter 1 there's not much relation between Java and JavaScript-except for the name. However, they can both be useful on your Web pages-sometimes at the same time. This chapter begins with an introduction to the Java language and its capabilities.
JavaScript also includes functions to control Java applets, and Java applets can access JavaScript functions. By integrating these two Web languages, you can have the best of both worlds, allowing for many complicated applications.
Let's begin with a tour of the Java language, the development
process for Java applets, and the way Java and HTML interact.
If you're unfamiliar with Java, this will give you a quick start
and help you understand how Java and JavaScript can work together.
Note |
Java is a complex language-much more so than JavaScript. This chapter introduces Java, but can't explain it in detail. If you want to learn more about Java, consult the online resources listed in appendix C, or pick up a copy of the bestselling Teach Yourself Java in 21 Days, by Laura Lemay, also from Sams.net publishing. |
Some languages, such as C, are compiled into executable programs before they can be run. Others, such as JavaScript, are interpreted directly from the source code. Java is something in between.
A Java program starts out as source code and is then run through
the Java compiler. The compiler doesn't produce true machine code,
though-instead, it produces code for a virtual machine.
This virtual machine code can then be interpreted by an implementation
of the virtual machine, such as Netscape.
Note |
To complicate things even more, the latest versions of Netscape and MSIE include Java compilers. Called just-in-time compilers, these compile Java virtual machine code into executable code before running the applet. This greatly increases the speed of applets. |
There are actually two types of Java programs:
The Java language is similar to C++. You may also notice a similarity to JavaScript; Netscape loosely based the JavaScript syntax on that of Java.
Like JavaScript, Java includes statements and functions. It also includes objects, properties, and methods. You will look at a simple example of a Java applet in the section titled Creating Your Own Java Applets later in this chapter.
Java is an object-oriented language-much more so than JavaScript. A Java applet is actually a class; running an applet means creating an instance of the class. Technically, applets are subclasses of the Applet object.
There are also several object classes you can import into a Java program. These provide functions such as graphics, fonts, working with strings, and so on. You'll look at a class later that enables Java to access JavaScript objects.
Unlike JavaScript, Java code is never included in the HTML file itself. Instead, a special HTML tag, <APPLET>, is used to embed the applet in the Web page. Here is a simple example of an applet:
<applet code="Applet1.class" width=55 height=68> </applet>.
Notice that both opening and closing <APPLET> tags are required. Between them, you can use optional <PARAM> tags to give parameters to the applet. The parameters required depend on the applet. Each <PARAM> tag includes a variable name and value:
<PARAM name=height value=100>
Tip |
You can also use JavaScript to choose between a Java or non-Java version of a page. Use the Navigator.javaEnabled property, described in Chapter 4 "Using Built-In Objects and Custom Objects." |
The next section presents a complete HTML file with an embedded
applet. For examples of embedding public domain Java applets into
your pages, see Chapter 19, "Real-Life Examples IV."
Note |
Currently, most complicated Java applets are a bit slow. If you include one in your Web page, be sure you test it carefully; you may also wish to warn users that an applet is loading. |
To create your own Java applets, you use the Java Development
Kit (JDK). This includes the Java compiler, example applets, and
an applet viewer. The JDK is available at no charge from Sun.
Tip |
The JDK is also included on the CD-ROM that accompanies this book, along with a variety of sample applets. |
The JDK is available for the following platforms:
Note |
Currently, there is no version of the JDK for Windows 3.1 or 68000-series Macintosh. You will need to use a different platform to compile Java applets, although you can still view applets in Netscape. If you have a shell account with your Internet provider, you may be able to use the JDK from there. |
The following tasks explain how to download and install the JDK, use it to create a simple Java applet, and compile and view the new applet.
To download the JDK, visit Sun's Java Web page at the following address:
http://java.sun.com/
and follow the appropriate links. At this writing, the latest version of the JDK is 1.02. Once you've downloaded it, the installation process depends on your platform:
Now let's try creating a simple Java applet. Listing 16.1 shows a Java applet that displays a message in a large font.
Listing 16.1. (JavaTest.java) A simple Java applet that displays a message.
import java.applet.Applet; import java.awt.Graphics; import java.awt.Font; public class JavaTest extends Applet { Font f = new Font("TimesRoman", Font.BOLD, 60); public void paint(Graphics g) { g.setFont(f); g.drawString("Text from Java", 15, 50); } }
Here is a brief explanation of the program. The first three lines are Java import statements. These specify three classes (libraries) used by the applet:
Next, the class definition begins with the public class JavaTest statement. You're defining a class called JavaTest, which is a subclass of the Applet class (as all applets are).
The next statement, Font f = new Font, defines an instance of the Font object, an object used to store information about a font and size. The new Font object is called f. (Notice the similarity to the new keyword for defining objects in JavaScript.)
The next statement begins the paint function, which is the main program. This also defines a new Graphics object called g. The next two statements are methods of the Graphics object; methods in Java work much like JavaScript.
The g.setFont() method sets the font to be used when drawing text, and the g.drawString() method draws the text on the screen in the applet's area.
Now that you have a simple Java applet, you need to compile it and use it in an HTML page. Be sure you have placed the applet source code in a file called JavaTest.java.
First, compiling the applet is simple. Type the following command from the directory where you installed the JDK:
bin\javac JavaTest.java
The compilation process should take only a few seconds. If no
errors were found, the compiler won't display any messages. After
the compilation, you should have a file in the same directory
called JavaTest.class. This
is the Java class file that you can use on a Web page.
Note |
Just about everything in Java is case-sensitive-source files, class files, and the <APPLET> tag. Be sure you use the exact names. |
To test the new applet, you need to embed it in an HTML page. Listing 16.2 shows a simple HTML page that includes the applet created previously. Create this HTML file in the same directory as the class file or copy the class file into its directory.
Listing 16.2. (JAVA1.htm) An HTML file to test the new Java applet.
<HTML> <HEAD> <TITLE>Simple Java Test</TITLE> </HEAD> <BODY> <h1>test</h1> <hr> An applet is included below to display some text. <hr> <APPLET CODE="JavaTest.class" WIDTH=450 HEIGHT=125> </APPLET> <hr> applet finished... here's the rest of the page. </BODY> </HTML>
The <APPLET> tag in this file includes the filename of the JavaTest class and a width and height. Be sure to include the closing </APPLET> tag, although there may be nothing between the two tags.
Now that you have an HTML file, you need to test it. A simple way to do this is with the applet viewer, included with the JDK. You can start the applet viewer by typing the following command in the JDK directory:
bin\appletviewer file:\Java\JavaTest.html
Tip |
You may need to modify this command to work on your system. You can also add the java\bin directory to your path to avoid typing bin\ before each command. |
Although you started the applet viewer from a command line, the actual output is shown in a graphical window. Figure 16.2 shows the applet viewer in action, using the example applet.
Figure 16.1 : The Java applet viewer in action.
Notice that the applet viewer shows the output of the Java applet, but does not include the text from the HTML file itself. This may be useful when you're debugging a Java applet. To see the entire HTML file including the applet, you'll need to use a browser, such as Netscape.
To test the applet in Netscape, simply use the Open command to load the HTML file created previously. Figure 16.2 shows the applet example as viewed by Netscape.
Figure 16.2 : The Java applet in action, as viewed by
Netscape.
Note |
Once you've created and debugged a Java applet, you'll probably want to publish it on the Web. To do this, simply place the class file for the applet in the same directory as the HTML file on the Web server. |
In Navigator 3.0b4 Netscape introduced a new feature called LiveConnect, which provides the following capabilities:
You will look at the first capability in this section: accessing Java classes (applets) from within JavaScript. You will look at the opposite method in the section titled Calling JavaScript functions from Java, later in this chapter.
You can call Java methods directly from JavaScript. This means you can treat methods as if they are JavaScript statements themselves. For example, this statement prints a message to the Java console:
java.lang.System.err.println("This is a test.");
This will be most useful if you are an experienced Java programmer. If you are not, you can use JavaScript to take advantage of features of existing Java applets, as described in the next section.
Each Java applet you embed in a Web page is made available to JavaScript as an applet object, with the same name as the applet's class name. The applet object resides in the object hierarchy under the document object. For example, a Java applet called Scroll would be accessed through an object called document.Scroll.
The objects, properties, and methods of the applet are then available
to JavaScript, provided the Java programmer has made them public.
You will use this technique to control a Java applet in the task
later in this section.
Note |
There is an exception to the rule: any Java method that communicates over the network can't be called from JavaScript. This limitation exists for security reasons. |
From the Java programmer's point of view, there are a few things that need to be done to make an applet accessible to JavaScript:
Once you've made sure of these things, you should be able to access the applet from within JavaScript. The next section gives an example of an applet that is controllable by JavaScript.
Let's create a Java applet that can be manipulated from within JavaScript. Listing 16.3 shows the Java source code. This is an expanded version of the example in Listing 16.1.
Listing 16.3. (ControlJava.java)A Java applet that can be controlled via JavaScript.
import java.applet.Applet; import java.awt.Graphics; import java.awt.Font; public class ControlJava extends Applet { Font f = new Font("TimesRoman", Font.BOLD, 60); String Message; public void init() { Message = new String("Java Test"); } public void SetMessage(String MsgText) { Message = MsgText; repaint(); } public void paint(Graphics g) { g.setFont(f); g.drawString(Message, 15, 50); } }
This applet now includes a SetMessage() method to change the text in the display. Listing 16.4 shows the HTML and JavaScript document used to control the applet.
Listing 16.4. (CJAVA.htm) The JavaScript program to control the Java applet.
<HTML> <HEAD> <TITLE>Control a Java Applet</TITLE> </HEAD> <BODY> <H1>Control a Java Applet</H1> <HR> The Java applet below displays text in a large font. You can enter new text to display in the form below, and JavaScript will call the Java applet to change the text. <HR> <FORM NAME="form1"> <INPUT TYPE="TEXT" NAME="text1"> <INPUT TYPE="BUTTON" VALUE="Change Text" onClick="document.ControlJava.SetMessage(document.form1.text1.value);"> </FORM> <HR> <APPLET NAME="ControlJava" CODE="ControlJava.class" WIDTH=450 HEIGHT=125> </APPLET> <HR> End of page. </BODY> </HTML>
This uses a simple event handler to call the Java applet's SetMessage() method. The string you enter in the text field is passed to the applet and displayed in place of the original string. Figure 16.3 shows this application in action after the text has been changed.
Figure 16.3 : JavaScript has changed the text by accessing the Java applet.
It's also possible to call JavaScript functions, and access JavaScript objects and properties, from within Java. This enables you to use JavaScript's unique capabilities, such as reading the values of form elements, in powerful Java applications.
To make JavaScript functions accessible from Java, you need to configure things both in JavaScript and in Java. You'll look at the required steps in the next sections.
It's possible for a Java applet to do things you don't want it to, so you must give permission for it to access your JavaScript program and objects. To do this, add the MAYSCRIPT attribute to the <APPLET> tag that embeds the applet:
<APPLET CODE="Script.class" NAME="TestApp" MAYSCRIPT> </APPLET>
For the Java programmer, there are also some important steps before you can access JavaScript. First, you need to include the netscape.javascript package, which provides these functions, in your imported classes:
import netscape.javascript.*
Next, you need to create a handle for the JavaScript window. To do this, define a variable of type JSObject and use the getWindow method to assign it:
JSObject js = new JSObject; js = JSObject.getWindow(this);
Once you have a handle for the JavaScript window, you can get the objects you need to access. To do this, you need to call the getMember method for each property. For example, to make the text1 field on the form1 form accessible:
js = JSObject.getWindow(this); JSObject document = (JSObject) js.getMember("document"); JSObject form1 = (JSObject) document.getMember("form1"); JSObject text1 = (JSObject) form1.getMember("text1");
You are creating an object of type JSObject for the document, then for each object underneath it.
You can also call JavaScript functions and methods from within Java, using the same technique. The two methods you use for this purpose are call and eval. For example, this statement calls a JavaScript method to display an alert message:
js = JSObject.getWindow(this); js.call("window.alert('This is a test.');");
In this chapter you learned about Java and how it can work with JavaScript:
You can continue exploring JavaScript and Java with one of the following chapters:
Can I access third-party Java applets from JavaScript, particularly those that were created without JavaScript in mind? | |
Usually not. The applet must include the Netscape package, which includes the required functions for JavaScript and Java communication. | |
Can I use more than one Java applet in a Web page? | |
Yes. However, note that this may cause severe slowdowns (and sometimes crashes) in some versions of Netscape. | |
Judging by the examples in this chapter, Java isn't very similar to JavaScript. Why on earth do they have similar names? | |
JavaScript was originally called LiveScript, but was renamed after Java. Although some of the syntax is based on Java, it's a very different language. |