русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Обмен данными с сайтом


Дата добавления: 2015-06-12; просмотров: 1469; Нарушение авторских прав


Язык программированияJava ориентирован на создание приложений для интернета. И в этом языке есть специальные классы для передачи данных через интернет. Конечно, передача данных возможна только при включенном интернете.

Если интернет не подключен, то наше Java-приложение не сможет передать и получить данные с сайта. Давайте предупредим об этом пользователя сообщением. Передачу данных будем осуществлять по протоколу HTTP. Название этого протокола мы постоянно видим в адресной строке браузера: http://.

Для решения нашей задачи не нужно изучать протокол HTTP–достаточно понимать, что передача данных будет происходить по данному протоколу.

Для передачи данных требуется знать адрес страницы, которой передаются данные, например http://puh/tovar.php.Тогда соответствующая страница сможет обработать наши данные и вернуть нам ответ при условии, что на ней подготовлен программный код для этих целей. Как принимать данные из PHP и возвращать ответ, мы узнаем позже.Пока нам достаточно знать, что данные смогут быть обработаны нужным образом.Одним из вариантов передачи данных является GET-запрос. Наши данные не носят характер секретных данных, мы будем передавать лишь цифры по десяти позициям товаров, поэтому их можно передавать без шифрования. GET-запрос записывается в виде:

http://puh/tovar.php?t1=10&t2=20&t3=30&

Сначала идет адрес страницы, которой передаются данные:

http://puh/tovar.php, далее идет знак вопроса (?)–это началоGET-запроса, после знака вопроса идет список параметров с указанными значениями.Значение указывается через равенство(=), параметры разделяются символом амперсанда (&). В приведенном примере передаются три параметра: t1, t2, t3 со значениями:10, 20, 30 соответственно. Количество параметров, их имена и значения могут быть и другими. Например, нужно передать черезGET-запрос имя,фамилию и возраст человека. Это можно сделать так:



?im=Вася&famil=Петров&vozr=15&

Три параметра: im–имя, famil –фамилия, vozr–возраст; значения соответственно:Вася, Петров, 15. Имена параметров выбираются произвольно по правилам именования переменных. Эти имена параметров будут использоваться на принимающей странице в программном коде PHP.

Наша задача передать десять значений о количестве товаров,поэтому нам нужно десять параметров.Назовем параметры: tov –сокращение от слова товар и добавим к каждому параметру цифру с номером товара.Получится следующий GET-запрос:

?tov1=0&tov2=0&tov3=0&tov4=0&tov5=0&tov6=0&tov7=0&tov8=0&tov9=0&tov10=0&

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

Допустим, пользователь ввел значения (см. рис.4.23):

Рис. 4.23

В этом случае запрос должен выглядеть так:

?tov1=10&tov2=20&tov3=30&tov4=40&tov5=0&tov6=0&tov7=0&tov8=0&tov9=0&tov10=90&

Незаполненная ячейка таблицы будет равносильна нулевому значению! Для решения данной задачи нам необходимо перебрать все строки таблицы и получить значения, введенные в четвертую колонку. Перейдем на закладку с программным кодом, и после объявления переменных класса: prog добавим метод для формированияGET-запроса(см. рис. 4.24):

Рис. 4.24

Мы добавили программный код:

// Метод для созданияGET-запроса

private String makeGet()

{

//Переменная для формированияGET-запроса

String rez = "?";

// Возврат значения

return rez;

}

Метод makeGet() будет возвращать строковое значение в виде:

?tov1=10&tov2=20&tov3=30&tov4=40&tov5=0&tov6=0&tov7=0&tov8=0&tov9=0&tov10=90&

Закончим метод makeGet(), в окончательном виде он будет выглядеть так:

// Метод для созданияGET-запроса

private String makeGet()

{

//Переменная для формированияGET-запроса

String rez = "?";

// Перебираем десять строчек таблицы в цикле

for (int i=0;i<10;i++)

{

// Прибавляем в конец строки значение: tov{номер}=

rez += ("tov"+(i+1)+"=");

// Переменная для количества

int kol;

try //Попытка

{

// Получаем значение из ячейки таблицы

// приводим к типуString и срезаем пробелы справа и слева

String str = tableTovar.getValueAt(i, 3).toString().trim();

//Приводим к целому типу

kol = Integer.parseInt(str);

}

catch (Exception e) //Исключение

{

// Если в ячейке ничего не было - считаем,

// что нулевое значение

kol=0;

}

// Прибавляем в конец строки количество и символ: &

rez += ""+kol+"&";

}

// Возврат значения

return rez;

}

Рассмотрим программный код. Цикл for выполняет десять шагов (столько же строк в таблице). Конструкция try-catch необходима для контроля пустых значений в ячейках таблицы, в случае пустой ячейки будет срабатывать блок catch. В этом случае считаем, что указано нулевое значение:

kol=0;

Обращение к таблице происходит по имени tableTovar. При помощи метода getValueAt(i, 3)можно получить значение в ячейке по номеру строки и колонки: первый параметр– номер строки,второй параметр –номер колонки. Важно помнить, что нумерация начинается с нуля!Метод toString()осуществляет перевод в строковый тип, метод trim()удаляет пробелы справа и слева. Строка:

String str = tableTovar.getValueAt(i, 3).toString().trim();

помещает значение из ячейки в переменную str.

Строка:

kol = Integer.parseInt(str);

выполняет перевод к типу int, целому типу.

Перед циклом объявлена переменная строкового типа с начальным значением: "?":

String rez = "?";

На каждом шаге цикла, в самом начале его действия, к этой строке прибавляется значение с именем параметра и символом равенства. После первого шага цикла, значение переменной rezбудет: "?tov1=".Далее прибавляется полученное значение из ячейки таблицы и символ амперсанд (&). Таким образом, на каждом шаге цикла будет прибавляться параметр с его значением. В результате, метод вернет полный GET-запрос:

// Возврат значения

return rez;

Теперь остается отправить GET-запрос и получить на него ответ.

Для решения этой задачи потребуется добавить библиотеки.Переходим в самую верхнюю часть программного кода и добавляем строки(см. рис. 4.25).

Рис. 4.25

Основная библиотека в этом списке:

// Для работы с сетью

import java.net.*;

Это библиотека позволяет отправить данные по протоколуHTTP. Именно благодаря ей, мы сможем отправить и получить данные.

Создадим обработчик события при нажатии на кнопку для отправления данных. Он создается двойным щелчком левой клавиши мыши по соответствующей кнопке (см.рис. 4.26):

Рис. 4.26

Весь оставшийся код приложения будет помещен внутрь методаactionPerformed (см. рис. 4.27):

Рис. 4.27

Данные о поступившем количестве товара будут отправляться на сайт и будут сохраняться в базе данных. В ответ сайт будет отправлять строку с информацией об остатках товаров с учетом вновь поступившего товара. Сайт будет выдавать ответ в виде строки:

10~20~30~40~50~60~70~80~90~100

Десять значений –каждое значение отделяется от другого символом тильда(~). В обработчик события "нажатие на кнопку" поместим следующий код:

// Формируем GET-запрос для отправки

String str = "http://puh/tovar.php"+makeGet();

// Переменная для проверки успешной отправки данных

boolean flag = false;

try

{

// Адрес подключения

URL url = new URL(str);

// HTTP-подключение

HttpURLConnection conn =

(HttpURLConnection)url.openConnection();

//Подключаемся

conn.connect();

// Поток чтения данных

BufferedReader in = new BufferedReader(

new InputStreamReader(conn.getInputStream()));

//Получаем строку-ответ

String inputLine = in.readLine().trim();

// Проверяем ответную строку

if (inputLine.indexOf('~')>=0)

{

// Меняем флаг на признак успешной передачи

flag=true;

// Получаем массив значений

String[] mas = inputLine.split("~");

// Перебираем значения в цикле

for (int i=0;i<mas.length;i++)

{

// Помещаем значения в таблицу

tableTovar.setValueAt(mas[i], i, 2);

}

}

// Закрываем поток

in.close();

// Отключаемся

conn.disconnect();

conn=null;

}

catch (Exception e) {}

// Если отправка данных не удалась

if (flag==false)

{

JOptionPane.showMessageDialog(

null,

"Возможно интернет не подключен.",

"Ошибка отправки данных!", 0);

}

Рассмотрим его более подробно.

// Формируем GET-запрос для отправки

String str = "http://puh/tovar.php"+makeGet();

В данной строке формируется адрес отправки и параметрыGET-запроса.

Наш PHP-проект будет называться puh (сам проект мы создадим на следующем занятии). В проекте будет специальная страница для приема данных tovar.php. На странице будет присутствовать программный кодPHP для получения данных и отправки ответа Java-приложению. Пока сайт запускается при помощи Денвера –адрес страницы будет:http://puh/tovar.php,далее к этому адресу добавится GET-запрос.

// Переменная для проверки успешной отправки данных

boolean flag = false;

Переменная flag необходима для проверки правильной передачи данных.Изначально эта переменная имеет значениеfalse, а в случае успешной отправки ее значение изменится наtrue. В случае,если значение false,то мы выведем сообщение о том, что отправка данных невозможна:

// Если отправка данных не удалась

if (flag==false)

{

JOptionPane.showMessageDialog(

null,

"Возможно интернет не подключен.",

"Ошибка отправки данных!", 0);

}

Отправка данных происходит внутри конструкции try-catch: попытка может оказаться неудачной, если, например, нет доступа к интернету. Следующие строки отвечают за отправку данных на указанную страницу:

// Адрес подключения

URL url = new URL(str);

// HTTP-подключение

HttpURLConnection conn =

(HttpURLConnection)url.openConnection();

//Подключаемся

conn.connect();

Далее происходит получение данных:

// Поток чтения данных

BufferedReader in = new BufferedReader(

new InputStreamReader(conn.getInputStream()));

//Получаем строку-ответ

String inputLine = in.readLine().trim();

В итоге в переменнойinputLine окажется строка в виде:

10~20~30~40~50~60~70~80~90~100

Это ответ сайта об остатке товара. Формат ответной строки будет таким, потому что мы сами это реализуем в программном коде PHP!Вполне удобно и просто передать данные, разделенные каким-либо символом.

Следующий блок проверяет полученную строку, разбивает ее на составляющие и записывает в таблицу, в колонку с остатками:

// Проверяем ответную строку

if (inputLine.indexOf('~')>=0)

{

// Меняем флаг на признак успешной передачи

flag=true;

// Получаем массив значений

String[] mas = inputLine.split("~");

// Перебираем значения в цикле

for (int i=0;i<mas.length;i++)

{

// Помещаем значения в таблицу

tableTovar.setValueAt(mas[i], i, 2);

}

}

Метод indexOf(‘~’)производит поиск указанного символа в строке и возвращает значение: >=0,если символ найден.

Метод split(‘~’)разбивает строку на составляющие через указанный разделитель и возвращает массив. В нашем случае вернется массив из десяти элементов,каждый из которых – это остаток товара.

Метод setValueAt(mas[i], i, 2) записывает значение в ячейку таблицы: первый параметр –записываемое значение, второй параметр – номер строки, третий параметр –номер колонки.

В заключение передачи данных, производится закрытие потока для чтения и отключение:

//Закрываем поток

in.close();

// Отключаемся

conn.disconnect();

conn=null;

При успешной отправке данных будет происходить следующее (см. рис. 4.28):

Рис. 4.28

Значения из колонки"Количество поступления"будут передаваться на сайт, а колонка "Остаток на складе"будет заполняться данными с сайта.

Внимание!!!При запуске проекта под Денвером –для взаимодействия клиентской и серверной части подключение к интернету не требуется!

На этом разработку клиентской части на Javaможно считать законченной. Проверку работоспособности данного приложения мы выполним на следующем занятии, когда реализуем часть сайта, отвечающую за прием и отправку данных на PHP. Но клиентская часть уже не требует доработок, поэтому создадим JAR-архив и ярлык для запуска на Рабочем столе. Запустим наше приложение и нажмем кнопку "Выполнить", увидим сообщение о неудачной попытке отправки данных (см. рис. 4.29):

Рис. 4.29

Наше приложение сработало правильно, потому что отправить данные пока нельзя. Перед созданиемJAR-архива требуется выполнить запуск окончательного варианта приложения!

Откроем список проектов и выберем проект: puh. Нажмем правую клавишу мыши и из контекстного меню выбираем Экспортировать

В следующем окне выбираем: Java, Runnable JAR file и нажимаем кнопку Далее (см. рис. 4.30):

Рис. 4.30

В следующем окне выбираем проект: prog-puhуказываем путь и имя создаваемогоJAR-архива:c:\puh.jar. Настройку Library handlingустанавливаем в среднее положение и нажимаем кнопку Готово.(см. рис. 4.31):

Рис. 4.31

Последнее окно сообщает об окончании экспортирования –нажимаем на кнопкуОК.

В корне диска c:\ должен появитьсяJAR-архив puh.jar (см. рис. 4.32):

Рис. 4.32

Далее переходим в папкуc:\Program Files и создаем внутри папку puh, помещаем внутрь этой папки файл puh.jar.

Переходим на Рабочий стол и создаем новый ярлык(нажимаем правую клавишу мыши, из контекстного меню выбираем: Создать, Ярлык, далее выбираем наш JAR-архив, вводим имя ярлыка: puh и нажимаем кнопкуГотово). НаРабочем столе появился ярлык для запуска приложения (см. рис. 4.33)

Рис. 4.33

Итог занятия:На этом занятии мы:• рассмотрели проект "Винни-Пух и компания";• разделили проект на два основных блока: клиентская часть на Java, серверная часть на PHP;• реализовали клиентскую составляющую проекта на Java.

 

Занятие 5. "Начало создания серверной части проекта"Винни-Пух и компания"

 

На этом занятии мы начнем реализацию серверной части проекта "Винни-Пух и компания" на PHP: -создадим новый проект; -поговорим о кодировке проекта UTF-8; -начнем реализацию приема данных от клиентской части на Java.



<== предыдущая лекция | следующая лекция ==>
Реализация клиентской части на Java | Создание серверной части проекта на PHP


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.382 сек.