Форум программистов, компьютерный форум, киберфорум
Java EE (J2EE)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
1 / 1 / 0
Регистрация: 10.07.2014
Сообщений: 15
1

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

03.12.2016, 20:55. Показов 1239. Ответов 9
Метки нет (Все метки)

В интернете я не встречал нормальных примеров которые хорошо показывают работу Java сервлетов. Все что я видел - это примитивные CRUD приложения с 1 сущностью. Такие примеры не дают понимания как все работает в комплексе.

Я создал учебный проект для того чтобы в комплексе освоить работу Java сервлетов и JDBC DAO в более сложной модели данных чем просто 1 сущность. Без применения Spring и ORM, только чистые Java servlets и JDBC.

Функционал учебного приложения:
- Авторизация пользователя по паролю, разграничение доступа по ролям;
- Кеширование сущностей. Применение Echcashe для кеширования сущностей;
- Разделение представлений. Отдельные View и DAO для загрузки и отображения списочных форм (light view), отдельные View и DAO для загрузки и отображения карточки объекта (full view);
- Организация работы с DAO. dao factory выдает нужное DAO по заданному парамету. Т.е. нужное DAO не создается каждый раз по new, вместо этого dao выдает фабричный метод. в DAO показана работа с коллекциями, примитивными типами, enum-ами.
- Функционал загрузки файлов. Файлы загружаются и хранятся на диске, а имена файлов и путь к ним сохраняются в БД.
- Логирование различных событий с помощью SL4j. Различные события логируются в различные файлы.

Я не стал наворачивать более сложный функционал. Моей целью было показать как можно работать с сервлетами и Jdbc в проекте посложнее чем просто 1 сущность, сделать для себя точку старта в сервлетах и jdbc.

Модель данных (кратко):
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
User extends Model{
    String firstName;
    String lastName;
    String caption;
    String email;
    String login;
    String password;
    UserRole role;
 
    Collection<WorkTask> userTasks;
}
 
WorkTask extends Model {
    User taskUser;
    String caption;
    String taskContext;
    Date taskDate;
    Date deadLine;
    TaskStatus taskStatus;
    
    Collection<Attach> attaches;
}
 
WorkNote extends Model{
    String caption;
    Date noteDate;
    String description;
 
    WorkTask subject;
    User noteUser;
}
 
Attach extends Model{
    String fileName;
    String caption;
    WorkTask workTask;
}
Предметная область: web-приложение, которое создает задачи пользователям со сроками исполнения. А-ля Jira.

Буду признателен за Ваши замечания и рекомендации к исправлению.

https://github.com/proton2/ServletJdbcExample

Борис Яценко


Добавлено через 38 минут
вход по root/root
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.12.2016, 20:55
Ответы с готовыми решениями:

Сервлеты, слушатели, jdbc
Такое дело, необходимо выполнить учебный проект - веб приложение, студенты, пары, преподы и т.д....

JDBC, tomcat, сервлеты
С этими вещами сталкиваюсь первый раз, учусь. Был проект сделанный с DAO, там были базовые CRUD...

Как научиться решать рекуррентные уравнения? Что нужно знать для освоения этой темы?
Как научиться решать рекуррентные уравнения? Что нужно знать для освоения этой темы? ...

Проект созданный в более ранней версии VS запускается, а созданный проект в VS 10 с теми же исходниками не запускается
Собственно, вопрос в заголовке. Скачал я урок по OpenGL от NeHe (урок 22), решил запустить у себя...

9
Эксперт Java
2361 / 2191 / 559
Регистрация: 28.12.2010
Сообщений: 8,584
03.12.2016, 21:24 2
Цитата Сообщение от proton2 Посмотреть сообщение
Моей целью было показать как можно работать с сервлетами и Jdbc
вы опоздали лет на 7 где-то. Кому сейчас сервлеты нужны?
0
1 / 1 / 0
Регистрация: 10.07.2014
Сообщений: 15
03.12.2016, 22:19  [ТС] 3
В реальном проекте да, не нужны никому.

Но на собеседованиях про сервлеты спрашивают. Многие фреймворки основаны на Servlet API, поэтому основы знать требуется.
В данном учебном проекте в связке с сервлетами демонстрируется еще и работа с DAO, основанным на jdbc.
0
Почетный модератор
Эксперт по компьютерным сетямЭксперт Windows
28023 / 15750 / 971
Регистрация: 15.09.2009
Сообщений: 67,775
Записей в блоге: 78
03.12.2016, 22:24 4
может перенести тему в "проекты"?
0
1 / 1 / 0
Регистрация: 10.07.2014
Сообщений: 15
03.12.2016, 22:49  [ТС] 5
Сделайте как Вам виднее.
0
154 / 153 / 53
Регистрация: 30.04.2016
Сообщений: 321
04.12.2016, 12:34 6
proton2, Бегло взглянул - проблемы: @Override методы с пустым содержимым (вообще не понял зачем все дао с одним интерфейсом, и по половине имплементаций не реализовано, если нет смысла в этих методах - значит интерфейс не подходит), catch блоки которые просто съедают exception-ы, куча логики в контроллерах - для этого надо делать сервисы (особенно гигантский блок else if в WorkTaskController). Все это я бы исправил.
1
1 / 1 / 0
Регистрация: 10.07.2014
Сообщений: 15
10.12.2016, 21:32  [ТС] 7
Большое спасибо за замечания!

Небольшое обновление.

Добавил возможность импортировать рабочие задачи из excel файлов в базу из web интерфейса.
0
102 / 102 / 40
Регистрация: 24.01.2014
Сообщений: 1,244
12.12.2016, 00:54 8
мне кажется или плодить контроллеры так себе идея ? почитайте про слой command, мне кажется, что сервлеты без него не пишутся
0
1 / 1 / 0
Регистрация: 10.07.2014
Сообщений: 15
08.01.2017, 20:39  [ТС] 9
Цитата Сообщение от Fene4ka_ Посмотреть сообщение
мне кажется или плодить контроллеры так себе идея ? почитайте про слой command, мне кажется, что сервлеты без него не пишутся
Большое спасибо за совет! Знаю такую штуку когда сервлет всего 1, далее все действия обрабатываются как команды. Позже я подумаю над реализацией этого.

Сейчас хотел предложить посмотреть (и раскритиковать) как я облегчил работу с JDBC.
Удалось уйти от ручного разбора ResultSet'а. С помощью рефлексии объекты entity автоматически конструируются из ResultSet, в том числе и ссылочные поля.
Так же при insert и update при инициализации PreparedStatement мы не указываем явно каждое поле ps.setLong(1, ...). Вместо этого отдаем в сервисный метод весь объект, сервисный метод с помощью рефлексии разбирает каждое поле и инициализирует PreparedStatement. Это позволило существенно сократить код DAO методов.

Класс маппера https://github.com/proton2/Ser... apper.java
Конечно коряво выглядит сохранение Enum в виде строки в БД, но если вместо этого значение enum хранить не в строке а в числовом виде, то не удается рефлексией инициализировать Enum поле. А когда Enum сохранен как строка, то само значение инициализируется рефлексией без проблем Enum.valueOf(clazz, columnValue.toString())
Class clazz = field.getType();
BeanUtils.setProperty(bean, field.getName(), Enum.valueOf(clazz, columnValue.toString()));

Пример реализации DAO с использованием данного метода
https://github.com/proton2/Ser... teDao.java

Посмотрите пожалуйста, где что можно улучшить / переделать?
0
Эксперт Java
2361 / 2191 / 559
Регистрация: 28.12.2010
Сообщений: 8,584
09.01.2017, 09:59 10
proton2, вам никто не говорил что рефлексия это медленно и плохо?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.01.2017, 09:59

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Проект, созданный в Windows сохранить для OS X
Здравствуйте. Создаю проект в Windows. Подскажите, как его сохранить, чтобы он работал по OS X?...

Проект не видит сервлеты
Этот вопрос наверное всех одолел !!! Короче,создан проект.Запустил на машине Tomcat всей конторой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.