Java is Web-Enabled? • Myth: Java is only for the Web – Java “applets” run in Web pages – Java “applications” run stand-alone – Current usage (roughly) • Client (applet): 5% • Desktop (application): 45% • Server (servlets/JSP/EJB): 50% www.corewebprogramming.com Java is Safe? • Truth: Restrictions on permissible operations can be enforced – No “raw” memory manipulation (directly or indirectly). • Thus, it is easy to identify prohibited operations. – Applets, by default, prohibited from: • • • • Reading from the local disk Writing to the local disk Executing local programs Opening network connections other than to HTTP server • Discovering private info about user (username, directories, OS patch level, applications installed, etc.). www.corewebprogramming.com Java is Cross-Platform? • Truth: Java programs can compile to machine-independent bytecode Java Source Code Compiler (javac) Java Bytecode Compile Time Java Bytecode JIT Compiler or Interpreter Execution Run Time • Truth: All major operating systems have Java runtime environments – Most bundle it (Solaris, MacOS, Windows 2000, OS/2) www.corewebprogramming.com Java is Cross-Platform? • Myth: Safety and machine independence can be achieved with no performance penalty – Current systems are about 20% slower than C++ – Upcoming releases claim to lower or eliminate that gap – Expect the gap to stay at 10% or more • Myth: Java is interpreted – Early releases were interpreted – Many major “Just in Time” (JIT) compilers – HotSpot and “native” compilers even faster (IBM, Symantec, TowerJ, etc.) www.corewebprogramming.com Java is Cross-Platform? •Truth: Java has a portable graphics library “Native look & feel” -- Java 1.1 UI controls adapt to OS •Myth: The graphics library has everything most applications need. AWT (Java 1.0 and 1.1) was weak. JFC/Swing (Java 2) much more complete and powerful. www.corewebprogramming.com Java is Cross-Platform? • Myth: Write Once Run Anywhere – Cross-platform code can be achieved, but you must test on all platforms you will deliver on. • Java applications can execute local code • The graphics library behaves slightly differently on different platforms • The behavior of the thread scheduler is only loosely defined • Myth: Java will kill Microsoft – There is also no longer immediate danger of the reverse (Microsoft killing Java) – Microsoft wavered between trying to fight Java and joining it and making money by dominating the market. With .NET, they are back to fighting it again. www.corewebprogramming.com Java is Simple? • Truth: Java greatly simplifies several language features – Java has automatic memory management • Does Windows and takes out the garbage • No dangling pointers. No memory leaks. • A problem for real-time programs – Java simplifies pointer handling • No explicit reference/dereference operations • Everything is a pointer (like Lisp) – No makefiles – No header files – C++ syntax streamlined www.corewebprogramming.com Java is Powerful? • Truth: Java has a rich set of standard libraries – – – – – – – – – – Networking Threads (lightweight processes) Distributed objects Database access Graphics: GUI controls and drawing Data structure library Arbitrary precision integral and fixed-point arithmetic Digital signatures Serialization (transmitting/reassembling data structures) File and stream compression www.corewebprogramming.com Java is Powerful? • Myth: Java will increase programmer productivity for all applications by XXX%. • Myth: Java will kill C++ • Myth: All software should be written in Java – – – – – – Unix utilities: C Small/medium Windows-only programs: Visual Basic String parsing: Perl High-performance, single-platform OO systems: C++ Air traffic control, aircraft flight software: Ada Knowledge-based systems: Lisp/CLOS www.corewebprogramming.com Key Java Packages and Protocols • Core Technologies – – – – – – JDBC RMI Jini (Device Networking) JavaBeans Swing Java 2D • Standard Extensions – Servlets and JavaServer Pages (JSP) – Enterprise Java Beans – Java 3D www.corewebprogramming.com Java Packages and Protocols: JDBC (Java DataBase Connectivity) • Standardizes mechanism for making connection to database server – Requires server-specific driver on client. No change to server. • Standardizes mechanism for sending queries – Either regular or parameterized queries (stored procedures) • Standardizes data structure of query result – Assumes relational data, so data structure is a table • Does not standardize SQL syntax – Queries are simply strings – Server extensions and enhancementswww.corewebprogramming.com supported Java Packages and Protocols: Remote Method Invocation (RMI) • Built-in Distributed Object Protocol – RMI lets a developer access a Java object and manipulate it in the normal manner. Behind the scenes, each function call really goes over the network to a remote object. – Arbitrary Java data structures can be sent over the network with little or no special packaging, due to Java’s “serialization” mechanism – Similar to a simplified CORBA, but restricted to Java-to-Java communication • Jini – RMI-based protocol for self-documenting services. – Allows real “plug and play” devices -- no separate drivers – Jury is out on eventual success. Security and industry adoption are open questions. www.corewebprogramming.com Java Packages and Protocols: JavaBeans • JavaBeans is to Java as ActiveX is to Visual C++. – Lets you package a Java program as a software “component” – Visual tools can modify/manipulate it without knowing anything about it in advance • For example, you can drop a Bean into Visual Café, IBM VisualAge for Java, Inprise (Borland) JBuilder, Sybase PowerJ, Metrowerks CodeWarrior, Sun JavaWorkshop, etc., and it is automatically available from their tool palette for drag-and-drop development – Better security and portability than ActiveX – More ActiveX components availablewww.corewebprogramming.com Java Packages and Protocols: Swing • Standard GUI-control (widget) library in Java 2 • Many more built-in controls • Much more flexible and customizable • Includes many small features aimed at commercial applications – Tooltips, tabbed panes, on-line help, HTML support, dockable toolbars, multi-document interface, etc. • Look and feel can be changed at run time www.corewebprogramming.com Java Packages and Protocols: Servlets and JavaServer Pages (JSP) • Servlets: Java’s answer to CGI – – – – Efficient: thread, not process, per request Convenient: HTTP headers, cookies, etc. Powerful: persistence, session tracking, etc. Secure: no buffer overflows or shell escapes • Supported by virtually all Web servers: – Native support: Netscape/iPlanet, IBM WebSphere, Oracle 8i/9i and Oracle Application Server, BEA WebLogic, Silverstream, Sapphire/Web, etc. – Via add-on engine: Apache, Microsoft IIS and Personal WebServer, Netscape FastTrack, O’Reilly WebSite, StarNine WebSTAR for MacOS, etc. • JavaServer Pages (JSP) – Convenient and efficient way to combine servlets and HTML. Portable alternative to ASP & ColdFusion. www.corewebprogramming.com Java Packages and Protocols: Enterprise JavaBeans (EJB) • EJBs are to server components what regular JavaBeans are to application components • Standardizes access to services like load balancing, persistence, failover, etc. • Builds on JavaBeans, CORBA, and RMI “under the hood” • Potentially accessible via non-Java programs • Application Servers Supporting EJB – BEA WebLogic, IBM WebSphere, Netscape, Oracle, Progress SW Apptivity, NetDynamics, Sybase, Bluestone Saphire/Web etc. www.corewebprogramming.com Basic Hello World Application • “Application” is Java lingo for a stand-alone Java program – Note that the class name and the filename must match – A file can contain multiple classes, but only one can be declared public, and that one’s name must match the filename • File HelloWorld.java: public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, world."); } } www.corewebprogramming.com Basic Hello World Application (Continued) • Compiling: javac HelloWorld.java • Running: java HelloWorld • Output: Hello, world. www.corewebprogramming.com Command Line Arguments • File ShowArgs.java: public class ShowArgs { public static void main(String[] args) { for(int i=0; i<args.length; i++) { System.out.println("Arg " + i + " is " + args[i]); } } } www.corewebprogramming.com Command Line Arguments, Results • Compiling and Running: > javac ShowArgs.java > java Arg 0 Arg 1 Arg 2 Arg 3 ShowArgs fee fie foe fum is fee is fie is foe is fum www.corewebprogramming.com Basic Hello WWW Applet • File HelloWWW.java: import java.applet.Applet; import java.awt.*; public class HelloWWW extends Applet { public void init() { setBackground(Color.gray); setForeground(Color.white); setFont(new Font("SansSerif", Font.BOLD, 30)); } public void paint(Graphics g) { g.drawString("Hello, World Wide Web.", 5, 35); //5=left, 35=bottom } } www.corewebprogramming.com Basic Hello WWW Applet (Continued) • File HelloWWW.html: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE>HelloWWW: Simple Applet Test.</TITLE> </HEAD> <BODY> <H1>HelloWWW: Simple Applet Test.</H1> <APPLET CODE="HelloWWW.class" WIDTH=400 HEIGHT=40> <B>Error! You must use a Java enabled browser.</B> </APPLET> </BODY> </HTML> www.corewebprogramming.com Basic Hello WWW Applet (Continued) • Compiling: javac HelloWWW.java • Running: Load HelloWWW.html in a Java-enabled browser www.corewebprogramming.com Customizing Applets with PARAM import java.applet.Applet; import java.awt.*; public class Message extends Applet { private int fontSize; private String message; public void init() { setBackground(Color.black); setForeground(Color.white); fontSize = getSize().height - 10; setFont(new Font("SansSerif", Font.BOLD, fontSize)); // Read heading message from PARAM entry in HTML. message = getParameter("MESSAGE"); } } public void paint(Graphics g) { if (message != null) g.drawString(message, 5, fontSize+5); } www.corewebprogramming.com Customizing Applets with PARAM, cont. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE>The Message Applet</TITLE> </HEAD> <BODY BGCOLOR="WHITE"> <H1>The <CODE>Message</CODE> Applet</H1> <P> <APPLET CODE="Message.class" WIDTH=325 HEIGHT=25> <PARAM NAME="MESSAGE" VALUE="Tiny"> <B>Sorry, these examples require Java</B> </APPLET> <P> <APPLET CODE="Message.class" WIDTH=325 HEIGHT=50> <PARAM NAME="MESSAGE" VALUE="Small"> <B>Sorry, these examples require Java</B> </APPLET> ... </BODY> </HTML> www.corewebprogramming.com Customizing Applets with PARAM, Result www.corewebprogramming.com Summary • Java is a complete language, supporting both standalone applications and Web development • Java is compiled to bytecode and can be run on any platform that supports a Java Virtual Machine • Java 2 Platform is available in a Standard Edition, Enterprise Edition, or Micro Edition • Compiling: use “javac” • Executing standalone programs: use “java” • Executing applets: load HTML file in browser www.corewebprogramming.com