CS396N - Web Programming
Spring 2002
Chapter 21 - Using Applets as Front Ends to Server-Side Programs


import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.net.*;

/** An applet that reads a value from a TextField,
 *  then uses it to build three distinct URLs with embedded
 *  GET data: one each for Google, Infoseek, and Lycos.
 *  The browser is directed to retrieve each of these
 *  URLs, displaying them in side-by-side frame cells.
 *  Note that standard HTML forms cannot automatically
 *  perform multiple submissions in this manner.

public class SearchApplet extends Applet
                          implements ActionListener {
  private TextField queryField;
  private Button submitButton;

  public void init() {
    setFont(new Font("Serif", Font.BOLD, 18));
    add(new Label("Search String:"));
    queryField = new TextField(40);
    submitButton = new Button("Send to Search Engines");

  /** Submit data when button is pressed <B>or</B>
   *  user presses Return in the TextField.
  public void actionPerformed(ActionEvent event) {
    String query = URLEncoder.encode(queryField.getText());
    SearchSpec[] commonSpecs = SearchSpec.getCommonSpecs();
    // Omitting HotBot (last entry), as they use JavaScript to
    // pop result to top-level frame. Thus the length-1 below.
    for(int i=0; i<commonSpecs.length-1; i++) {
      try {
        SearchSpec spec = commonSpecs[i];
        // The SearchSpec class builds URLs of the
        // form needed by some common search engines.
        URL searchURL = new URL(spec.makeURL(query, "10"));
        String frameName = "results" + i;
        getAppletContext().showDocument(searchURL, frameName);
      } catch(MalformedURLException mue) {}

/** Small class that encapsulates how to construct a
 *  search string for a particular search engine.

public class SearchSpec {
  private String name, baseURL, numResultsSuffix;

  private static SearchSpec[] commonSpecs =
    { new SearchSpec("google",
      new SearchSpec("infoseek",
      new SearchSpec("lycos",
                     "http://lycospro.lycos.com/cgi-bin/" +
      new SearchSpec("hotbot",

  public SearchSpec(String name,
                    String baseURL,
                    String numResultsSuffix) {
    this.name = name;
    this.baseURL = baseURL;
    this.numResultsSuffix = numResultsSuffix;

  public String makeURL(String searchString,
                        String numResults) {
    return(baseURL + searchString +
           numResultsSuffix + numResults);

  public String getName() {

  public static SearchSpec[] getCommonSpecs() {

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  <TITLE>Search Applet Frame</TITLE>

<APPLET CODE="SearchApplet.class" WIDTH=600 HEIGHT=100>
  <B>This example requires a Java-enabled browser.</B>