Благодарю за добротный учебный материал, все представлено в кратком насыщенном формате, без всяких разглагольствований, что позволяет усвоить быстро материал.
спасибо автору, очень качественное видео, детально описывающие весь процесс. в ру Ютубе, не хватает качественного контента по Spring. Так же посмотрел ваш сайт, это просто кладец знаний :) Еще раз спасибо!
Будет хорошо, если этот комментарий окажется в топе и поможет всем остальным сэкономить время на осознании некоторых вещей 1) Все проблемы, с которыми вы столкнулись уже разжеваны в комментариях, сразу перечитайте все а потом уже думайте над тем, что писать в комментариях. 2) Если что-то не получается, значит вы делаете что-то не так, пересмотрите еще раз видео и пересмотрите что сделали сами. Без ошибок никуда, благодаря ошибкам получается лучше разобрать материал, я и сам подзависал во многих местах и разобрал много моментов, которые я бы реально упустил, не будь там ошибки. 3) Насчет "особых настроек" (насчет особых настроек была шутка, но многие ее не поняли) и начальных файлов - автор использует версию IDE 2014 года, там автоматически создается шаблон приложения, в последующих версиях этого нету. Скачайте эту версию и все, проблемы не будет. Но эти шаблоны не так сильно и нужны, т.к. по сути мы все создаем сами, проделать это все можно на любой версии, главное понимать как собирается проект через Maven. 4) Насчет подключения базы данных - там у многих проблема с подключением к базе, проверьте, установлен ли у вас сервер MySQL, а лучше найдите инструкцию полной установки переустановите заново и просмотрите чтобы был запущен сервер в Workbench. Если ошибка до сих пор есть с подключением, то посмотрите создали ли базу данных с таблицами в правильном месте и правильно ли настроили подключение в коде. И самое главное: Эти два видео у автора (web-приложения) - единственные видео в русском сегменте где замечательно все объясняется. Поймете это ближе к концу видео. Евгений, благодарю за видеоуроки и за хорошую подборку материала на сайте, они очень помогли!
Спасибо огромное. Классный урок. На этой основе буду делать себе портфолио, только вместо книг будут люди, сотрудники какой-то компании, с фото и описанием.
Отличное видео, давно искал нечто подобное. Перечитал материалы на вашем сайте про Spring и Hibernate и многое стало понятно. Ваш ресурс мне ооочень понравился.
6:05 лучше Integer 11:30 this не нужен 13:34 если книга не найдена, в логи пойдет "книга успешно удалена, детали: null" (нужно добавить блок else). Также дубляж кода: для поиска книги уже есть метод с таким же кодом, можно его переиспользовать 14:44 если книга не найдена, в логи также как и выше пойдет, что книга найдена, детали null (нужно также добавить if-else)
мне ещё показалось странно, как называются поля. Если у тебя класс книга, то и поле должно быть просто "автор", а не "автор книги". Ну или идти уже тогда до конца "bookPrice", "bookId". А то получается половина полей имеет приставку "book", половина - нет.
Пожалуй единственный !!!! достойный урок по данному стеку технологий для новичков. Очень было полезно изучить. Сайт очень понравился. Так держать .Спасибо!!!
Топ видео) и посмеяться и полезного уяснить)) А на счет того что заходят люди - полные новички в этом, так вам не сюда уважаемые. Желание быстренько за 40 минут овладеть технологией это не про программирование)
Для тех кто хочет повторить за автором, проект нужно создавать через maven, просто создаете webapp приложение, а потом добавляете все зависимости в ваш pom.xml файл. И все у вас заработает.
Сделал тоже самое (git -> github.com/fatumepta/spring-mvc-hibernate-thymeleaf), но + full java config; + настройки для JDBC, ConnectionPool и Hibernate в отдельном файле; + Thymeleaf вместо jsp; + Postgres 12; - без логирования. Для запуска проекта потребуется Postgres 9+ с бд "spring_mvc_crud". Но это не обязательно, в настройках можно поменять диалект СУБД и имя для БД соответственно.
Спасибо за хорошее видео. Делал пошагово но на свою БД со своими полями. Столкнулся в какой-то момент с org.hibernate.LazyInitializationException: could not initialize proxy - no Session. Запускаю ваш проект из раздачи - все работает. После тщательной инспекции своего кода, выяснилось, что проблема была в отсутствующей строке логгера logger.info("User successfully loaded. User info: " + user); в UserDaoImpl. Проблему с пассивной инициализацией решил добавлением строки в hibernateProperties: true
все очень круто, мне понравилось. Буду ждать видео о фреймворках с подробными объяснениями. Было бы более подробное видео с пояснениями было бы прям ВААААААХ!!!
Если у Вас поздняя версия MySQL (например 8.0.11), то решение проблемы с /*HTTP Status 500 - Request processing failed; nested exception is org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is org.hibernate.exception.GenericJDBCException: Could not open connection*/ может заключаться в одной строке mvc-dispatcher-servlet.xml: "jdbc:mysql://localhost:3306/bookmanager?serverTimezone=UTC". PS: не забудьте в pom.xml поменять версию mysql-connector-java (на 8.0.11, например).
Изучил java se и java core. Начинаю вникать в область сетевой разработки на java, spring. С чего начать изучение? Как этот процесс обучения должен выглядить.Чтобы также получать навыки написания подобных приложений и совершенствоваться в этом. Какие книги может быть посоветуете? Заранее спасибо
Есть более новые видео по этой теме. ua-cam.com/video/e7swABdqOS4/v-deo.html&ab_channel=EugeneSuleimanov Попробуйте просмотреть более новые в этом плейлисте, пожалуйста.
Для того что бы убрать лишние проверки и повысить быстродействие Hibernate, рекомендуется на методах которые по своей логике должны только получить данные, ставить не просто @Transactional, а указывать дополнительный параметр readOnly, а именно @Transactional(readOnly = true). К таким методам можно отнести getBookById в BookServiceImpl. Всем добра :)
Все работает отлично. Если у кого проблемы с кодировкой в MySQL добавьте в web.xml код: charsetFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8
Не могу сказать что вы плохо объясняете потому как получается у Вас это хорошо, не знаю на какой уровень знаний рассчитано видео, но если сказать о моем уровне (3 месяца только учу Java) мне бы хотелось допустим узнать про синтаксис команд, которые использовались при подключении hibernate, и при создании SessionFactory, как, и почему именно так. То же самое про Spring. Видео все таки именно про Spring и методы CRUD. По этому больше углубиться именно в этом направлении. Спасибо за то что учитываете пожелания.
+Как? How? В будущем планирую сделать видео туториалы по основным фреймворкам, в которых постараюсь раскрыть эти вопросы более подробно. Спасибо за обратную связь )
+Как? How? А пока, попробуйте прочитать этот материал: proselyte.net/tutorials/hibernate-tutorial/ proselyte.net/tutorials/spring-tutorial-full-version/ Для начального уровня должно хватить.
Привет. Отличный урок! Можете подсказать почему у меня не запускается index.jps как стартовая страница при запуске? (Я удалил в начале index.jps и создал новый. Я думаю, что проблема в этом)
Скачал IDEA 16 - сколько не пытался танцевать с бубном - при выборе Spring MVC создается весьма "хилый" проект - я чего-то недонатсроил или по задумке это все нужно делать руками?
создавай проект Spring - > кликаешь Spring MVC. а потом можно добавить кликнув правок клавишей мыши на главную папку своего преокта Add Fraimwork Supported.. и выбираешь Maven.
Евгений, не могли бы вы объяснить, зачем в контроллере была применена аннотация Spring автосвязывания для метода setBookService и уточнение qualifier на "bookService" с маленькой буквы? Т.е. получается связка не с классом в пакете service, а с используемым в момент выполнения экземпляром класса? (23 мин видео). Заранее благодарю!
Добрый день! Возник небольшой вопрос, у меня IDEA ULTIMATE и при создании проекта SpringMVC Maven не участвует, pom не создаётся. В чем может быть проблема, в настройке или ещё в чём-то? Изначально Mavena вообще не было, пришлось по копаться в настройках что бы он добавился
Огромное спасибо за видео. Помогло понять как работает crud в данных условиях. Но не могли бы вы подсказать, где можно почитать про создание CRUD для 3-4 таблиц со связями Many-To-One и One-To-One. спасибо
Пожалуйста, Александр. Почитайте официальную документацию Hibernate - там всё крайне понятно и доступно написано: docs.jboss.org/hibernate/orm/5.1/userguide/html_single/Hibernate_User_Guide.html
Я в этом деле только начинающий, когда сам что то делаю со спрингом то при работе с сервлетами, переопределяю метод сервлетов init(), в котором собственно и поднимаю конекст спринга так: ConfigurableApplicationContext springContext = new ClassPathXmlApplicationContext("spring/spring-app.xml", "spring/spring-db.xml"); а вот с аннотациями пока не сильно понял.
В данном видео - мы используем сервер tomcat. В результате сборки проекта мы получаем war файл. И томкат запускает его. Под капотом, там, конечно же, есть свой метод main, но, в данном случае, для нас это не критично.
Евгений, спасибо за видео! Есть такой вопрос: mvc-dispatcher-servlet.xml не прописан явно в pom.xml, но используется. Как JVM понимает что нужно брать именно mvc-dispatcher-servlet.xml?
Пожалуйста. Спасбои за отзыв. С mvc-dispatcher-servlet.xml работает Spring. Это название по умолчанию. Мы можем его изменить, но прописать это в web.xml
Спасибо за ответ, но в своем проекте я поменял название с mvc-dispatcher-servlet.xml на departments-servlet.xml, и не прописывал это название в web.xml, но Spring его находит все равно.
Добрый день! Подскажите, пожалуйста, а если в базе данных несколько таблиц как нужно выстраивать DAO нужно делать интерфейсы для каждой таблицы и все имплементировать в один класс Dao или для каждого интерфейса таблицы нужен свой класс? и также с сервисом?
Добрый день! Спасибо за очень полезное видео! Как раз, то что искал!!! Хотел уточнить: 1. Intellij IDEA community или ultimate? 2. MySQL Workbench community или ultimate? Если дадите ссылку буду очень рад.
День добрый, Яков. Благодарю за отзыв, рад что материал оказался полезным. Intellij IDEA - ultimate. MySQL Workbench - стандратная, которая находится в свободном доступе. Ссылка на Intellij IDEA находится на сайте www.jetbrains.com/idea/download/ Данная IDE платная, либо бесплатная версия, с некоторыми "тонкостями". Workbench : dev.mysql.com/downloads/workbench/ Удачи Вам, Яков.
Установил intellij IDEA community 14, чтоб было как на видео. Но вот появились проблемы с mysql workbench. Какая версия у вас стоит (номер и community/standart/enterprise)? Еще вопрос нужно создать соединение да? У меня выходит ошибка. И при открытии модели совсем отличается внешний вид. Не могу понять как у вас слева появляется навигация по проекту.
Кстати, когда скачал и запустил ваш проект (только у меня tomcat 7, это никак не влияет на работоспособность?) открывается первая страница. Затем при попытке открыть следующую по ссылке выводит ошибку. Тоже не могу понять почему.
Яков Бурцев Добрый день, Яков Проверьте настройки базы данных: 1. Создана ли она у вас 2. Такое же имя БД 3. Имя пользователя БД 4. Пароль доступа к БД. Чаще всего, проблема именно в этом.
Автор, спасибо за видео! По поводу listBooks(): ИМХО, аккуратнее получить книги было бы так: Session session = sessionFactory.getCurrentSession(); CriteriaBuilder builder = session.getCriteriaBuilder(); CriteriaQuery criteria = builder.createQuery(Book.class); Root contactRoot = criteria.from(Book.class); criteria.select(contactRoot); List bookList = session.createQuery(criteria).getResultList(); Вместо того, чтобы использовать руками HQL, а также чтобы не нужно было подавлять варнинг. И ещё, у @Autowired значение true по дефолту, можно не писать руками. И вопрос: не было бы ли лучше открывать сессию отдельно для каждой операции и закрывать её? Тем более, что Session implements Closeable и можно было бы не закрывать самому, а с try-with-resources: try (Session session = sessionFactory.openSession()) { // Do a barrel roll } И последний вопрос: зачем создавать два одинаковых интерфейса и для Dao, и для сервиса, не было бы лучше создать что-то одно, типа Accessor для всех? Ещё раз спасибо!
Пожалуйста, Виталий. По поводу вашего запроса - дело в том, что (насколько я знаю) Criteria имеет преимущество в динамических запросах, которые имеют несколько параметров поиска. В данном случае - у нас просто список всех книг. По поводу сессий - а, вариантов много, но приложение крайне маленькое и вряд ли имеет смысл уделять много внимания менеджементу сессий.
Создал новый проект maven и пытался переместить в него ваш package и по итогу BookService не видит класс Book в папке model, хотя import прописан верно. В чем может быть ошибка? Так же при скачивании и запуске вашего проекта происходит ошибка при переходе по ссылке "BookList" Проект работает не корректно при скачивании. Maven не инсталиться: java.lang.NoSuchMethodError: org.springframework.core.annotation.AnnotatedElementUtils.findMergedAnnotationAttributes(Ljava/lang/reflect/AnnotatedElement;Ljava/lang/String;ZZ)
Добрый день, подскажите, пожалуйста, как вам удалось совместить добавление и редактирование в одном окне? У меня вот на edit гиперссылка, в которой одно окно редактирования, не очень красиво получилось. Спасибо
Выбираю SpringMVC, создаю проект и в итоге проект без мавен и пом-ника, ну и соответственно без тестового класса HelloWorld. Зависит от версии Intellij IDEA? Или что то в настройках?
+Илья Читнеев Стоит посмотреть, отмечен ли пункт download, который находится в нижней части панели при создании проекта. Там есть возможность скачать библиотеки, либо указать путь. Рекомендуется выбирать download.
+Eugene Suleimanov по дефолту выбран download, на Use library не менял, потому что зачем загружать самостоятельно, если это делает maven\IDEA После того как нажимаю next, предлагается выбрать имя проекта и директорию , и кнопка finish
Спасибо! Проект без проблем запустился... Интересно, как можно прикрутить пейджинг, так чтоб например по 5 книг отображалось на листе, если подскажете или отправите по ссылке буду благодарен.
На работе заставили перейти с сервера Ґласфиш на Апаче. И здесь у меня возникает ошибка при отправляться запросов к БД вылетает ошибка 500. Соединение с бд настроено правильно. В чем может быть проблема.
добрый день, подскажите, пожалуйста, как сделать, чтобы можно было выбрать шаблон spring mvc как на 1:14 версия идеи совпадает с вашей, однако отсутствует данное диалоговое окно
При попытке редактировать книгу, получаю следующее сообщение об ошибке, не подскажите где искать? org.apache.jasper.JasperException: An exception occurred processing JSP page /WEB-INF/views/books.jsp at line 55 52: 53: 54: 55: 56: 57: 58:
Здравствуйте, подскажите пожалуйста, делаю по вашему примеру, только вместо книг юзеры. в этом месте: @RequestMapping(value = "users", method = RequestMethod.GET) public String listUser(Model model) { model.addAttribute("user", new User()); model.addAttribute("listUser",this.userService.listUser()); return "WEB-INF/pages/users"; } в listUser null, в чём может быть дело?
Андрей Агарков Вариант хороший, но часто на реальных пректах это крайне затруднительно - много лишнего кода придётся писать. Поэтому используют либо Currency, docs.oracle.com/javase/6/docs/api/java/util/Currency.html или специальную библиотеку, например,Joda-Money.
Добрый день. Спасибо за видео. Почему-то проект не хочет запускаться на Tomcat 7. На 8 и 9 стартует без проблем. Подскажите как-нибудь можно это исправить? На хостинге установлен Tomcat 7. Поэтому и локально тестирую на 7.
Подскажите пожалуйста. При выборе типа приложения Spring MVC при нажатии далее не появляется окно с выбором типа шаблона и соответственно никакие папки не создаются, а есть только папка web. В чем может быть проблема? Использую Idea Ultimate 2016.1.1
+Павел Захаров К сожалению, не работал с крайней версией IDEA, поэтому не смогу Вам помочь в этом вопросе. Попробуйте поискать ответ в гугле, либо обратится в службу поддержки JetBrains.
Вопрос: в контроллере, в этом куске кода: listUsers не виден в JSP-м файле. Подскажите пожалуйста решение. @RequestMapping(value = "users", method = RequestMethod.GET) public String listUsers(Model model){ model.addAttribute("user", new User()); model.addAttribute("listUsers", this.daoService.listUsers()); return "users"; } ------------------------------------------------------------------------------------------------------------ изменил на: @RequestMapping(value = "users", method = RequestMethod.GET) public String listUsers(@ModelAttribute("listUsers") List user){ this.daoService.listUsers(); return "users"; } Теперь в файлах JSP видна ссылка на listUsers. Это правильная замена?
Здравствуйте! Огромное Вам спасибо за видео! Может быть вы подскажете, пытался по аналогии сделать для своей базы приложение, при запуске сервера выскакивает следующая ошибка: HTTP Status 500 - Request processing failed; nested exception is org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is java.lang.NoClassDefFoundError: org/hibernate/engine/transaction/spi/TransactionContext Что может быть не так?
Евгений, спасибо Вам за туториал. Сделал все по аналогии, проект заработал. Разве что пришлось использовать в pom.xml те же версии зависимостей, что в Вашем примере. Свежие версии Спринга и Хибернейта не переваривали друг друга. У меня к Вам есть дополнительный вопрос. Буду очень признателен, если ответите. Я хочу прикрутить простой поиск по айдишнику или полю с названием книги. Что для этого необходимо сделать? Я так понимаю, в контроллер надо добавить соответствующий метод наподобие этого. @RequestMapping("search/{id}") public String searchUser(@PathVariable("id") int id, Model model){ //не уверен что именно эти методы нужно использовать model.addAttribute("user", this.userService.getUserById(id)); model.addAttribute("listUsers", this.userService.listUsers()); return "users"; } По идее, после этого мы должны добавить в .jsp страницу с книгами кнопку search при клике на которую нас перебрасывает к полям таблицы, которую мы используем для добавления и редактирования книг, а там в свою очередь ввести айдишник и если совпадение найдено, то в этой же нижней таблице появятся данные по книге. Логика в целом ясна, но как реализовать не совсем понятно, опыта не хватает. Подскажите, как бы Вы это реализовали
Вечер добрый. Поиск по ID - Не самый лучший враиант - лучше использовать поиск по имени или по цене и т.д. Необходимо реализовать метод в DAO слое + добавить во все слои. Ну и создать отдельную страницу для вывода результатов поиска.
Спасибо за наводку. В ДАО добавил метод поиска пользователей по имени: @Override @SuppressWarnings("unchecked") public List listUsersByQuery(String query) { Session session = this.sessionFactory.getCurrentSession(); List bookList = session.createQuery("from Books B WHERE B.book_title = '" + query + "'").list(); return bookList; } В контроллер добавил такую реализацию: @RequestMapping(value = "/books/search" , method = RequestMethod.GET) public String searchClubs(@RequestParam("book_title") String title, Model model) { model.addAttribute("queryTitle", bookService.listBooksByQuery(title)); return "books"; } Евгений, подскажите, правильно ли реализован метод в контроллере? И под созданием отдельной страницы для вывода результатов поиск Вы понимаете отдельную .jsp или ссылку внутри books, например "/books/search?
+Cardmaster Card Тут нужно думать, конечно, самому. Дам лишь подсказу, что нужно реализовать метод, который делает запрос в базу с определённым условием. Создать отдельную страницу с выводом результатов и контроллер для этой странцы. Удачи )
Евгений, уже несколько дней бьюсь над добавлением поиска. Можете направить в правильное русло: 1."создать отдельную страницу для вывода" в той же папке создать где и userdata? 2. контроллер для этой страницы должен быть в отдельном файле или просто путем добавления метода в UserController?
Создайте метод в слое dao - public List findBookByName(String bookName) { ... List result = new ArrayList(); далее запрос на получение всех книг из таблицы. List allBooks = ... После этого for(Book book: allBooks){ if(book.getName().equals(bookName)){ result.add(book); } } ... return result; } Соновная мысль, приблизительно, такая. Пропущенная часть кода не должна вызвать затруднений. А страницу для вывода результатов поиска попробуйте реализовать по аналогии со списком всех книг, только используйте метод для поиска.
У меня вылетает ошибка 404 The requested resource is not available. Настраивал все по уроку, первая страница открывается, вторая ни в какую. Что делать?
ЗДРАВСТВУЙТЕ!!. Нужны cнова ваши наставления. Делаю приложение TODOList(список дел что нужно сделать). Есть необходимость выводить активные и завершенные дела отдельно. В таблице базы данных за это отвечает колонка status(тип TINYINT). Это нужно еще добавить в сontroller, dao, service по два метода? Я не уверен что правильно сформулировал запрос в методах в dao : @Override public List listActiveTasks() { Session session = this.sessionFactory.getCurrentSession(); List rezult = session.createQuery("from Task WHERE status LIKE '1'").list(); for(Task t:rezult){ logger.info(" Active Task list: "+t); } return rezult; } Если не верно подскажите пожалуйста как сделать правильно..
Евгений добрый день! Пошагово, по Вашему уроки делал приложение, однако при работе выявилась следующая проблема, при попытке редактирования добавляет новую запись в БД, все проверил несколько раз, в чем проблема не могу предположить.... Дайте пожалуйста направление куда смотреть, где искать ошибку. Заранее спасибо....
Добрый день! Подскажите, пожалуйста, что сделать... При создании в BookDaoImpl переменной Logger, не хочет подключаться импорт import org.slf4j.Logger; import org.slf4j.LoggerFactory; на уровне slf4j. Я делала все по видео, специально скачала idea 14, так как на 16 не создавался шаблон. В pom добавила все dependency, в папке .m2 эта библиотека есть, но в проект jar файлы почему-то не подтянулись (если конечно в этом проблема). Куда и как их правильно добавлять или что нужно сделать, чтобы идти дальше? Помогите, плиз!
Здравствуйте. Мучаюсь уже часа 4 с проблемой и не понимаю, что не так. Хочу в listBook поместить список книг и делаю так: BookServiceImpl bookService = new BookServiceImpl(); List listBook = bookService.listBooks(); Выдает ошибку java.lang.NullPointerException
Добрый вечер. Вероятнее всего - не инициализирован сам сервис. Проверьте аннотацию @Autowired в текущем классе над самим сервисом. И аннотацию @Service в классе сервисе. Почти уверен, что проблема где-то здесь.
@@EugeneSuleimanov по-прежнему ничего не получается, чувствую себя тупицей :( Само ваше приложение работает, но хотелось более детально разобраться и усвоить материал, поэтому решил добавить функционала. Появлялась эта ошибка. @Autowired действительно не было, но добавление и всякие манипуляции не помогли. Теперь просто хочу в консоль через public static void main вывести книги, но прилетает java.lang.NullPointerException Как я только не извращался :(
@@TheArsty непонятные моменты - это нормально. Естественно, будет NPE, думаю, имеет смысл более детально изучить что такое Spring, и как происходит инициализация компонентов. В методе main этого, просто так, в лоб, сделать не получится. Посмотрите здесь, этого должно хватить для основ proselyte.net/tutorials/spring-tutorial-full-version/
@@EugeneSuleimanov тестирую, получается @Autowired срабатывает только если перед классом есть аннотация @Controller или например @Component и при запуске приложения, выдает мне нужные данные. Но, если я хочу создать новый объект этого же класса и в методе получить данные из БД, то запрос в БД не делается и всегда NPE. Пока так и не понял, как используя ваш сервисный класс и не используя контроллер получить данные из БД
Надеюсь кто-то увидит. Проблема в приложении. С одной моделью работает хорошо но когда добавляю иную модель с такими же методами то получаю при edit'e "could not initialize proxy - no Session". Что не так?
Exception org.apache.jasper.JasperException: An exception occurred processing JSP page [/WEB-INF/pages/authors.jsp] at line [88] 85: 86: 87: 88: 89: 90: 91: Stacktrace: org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:584) ... Root Cause javax.el.ELException: Error reading [name] on type [net.proselyte.bookmanager.model.Author_$$_jvst283_0] ... Root Cause org.hibernate.LazyInitializationException: could not initialize proxy - no Session ...
я по аналогии создал еще одну модель с таким же функционалом как и в самом приложении. Когда была одна модель то все работало а когда две то появилась ошибка
@@taras7630 и некорректно настроили связи между объектами. Почитайте пожалуйста документацию hibernate по конфигурации связей, либо туториал на сайте proselyte.net
Спасибо за урок. Во время запуска получаю ошибкУ org.apache.jasper.JasperException: An exception occurred processing JSP page /WEB-INF/pages/books.jsp at line 49 46: 47: 48: 49: 50: 51: 52: root cause java.lang.NumberFormatException: For input string: "bookTitle" Подскажите что ей не нравится ????? Не понимаю
Здраствуйте, Александр. Хотелось бы увидеть весь трейс ошибки. И проверьте, полностью ли вы скопировали весь проект. Обратите внимание на тип данных bookTitle в классе Book - точно ли он String,
Очень помогло, почти всё почти сразу получилось, спасибо! Вопрос: у меня при редактировании всегда создается новая. В отладке видно, что в контроллере в addBook() все поля = null (если Long id) или 0 (если int id). Почему у меня кнопка "Add" не заполняет объект? При этом наименование передается нормально. @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id;
здравствуйте, я все сделал как у Вас, но у меня работает только страница index, при переходе на остальные - 404 not found. смотрел самые первые комменты, там у кого-то было подобное, Вы советовали смотреть в контроллер, и если это о классе BookController, то там вроде-бы все правильно написано, пробовал по-разному менять во всех файлах ссылки на страницы, менял на /pages/books вместо /books, то же самое.. и не совсем понимаю при чем там этот класс контроллер, если он, насколько я понимаю, отвечает за наполнение данными jsp страниц в папке pages, а сервер не видит саму страницу вообще, или не имеет доступа к ней.. контроллер может не позволить серверу видеть страницу? поправьте, если ошибаюсь. и еще, перед отправкой этого комментария прямо сейчас посмотрел, в классе BookDaoImpl в строке List bookList = session.createQuery("from Book").list(); подчеркнуто красным " 'from' unexpected ", что-то с hibernate может, у Вас такого не было в видео же, у Вас подчеркнутым было слово Book.. помогите советом, пожалуйста
Добый вечер, Павел. Если ошибка 404 - то причина либо в контроллере, либо в именование пакетов, либо в имени jsp файла (99.9%). То, что подчёркивает красным - не проблема - главное, чтобы компиляция была успешной. Нужно смотреть сам код.
Классный урок. Респект за проделанную работу. но почему-то не может у меня совершить транзакции для вывода списка книг. Хотя информацию об одной книге выводит.
Разбиение на слои - Repository и Service. Обычно, первый отвечает только за работу с БД, а второй - содержит бизнес логику. В данном приложении это не критично, потому что есть только стандартные CRUD операции.
Вы не поняли мой вопрос (может быть он конечно настолько тупой :) За работу с БД и бизнес-логику отвечают классы BookDaoImpl и BookServiceImpl, а мне не понятно зачем писать *интерфейсы?* И можно же было имплементировать один и тот же интерфейс в оба этих класса - они же (интерфейсы) *одинаковые!*
1) это они пока что одинаковые, потому что основные функции программы совпадают с перечнем, зашифованном в абревиатуру CRUD. Если мы решим добавить в программу, к примеру, функции сортировки или еще другие фичи, сервис неизбежно дополнится новыми методами, а вот репозиторий новых методов не получит 2) так реализуется паттерн "слабая связанность" - максимальная независимость компонентов системы друг от друга
Нужна помощь!! В модели есть поле (Date date) дата, я хочу вставить его в таблицу базы данных. Как это все настроить? Каким должен бить тип поля в базе данных, какой должен бить html input jsp-файле, может нужны какие-то аннотации в модели к этому полю? Просветлите пожалуйста. Не могу найти нормальный материал по этой теме.
База данных test (root root) таблица в ней tasklist: CREATE TABLE `tasklist` ( `id` int(11) NOT NULL AUTO_INCREMENT, `description` longtext NOT NULL, `status` tinyint(1) NOT NULL, `date` datetime NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
Доброго времени суток Евгений! Не могу разобраться с проблеммой. При запуске(также пробовал запускать и Ваш готовый проект) выдаёт следующие ошибки: 1.Artifact BookManger:war exploded: Error during artifact deployment. See server log for details. 2. Error waiting for multi-thread deployment of context descriptors to complete java Посоветуйте как лечить пож. Заранее благодарен
Здраствуйте, Олег. EntityManagerFactory (и EntityManager) - это JPA стандарт. SessionFactory относится исключительно к Hibernate. Обычно, если нам не нужно использовать специфические возможности SessionFactory, то лучше использовать EntityManager. В любом случае, из EntityManager мы также можем получить сессию, например: Session session = entityManager.unwrap(Session.class); Надеюсь, ответил на ваш вопрос
oleg login не бывает глупых вопросов в нашей работе - всегда лучше уточнить ) В данном случае лучше использовать методы EntityManager для сохранения. Метод unwrap здесь не нужен. Ну и конфигурация будет несколько отличаться в конфигурационном файле.
Добрый день. Скачал ваш проект. Запустил. Ошибка: HTTP Status 500 - The absolute uri: java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar files deployed with this application Подскажите, пожалуйста, что нужно исправить. Спасибо!
Видео актуально даже в 2021 года... Очень круто... Спасибо!
Как раз подумал актуально ли. Спс за комментарий.
и что здесь актуального? написание конфигов в xml файлах? ахринеть как актуально в 2021
@@AlejandroFedorov а что посоветуете? На русском мало качественного материала. Всё качественное на английском
@@AlejandroFedorov А как же поддержка старого кода?
Благодарю за добротный учебный материал, все представлено в кратком насыщенном формате, без всяких разглагольствований, что позволяет усвоить быстро материал.
Пожалуйста, Павел.
Спасибо за отзыв :)
Спасибо! Видео просто отличное! Респект!!
Посмеялся над фразой при создании JSP: "Мы не фрондэндчики... создаем на грани говнокода" =)))
спасибо автору, очень качественное видео, детально описывающие весь процесс.
в ру Ютубе, не хватает качественного контента по Spring. Так же посмотрел ваш сайт, это просто кладец знаний :)
Еще раз спасибо!
Пожалуйста, Максим :)
Рад, что материал оказался полезным.
Будет хорошо, если этот комментарий окажется в топе и поможет всем остальным сэкономить время на осознании некоторых вещей
1) Все проблемы, с которыми вы столкнулись уже разжеваны в комментариях, сразу перечитайте все а потом уже думайте над тем, что писать в комментариях.
2) Если что-то не получается, значит вы делаете что-то не так, пересмотрите еще раз видео и пересмотрите что сделали сами. Без ошибок никуда, благодаря ошибкам получается лучше разобрать материал, я и сам подзависал во многих местах и разобрал много моментов, которые я бы реально упустил, не будь там ошибки.
3) Насчет "особых настроек" (насчет особых настроек была шутка, но многие ее не поняли) и начальных файлов - автор использует версию IDE 2014 года, там автоматически создается шаблон приложения, в последующих версиях этого нету. Скачайте эту версию и все, проблемы не будет.
Но эти шаблоны не так сильно и нужны, т.к. по сути мы все создаем сами, проделать это все можно на любой версии, главное понимать как собирается проект через Maven.
4) Насчет подключения базы данных - там у многих проблема с подключением к базе, проверьте, установлен ли у вас сервер MySQL, а лучше найдите инструкцию полной установки переустановите заново и просмотрите чтобы был запущен сервер в Workbench. Если ошибка до сих пор есть с подключением, то посмотрите создали ли базу данных с таблицами в правильном месте и правильно ли настроили подключение в коде.
И самое главное:
Эти два видео у автора (web-приложения) - единственные видео в русском сегменте где замечательно все объясняется. Поймете это ближе к концу видео.
Евгений, благодарю за видеоуроки и за хорошую подборку материала на сайте, они очень помогли!
Вот ссылка на полный пакет со всем нужным для MySQL разработки dev.mysql.com/downloads/windows/installer/5.7.html
за 2 года всё так поменялось... и IDE и Workbench, что теперь остаётся только: "всё хуйня, давай по новой" что называется)
@@kosbarable да не, норм - принципы-то те же..
на самом деле хайбер сам создаст таблицу
Самый классный видос по практике spring mvc на русском!
Спасибо огромное за вклад в наше обучение, это именно то, что я искал
Огромное спасибо за видео. Очень помогает в изучении Spring'a. Ждём подобных уроков!
Пожалуйста. Алекей.
Работаю )
Божечки-кошечки, всё понятно
Спасибо за комментарий!
Отличное видео, с первого раза сложно для новичка, но со второй попытки разберусь! Благодарю за знания, Евгений!
Спасибо за отзыв!
Спасибо огромное. Классный урок. На этой основе буду делать себе портфолио, только вместо книг будут люди, сотрудники какой-то компании, с фото и описанием.
Здравствуйте. Как ваши успехи? Имело ли значение портфолио?
Отличное видео, давно искал нечто подобное. Перечитал материалы на вашем сайте про Spring и Hibernate и многое стало понятно. Ваш ресурс мне ооочень понравился.
+Сергей Цымбалюк
Спасибо за отзыв. )
Рад, что Вам это пригодилось.
Большое огромное за урок, уже 3 раза посмотрел!!)) Огонь!
Супер. Приятно смотреть как работает профессионал
6:05 лучше Integer
11:30 this не нужен
13:34 если книга не найдена, в логи пойдет "книга успешно удалена, детали: null" (нужно добавить блок else). Также дубляж кода: для поиска книги уже есть метод с таким же кодом, можно его переиспользовать
14:44 если книга не найдена, в логи также как и выше пойдет, что книга найдена, детали null (нужно также добавить if-else)
мне ещё показалось странно, как называются поля. Если у тебя класс книга, то и поле должно быть просто "автор", а не "автор книги". Ну или идти уже тогда до конца "bookPrice", "bookId". А то получается половина полей имеет приставку "book", половина - нет.
Пожалуй единственный !!!! достойный урок по данному стеку технологий для новичков. Очень было полезно изучить. Сайт очень понравился. Так держать .Спасибо!!!
Пожалуйста )
Спасибо за отзыв.
Спасибо огромное!!! Очень полезное видео! Всех благ Вам!!!!
Топ видео) и посмеяться и полезного уяснить)) А на счет того что заходят люди - полные новички в этом, так вам не сюда уважаемые. Желание быстренько за 40 минут овладеть технологией это не про программирование)
Для тех кто хочет повторить за автором, проект нужно создавать через maven, просто создаете webapp приложение, а потом добавляете все зависимости в ваш pom.xml файл. И все у вас заработает.
Сделал тоже самое (git -> github.com/fatumepta/spring-mvc-hibernate-thymeleaf), но
+ full java config;
+ настройки для JDBC, ConnectionPool и Hibernate в отдельном файле;
+ Thymeleaf вместо jsp;
+ Postgres 12;
- без логирования.
Для запуска проекта потребуется Postgres 9+ с бд "spring_mvc_crud". Но это не обязательно, в настройках можно поменять диалект СУБД и имя для БД соответственно.
Спасибо за хорошее видео. Делал пошагово но на свою БД со своими полями.
Столкнулся в какой-то момент с org.hibernate.LazyInitializationException: could not initialize proxy - no Session. Запускаю ваш проект из раздачи - все работает.
После тщательной инспекции своего кода, выяснилось, что проблема была в отсутствующей строке логгера
logger.info("User successfully loaded. User info: " + user); в UserDaoImpl.
Проблему с пассивной инициализацией решил добавлением строки в hibernateProperties:
true
очень долго долбался с этой проблемой, просто посмотрите что гугл дает на "disable lazy loading hibernate" там просто треш.
все очень круто, мне понравилось. Буду ждать видео о фреймворках с подробными объяснениями. Было бы более подробное видео с пояснениями было бы прям ВААААААХ!!!
Круто, даже как то непривычно читать xml объявления бинов)
Спасибо за отзыв!
Капитальный Красаучег!
Если у Вас поздняя версия MySQL (например 8.0.11), то решение проблемы с /*HTTP Status 500 - Request processing failed; nested exception is org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is org.hibernate.exception.GenericJDBCException: Could not open connection*/ может заключаться в одной строке mvc-dispatcher-servlet.xml: "jdbc:mysql://localhost:3306/bookmanager?serverTimezone=UTC".
PS: не забудьте в pom.xml поменять версию mysql-connector-java (на 8.0.11, например).
А мне это не помогло...
этот совет мне постоянно помогает при разборе чужих старых проектов
@@aleksandrt7158 решилась проблема?
У меня тоже самое,хотя пароль поменял,тайм зону добавил,букву s тоже и все-ровно 500
Это просто космос! Во всём инете не нашёл ничего подобного! В закладки! Упаси бог потерять!
Да, и как космос абсолютно загадочный, скрытый и непонятный. Без объяснений это видео не стоит ничего. К сожалению. ((
Огромнейшее спасибо!
Изучил java se и java core. Начинаю вникать в область сетевой разработки на java, spring. С чего начать изучение? Как этот процесс обучения должен выглядить.Чтобы также получать навыки написания подобных приложений и совершенствоваться в этом. Какие книги может быть посоветуете? Заранее спасибо
Kрутой урок. Хотелось бы еще с использованием анотаций. Без xml
Есть более новые видео по этой теме. ua-cam.com/video/e7swABdqOS4/v-deo.html&ab_channel=EugeneSuleimanov
Попробуйте просмотреть более новые в этом плейлисте, пожалуйста.
Для того что бы убрать лишние проверки и повысить быстродействие Hibernate, рекомендуется на методах которые по своей логике должны только получить данные, ставить не просто @Transactional, а указывать дополнительный параметр readOnly, а именно @Transactional(readOnly = true). К таким методам можно отнести getBookById в BookServiceImpl.
Всем добра :)
Все работает отлично. Если у кого проблемы с кодировкой в MySQL добавьте в web.xml код:
charsetFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
forceEncoding
true
charsetFilter
/*
Дай бог тебе здоровья, добрый человек!!! 4 часа пытался исправить проблему, весь интернет перелопатил.
Спасибо, помогло
Спасибо! Ценный урок. А если бы было с объяснениями - цены бы небыло..
+Как? How?
А какие именно объяснения хотелось бы увидеть в будущих видео?
Не могу сказать что вы плохо объясняете потому как получается у Вас это хорошо, не знаю на какой уровень знаний рассчитано видео, но если сказать о моем уровне (3 месяца только учу Java) мне бы хотелось допустим узнать про синтаксис команд, которые использовались при подключении hibernate, и при создании SessionFactory, как, и почему именно так. То же самое про Spring. Видео все таки именно про Spring и методы CRUD. По этому больше углубиться именно в этом направлении. Спасибо за то что учитываете пожелания.
+Как? How?
В будущем планирую сделать видео туториалы по основным фреймворкам, в которых постараюсь раскрыть эти вопросы более подробно.
Спасибо за обратную связь )
+Как? How?
А пока, попробуйте прочитать этот материал:
proselyte.net/tutorials/hibernate-tutorial/
proselyte.net/tutorials/spring-tutorial-full-version/
Для начального уровня должно хватить.
Привет. Отличный урок!
Можете подсказать почему у меня не запускается index.jps как стартовая страница при запуске?
(Я удалил в начале index.jps и создал новый. Я думаю, что проблема в этом)
Добрый день, спасибо за отзыв Нужен лог сервера и что дает в ответе.
Скачал IDEA 16 - сколько не пытался танцевать с бубном - при выборе Spring MVC создается весьма "хилый" проект - я чего-то недонатсроил или по задумке это все нужно делать руками?
создавай проект Spring - > кликаешь Spring MVC. а потом можно добавить кликнув правок клавишей мыши на главную папку своего преокта Add Fraimwork Supported.. и выбираешь Maven.
Большое тебе спасибо, за то, что не поленился написать коммент!
А вообще попробуй использовать spring boot, в нем все намного проще чем тут рассказанно. Уроки можно найти на офф сайте
Спасибо!
благодарю!
Евгений, не могли бы вы объяснить, зачем в контроллере была применена аннотация Spring автосвязывания для метода setBookService и уточнение qualifier на "bookService" с маленькой буквы? Т.е. получается связка не с классом в пакете service, а с используемым в момент выполнения экземпляром класса? (23 мин видео). Заранее благодарю!
Хорошее видео. Спасибо!
Как на счет описать бины в java, а не xml?
День добрый, Владимир.
Описывать в классах - не самый лучший вариант.
Часто - это крайне неудобно.
у меня опыт пока небольшой.... но сейчас преподают все через java конфиги.... но все равно спасибо за видео - очень помогло!!! :-)
Владимир Баранов
Пожалуйста, Владимир :)
@@EugeneSuleimanov и вот прошло пять лет - xml конфиги уже никто не использует))
Добрый день! Возник небольшой вопрос, у меня IDEA ULTIMATE и при создании проекта SpringMVC Maven не участвует, pom не создаётся. В чем может быть проблема, в настройке или ещё в чём-то? Изначально Mavena вообще не было, пришлось по копаться в настройках что бы он добавился
Лучше сразу создавать Maven проект, а потом уже добавлять ему депенденси на спринг.
Да, это крайне хороший вариант.
Спасибо, быстро и по делу
Очень здорово. Спасибо
Всегда пожалуйста )
Спасибо за отзыв, Дмитрий.
Вопрос. На каком это уровне разраюотки находится? (Джун, мид, сеньор)?
Актуально и 2022 году. Спасибо !
Спасибо за отзыв!
супер. все просто и ясно,а с другой стороны нифига не понятно.. =))
Почему перестали снимать видео? у Вас все супер получается, продолжайте
Нагрузка по работе - к сожалению, всё никак не оплучается выделить время.
Огромное спасибо за видео. Помогло понять как работает crud в данных условиях. Но не могли бы вы подсказать, где можно почитать про создание CRUD для 3-4 таблиц со связями Many-To-One и One-To-One. спасибо
Пожалуйста, Александр.
Почитайте официальную документацию Hibernate - там всё крайне понятно и доступно написано:
docs.jboss.org/hibernate/orm/5.1/userguide/html_single/Hibernate_User_Guide.html
Добрый день . Подскажите, можно ли совместить ваше видео по CRUD с Spring Security видео? Или нужно подключить в pom spring security?
День добрый, Владимир.
Да, конечно.
Да, поместить в pom зависимости необходимо.
спасибо огромное. Больше бы таких мастер классов. Еще раз спасибо за видео.
такой проект. можно создать только через Ultimate Idea?
Спасибо. Все ясно и понятно. Единственное не понял как в данном примере поднимается контекст Спринга, можете подсказать??
Пожалуйста, Вадим.
Через аннотации, если я верно понял вопрос.
Я в этом деле только начинающий, когда сам что то делаю со спрингом то при работе с сервлетами, переопределяю метод сервлетов init(), в котором собственно и поднимаю конекст спринга так: ConfigurableApplicationContext springContext = new ClassPathXmlApplicationContext("spring/spring-app.xml", "spring/spring-db.xml");
а вот с аннотациями пока не сильно понял.
Ребят, почему всегда создает приложение с пустым src ? где и какие настройки нужны чтобы структура приложения создавалась?
в описании к видео, есть ссылка на исходный код.
Уважаемый Евгений скажи пожалуйста, а где точка входа в проект? Класс AppTest или другой? Потому как я метод main не нашёл нигде.
В данном видео - мы используем сервер tomcat.
В результате сборки проекта мы получаем war файл. И томкат запускает его. Под капотом, там, конечно же, есть свой метод main, но, в данном случае, для нас это не критично.
Добрый день. Вопрос. Я добавил в свойство create. Но создание таблицы не происходит. БД есть, но таблица BOOK не создается.
Евгений, спасибо за видео! Есть такой вопрос: mvc-dispatcher-servlet.xml не прописан явно в pom.xml, но используется. Как JVM понимает что нужно брать именно mvc-dispatcher-servlet.xml?
Пожалуйста.
Спасбои за отзыв.
С mvc-dispatcher-servlet.xml работает Spring.
Это название по умолчанию.
Мы можем его изменить, но прописать это в web.xml
Спасибо за ответ, но в своем проекте я поменял название с mvc-dispatcher-servlet.xml на departments-servlet.xml, и не прописывал это название в web.xml, но Spring его находит все равно.
Имя меняли черtз refactor?
да, посмотрел файл - departments-servlet.xml
Отлично, спасибо!
Добрый день! Подскажите, пожалуйста, а если в базе данных несколько таблиц как нужно выстраивать DAO нужно делать интерфейсы для каждой таблицы и все имплементировать в один класс Dao или для каждого интерфейса таблицы нужен свой класс? и также с сервисом?
Иван Яковлев добрый вечер.
Данные о таблице, в данном случае, берутся из аннотации.
Зачем GET метод делать транзакционным?
Здраствуйте, у меня возникает CannotCreateTransactionException. Как исравить?
13:17 Вроде как я понял load() всегда возвращает ссылку, а не null. Null возвращает get()?
Да, вы правы, метод load кинет исключение, если объект не будет найден. Спасибо за комментарий.
Спасибо ОГРОМНОЕ)
Добрый день! Спасибо за очень полезное видео! Как раз, то что искал!!!
Хотел уточнить:
1. Intellij IDEA community или ultimate?
2. MySQL Workbench community или ultimate?
Если дадите ссылку буду очень рад.
День добрый, Яков.
Благодарю за отзыв, рад что материал оказался полезным.
Intellij IDEA - ultimate.
MySQL Workbench - стандратная, которая находится в свободном доступе.
Ссылка на Intellij IDEA находится на сайте
www.jetbrains.com/idea/download/
Данная IDE платная, либо бесплатная версия, с некоторыми "тонкостями".
Workbench :
dev.mysql.com/downloads/workbench/
Удачи Вам, Яков.
Установил intellij IDEA community 14, чтоб было как на видео. Но вот появились проблемы с mysql workbench. Какая версия у вас стоит (номер и community/standart/enterprise)? Еще вопрос нужно создать соединение да? У меня выходит ошибка. И при открытии модели совсем отличается внешний вид. Не могу понять как у вас слева появляется навигация по проекту.
Кстати, когда скачал и запустил ваш проект (только у меня tomcat 7, это никак не влияет на работоспособность?) открывается первая страница. Затем при попытке открыть следующую по ссылке выводит ошибку. Тоже не могу понять почему.
Яков Бурцев
Добрый день, Яков
Проверьте настройки базы данных:
1. Создана ли она у вас
2. Такое же имя БД
3. Имя пользователя БД
4. Пароль доступа к БД.
Чаще всего, проблема именно в этом.
При таком способе создания проекта как в видео , не подгружается maven, т.е. не создается файл pom.xml . Хотя на видео создан pom.xml файл
Подскажите пож та где включить шаблоны, нет такого в моей ИДЕЕ, не могу найти где включить
Вероятнее всего, у вас Community Edition. На видео - Ultimate
у меня тоже Ultimate
Автор, спасибо за видео!
По поводу listBooks(): ИМХО, аккуратнее получить книги было бы так:
Session session = sessionFactory.getCurrentSession();
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery criteria = builder.createQuery(Book.class);
Root contactRoot = criteria.from(Book.class);
criteria.select(contactRoot);
List bookList = session.createQuery(criteria).getResultList();
Вместо того, чтобы использовать руками HQL, а также чтобы не нужно было подавлять варнинг.
И ещё, у @Autowired значение true по дефолту, можно не писать руками.
И вопрос: не было бы ли лучше открывать сессию отдельно для каждой операции и закрывать её? Тем более, что Session implements Closeable и можно было бы не закрывать самому, а с try-with-resources:
try (Session session = sessionFactory.openSession()) {
// Do a barrel roll
}
И последний вопрос: зачем создавать два одинаковых интерфейса и для Dao, и для сервиса, не было бы лучше создать что-то одно, типа Accessor для всех?
Ещё раз спасибо!
Пожалуйста, Виталий.
По поводу вашего запроса - дело в том, что (насколько я знаю) Criteria имеет преимущество в динамических запросах, которые имеют несколько параметров поиска.
В данном случае - у нас просто список всех книг.
По поводу сессий - а, вариантов много, но приложение крайне маленькое и вряд ли имеет смысл уделять много внимания менеджементу сессий.
Создал новый проект maven и пытался переместить в него ваш package и по итогу BookService не видит класс Book в папке model, хотя import прописан верно. В чем может быть ошибка?
Так же при скачивании и запуске вашего проекта происходит ошибка при переходе по ссылке "BookList" Проект работает не корректно при скачивании. Maven не инсталиться:
java.lang.NoSuchMethodError: org.springframework.core.annotation.AnnotatedElementUtils.findMergedAnnotationAttributes(Ljava/lang/reflect/AnnotatedElement;Ljava/lang/String;ZZ)
Видео отличное!
Могли бы Вы подсказать, как пользователям Community Edition устанавливать необходимые библиотеки?
Пожалуйста, Станислав.
К сожалению (или к счастью), у меня нет опыта работы с Community Edition и я не могу ответить на ваш вопрос.
К сожалению, никак. При работе с Java Enterprise нужна только полная версия Идеи.
Добрый день, подскажите, пожалуйста, как вам удалось совместить добавление и редактирование в одном окне? У меня вот на edit гиперссылка, в которой одно окно редактирования, не очень красиво получилось. Спасибо
Выбираю SpringMVC, создаю проект и в итоге проект без мавен и пом-ника, ну и соответственно без тестового класса HelloWorld.
Зависит от версии Intellij IDEA? Или что то в настройках?
+Илья Читнеев
Стоит посмотреть, отмечен ли пункт download, который находится в нижней части панели при создании проекта.
Там есть возможность скачать библиотеки, либо указать путь.
Рекомендуется выбирать download.
+Eugene Suleimanov по дефолту выбран download, на Use library не менял, потому что зачем загружать самостоятельно, если это делает maven\IDEA
После того как нажимаю next, предлагается выбрать имя проекта и директорию , и кнопка finish
+Eugene Suleimanov я могу самостоятельно попытаться все это сделать, но IDEA должна сама по идее..
+Eugene Suleimanov отсуствует выбор шаблона
+Илья Читнеев Также не нашел выбор шаблона при создании проекта. IDEA 15 Ultimate
Добрые люди, залейте исходники этого проекта и дайте ссылку!
Спасибо! Проект без проблем запустился... Интересно, как можно прикрутить пейджинг, так чтоб например по 5 книг отображалось на листе, если подскажете или отправите по ссылке буду благодарен.
На работе заставили перейти с сервера Ґласфиш на Апаче. И здесь у меня возникает ошибка при отправляться запросов к БД вылетает ошибка 500. Соединение с бд настроено правильно. В чем может быть проблема.
Еще актуально? все таки 4 года прошло
Сама идея - да. А версии я бы брал более новые.
добрый день, подскажите, пожалуйста, как сделать, чтобы можно было выбрать шаблон spring mvc как на 1:14
версия идеи совпадает с вашей, однако отсутствует данное диалоговое окно
такая же проблема нет шаблона и не могу найти где включить. Помогите плиз
Sergey Yakovenko я лично так и не нашел в чем проблема
У вас видимо комъюнити эдишн, вам нужно ультимейт версию скачать
Андрей Решетченко в том-то и дело, что версия ультимат, где-то наткнулся, что убрали это фичу, на сколько соответствует реальность - не знаю
а, это я сам хз.
У аффтора какие-то кастомные настройки и он не хочет объяснять как их сделать.
При попытке редактировать книгу, получаю следующее сообщение об ошибке, не подскажите где искать?
org.apache.jasper.JasperException: An exception occurred processing JSP page /WEB-INF/views/books.jsp at line 55
52:
53:
54:
55:
56:
57:
58:
Здравствуйте, подскажите пожалуйста, делаю по вашему примеру, только вместо книг юзеры.
в этом месте:
@RequestMapping(value = "users", method = RequestMethod.GET)
public String listUser(Model model) {
model.addAttribute("user", new User());
model.addAttribute("listUser",this.userService.listUser());
return "WEB-INF/pages/users";
}
в listUser null, в чём может быть дело?
Тут необходимо смотреть код DAO слоя.
Если HTTP приходит без ошибок, то причина, скорее всего именно там.
Спасибо за быстрый ответ, я нашёл ошибку, не верные скобки в if в jsp(((
подскажи те как сделать index.jsp стартовой никак не могу раскурить
Одно бы хотел уточнить. Цену в int не очень делать, лучше в BigDecimal наверное?
Как вариант - не плохо :)
Немчинский советует в инте делать. В таком случае цена выражается в копейках.
Андрей Агарков
Вариант хороший, но часто на реальных пректах это крайне затруднительно - много лишнего кода придётся писать.
Поэтому используют либо Currency,
docs.oracle.com/javase/6/docs/api/java/util/Currency.html
или специальную библиотеку, например,Joda-Money.
Спасибо за информацию и за урок конечно!
Андрей Агарков
Пожалуйста, Андрей.
Добрый день. Спасибо за видео. Почему-то проект не хочет запускаться на Tomcat 7. На 8 и 9 стартует без проблем. Подскажите как-нибудь можно это исправить? На хостинге установлен Tomcat 7. Поэтому и локально тестирую на 7.
Разобрался может кому-нибудь пригодится.
Idea - Edit Configuration... - Tomcat Server - Tomcat 7.0.82 - Deployment - + BookManager:war exploded
Подскажите пожалуйста. При выборе типа приложения Spring MVC при нажатии далее не появляется окно с выбором типа шаблона и соответственно никакие папки не создаются, а есть только папка web. В чем может быть проблема? Использую Idea Ultimate 2016.1.1
+Павел Захаров
К сожалению, не работал с крайней версией IDEA, поэтому не смогу Вам помочь в этом вопросе.
Попробуйте поискать ответ в гугле, либо обратится в службу поддержки JetBrains.
У меня та же проблема. Это скорее всего прикол версии программы, или из-за того что мы его не "купили" как следует ))
Кстати весь урок завязан на этом шаблоне. Люди не могут повторить урок на другой версии?
Я разобрался, этот шаблон выбирается на версии 14 ultimate...
Eugene Suleimanov спасибо большое за урок,очень полезно.
Вопрос: в контроллере, в этом куске кода: listUsers не виден в JSP-м файле. Подскажите пожалуйста решение. @RequestMapping(value = "users", method = RequestMethod.GET)
public String listUsers(Model model){
model.addAttribute("user", new User());
model.addAttribute("listUsers", this.daoService.listUsers());
return "users";
}
------------------------------------------------------------------------------------------------------------
изменил на:
@RequestMapping(value = "users", method = RequestMethod.GET)
public String listUsers(@ModelAttribute("listUsers") List user){
this.daoService.listUsers();
return "users";
}
Теперь в файлах JSP видна ссылка на listUsers. Это правильная замена?
Здравствуйте! Огромное Вам спасибо за видео! Может быть вы подскажете, пытался по аналогии сделать для своей базы приложение, при запуске сервера выскакивает следующая ошибка:
HTTP Status 500 - Request processing failed; nested exception is
org.springframework.transaction.CannotCreateTransactionException: Could
not open Hibernate Session for transaction; nested exception is
java.lang.NoClassDefFoundError:
org/hibernate/engine/transaction/spi/TransactionContext
Что может быть не так?
День добрый, Юрий.
Проверьте версию Hibernate, в данном проекте используется версия 4.3.5 Final.
Вероятнее всего, в Вашем случае - Hibernate 5.
Действительно, в этом всё дело, помогло)
Спасибо большое!
Всегда пожалуйста, Юрий.
@@EugeneSuleimanov У меня таже проблема. Немогли бы вы обьяснить почему не работает с 5 Hibernate?
@@АнтонГорбатенко-у2ь это связано с конфликтом версий. Версии спринга и хибернейта.
Евгений, спасибо Вам за туториал.
Сделал все по аналогии, проект заработал.
Разве что пришлось использовать в pom.xml те же версии зависимостей, что в Вашем примере. Свежие версии Спринга и Хибернейта не переваривали друг друга.
У меня к Вам есть дополнительный вопрос. Буду очень признателен, если ответите.
Я хочу прикрутить простой поиск по айдишнику или полю с названием книги.
Что для этого необходимо сделать? Я так понимаю, в контроллер надо добавить соответствующий метод наподобие этого.
@RequestMapping("search/{id}")
public String searchUser(@PathVariable("id") int id, Model model){
//не уверен что именно эти методы нужно использовать
model.addAttribute("user", this.userService.getUserById(id));
model.addAttribute("listUsers", this.userService.listUsers());
return "users";
}
По идее, после этого мы должны добавить в .jsp страницу с книгами кнопку search
при клике на которую нас перебрасывает к полям таблицы, которую мы используем для добавления и редактирования книг, а там в свою очередь ввести айдишник и если совпадение найдено, то в этой же нижней таблице появятся данные по книге.
Логика в целом ясна, но как реализовать не совсем понятно, опыта не хватает.
Подскажите, как бы Вы это реализовали
Вечер добрый.
Поиск по ID - Не самый лучший враиант - лучше использовать поиск по имени или по цене и т.д.
Необходимо реализовать метод в DAO слое + добавить во все слои.
Ну и создать отдельную страницу для вывода результатов поиска.
Спасибо за наводку. В ДАО добавил метод поиска пользователей по имени:
@Override
@SuppressWarnings("unchecked")
public List listUsersByQuery(String query) {
Session session = this.sessionFactory.getCurrentSession();
List bookList = session.createQuery("from Books B WHERE B.book_title = '" + query + "'").list();
return bookList;
}
В контроллер добавил такую реализацию:
@RequestMapping(value = "/books/search" , method = RequestMethod.GET)
public String searchClubs(@RequestParam("book_title") String title, Model model) {
model.addAttribute("queryTitle", bookService.listBooksByQuery(title));
return "books";
}
Евгений, подскажите, правильно ли реализован метод в контроллере? И под созданием отдельной страницы для вывода результатов поиск Вы понимаете отдельную .jsp или ссылку внутри books, например "/books/search?
Евгений, подскажите пожалуйста, как осуществить поиск по БД в Вашем примере?
+Cardmaster Card
Тут нужно думать, конечно, самому.
Дам лишь подсказу, что нужно реализовать метод, который делает запрос в базу с определённым условием.
Создать отдельную страницу с выводом результатов и контроллер для этой странцы.
Удачи )
+Eugene Suleimanov
Вы не могли бы показать пример?
Евгений, уже несколько дней бьюсь над добавлением поиска. Можете направить в правильное русло: 1."создать отдельную страницу для вывода" в той же папке создать где и userdata? 2. контроллер для этой страницы должен быть в отдельном файле или просто путем добавления метода в UserController?
Создайте метод в слое dao -
public List findBookByName(String bookName) {
...
List result = new ArrayList();
далее запрос на получение всех книг из таблицы.
List allBooks = ...
После этого
for(Book book: allBooks){
if(book.getName().equals(bookName)){
result.add(book);
}
}
...
return result;
}
Соновная мысль, приблизительно, такая.
Пропущенная часть кода не должна вызвать затруднений.
А страницу для вывода результатов поиска попробуйте реализовать по аналогии со списком всех книг, только используйте метод для поиска.
У меня вылетает ошибка 404 The requested resource is not available. Настраивал все по уроку, первая страница открывается, вторая ни в какую. Что делать?
ЗДРАВСТВУЙТЕ!!. Нужны cнова ваши наставления. Делаю приложение TODOList(список дел что нужно сделать). Есть необходимость выводить активные и завершенные дела отдельно. В таблице базы данных за это отвечает колонка status(тип TINYINT). Это нужно еще добавить в сontroller, dao, service по два метода?
Я не уверен что правильно сформулировал запрос в методах в dao :
@Override
public List listActiveTasks() {
Session session = this.sessionFactory.getCurrentSession();
List rezult = session.createQuery("from Task WHERE status LIKE '1'").list();
for(Task t:rezult){
logger.info(" Active Task list: "+t);
}
return rezult;
}
Если не верно подскажите пожалуйста как сделать правильно..
Логичнее будет передавать в метод аргумент, например string или integer, а в jsp в зависимости от ввода выводить необходимые значения.
Привет, кто мне объяснит зачем дублировать код? Я имею ввиду dao и service.
ты проста гений
Евгений добрый день! Пошагово, по Вашему уроки делал приложение, однако при работе выявилась следующая проблема, при попытке редактирования добавляет новую запись в БД, все проверил несколько раз, в чем проблема не могу предположить.... Дайте пожалуйста направление куда смотреть, где искать ошибку. Заранее спасибо....
+Александр Селезнев
Смотрите в BookDaoImpl. Какие именно методы используются у session.
Плюс, посмотрите аннотации в классе Book.
Добрый день! Подскажите, пожалуйста, что сделать... При создании в BookDaoImpl переменной Logger, не хочет подключаться импорт import org.slf4j.Logger;
import org.slf4j.LoggerFactory; на уровне slf4j. Я делала все по видео, специально скачала idea 14, так как на 16 не создавался шаблон. В pom добавила все dependency, в папке .m2 эта библиотека есть, но в проект jar файлы почему-то не подтянулись (если конечно в этом проблема). Куда и как их правильно добавлять или что нужно сделать, чтобы идти дальше? Помогите, плиз!
Попробуйте рпедварительно в терминале выполнить команду
mvn clean install
Должно помочь.
Спасибо большое, помогло!
Здравствуйте. Мучаюсь уже часа 4 с проблемой и не понимаю, что не так. Хочу в listBook поместить список книг и делаю так:
BookServiceImpl bookService = new BookServiceImpl();
List listBook = bookService.listBooks();
Выдает ошибку java.lang.NullPointerException
Добрый вечер. Вероятнее всего - не инициализирован сам сервис. Проверьте аннотацию @Autowired в текущем классе над самим сервисом. И аннотацию @Service в классе сервисе. Почти уверен, что проблема где-то здесь.
@@EugeneSuleimanov по-прежнему ничего не получается, чувствую себя тупицей :( Само ваше приложение работает, но хотелось более детально разобраться и усвоить материал, поэтому решил добавить функционала. Появлялась эта ошибка. @Autowired действительно не было, но добавление и всякие манипуляции не помогли. Теперь просто хочу в консоль через public static void main вывести книги, но прилетает java.lang.NullPointerException Как я только не извращался :(
@@TheArsty непонятные моменты - это нормально. Естественно, будет NPE, думаю, имеет смысл более детально изучить что такое Spring, и как происходит инициализация компонентов. В методе main этого, просто так, в лоб, сделать не получится.
Посмотрите здесь, этого должно хватить для основ proselyte.net/tutorials/spring-tutorial-full-version/
@@EugeneSuleimanov спасибо, уже штудирую
@@EugeneSuleimanov тестирую, получается @Autowired срабатывает только если перед классом есть аннотация @Controller или например @Component и при запуске приложения, выдает мне нужные данные. Но, если я хочу создать новый объект этого же класса и в методе получить данные из БД, то запрос в БД не делается и всегда NPE. Пока так и не понял, как используя ваш сервисный класс и не используя контроллер получить данные из БД
Подскажите , можно ли запустить данный проект из idea community? Если да, подскажите как. Пытаюсь запустить - выдаёт ссылку на ultimate((
с community не получится)
Здравствуйте! можете подсказать какая у вас версия линукса ?
Если мне не изменяет память, то на тот момент была Ununtu 14.04 LTS
Надеюсь кто-то увидит. Проблема в приложении. С одной моделью работает хорошо но когда добавляю иную модель с такими же методами то получаю при edit'e "could not initialize proxy - no Session". Что не так?
Нужен более полный лог ошибки
Exception
org.apache.jasper.JasperException: An exception occurred processing JSP page [/WEB-INF/pages/authors.jsp] at line [88]
85:
86:
87:
88:
89:
90:
91:
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:584)
...
Root Cause
javax.el.ELException: Error reading [name] on type [net.proselyte.bookmanager.model.Author_$$_jvst283_0]
...
Root Cause
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
...
@@taras7630 т.е. вы модифицировали приложение?
я по аналогии создал еще одну модель с таким же функционалом как и в самом приложении. Когда была одна модель то все работало а когда две то появилась ошибка
@@taras7630 и некорректно настроили связи между объектами.
Почитайте пожалуйста документацию hibernate по конфигурации связей, либо туториал на сайте proselyte.net
Спасибо за урок.
Во время запуска получаю ошибкУ
org.apache.jasper.JasperException: An exception occurred processing JSP page /WEB-INF/pages/books.jsp at line 49
46:
47:
48:
49:
50:
51:
52:
root cause
java.lang.NumberFormatException: For input string: "bookTitle"
Подскажите что ей не нравится ????? Не понимаю
Здраствуйте, Александр.
Хотелось бы увидеть весь трейс ошибки.
И проверьте, полностью ли вы скопировали весь проект.
Обратите внимание на тип данных bookTitle в классе Book - точно ли он String,
@Column(name = "BOOK_TITLE")
private String bookTitle;
stacktrace - pastebin.com/JTa8w2V1
вот мой проект - github.com/AlexSmirnof/BookStore
Попробуйте в этот класс:
github.com/AlexSmirnof/BookStore/blob/master/src/main/java/com/home/bookstore/controller/BookController.java
Ваш метод:
@RequestMapping(value = "books", method = RequestMethod.GET)
public String listBooks(Model model) {
model.addAttribute("books", bookService.listBooks());
return "books";
}
Попробуйте:
@RequestMapping(value = "books", method = RequestMethod.GET)
public String listBooks(Model model){
model.addAttribute("book", new Book());
model.addAttribute("listBooks", this.bookService.listBooks());
return "books";
}
Должно помочь.
Евгений, Большое Спасибо!
Ваша подсказка помогла.
Удачи Вам!
Очень помогло, почти всё почти сразу получилось, спасибо!
Вопрос: у меня при редактировании всегда создается новая. В отладке видно, что в контроллере в addBook() все поля = null (если Long id) или 0 (если int id). Почему у меня кнопка "Add" не заполняет объект? При этом наименование передается нормально.
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
Пожалуйста, Павел.
Внимательно просмотрите методы в слое DAO.
Вероятнее всего, ошибка именно там.
Туда даже не доходит. В контроллере в отладке уже пустые все не-строковые поля. Может, глянете, если будет минутка? github.com/SonicNorg/JavaRushTask
здравствуйте, я все сделал как у Вас, но у меня работает только страница index, при переходе на остальные - 404 not found. смотрел самые первые комменты, там у кого-то было подобное, Вы советовали смотреть в контроллер, и если это о классе BookController, то там вроде-бы все правильно написано, пробовал по-разному менять во всех файлах ссылки на страницы, менял на /pages/books вместо /books, то же самое.. и не совсем понимаю при чем там этот класс контроллер, если он, насколько я понимаю, отвечает за наполнение данными jsp страниц в папке pages, а сервер не видит саму страницу вообще, или не имеет доступа к ней.. контроллер может не позволить серверу видеть страницу? поправьте, если ошибаюсь.
и еще, перед отправкой этого комментария прямо сейчас посмотрел, в классе BookDaoImpl в строке
List bookList = session.createQuery("from Book").list(); подчеркнуто красным " 'from' unexpected ", что-то с hibernate может, у Вас такого не было в видео же, у Вас подчеркнутым было слово Book.. помогите советом, пожалуйста
Добый вечер, Павел.
Если ошибка 404 - то причина либо в контроллере, либо в именование пакетов, либо в имени jsp файла (99.9%).
То, что подчёркивает красным - не проблема - главное, чтобы компиляция была успешной.
Нужно смотреть сам код.
Классный урок. Респект за проделанную работу. но почему-то не может у меня совершить транзакции для вывода списка книг. Хотя информацию об одной книге выводит.
Здраствуйте, Александр.
Спасибо за отзыв
Какие ошибки вылетают?
Request processing failed; nested exception is org.hibernate.hql.internal.ast.QuerySyntaxException: books is not mapped [from books]
Добрый день,у меня такой вопрос,а как сделать все тоже самое только без Спринга?
день добрый.
С помощью сервлетов. Мы создаём обработчики запросов и прописываем поведение
Нифига не получается так проект создать( с версии 15 уже по другому
Пара вопросов:
1) Зачем два одинаковых интерфейса (BookDao и BookService)?
2) В чем *практическая* необходимость в этих интерфейсах?
Разбиение на слои - Repository и Service.
Обычно, первый отвечает только за работу с БД, а второй - содержит бизнес логику.
В данном приложении это не критично, потому что есть только стандартные CRUD операции.
Вы не поняли мой вопрос (может быть он конечно настолько тупой :)
За работу с БД и бизнес-логику отвечают классы BookDaoImpl и BookServiceImpl, а мне не понятно зачем писать *интерфейсы?* И можно же было имплементировать один и тот же интерфейс в оба этих класса - они же (интерфейсы) *одинаковые!*
В данном случае - они одинаковые и смысла нет.
В реальной жизни, вероятнее всего, каждый интерфейс будет иметь свои методы.
Спасибо!
1) это они пока что одинаковые, потому что основные функции программы совпадают с перечнем, зашифованном в абревиатуру CRUD. Если мы решим добавить в программу, к примеру, функции сортировки или еще другие фичи, сервис неизбежно дополнится новыми методами, а вот репозиторий новых методов не получит
2) так реализуется паттерн "слабая связанность" - максимальная независимость компонентов системы друг от друга
Нужна помощь!! В модели есть поле (Date date) дата, я хочу вставить его в таблицу базы данных. Как это все настроить? Каким должен бить тип поля в базе данных, какой должен бить html input jsp-файле, может нужны какие-то аннотации в модели к этому полю? Просветлите пожалуйста. Не могу найти нормальный материал по этой теме.
Тип данных в БД может быть DATE либо DATETIME.
Вводить данные нужно в соотвествии с шаблоном даты в БД.
поставил тип DATETIME, Данные ввожу вот так:
Часть кода модели:
@Column(name = "date")
@DateTimeFormat(pattern = "dd MMMM yy hh:mm:ss")
@Temporal(TemporalType.DATE)
private Date date;
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
Подскажите что не так.
В любом случае необходимо смотреть само приложение целиком.
Но обычно, дату вводят с помощью календарика, а не в поле.
Ccылка на код -->>> drive.google.com/file/d/0BwNON3n3eRd6ZUJLWWliT1RlNk0/view?usp=sharing
База данных test (root root) таблица в ней tasklist:
CREATE TABLE `tasklist` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`description` longtext NOT NULL,
`status` tinyint(1) NOT NULL,
`date` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
Доброго времени суток Евгений! Не могу разобраться с проблеммой. При запуске(также пробовал запускать и Ваш готовый проект) выдаёт следующие ошибки:
1.Artifact BookManger:war exploded: Error during artifact deployment. See server log for details.
2. Error waiting for multi-thread deployment of context descriptors to complete
java
Посоветуйте как лечить пож. Заранее благодарен
Добрый день, Олег.
1. Проверьте версии зависимостей - может быть конфликт версий.
2. Нужен более полный стектрейс для понимания проблемы.
а можно вместо sessionfactoruy использовать entitymanagerfactory. и какая у них разница?
Здраствуйте, Олег.
EntityManagerFactory (и EntityManager) - это JPA стандарт.
SessionFactory относится исключительно к Hibernate.
Обычно, если нам не нужно использовать специфические возможности SessionFactory, то лучше использовать EntityManager.
В любом случае, из EntityManager мы также можем получить сессию, например:
Session session = entityManager.unwrap(Session.class);
Надеюсь, ответил на ваш вопрос
извините за наверное тупой вопрос.
public void addBook(Book book) {
Session session = entityManager.unwrap(Session.class);
session.persist(book)
}
Я правильно использую вызов сессии из EntityMeneger_a ?.спасибо.
oleg login не бывает глупых вопросов в нашей работе - всегда лучше уточнить )
В данном случае лучше использовать методы EntityManager для сохранения.
Метод unwrap здесь не нужен.
Ну и конфигурация будет несколько отличаться в конфигурационном файле.
Добрый день , что делать если Idea не предлагает создать шаблон при создании Spring MVC ?
День добрый, Дмитрий.
Попробуйте создать такую ж структуру вручную.
в исходниках нету файла, index.jsp. + 3 очепятки в коде , такое ощущение что их автор поправил за кадром :)
В этом и была задумка - спрятать файл index.jsp и основную работу сделать за кадром, чтобы люди ничего не могли понять.
видео классное спору нет :) , но новичкам вроде меня тяжело собирать проект даже если есть небольшие очепятки )
Добрый день. Скачал ваш проект. Запустил. Ошибка:
HTTP Status 500 - The absolute uri: java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar files deployed with this application
Подскажите, пожалуйста, что нужно исправить. Спасибо!
День добрый.
Стоит проверить зависимости в файле pom.xml могли не подтянуться.
Подтянулись