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() {
setBackground(Color.white);
setFont(new Font("Serif", Font.BOLD, 18));
add(new Label("Search String:"));
queryField = new TextField(40);
queryField.addActionListener(this);
add(queryField);
submitButton = new Button("Send to Search
Engines");
submitButton.addActionListener(this);
add(submitButton);
}
/** 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",
"http://www.google.com/search?q=",
"&num="),
new SearchSpec("infoseek",
"http://infoseek.go.com/Titles?qt=",
"&nh="),
new SearchSpec("lycos",
"http://lycospro.lycos.com/cgi-bin/" +
"pursuit?query=",
"&maxhits="),
new SearchSpec("hotbot",
"http://www.hotbot.com/?MT=",
"&DC=")
};
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() {
return(name);
}
public static SearchSpec[] getCommonSpecs() {
return(commonSpecs);
}
}
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>Search Applet Frame</TITLE>
</HEAD>
<BODY BGCOLOR="WHITE">
<CENTER>
<APPLET CODE="SearchApplet.class" WIDTH=600 HEIGHT=100>
<B>This example requires a Java-enabled browser.</B>
</APPLET>
</CENTER>
</BODY>
</HTML>