FileDocCategorySizeDatePackage
WebBrowserFrame.javaAPI DocExample2815Thu Nov 08 00:23:26 GMT 2001com.ora.rmibook.chapter2

WebBrowserFrame.java

package com.ora.rmibook.chapter2;


import com.ora.rmibook.gui.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.io.*;
import java.net.*;


public class WebBrowserFrame extends ExitingFrame {
    private JTextArea _displayArea;
    private JTextField _url;
    private JButton _fetchButton;

    protected void buildGUI() {
        JPanel newContentPane = new JPanel(new BorderLayout());

        newContentPane.add(buildButtonBar(), BorderLayout.SOUTH);
        newContentPane.add(buildMainPanel(), BorderLayout.CENTER);
        setContentPane(newContentPane);
        setSize(250, 300);
    }

    private JComponent buildButtonBar() {
        JPanel topPanel = new JPanel(new GridLayout(1, 2));

        _url = new JTextField(40);
        _fetchButton = new ActionButton(new FetchURL());
        topPanel.add(_url);
        topPanel.add(_fetchButton);
        return topPanel;
    }

    private JComponent buildMainPanel() {
        _displayArea = new JTextArea();
        _displayArea.setLineWrap(true);
        JScrollPane scrollPane = new JScrollPane(_displayArea);

        scrollPane.setBorder(new EtchedBorder());
        return scrollPane;
    }

    private void askForPage(Socket webServer) throws IOException {
        BufferedWriter request;

        request = new BufferedWriter(new OutputStreamWriter(webServer.getOutputStream()));
        request.write("GET / HTTP/1.0\n\n");
        request.flush();
    }

    private void receivePage(Socket webServer) throws IOException {
        BufferedReader webPage = null;

        webPage = new BufferedReader(new InputStreamReader(webServer.getInputStream()));
        String nextLine;

        while (null != (nextLine = webPage.readLine())) {
            _displayArea.append(nextLine + "\n");
        }
        return;
    }

    private class FetchURL extends AbstractAction {
        public FetchURL() {
            putValue(Action.NAME, "Fetch");
            putValue(Action.SHORT_DESCRIPTION, "Retrieve the indicated URL");
        }

        public void actionPerformed(ActionEvent e) {
            String url = _url.getText();
            Socket webServer;

            try {
                webServer = new Socket(url, 80);
            } catch (Exception invalidURL) {
                _displayArea.setText("URL " + url + " is not valid.");
                return;
            }
            try {
                askForPage(webServer);
                receivePage(webServer);
                webServer.close();
            } catch (IOException whoReallyCares) {
                _displayArea.append("\n Error in talking to the web server.");
            }
        }
    }
}