CGI Programming in Java This separate page summarizes the use of Java for CGI programming: how to use Java applets to talk to CGI programs via either GET or POST, and how to write CGI programs in Java. Includes on-line examples, a CGI form parser in Java, and an HTTP cookie value parser in Java. Accessing Java from JavaScript . This separate page summarizes the ways to call Java from JavaScript in Netscape 3 and 4. These programming approaches also generally work in the Windows version of IE4. Accessing JavaScript from Java . This separate page summarizes the ways to call JavaScript from Java in Netscape 3 and 4. These programming approaches also generally work in the Windows version of IE4. Slider . A horizontal slider combining a Scrollbar and a TextField. You can drag the scrollbar or type into the TextField; either way, both stay in sync. Works the same on both Java 1.0 and 1.1, despite differences in how Scrollbar interprets the max value in the two cases. Also tries to work around some Windows 95/NT Scrollbar bugs. The source code is available in Slider.java , with documentation at Slider.html . For an on-line example, see SliderApplet.html . Mouse and Keyboard Event Reporter An applet that reports all mouse and keyboard events in a textfield. An on-line demo is at Events.html , with source code at Events.java (which uses EventPanel.java ). Whiteboard A very simple whiteboard that illustrates Java 1.1 event handling by letting you type text and draw freehand. An on-line demo is at Whiteboard2.html , with Java source at Whiteboard2.java (which uses SimpleWhiteboard2.java ). Java 1.02 version is available at Whiteboard.html , with Java source at Whiteboard.java (which uses SimpleWhiteboard.java ). Java 1.1 Key Listeners A demonstration of Java 1.1 event-handling; two text areas where you can type into either and get the same result in both. An on-line demo (Java 1.1 browsers only) is at Mirror.html , with source code at Mirror.java . Java 1.1 Inner Classes and Mouse Events A simple demo of inner classes to handle mouse events in Java 1.1 (click to draw circles). An on-line demo (Java 1.1 browsers only) is at Circles.html , with source code at Circles.java . Lightweight Components in Java 1.1 A demonstration of the fact that lightweight components in Java 1.1 can be transparent. An on-line demo (Java 1.1 browsers only) is at BetterCircleTest2.html (compare to the opaque heavyweight components at CircleTest2.html ). Source code is at BetterCircleTest2.java (which uses BetterCircle.java ). Source for the heavyweight version is at CircleTest2.java (which uses Circle.java ). Lightweight Containers in Java 1.1 A demonstration of the fact that lightweight containers in Java 1.1 can be transparent. An on-line demo (Java 1.1 browsers only) is at LightPanel.html (compare to the opaque heavyweight panel at HeavyPanel.html ). Source code is at LightPanel.java (source for the opaque heavyweight panel is at HeavyPanel.java ). Frames that Can Be Closed Java Frames that actually (gasp) close when the user instructs them to. I use these as the starting points for all my graphical applications.
Java 1.02 version: QuittableFrame.java Java 1.1 version: CloseableFrame.java - ScrollPanes in Java 1.1 A simple example of a ScrollPane: ScrollPaneTest.java . Built on CloseableFrame.java . Creating Menus in Frames An illustration of pulldown menus: ColorMenu.java . Built on QuittableFrame.java . Serializing Windows in Java 1.1 Creates a Frame that you can stretch, move around, and add circles to by clicking the mouse. If you save it to disk, then running the application in a later session automatically restores it to previous configuration. Source is at SavedFrame.java , which uses CirclePanel.java and is built on CloseableFrame.java . Rolling Your Own Popup Menus in Java 1.02 A way to create tolerable (but not great) popup menus in Java 1.02 by extending Window. Really intended for applications, since most browsers do not let you discover the absolute location of the mouse. However, the on-line demo works on appletviewer, and works somewhat on other browsers if the window is near the upper-left corner of the screen. Source code is at ColorPopupTest.java , which uses ColorPopup.java , and Popup.java . Using FileDialog An example that uses a FileDialog to select a file name, then loads the contents of the file into a TextArea. Source is at DisplayFile.java , and is built on QuittableFrame.java . Network Programming Note that there are PostScript reference sheets which provide explanation that these examples illustrate.
|
GetURL, an application that takes a URL as input and retrieves the file. Talks directly to the HTTP server rather than using URLConnection to illustrate sockets.
|
Expn, an application that finds info on an email address. Given connects to the SMTP server and issues "expn hall". A simple illustration of sockets in Java. -
|
ShowHTML . A Netscape3-specific way of generating HTML on-the-fly or reading it from a stream and sending it to the browser. Defines showPage(applet, htmlString) and showPage(applet, htmlString, frameName) methods. Source is available at ShowHTML.java and a test page that illustrates it is at /TestHTML.html . Exec . A class that simplifies executing remote commands from Java applications. Source code is at Exec.java , with documentation at Exec.html . JavaStub . An application that simplifies prototyping of applets by generating stub files for you. Given a partial filename like HelloWorld, it generates a mostly blank but working class HelloWorld.java which can be run as either an applet or an application. It also generates HelloWorld.html with an APPLET statement that loads HelloWorld.class. Documentation, and the code is at /JavaStub.java and /JavaStub.class . NQueens . Solves the N-Queens problem for N from 4 to 60 in linear time (constant time per queen). The N-Queens problem involves placing N tokens (chess queens) on an NxN grid such that none share a row, column, or diagonal. On an 8x8 grid this amounts to placing 8 queens on a chess board such that none threaten each other. Although this problem is commonly used to illustrate search techniques, there is a common misconception that search is required to find a solution (although search is required to find all solutions). Algorithm adapted from ACM SIGART Bulletin . Run it by loading /NQueens.html . The source code is at /NQueens.java . TrackerUtil . A small class that uses MediaTracker to let you use a single method call to load one or more images, waiting until they are done loading before continuing. Documentation is at TrackerUtil.html , and the code is at TrackerUtil.java .
|
Java Tools
|
Java Tools and libraries
|
Java Programming Books
|
Java Programming FAQs and Tutorials Beginner and advanced Frequently Asked Questions lists. General Java tutorials and tutorials on specific Java programming topics.
|
Java Programming Documentation The core Java APIs (Java 1.02, 1.1, and Java 1.2), specialized APIs (Java3D, PersonalJava, etc.), the official Java language spec, and documentation on Sun Java programming tools (java, javac, javadoc, etc).
|
Java Programming Courses Public or on-site Java short courses taught by an experienced Java developer, well-known Java book author, and award-winning instructor.
|
Downloading Java compilers, Java-enabled browsers, and other standard Java packages. JDK 1.02/1.1/1.2, browsers, JRE, Swing, Java plugin, etc. Includes links to IBM's high-performance Java engine for Java 1.1.7 and Sun's HotSpot performance engine for Java 1.2. Free versions for most operating systems.
|
Java Programming Examples Pen widths for drawing operations, image buttons, network programming, CGI programming in Java, exec, etc. Java source code available for unrestricted use.
|
Java Applet and Class Library Collections General collections of applets or reusable Java classes, including graphics/graphing applets and classes, and Java games.
|
Core Servlets and ; JavaServer Pages Source Code Archive. Hundreds of fully documented servlets, JSP pages, and related Java utilities. From bestselling Sun Microsystems Press book.
|
Core Web Programming Source Code Archive. Hundreds of fully documented Java examples, including Swing, Java 2D, threads, events, XML, servlets, and JSP. Also lots of HTML 4, CSS, and JavaScript examples.
|
Java Programming Resources at Sun General Java resources, official API and language specifications (Java 1.0-2.0), non-core Java packages (Java3D, servlets, EJB, etc), etc.
|
Integrated Development Environments and Editors for Java Commercial and free IDE's for developing Java applets, desktop applications in Java, and server-side Java. Also Java programming editors for Windows, Unix, and MacOS.
|
Free Java Programming Tools Free Java development, debugging, decompiling, and graphics toolkits.
|
|
Other Java Programming Resource Pages Some of the more extensive Java collections, plus online searches of tech news sources for articles about Java.
|
JSP and Servlets - Servlet and JSP specifications, documentation, servers (engines), IDEs, books, training courses, Web hosting providers, and more.
|
Java Security Sites discussing current/recent packages for programming security using Java APIs. Also papers on mostly-old Java security problems.
|
General WWW Programming Resources HTML tutorials, specifications, editors, and validators. CGI and HTTP references. JavaScript documentation. Browser stats. Etc.
|
Java Security
|
Java Security , Testing and Source Code
|
Sun's top-level Java Security Resource Page.
|
Sun's Java Security FAQ. Security Flaws found by Princeton (Dean, Felten, Wallach).
|
PostScript paper analyzing Java security and summarizing several security flaws (most of which are now fixed).
|
Java Security Flaws found by David Hopwood (Old!)
|
Attack where custom bytecodes could be generated that run native methods, and are missed by the bytecode verifier. DNS-spoofing bug. Allows applets to connect to arbitrary hosts instead of just the server from which the applet came. Fixed in Netscape 2.01 and JDK 1.01.
|
Bugs in Sun's alpha HotJava browser. Not present in Netscape or JDK. Summary report of Princeton flaws. Future flaws will be listed here. -
|
David Hopwood's package/Classloader-spoofing bug. Lets applets run arbitrary native code if the cracker can get a file somewhere (anywhere) on the client system in a location the malicious applet knows about. Fixed in Netscape 2.01 and JDK 1.01. Early report.
|
Details on how files could get on local system.
|
Using Netscape's cache to get files on local system.
|
Results of using Netscape's cache. Later experiments found the same problems on MacOS (but not UNIX). -
|
Another fake-the-bytecode-verifier attack, this one from David Hopwood. Like the Princeton attack, it requires custom generation of bytecodes rather than coming from standard Java source, would let the applet run arbitrary native code, and is fixed as of Netscape 2.02 and JDK 1.02.
|
David's list of known and previous Java security bugs, with discussion. This and the PostScript Princeton paper are probably the best two places to start. -
|
Sprint's evade-the-firewall bug. Mark Ladue's "Hostile Applets" collection (mostly denial-of-service attacks).
|
Links to the applets themselves. You may need to quit Netscape if you run any of them.
|
An article that explains many of the applets, with source code. -
|
Article by Godmar Back on bypassing Java's SecurityManager in Netscape. This allows applets to do unrestricted operations, so is only for totally secure intranets that run totally trusted applets. (The owner of the browser has to do this, not the Java programmer who writes the applet!)
|
The comp.lang.java.security Usenet newsgroup.
|
Papers and Information on Garbage Collection
|
These are not specific to Java programming, but general to programming languages that use garbage collection (e.g. Lisp, Smalltalk, Eiffel, ML, and extensions to C and C++).
|
A survey of garbage collection techniques by Paul Wilson. To appear in ACM's Computing Surveys . (PostScript)
|
Collection of GC-related papers from the University of Texas.
|
Garbage Collection FAQ maintained by David Chase of Centerline.
|
Harlequin's Memory Management Reference. GC Articles by Hans-J Boehm at Xerox PARC:
|
complexity of mark-sweep vs. copying garbage collectors. Explicit allocation/deallocation (malloc/free). A garbage collector for C and C++. -
|
Henry Baker's collection of papers, related to GC.
|
Large garbage-collection bibliography from Richard Jones.
|
Great Circle: A commercial collector for C/C++. - |