- Баллы
- 76
- Имя в Minecraft
- witwar
Здравствуйте, программисты. Хотел бы вас поприветствовать в статье(теме) специально написаной для другой моей темы с полезными ссылками. Как то раз я писал уже туториал, но мне сказали, что лучше бы я объяснил более интересные финтифлюшки про которые мало инфы в интернете. Поэтому я пишу эту статью.
Содержание
1 Глава. Основы Http и web
Первым делом нам понадобится любое удобное IDE. Я предложу вам 3 варианта. Вы же можете выбрать любой или даже взять свой.
Первым делом нам конечно же потребуется создать проект, если вы зашли с уже готовым проектом и желанием встроить необходимый код и понять его вам во 2 части этой главы. Для начала нам надо открыть меню File. Там у нас будет множество разных действий. Но нам понадобится пока, что только первый пункт New. Он отвечает за создание новых файлов/проектов и всего прочего. Нам же нужен Java Project так как мы будем работать на Java. Нас просят ввести необходимую информацию. После того как мы ввели имя проекта и выбрали JavaSE нам необходимо нажать Finish, в отличии от создания проекта для разработки плагинов под Spigot/Bukkit нам не понадобится ничего кроме стандартной библиотеки JavaSE. Вот мы и создали проект. Далее нам необходимо открыть его и в папке src создать пакет. Для этого жмём ПКМ по src и выбираем.
New->Package
Вводим имя пакета. Обычно его называют по такому формату (домен например ru/net/org/su).(автор).(название проекта). Нажимаем Finish. Наш пакет создан. Мы уже можем работать над кодом.
Концепция, теория
Так как это поучающая статья, я постараюсь рассказать всё наглядно и на примерах. Сперва хочу дать вам полезную ссылку. Нам потребуется только прикладной уровень. В отдельной сноске или даже статье я возможно напишу о интересных вещах связанных с сетевой моделью OSI. А теперь я приведу небольшой пример о работе сервера и клиента. Мы и наше java приложение это клиент. А наш друг, Bukkit - сервер. Как только мы хотим к нему подключится мы отправляем ему пакет(ы)(сокетное соединение, транспортный уровень), количество пакетов зависит от обьёма данных для отправки. Пакет(чаще всего 1) с нашей и управляющей информацией идёт к серверу. Bukkit принимает этот пакет и дешифрует его получая информацию. Потом он обрабатывает эту информацию(например в случае бана информация будет проверяться на то, не забанен ли игрок) и если она не соответствует чему то(например игрок забанен), соединение сбрасывается и игроку вылетает ошибка. За частую соединение сбрасывается не просто так, а с переданным сообщением по типу "Вы забанены на сервере навсегда оператором...". Если же данные всему соответствуют то Bukkit отсылает ответный пакет о успешном подключении у между клиентом и сервером появляеться стабильное сокетное соединение. Когда клиент, что то делает это сначало записывается локально на его компьютер, а именно в буфер. Буфер обычно имеет скудный размер и когда он переполняется, информация из буфера делится на пакеты и отправляется на сервер. Сервер же принимает пакеты, обрабатывает их по типу изменения мира(если игрок сломал блок он отсылает пакет на сервер об этом и сервер уже в общем мире ломает этот блок). На этом построена логика Bukkit/Spigot API. Сервер при обработке допустим ломания блока, при отмене Event'а может отправить клиенту информацию, для прогрузке где блок всё равно не сломан.
Практика и первое соединение
Я обещал устроить практику на примере Spiget'а. Перейдя по вот этой ссылке вы можете увидеть страницу API этого сервиса. Для начала создадим в пакете, который мы создали в начале класс. Назовём его допустим TestConnecter. Для подключения в классе TestConnecter нам надо отправить запрос на URI API, после чего, нам отдадут JSON ответ. Это респонс о нём мы поговорим во 2 главе. Для этого напишем такой код.
Этот код будет пытаться подключиться и если не получается он не будет делать ничего. Теперь давайте разберу его. Мы определяем URL адрес на который будет адресовывать подключение. Дальше создаём подключение при помощи преобразование подключения полученого при помощи метода openConnection унаследованого от класса URL. Дальше соединению мы ОБЯЗАТЕЛЬНО выставляем соединению параметр User-Agent. Этот параметр отвечает за то "из какого браузера мы подключаемся". Стандартный user-agent Jav'ы обычно заблокирован на сервере поэтому если мы попытаемся подключиться без кастомного User-Agent'а мы получим ошибку. Для этого мы как бы устанавливаем свой User-Agent обманывая сервер, и сервер будет думать, что мы сидим из браузера, User-Agent которого мы указали. Даже если такого браузера и вовсе не существует. Мы подключились, а что дальше? Нам надо как то считать всё, что нам отдал сервер. Для этого воспользуемся этим кодом.
Этот код будет выводить ошибку при любой неудачной попытке подключения и будет выводить полученное значение при удачной попытке. Так же хочу его разобрать. После создания соединения мы получили входной поток. То что нам отдаёт сервер. Потом создали экземпляр класса InputStreamReader, который читает этот входной поток, ведь в аргументах мы указали, переменную с входным потоком. Дальше мы создали переменную с типом JsonElement, которая являлась элементом Json'а и проверяли объект Json это или же список. Потом мы просто выводили этот элемент.
Это была 1 часть статьи посвещённой работе с Web через java.
глава 1, глава 2
Когда я занимался своим плагином наподобие PlugMan'а, который помогал бы управлять плагинами прямо из игры по типу отключения/включения/скачивания последней версии и т.п. мне написали по поводу последнего(на тот момент у меня ещё не было команды /latest для скачивания последних версий). @Saharo4ek написал, что если уж это плагин помогающий управлять другими плагинами, то он должен уметь и обновлять их. Я задумался и ответил ему. Но только я незнал как организовать обновление, ведь для него нужен был ID проекта на spigotmc, какую бы утилиту я для этого не использовал, всё требовало ID. С самого spigot скачивать было не очень, так как не было URL'а под api, чтобы скачивать последнюю версию плагина. Последняя версия как я понял обозначалась каждый раз своим числом. В поисках способа скачки и действия с плагинами я начал читать код других и наткнулся на 1 плагин, который использовал API сайта Spiget. Этот сервис предоставлял полное и удобное с очень большими возможностями API. Можно было скачивать со spigot'а любые ресурсы, получать по ним информацию и прочее. В этой статье я хотел бы рассказать как использовать такие API как раз таки на примере Spiget'а.
Содержание
1 Глава. Основы Http и web
- Подготовка среды
- Концепция, теория
- Практика и первое соединение
- Что такое Request?
- Что такое Response?
- Коды состояний Http
- Работа с сокетами
Первым делом нам понадобится любое удобное IDE. Я предложу вам 3 варианта. Вы же можете выбрать любой или даже взять свой.
- Eclipse(используется чаще всего, так же мной, лично мой выбор, самоучитель pdf)
- NetBeans(полностью на русском)
- IntelIjIdea(просто хорошее IDE, лично я им просто никогда не пользовался поэтому не могу сказать точно)
- Консолька Linux
(в ней тоже реально это сделать. Самый родной для меня вариант.)
Первым делом нам конечно же потребуется создать проект, если вы зашли с уже готовым проектом и желанием встроить необходимый код и понять его вам во 2 части этой главы. Для начала нам надо открыть меню File. Там у нас будет множество разных действий. Но нам понадобится пока, что только первый пункт New. Он отвечает за создание новых файлов/проектов и всего прочего. Нам же нужен Java Project так как мы будем работать на Java. Нас просят ввести необходимую информацию. После того как мы ввели имя проекта и выбрали JavaSE нам необходимо нажать Finish, в отличии от создания проекта для разработки плагинов под Spigot/Bukkit нам не понадобится ничего кроме стандартной библиотеки JavaSE. Вот мы и создали проект. Далее нам необходимо открыть его и в папке src создать пакет. Для этого жмём ПКМ по src и выбираем.
New->Package
Вводим имя пакета. Обычно его называют по такому формату (домен например ru/net/org/su).(автор).(название проекта). Нажимаем Finish. Наш пакет создан. Мы уже можем работать над кодом.
Концепция, теория
Так как это поучающая статья, я постараюсь рассказать всё наглядно и на примерах. Сперва хочу дать вам полезную ссылку. Нам потребуется только прикладной уровень. В отдельной сноске или даже статье я возможно напишу о интересных вещах связанных с сетевой моделью OSI. А теперь я приведу небольшой пример о работе сервера и клиента. Мы и наше java приложение это клиент. А наш друг, Bukkit - сервер. Как только мы хотим к нему подключится мы отправляем ему пакет(ы)(сокетное соединение, транспортный уровень), количество пакетов зависит от обьёма данных для отправки. Пакет(чаще всего 1) с нашей и управляющей информацией идёт к серверу. Bukkit принимает этот пакет и дешифрует его получая информацию. Потом он обрабатывает эту информацию(например в случае бана информация будет проверяться на то, не забанен ли игрок) и если она не соответствует чему то(например игрок забанен), соединение сбрасывается и игроку вылетает ошибка. За частую соединение сбрасывается не просто так, а с переданным сообщением по типу "Вы забанены на сервере навсегда оператором...". Если же данные всему соответствуют то Bukkit отсылает ответный пакет о успешном подключении у между клиентом и сервером появляеться стабильное сокетное соединение. Когда клиент, что то делает это сначало записывается локально на его компьютер, а именно в буфер. Буфер обычно имеет скудный размер и когда он переполняется, информация из буфера делится на пакеты и отправляется на сервер. Сервер же принимает пакеты, обрабатывает их по типу изменения мира(если игрок сломал блок он отсылает пакет на сервер об этом и сервер уже в общем мире ломает этот блок). На этом построена логика Bukkit/Spigot API. Сервер при обработке допустим ломания блока, при отмене Event'а может отправить клиенту информацию, для прогрузке где блок всё равно не сломан.
Практика и первое соединение
Я обещал устроить практику на примере Spiget'а. Перейдя по вот этой ссылке вы можете увидеть страницу API этого сервиса. Для начала создадим в пакете, который мы создали в начале класс. Назовём его допустим TestConnecter. Для подключения в классе TestConnecter нам надо отправить запрос на URI API, после чего, нам отдадут JSON ответ. Это респонс о нём мы поговорим во 2 главе. Для этого напишем такой код.
Код:
try {
URL url = new URL("api.spiget.org/v2/resources/2/author"); // Вместо того, что в скобках можно вставить любой свой URL.
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.addRequestProperty("User-Agent", "любое название тут");
} catch(IOException e) {}
Код:
try {
URL url = new URL("api.spiget.org/v2/resources/2/author"); // Вместо того, что в скобках можно вставить любой свой URL.
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.addRequestProperty("User-Agent", "любое название тут");
InputStream inputStream = connection.getInputStream();
InputStreamReader reader = new InputStreamReader(inputStream);
JsonElement element = new JsonParser().parse(reader);
if (element.isJsonArray()) {
// Json список
} else if (element.isJsonObject()) {
// Json объект
System.out.println(element);
} catch(Exception e) {
e.printStackTrace();
}
Это была 1 часть статьи посвещённой работе с Web через java.
Последнее редактирование: