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