1. 1. Отчет по работе
  1. 2. ИЗУЧЕНИЕ командной строки
    1. Задания и Вопросы
  1. 3. УСТАНОВКА Subversion на локальную машину
    1. Задания и Вопросы
  1. 4. ИЗУЧЕНИЕ VIM
    1. Задания и Вопросы
  1. 5. УСТАНОВКА Java
    1. Задания и Вопросы
  1. 6. ИЗУЧЕНИЕ Java
    1. Задание и Вопросы
  1. 7. УСТАНОВКА IDEA
  1. 8. УСТАНОВКА Tomcat
  1. 9. СОЗДАТЬ простой Servlet
    1. Задания и вопросы
  1. 10. Выкладка на тестовый томкат
    1. Подключение на ssh (security shell тестовый сервер)
    2. Обзор каталогов на удаленном сервере:
    3. Копирование файлов на ssh:
    4. Активировать изменения:
    5. Посмотреть log исполнения:
    6. Редактирование в терминале
    7. Подключение к БД из Servlet
  1. 11. СОЗДАНИЕ РЕПОЗИТОРИЯ
  1. 12. Структура META (база данных)
    1. Подключение к БД
    2. Получение объекта
    3. Получение значения атрибута
    4. Получение значения атрибута по id объекта
    5. Фильтр. Примечания условия выборки
    6. Получение набора объектов
    7. Изменить значение атрибута
    8. Создать объект
      1. Задания и Вопросы
  1. 13. Дополнительные возможности системы
    1. Просмотр событий
    2. Запуск робота
    3. Закрытие задачи в системе

1. Отчет по работе

В конце рабочего дня заполнять так называемые почасовки вот в этой системе:
https://bg.market/tt/

Логин и пароль такой же, как для авторизации в систему задач

Выбираете раздел Почасовки, нажимаете ссылку Добавить, заполняете дату, количество отработанных часов и в поле Комментарии пишите,
что конкретно вы делали, какую задачу решали, каких результатов достигли.

2. ИЗУЧЕНИЕ командной строки

Прочитать книгу: Интерфейс командной строки UNIX. В. Е. Сорокин.

В какой папке находитесь: pwd

Содержимое текущего каталога: ls

Подробное содержание текущего каталога: ls -l

Копировать файлы: scp "что" "куда"

Создание каталога: mkdir "название"

Переход в каталог: cd /"куда"

Создать новый файл: touch "имя файла с расширением" (touch test.txt)

Изменение прав: chmod name XXX

Удалить папку со всем содержимым: rm -rf "Название папки"

Исполняемые процессы: ps

Прерывание: ctrl+C

Скомпилировать: javac name.java

Запуск: java.name




Задания и Вопросы

1. Узнать, где находитесь.

2. Добавить новую папку с вашим именем.

3. Создать в ней несколько файлов с разным расширением

4. Вывести подробное содержание папки

5. Поменять права всех файлов в вашей папке на 664

6. Вернуться на одну папку выше

7. Удалить папку с вашим именем

3. Установка subversion на локальную машину.

Прочитать, что такое subversion (svn - система контроля версий)

http://svnbook.red-bean.com/nightly/ru/svn-book.html#svn.tour.initial
http://blog.alwawee.com/2012/01/30/%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0-%D1%81-subversion-%D0%B2-mac-os-x/

Установить: sudo apt install subversion


Задания и Вопросы

1. Установить на локальную машину Subversion

2. Создать репозиторий

3. Создать рабочую копию репозитория

4. Выполнить простейший рабочий цикл:

- обновление рабочей копии

- внесение изменений

- анализ изменений

- слияние изменений

- фиксация изменений

5. Зачем нужно рабочая копия?

6. Посмотреть, кто правил файл.



4. Изучение VIM

Редактор VIM позволяет переписывать файл из командной строки.

Установить VIM: sudo apt install VIM

Нажатие на клавишу "i" позволяет войти в режим правки файла.

Клавиша Esc позволяет выйти из режима правки.

Нажатие на / начинает поиск по файлу.

Ввод:w позволяет сохранить правленный файл.

При вводе :q произойдёт выход из файла.


Задания и Вопросы

1. Исправить файл и сохранить изменения.

2. Исправить файл, сохранить изменения и выйти, нажав на "Закрытие окна", а не путём ввода :q

3. Разобраться, как работает поиск по файлу.

5. Установка Java

Требуется установить Java версии 7.

Для установки необходимо распаковать архив в папку \usr\local



Задания и Вопросы

1. Что такое Servlet?

2. Зачем нужен Servlet?

3. Чем post-запрос отличается от get-запроса?

6. Изучение Java

(Книга содержится во вложении), для первого дня изучения - прочитать 1 - 3 главы.


Необходимо усвоить: (1)

- как выводить информацию в лог

- стр. 51 - рассказать все ключевые слова



Задания и Вопросы

1. Написать функцию, которая будет выводить в лог "Hello, World!". (1)

2. Сделать Exception в функции. (1)

3. Написать функцию, в которую при запуске передаём значения, а она их перемножает, складывыает и т.д. (1)

4. Сделать комментарии в коде. (1)

5. Написать функцию, в которую передаём значения, а она показывает большее из них. (1)

6. Сделать проверку try catch. (2)

7. Зачем нужен throws Exception ? (2)

8. Чем ArrayList отличается от массива? (2)

9. TreeSet, HashSet, HashMap, LinkedHashMap и т.д. (2)

10. Зачем использовать константы в большой системе? Приведите примеры. (2)

11. Чем & и | отличаются от && и || ? (2)

12. Что такое StringBuffer,StringBuilder? (2)

13. Написать функцию, которая будет выбирать меньшее число из нескольких введённых. (2)

14. Написать функцию, которая будет считывать вводимые параметры, и будет выводить сумму чётных позиций введённых чисел (0+2+4+6..) и разность нечётных позиций введённых чисел (1-3-5-7..) (2)

15. Остановить предыдущую функцию, когда чётные станут больше 100 или нечётные станут меньше 0. (2)

16. Написать функцию, в которую передаём дату рождения, а она показывает сколько до ближайшего (проверка в обе стороны). Можно использовать библиотеки из интернета. (2)

17. Добавьте в ArrayList и LinkedList по N элементов. А потом засеките выборку М раз из этих листов. Вывести разницу. N и М заданием.(2)


7. Утстановка IDEA

Скачать и распаковать архив в папку \usr\local

Настроить проект bg из локальной копии репозитория, создав новый проект в IDEA из исходников и подключив необходимые библиотеки. (меню File/Project Structure)

Настроить параметры Subversion. (меню VCS/Subversion)

8. Установка Tomcat

Прочитать 4-ую главу книги JAVA

Скачать и распаковать архив в папку \usr\local

Потренироваться запустить и остановить Tomcat

Запустить Tomcat и проверить его работоспособность: http://localhost:8080/

9. Создать простой Servlet

В простом проекте IDEA создать класс сервлета, скомпилировав его в .class

Скомпилированный файл перенести в соответствующую папку TOMCAT_HOME\webapps

Настроить web.xml

Запустить и остановить tomcat, проверить работоспособность созданного servlet.

Изучить более подробно:http://java-course.ru/student/book1/servlet/



Задания и Вопросы

1. Написать функцию, которая будет выводить на странице "Hello, World!".

2. Написать функцию, которая из url считывает значения и выводит их на странице.

3. Написать функцию, которая из url считывает дату, проверяет её и выводит ошибку, если не корректна, так же для даты со временем.

4. Написать функцию, с формой на странице, которую можно заполнить и сохранить значения в url. Например: Имя, Фамилия, Дата рождения. Должны быть поля ввода и кнопка сохранить.

10. Выкладка на тестовый Tomcat

Подключение на ssh (security shell тестовый сервер)

Команда на подключение: ssh login@studentn.isasoft.ru

Ввести пароль


Обзор каталогов на удалённом сервере:

В каталоге w2/srv найти свой tomcat

Каталог w2/srv/tomcat21/lib содержит общие библиотеки и файлы properties.

Каталог w2/srv/tomcat21/webapps/bg содержит локальную копию проекта.

Файл w2/srv/tomcat21/webapps/bg/WEB-INF/web.xml содержит настройки servlet.

Каталог w2/srv/tomcat21/webapps/bg/WEB-INF/classes/bg содержит классы, пакета site.


Копирование файла на ssh:

scp откуда/что login@student.isasoft.ru:/куда

Ввести пароль на девелоперский сервер.

Важно!Копирование должно запускаться с локального терминала.


Активирование изменения

Для вступления изменений в силу, tomcat должен перепроверить содержимое классов и настроек. Данная команда сообщает tomcat об этом.

touch /w2/srv/tomcat21/webapps/bg/WEB-INF/web.xml


Можно полностью перезапустить томкат, например, если перезаписать все классы:

/etc/init.d/atomcat21 stop - выключение

/etc/init.d/atomcat21 start - включение


Посмотреть log исполнения

(последние строки)

tail -f /w2/srv/tomcat21/logs/catalina.out


Редактирование в терминале

Вызов редактора: VIM где/что

Команды

- начать редактирование: i

- сохранить: Esc, :w!

- выход: Esc, :q!


Подключение к БД из Servlet

Строка подключения:

ResourceBundle mains = ResourceBundle.getBundle(getServletConfig().getInitParameter("main_resource"));

Важно! В web.xml сервлета , использующего подключение к БД, нужно прописать параметр main_resource со значением bg_main

<init-param>

<param-name>main_resource</param-name>

<param-value>bg_main</param-value>

<init-param>

Важно! При создании вспомогательных классов в сервлете, нужно копировать автоматически созданный файл вашего класса на tomcat. Файл имеет следующее название: Имя Сервлета $ИмяКласса.class

11. Создание репозитория

Настроить проект bg из локальной копии репозитория, создав новый проект в IDEA из исходников и подключив необходимые библиотеки.(меню File/Project Structure)Настроить параметры subversion. (меню VCS/Subversion)


Создать рабочую (локальную/рабочую) копию репозитория site:

svn checkout svn://svn.bibliki.ru/bgrep/site

Или через IDEA:

VCS -> Checkout from Version Control -> Subversion

Repositories: + svn://svn.bibliki.ru/bgrep/

login, password

папки: lib, html, js, site, dock, smpp, texts

12. Структура META (база данных)

у объекта есть тип,id, атрибуты

4 Страна:

Название N Тип
Код страны 1001118 Список
Карта 1000457 Рисунок
Въезд по визе 1001264 Да/Нет
Города вылета 1004101237 Ссылка

5 Город:

Название N Тип
Город-агенство 1000102 Да/нет
Город-аэропорт 1000100 Да/Нет
Город-консульство 1000103 Да/Нет

26 Отель:

Название N Тип
Юридический адрес(англ) 1026100050 Строка
Город 1000117 Ссылка
Валюта 1000118 Список
Категория 1000119 Список

Подключение к БД

Учитывая разнообразие используемых серверов, применяется единый метод подключения,

через инициализацию ResourceBundle, где описываются параметры подключения:

ResourceBundle mains =

ResourceBundle.getBundle(getServletConfig().getInitParameter(«main_resource"));

getServletConfig().getInitParameter("main_resource") возвращает название файла с параметрами подключения.

Берется это название из параметров в описании Servlet (файл web.xml)

Получение объекта

Используется метод getOb, класса Ob0, где idOb

это id объекта. Obb row = Ob0.getOb(mains, idOb);

Получение значения атрибута

Получив объект

Obb ob = Ob0.getOb(mains, idOb);

чтобы получить значение атрибута, используетсяметод getAt,

ob.getAt(номератрибута);

Получение значения атрибута по id объекта

Для получения значения атрибута, требуется id объектаи id_oba атрибута, с указанием типа атрибута.

Ob.getZn(<ResourceBuilder>, id, id_oba, type_oba);

id: id объекта

id_oba:id атрибута

type_oba: тип атрибута

Например:

Ob0.getZn(mains, id26, атрибут26 Город, DatabaseSettings.idTypeObaLink);

или db.getAtById(id26, атрибут26 Город, DatabaseSettings.AtrType.LINK);

Фильтр. Применение условия выборки

Для применения условий, требуется определить фильтр:

Obb fltr = Ob0.createFilter(тип26);

В определении фильтра указывается тип, по которому будет производиться выборка.

После этого определяются условия выборки.

Ob0.addCondition(fltr, атрибут26 Валюта,EQ, «RUR»);

В условии указывается атрибут, по которому будет произведена выборка, условиевыборки

(EQ) и значение выборки («RUR»).

Если выборку требуется произвести по атрибуту, доступному через ссылку на другой

объект, то нужно указать последовательность доступа к этому атрибуту, через ссылочный

элемент в виде последовательного массива атрибутов. Этот массив может иметь

больше элементов, если требуется обратиться к атрибуту с большей вложенностью.

Ob0.addCondition(fltr,new int[] {атр1, атр2}, LED,dEnd);

И выполнить запрос на получение набора объектов.

Ob0.getSrcObs(mains,...

Получение набора объектов

Для примера возьмем тип отель.

Определяем фильтр на тип:

Obb fltr = Ob0.createFilter(тип26);

Получаем набор объектов:

Obb[] myObs = Ob0.getSrcObs(mains,Ob0.metaconnname,false, fltr,0,0,2);

Рассмотрим полный набор возможных параметров запроса:

Obb[] myRecs = Ob0.getSrcObs(<par1>, <par2>, <par3>, <par4>, <par5>, <par6>, <par7>, <par8>, <par9>, <par10>, <par11>, <par12>, <par13>, <par14>, <par15>, <par16>);

Описание параметров:

par1: ResourceBundle (обязательный) Название файла с параметрами подключения

par2: Ob0.metaconnname(обязательный) Имя соединения, определяется администратором

par3: debug (false) Требуется ли отладочная информация по обработке запроса

par4: Filter(обязательный. Фильтр. Указывает на нужный тип и возможные условия выборки)

par5: m Порядковый номер первой записи

par6: ent Количество выводимых записей

par7: us Пользователь (записи созданные определенным пользователем)

par8: lid Возвращает вмассив ArrayList<Long> ID объектов

par9: datafis <датавремя> состояние базы на заданный момент времени

par10: DATANS массив String[] из двух дат, для выборки данных введенных за период

par11: new Int[]{0} Определяет набор блоков для поиска данных

par12: StringBuffer (обязательный) возвращает кол-во объектов. Если установлен, то без самих объектов

par13: ArrayList<Long> Возвращает id объектовpar14:new Int[]{0} Определяет id атрибутов, данные по которым требуется возвратить

par15: тип сортировки 2:по мере добавления; ID атрибута:поатрибуту; (отрицательные): в обратном порядке

par16: isOb Boolean, Определяет требуется ли возвращать дату создания объектов

Изментиь значение атрибута

Obb ob = Ob0.getOb(mains, id);

Ob0.addAt(ob,атр, знач);

ob.id_user = whoami.id;

Ob0.edtOb(mains, ob);

Создать объект

Obb ob = new Obb(тип26);

// добавить значение

Ob0.addAt(ob,атр, знач);

// добавить массив значений String[] vResultIdsOb0.addAts(ob,атр, знач[]);

Ob0.addOb(mains, ob);// сохранить изменения


Задания и Вопросы

1. Выписать на странице в таблице все id + Города 5 Московской области.

1005101368 территория - Мос. Область 100518301512

2. Выбрать все города (тип 5 1000004) России 100410000050, где 1000101 Город-вылета = Да. На

экран вывести таблицы, в первой колонке по алфавиту идут территории, а во втором

столбце по алфавиту города в этих территориях: Название области 1005101368, название города: 1000098

3. Выбрать всех Туристов (тип 23), которые родились позже 01.01.1980. На экран для каждого туриста

вывести в формате JSON: номер паспорта, ФИО туриста, дату рождения.

1000152 дата рождения

1001446 1001447 серия номер паспорта

1000144 1000146 1000147 ФИО

4. Отправить письмо (sendLetterToSomebody) с информацией о трансферах:

1000269 типтрансфера - индивидуальный,

1001189 страна - Россия,

1038922658 Партнер - БГ ЮГ 115836399146.

1000265 Название,

1001187 Список ТС(ссылка на 143 тип), 1001179 название ТС(143 тип)

5. Найти в коде, где обрабатываются запросы:

https://student.isasoft.ru/site?flt=100410000050&action=price&tid=211&id_price=-1&xml=11

https://student.isasoft.ru/small.shtml?action=transfer&tid=38&data=25.09.2019&flt=100410000049

13. Дополнительные возможности системы

Просмотр событий

https://student.isasoft.ru/rservice?pdatan2=01.01.2019+00:00:00&pdatak2=31.12.2019+23:59:59&submit=Выбрать&action=preview&task=ListOfEvents&ptype=

ptype: тип просматриваемых событий

pdatan2: начало событий

pdatak2: окончание событий

Запуск робота

/usr/java/latest/bin/java -cp /w2/srv/tomcat21/webapps/bg/WEB-INF/classes:/w2/srv/tomcat21/lib/:/w2/srv/tomcat21/lib/* bg.Robot bg_main co_bg RobotName

Закрытые задачи в системе

При закрытии задачи, в комментарии нужноуказать id задачи (например):

#123456+название

Правила прописывания урлов:

1) для site нужно указывать action, например, site?action=title

2) для rservice нужно указывать task, например, rservice?task=tourInfo

3) для роботов, запускающихся через bg.Robot, нужно указывать app, например, app=createClassCache

4) для событий нужно указывать номер события, например, E21

5) для роботов, запускающихся не через bg.Robot, нужно указывать строку запуска, не

включающую переменные, например, bg.AvangardPayments gpb

6) статика (для сайтов, откывающаяся на www.bgoperator.ru, bg-optics.ru и т.д.)

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

7) если нужно выложить статический файл, доступ к которому нужен приложению, нужно

указывать урл этого приложения, например, нужно выложить templates/hotel-register.txt,

чтобы его мог прочитать RegisterServlet на /reg, в урле нужно указать /reg