Java is Web-Enabled? • Myth: only

advertisement
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
Download