Хочу поделиться с вами полезными ссылками, хинтами и советами, которые помогут при выполнении тестового задания на стажировку в реальный проект на JavaRush.
Конечно, можно просто бездумно накопировать решение тестового задания из интернета, благо примеров хватает, но мы-то хотим разобраться, что делаем:) Этот пост для тех, кто не обнаружил среди стека технологий, требующихся по заданию, знакомых слов и хочет это исправить)
Пару недель назад я добрался до 30 уровня и наконец получил доступ к тестовому заданию на стажировку. По началу я был в ступоре и просто не знал, с чего начать и что делают все эти спринги и хибернэйты.
Только начав копать, я столкнулся с проблемой: очень много ресурсов и статей подразумевают, что вы уже имеете представление о предметной области. Проще говоря, они слишком заумны для новичков и вместо понимания вызывают реакцию “это слишком сложно!”.
Поэтому ниже я попытаюсь на основе своего пусть и небольшого опыта поделиться удачными ссылками, которые помогли мне получить базовые представления о необходимых технологиях. Те, кто ныл во время обучения на JavaRush, что много надо изучать самому – готовьтесь, тут вас ждёт настоящий ад))
Итак, как подступиться к выполнению задания?
1. Понять, зачем нужны все эти технологии (я бы начал изучение в таком порядке, как указан ниже):
1.1. Maven
Его роль в проекте – создание структуры каталогов вашего вэб-проекта (она стандартизирована) из специального тэмплэйта, называемого “archetype” + подтягивание библиотек в ваш проект (добавление dependency в pom.xml). Кто проходил бонусную задачу про парсинг на основе jsoup – там мы сами ручками скачивали библиотеку из интернета и подцепляли её в идею. Maven же позволяет вам ничего не скачивать, а просто писать в pom.xml, какую библиотеку вы хотите подтянуть и использовать в проекте. Быстрое объяснение, что делает Maven, в картинках -> тут.1.2. MySQL
Это ваша система управления базами данных (СУБД). Каких-то глубоких познаний в SQL и СУБД по заданию не потребуется, тут могу посоветовать для облегчения жизни установить прогу dbForge, которая очень поможет вам при создании БД и работы с ней.1.3. Spring
Этот фрэймворк будет ядром вашего вэб-приложения. Он огромный, и его архитектура состоит из многих модулей. Хорошая новость: для выполнения задания потребуется получить представление лишь о нескольких вещах в Spring: что такое Inversion of Control (IoC) и разобраться с работой Spring MVC (какая должна быть структура каталогов вашего вэб-проекта, кто такой DispatcherServlet, как он взаимодействует с контроллером, вью и моделью и т.д.). Тут особенно не хватало материалов для новичков, где объяснялось бы на пальцах. Но, слава богу, такие материалы нашлись: Очень просто об IoC, связанности кода, DI (материал излагается в несколько фривольной манере, но зато всё понятно) –> вот тут (ниже на странице листайте к следующим статьям). Далее ищите, что такое@Autowired
аннотация.
Spring MVC — цикл видеоуроков (первые 11 уроков, каждый в среднем минут 7-10).
Здесь вы найдёте цикл видеоуроков, вообще ОЧЕНЬ рекомендую смотреть уроки этого парня! Несмотря на забавный индусский английский, объясняет всё очень подробно и понятно, с наглядными примерами. Также у него есть уроки и по другим фрэймворкам.
WorkFlow приложения на Spring MVC в картинках — см. здесь.
Может кто пояснить по пунктам, как что запускается и в какой последовательности? Какой файл запускать?
Например вот этот проект github.com/andreichernov/CrudAppTry
Использую Intellij Idea Ultimate 2017.3.1
начиная со слов «Мы уже почти готовы к тому, чтобы запустить наш проект!»
там я показывал как запустить проект используя томкат.
просто выбираешь все либы в правом окошке, правой кнопкой по ним и выбираешь пункт типа «добавить в WEB-INF/libs» как-то так кароч, ну там разберешься)
после чего можно будет запускать)
Нашел на github еще 6 проектов, все загрузились. Открывал в Idea, просто кнопкой OPEN. Главный затык, как оказалось, в том, что нужно было создать правильную базу данных (назавание базы, колонок тип) и подлючить к проекту.
Но этот проект, так и не запускается github.com/andreichernov/CrudAppTry
HTTP Status 500 – Internal Server Error
Type Exception Report
Message Servlet.init() for servlet [mvc-dispatcher] threw exception
Description The server encountered an unexpected condition that prevented it from fulfilling the request.
Заметил, что система подчеркивает красным
Где искать ошибку?
Все заработало
вообще, все, что в папочке resources должно было попасть в classpath
не знаю почему не попало)
но если работает — хорошо :)
она у него внутри папки webapp, а обычно в src/main. поэтому и не подтянулась автоматически.
если открывается страница томката — значит вы возможно как-то не так запускаете :)
До этого читал туториалы на официальном сайте, там так много воды и нудно, и местами не понятно о чем речь.
А тут все супер кратко и сразу явно, что к чему. Еще мне помогли лекции Головача, он тоже очень хорошо объясняет этот в целом не сложный инструмент
Установление связи с базой осуществляется посредством JDBC-драйвера.
Но сама база ведь находится у меня на машине, а не у проверяющего.
Но у него (проверяющего) есть база с таким же именем и паролем (test и root), то есть мой код приведёт к соединению фактически с его базой данных. Тогда правильно ли я понял, что таблицу базы нужно создать(добавить и сконфигурировать корлонки) не вне проекта, а уже в самом проекте после соединения с бд?
Вам нужно создать скрипт, который создаст схему(базу), таблицу и заполнит ее, что-бы поверяющий мог оттестировать. Логин и пароль, вроде root root.
Т.е. он берет ваш проект, запускает скрипт, запускает проект и действует.
Значит я не так немного понял. Я понял, что скрипт по созданию базы не нужен: база уже создана на машине проверяющего.
Он запускает проект, в котором есть процесс добавления таблицы в базу и её конфигурации. Ну то есть у него (проверяющего)есть база для тестовых заданий (скрипт по ее созданию не нужен), ему пришло десять решений по заданию, и когда он их запускает, в рамках уже запущенного решения, происходит конфигурация таблицы, то есть все на одной базе, в которую добавляются разные таблицы при запуске решений от разных людей?
Я понял это исходя из слов: «Для упрощения тестирования называйте все свою базу test с логином и паролем root (нам не нужно будет для тестирования создавать кучу лишних и ненужных баз)»
Или все таки нужен отдельно от проекта файлик со скриптом по созданию базы? Вы как делали, если делали. Отдельный файлик?
И да, это отдельный файл…
То есть речь не о работе с ней используя тул в перспективе, а о её создании. Но я могу неправильно понимать. Я так понял можно спроектировать бд с помощью SQL-команд, используя непосредственно инструменты MySQL, но это более кропотливо, а можно с использованием тулза с наглядным интерфейсом.
Или есть вариант спроектировать бд прямо в Idea? Я понял что из Idea можно только работать с готовой бд, но не создавать её. Растолкуйте, если я не прав: первую ночь только провёл за чтением материала по технологиям из стэка, поэтому могу пока многого не знать и не понимать
Workbench в данном задании скорее как запасной вариант вьюшки. Посмотреть реальное положение дел в БД. Пока что мы не дошли до использования этого инструмента на полную катушку.
www.youtube.com/watch?v=7LwOvVPavWA