След: Пользовательские Сети
Урок: Работа с URL
Чтение из и Запись в URLConnection
Домашняя страница > Пользовательские Сети > Работа с URL

Чтение из и Запись в URLConnection

URLConnection class содержит много методов, которые позволяют Вам связываться с URL по сети. URLConnection центральный HTTP class; то есть, многие из его методов полезны только, когда Вы работаете с HTTP URL. Однако, большинство протоколов URL позволяет Вам читать из и писать в соединение. Этот раздел описывает обе функции.

Чтение из URLConnection

Следующая программа выполняет ту же самую функцию как URLReader программа, показанная в Чтении Непосредственно из URL.

Однако, вместо того, чтобы получить входной поток непосредственно от URL, эта программа явно получает a URLConnection возразите и получает входной поток от соединения. Соединение открывается неявно, вызывая getInputStream. Затем, как URLReader, эта программа создает a BufferedReader на входном потоке и чтениях от этого. Полужирные операторы выделяют различия между этим примером и предыдущим:

import java.net.*;
import java.io.*;

public class URLConnectionReader {
    public static void main(String[] args) throws Exception {
        URL oracle = new URL("http://www.oracle.com/");
        URLConnection yc = oracle.openConnection();
        BufferedReader in = new BufferedReader(new InputStreamReader(
                                    yc.getInputStream()));
        String inputLine;
        while ((inputLine = in.readLine()) != null) 
            System.out.println(inputLine);
        in.close();
    }
}

Вывод из этой программы идентичен выводу из программы, которая открывает поток непосредственно от URL. Можно использовать так или иначе, чтобы читать из URL. Однако, чтение из a URLConnection вместо того, чтобы читать непосредственно из URL могло бы быть более полезным. Это - то, потому что можно использовать URLConnection объект для других задач (как запись в URL) одновременно.

Снова, если программа зависает, или Вы видите сообщение об ошибке, Вам, вероятно, придется установить узел прокси так, чтобы программа могла найти сервер Oracle.

Запись в URLConnection

Много страниц HTML содержат формы — текстовые поля и другой GUI возражают, что позволяют Вам вводить данные, чтобы передаться к серверу. После того, как Вы вводите запрошенную информацию и инициируете запрос, нажимая кнопку, Ваш Веб-браузер пишет данные в URL по сети. В другом конце сервер получает данные, обрабатывает это, и затем отправляет Вам ответ, обычно в форме новой страницы HTML.

Многие из этих HTML-форм используют МЕТОД POST HTTP, чтобы отправить данные серверу. Таким образом запись в URL часто вызывают, отправляя на URL. Сервер распознает запрос POST и читает данные, отправленные от клиента.

Для программы Java, чтобы взаимодействовать со стороной сервера обрабатывают это, просто должен быть в состоянии записать в URL, таким образом обеспечивая данные для сервера. Это может сделать это следующим эти шаги:

  1. Создайте a URL.
  2. Получите URLConnection объект.
  3. Установите нагрузочную способность на URLConnection.
  4. Откройте соединение с ресурсом.
  5. Получите поток вывода от соединения.
  6. Запишите в поток вывода.
  7. Закройте поток вывода.

Вот маленькое servlet именованный ReverseServlet (или если Вы предпочитаете сценарий cgi-мусорного-ведра). Можно использовать этот сервлет, чтобы протестировать следующий пример программы.

Сервлет, работающий в контейнере, читает из его InputStream, инвертирует строку, и пишет это в свой OutputStream. Сервлет требует ввода формы string=string_to_reverse, где string_to_reverse строка, символы которой Вы хотите выведенный на экран в обратном порядке.

Вот пример программы, который работает ReverseServlet по сети через a URLConnection:

import java.io.*;
import java.net.*;

public class Reverse {
    public static void main(String[] args) throws Exception {

        if (args.length != 2) {
            System.err.println("Usage:  java Reverse "
                + "http://<location of your servlet/script>"
                + " string_to_reverse");
            System.exit(1);
        }

        String stringToReverse = URLEncoder.encode(args[1], "UTF-8");

        URL url = new URL(args[0]);
        URLConnection connection = url.openConnection();
        connection.setDoOutput(true);

        OutputStreamWriter out = new OutputStreamWriter(
                                         connection.getOutputStream());
        out.write("string=" + stringToReverse);
        out.close();

        BufferedReader in = new BufferedReader(
                                    new InputStreamReader(
                                    connection.getInputStream()));
        String decodedString;
        while ((decodedString = in.readLine()) != null) {
            System.out.println(decodedString);
        }
        in.close();
    }
}

Давайте исследуем программу и давайте видеть, как она работает. Во-первых, программа обрабатывает свои параметры командной строки:

if (args.length != 2) {
    System.err.println("Usage:  java Reverse "
        + "http://<location of your servlet/script>"
        + " string_to_reverse");
    System.exit(1);
}       

String stringToReverse = URLEncoder.encode(args[1], "UTF-8");

Эти операторы гарантируют, что пользователь обеспечивает два и только два параметра командной строки для программы. Параметры командной строки являются расположением ReverseServlet и строка, которая будет инвертирована. Это может содержать пробелы или другие неалфавитно-цифровые символы. Эти символы должны быть закодированы, потому что строка обрабатывается продвигающаяся к серверу. URLEncoder Методы class кодируют символы.

Затем, программа создает URL объект, и наборы соединение так, чтобы это могло записать в это:

URL url = new URL(args[0]);
URLConnection connection = url.openConnection();
connection.setDoOutput(true);

Программа тогда создает поток вывода на соединении и открывается OutputStreamWriter на этом:

OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream());

Если URL не поддерживает вывод, getOutputStream метод бросает UnknownServiceException. Если URL действительно поддерживает вывод, то этот метод возвращает поток вывода, который соединяется с входным потоком URL на стороне сервера — вывод клиента является вводом сервера.

Затем, программа пишет запрошенную информацию в поток вывода и закрывает поток:

out.write("string=" + stringToReverse);
out.close();

Этот код пишет в поток вывода, используя write метод. Таким образом, можно видеть, что запись данных к URL столь же легка как запись данных к потоку. Данные, записанные потоку вывода на стороне клиента, являются вводом для сервлета на стороне сервера. Reverse программа создает ввод в форме, требуемой сценарием, предварительно ожидая string= к закодированной строке, которая будет инвертирована.

Сервлет читает информацию, которую Вы пишете, выполняет обратную работу на строковом значении, и затем отсылает это назад к Вам. Вы теперь должны считать строку, которую отослал назад сервер. Reverse программа делает это как это:

BufferedReader in = new BufferedReader(
                            new InputStreamReader(
                            connection.getInputStream()));
String decodedString;
while ((decodedString = in.readLine()) != null) {
    System.out.println(decodedString);
}
in.close();

Если Ваш ReverseServlet располагается в http://example.com/servlet/ReverseServlet, тогда, когда Вы работаете Reverse использование программы

http://example.com/servlet/ReverseServlet "Reverse Me"

как параметр (включая метки двойной кавычки), следует видеть этот вывод:

Reverse Me
 reversed is: 
eM esreveR

Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Соединение с URL
Следующая страница: Все О Сокетах



Spec-Zone.ru - all specs in one place