Java Origins: Embedded Systems (1991-1994)
Java (originally called Oak) was developed because Sun was having difficulty using C++ as part of a larger project. Java was designed to have a small footprint when it ran standalone in small machines and devices. The Java language was derived from C++ but without many of the cumbersome, difficult-to-use features of C++. Java's cross-platform capability originally addressed the problem that applications for embedded devices must run on a wide variety of hardware (without the benefit of a standardized operating system).

Java failed to capture the market in spite of a concerted push into Interactive TV. For a period, Java looked like another good technical idea that would fail comercially.

Java: A Client-side Wonder (1995-1997)
The Internet came on strong in 1995 but webpages did not have dynamic capability. Java soon looked like an ideal tool: it could run on the many operating systems of Internet-connected clients. Netscape licenced Java in mid-1995 for its browser. In a short period, many applets (which run inside a browser) were built and Java quickly gained popularity and acceptance.

Before long, Sun and others in the anti-Microsoft camp, saw a potential for Java beyond the browser (see Figure 1). The so-called network computer would be a simple device which could run Java applications on the client-side. The camp predicted that soon network computers would make the Windows operating system obsolete.

Figure 1: Dreams of Java Ruling the Client

While Java's cross platform capability and its ability to download applications on-the-fly had promise, Java had limited success on the client-side. A number of factors could explain why Java did not meet its early client-side ambitions:

less refined interface: Java's early GUI model (AWT or Abstract Windowing Toolkit) was relatively primitive, especially compared to an operating system like Windows. A respectable set of GUI objects (Swing) was not shipped until 1998 (and Swing is still not supported by most modern browsers without plugins).
Microsoft's Strength: Microsoft had a dominant market share and worked hard to keep it
Other Methods to Update Clients Software: Good alternative methods were found to keep client software up-to-date (without having to download Java on-the-fly application code each time). Software Management tools like CA Unicenter, IBM Tivoli and HP OpenView can automatically update client-side software when a new software version is available.
HTML/JavaScript Success: Browsers developed their own dynamic capabilities (with DHTML and JavaScript) and many developers found it easier to code in HTML/DHTML and JavaScript. In addition, HTML/DHTML/JavaScript webpages tend to download and "start" faster than Java applets. (Note: Java 1.3 has introduced client-side applet "caching" in an attempt to address the slowness of applet startup but Java 1.3 is not supported, by default, on most browsers in use).

Java's Moved into the Middle Tier (1997 to Present)
Fortunately for Java, Sun started to target middle-tier capabilities for Java so it would run in the Web/Application Server.

In 1997, Sun defined Servlets so Java could be used to generate HTML webpages with dynamic content. Sun also defined Enterprise JavaBeans so Business Logic could be effectively developed in Java.

In 1999, Sun pulled together its overall middle tier solution for Java called Java 2 Enterprise Edition (J2EE). J2EE describes how to build middle-tier components in a way that these application components can run on Web Servers and Application Servers produced by many leading vendors. The Web/Application Server automate many of the mechanical services like parsing webpages, handling security, persistence/connection pooling, messaging and name services. The J2EE framework frees developers to concentrate on building application content while the vendors provide the logic that provides scalability, reliability security, etc.

Most would agree that Java's current strength lies in building middle tier components.

In future, Java may gain more success in the client (especially if Window's grip weakens). Better Java performance and the introduction of Java 2 Micro Edition open the door for increased use of Java in embedded devices.