|
Spec-Zone .ru
спецификации, руководства, описания, API
|
URLConnection class содержит много методов, которые позволяют Вам связываться с URL по сети. URLConnection центральный HTTP class; то есть, многие из его методов полезны только, когда Вы работаете с HTTP URL. Однако, большинство протоколов URL позволяет Вам читать из и писать в соединение. Этот раздел описывает обе функции.
Следующая программа выполняет ту же самую функцию как 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.
Много страниц HTML содержат формы — текстовые поля и другой GUI возражают, что позволяют Вам вводить данные, чтобы передаться к серверу. После того, как Вы вводите запрошенную информацию и инициируете запрос, нажимая кнопку, Ваш Веб-браузер пишет данные в URL по сети. В другом конце сервер получает данные, обрабатывает это, и затем отправляет Вам ответ, обычно в форме новой страницы HTML.
Многие из этих HTML-форм используют МЕТОД POST HTTP, чтобы отправить данные серверу. Таким образом запись в URL часто вызывают, отправляя на URL. Сервер распознает запрос POST и читает данные, отправленные от клиента.
Для программы Java, чтобы взаимодействовать со стороной сервера обрабатывают это, просто должен быть в состоянии записать в URL, таким образом обеспечивая данные для сервера. Это может сделать это следующим эти шаги:
URL.URLConnection объект.URLConnection.Вот маленькое 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