A 2006 survey on java.net posed a simple question to developers: What's wrong with applets? By a significant margin, the number one complaint was that they are "too hard to deploy." This article, the first in a series, takes a look at the issue of Java applet deployment and in particular how using the <object> tag can radically simplify and enhance both the developer and end user experience.
Applets? You Must Be Joking!
Applets got a well-deserved bad reputation in the early days of Java. They were slow, difficult to deploy across browsers, and over-hyped. The situation has signficantly changed for the better, but the bad reputation lingers.
For a large number of specialized Web components, applets are the only platform.
Whether a similar renaissance happens for applets is anybody's guess, but most of the prerequisites have already been met.
Deployment with the
If you decide to develop Web applications with applets, a major consideration will eventually become how to deploy them. Unfortunately, a bewildering array of often contradictory advice is available on the subject - most of it outdated.
Many sources recommend using the
<applet> tag. It's the oldest method, and will generally work on most browsers. For example, to deploy my company's structure editor applet ChemWriter, the following code could be used:
<applet code="com/metamolecular/chemwriter/applet/EditorApplet.class" archive="/path/to/applets/chemwriter.jar" width="600" height="300"> <param name="persistState" value="false" /> </applet>
<applet> tag has some very important strikes against it. The first is that its use is now deprecated in HTML. In other words, whatever support browsers now have for it is living on borrowed time.
The second problem with the
<applet> tag is an insidious bug in Internet Explorer (as if there were any other kind). Most hardware suppliers pre-install Java onto their Microsoft-based machines, which is a good thing. The bad thing is that at least one major manufacturer disables the Java console in IE 7 at the same time. Under IE 7, disabling the Java console renders all
<applet> tags invisible. Counterintuitive as it may seem, this is what happens. The insidious part is that perplexed users know they have Java installed because they can see the plug-in, are being told by IE that it's active, can find some applets that do work and - well, you get the idea.
The third problem with the
<applet> tag is that, by itself, it has no mechanism to indicate which version of Java is required. This can be a very important consideration for applets that take advantage of the major advances in functionality and performance of the Java platform in recent years.
A Better Way: Deployment with the
All major browsers support the
<object> tag, and this is the preferred method for deploying applets. Provided that Internet Explorer's peculiarities are accounted for, a single piece of valid HTML can render applets on all major browsers including:
- IE 6/7
- Firefox 1.5/2
As a specific example using ChemWriter, the
<applet> tag above can be re-written with the
<!--[if !IE]> --> <object classid="java:com/metamolecular/chemwriter/applet/EditorApplet.class" type="application/x-java-applet" archive="/path/to/applets/chemwriter.jar" height="350" width="550" > <param name="code" value="com/metamolecular/chemwriter/applet/EditorApplet.class" /> <!-- For Konqueror --> <param name="archive" value="/path/to/applets/chemwriter.jar" /> <param name="persistState" value="false" /> <center> <img src="/path/to/images/chemwriter_logo.png" /> <p><strong>ChemWriter content requires Java 1.4.2 or higher, which your browser does not appear to have.</strong></p> <p><a href="http://www.java.com/en/download/index.jsp">Get the latest Java Plug-in.</a></p> </center> </object> <!--<![endif]--> <!--[if IE]> <object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" codebase="http://java.sun.com/products/plugin/autodl/jinstall-1_4-windows-i586.cab#Version=1,4,0,0" height="350" width="550" > <param name="code" value="com/metamolecular/chemwriter/applet/EditorApplet.class" /> <param name="archive" value="/path/to/applets/chemwriter.jar" /> <param name="persistState" value="false" /> <center> <img src="/path/to/images/chemwriter_logo.png" /> <p><strong>ChemWriter content requires Java 1.4.2 or higher, which your browser does not appear to have.</strong></p> <p><a href="http://www.java.com/en/download/index.jsp">Get the latest Java Plug-in.</a></p> </center> </object> <![endif]-->
Before explaining the code, here's what the verbosity buys:
- It works with both IE 6/7 and standards-compliant browsers such as Firefox.
- It prompts the user to download the correct JVM, without immediately directing them away from the current page.
- Firefox and IE users can opt to install the Java plugin without ever leaving their current page.
- It works in IE 7 with the Java console disabled.
You've Got Some 'Splainin' to Do
The code above is based on documentation found on this site, which also details the meaning of the
The main idea is that Internet Explorer handles the
<object> tag in its own idiosyncratic, lovable way. Most of this difference is in the
<object> element itself and the
classid attribute in particular. By taking advantage of Internet Explorer's support for conditional comments, we can handle both IE and the rest with one chunk of HTML.
A Live Demonstration
For a live demonstration of the above technique, see the ChemWriter Home Page. If you have Java 1.4.2 or higher installed and activated in your browser, you'll see the most recent version of the ChemWriter editor applet. If not, you'll see the ChemWriter logo and a link to install Java. Firefox and IE will also display an "Install Plugin" bar at the top of the browser for in-place installation of the JVM.
Click to Activate: Working Around Eolas
<head> tag, obviates the need to write the
Applet deployment, like Java itself, has come a long way in the last ten years. This article has shown one method to deploy applets into highly heterogeneous computing environments with relatively little effort.
But deployment is only one aspect of interactive Web development using applets. Future articles will discuss some of the others.