|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
Результаты опроса: Интересна ли вам эта тема | |||
Да, интересно | 14 | 100.00% | |
Нет, не интересно | 0 | 0% | |
Голосовавшие: 14. Вы ещё не голосовали в этом опросе |
|
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу. Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста". Название темы слишком короткое или не отражает сути вашего вопроса. Тема исчерпала себя, помните, один вопрос - одна тема Прочитайте правила и заново правильно создайте тему. |
|
Опции темы | Поиск в этой теме |
16.12.2007, 22:05 | #31 |
Регистрация: 14.12.2007
Сообщений: 5
|
Если у тебя нету времени тогда может выложишь архив готового портала.А
статью допишешь потом. |
17.12.2007, 11:52 | #32 |
Форумчанин
Регистрация: 10.11.2006
Сообщений: 189
|
Урок 5. Создание веб-портала с помощью Hibernate + Spring + Spring MVC
Всем привет. Сегодня я наконец-то завершаю цикл статей посвящённый созданию веб-приложения
с помошью Spring и Hibernate Сегодня мы наконец-то запустим наш портал! Давайте начнём. Прежде всего создадим проект comedyclub, он будет у нас такой структуры: Код:
Все наши исходные java классы будут храниться в папке src. Cкомпилированные классы мы будем помешать в папку classes и далнейшая работа будет проходить в папке war. После создания всех jsp страниц, настройки всех конфигурационных файлов (*.xml, *.properties) в папке web мы получим готовое веб-приложение. Для того чтобы запустить его нам достаточно скопировать нашу папку war в папку webapps контейнера tomcat, переименовать например в comedyclub и стартовать сам томкат. Структура папки war должна соответствовать спецификации веб приложения. Mинимально она может выглядеть так: Код:
Код:
Код:
(для этого у вас папка bin веб-контейнера должна находиться в переменной PATH). После того как томкат стартует (в консоли появится строка "INFO: Server startup in xxxx ms"), запустите любой браузер и перейдите на адрес: http://localhost:8080/webtest (по умолчанию томкат стартует на порту 8080) Если всё прошло удачно, то в окне браузера откроется наша старничка index.html ! Давайте вернёмся к нашему проекту. Наша первая задача - это создать доменные объекты. Их написание я описывал в одной из первых статей, поэтому тут не буду повторяться. http://ifolder.ru/4589986 - по этому адресу вы можете скачать готовый проект, так что качайте и смотрите как оно работает перед тем как я начну углубляться в детали. все доменные объекты находятся в папке ComedyClub\src\com\comedyClub\domai n\ У нас их 3: Код:
Код:
Далее разберёмся с DAO слоем. Создадим интерфейсы для наших dao-методов: ComedyClub\src\com\comedyClub\dao\I UserDao.java: |
17.12.2007, 11:52 | #33 |
Форумчанин
Регистрация: 10.11.2006
Сообщений: 189
|
Урок 5. Создание веб-портала с помощью Hibernate + Spring + Spring MVC
Код:
ComedyClub\src\com\comedyClub\dao\I StoryDao.java: Код:
Код:
Как вы помните, интерфейсы создаються для того, чтобы реализовать модель IoC, то есть, чтобы уменьшить зависимость между компонентами нашего приложения Реализации наших dao-методов будут заниматься сохранением, доставанием, удалением наших доменных объектов из базы. Для того чтобы облегчить себе жизнь создадим класс-шаблон, в котором пропишем основные операции сохранения, поиска, удаления безотносительно к конкретному доменному объекту: ComedyClub\src\com\comedyClub\dao\i mpl\BaseAbstractDao.java: Код:
к конкретному доменному объекту. Это универсальный класс и его можно использовать и в других приложениях где используется связка Hibernate+Spring Далее создадим реализации наших интерфейсов, которые будут наследовать BaseAbstractDao: ComedyClub\src\com\comedyClub\dao\i mpl\UserDaoImpl.java: |
17.12.2007, 11:53 | #34 |
Форумчанин
Регистрация: 10.11.2006
Сообщений: 189
|
Урок 5. Создание веб-портала с помощью Hibernate + Spring + Spring MVC
Код:
Замечу, что реализация не совсем гладкая - необходимо обеспечить обработку исключительных ситуаций, однако сдесь мы её для простоты опустим. Заметьте - в методах с queryString используется HQL - Hibernate Query Language это замена для обычного SQL Другие реализации - StoryDaoImpl, RatingDaoImpl реализованы аналогично (см. исходники) @SuppressWarnings("unchecked") нужно всего лишь чтобы обмануть IDE, чтобы она не выдавала предупреждения. С DAO слоем покончено, переходим к слою бизнес-логики. Его будут составлять 3 интерфейса и их реализации: ComedyClub\src\com\comedyClub\servi ce\IUserManagerService.java: Код:
Как видите, тут у нас описаны методы регистрации нового юзера, его обновление, удаление, получение списка всех юзеров, всех юзеров по имени и др. А вот и реализация: ComedyClub\src\com\comedyClub\servi ce\impl\UserManagerServiceImpl.java : |
17.12.2007, 11:53 | #35 |
Форумчанин
Регистрация: 10.11.2006
Сообщений: 189
|
Урок 5. Создание веб-портала с помощью Hibernate + Spring + Spring MVC
Код:
Код:
мы опишем в контексте нашего приложения. Остальные классы выглядят аналогично. В бизнес методах происходит конвертация dto-объектов в доменные и наоборот. В принципе есть фреймворки которые позволяют динамически стрить dto объекты из доменных (например dynadto), но мы сделаем их руками. итак переходим к dto объектам: ComedyClub\src\com\comedyClub\dto\U serDto.java: Код:
|
17.12.2007, 11:53 | #36 |
Форумчанин
Регистрация: 10.11.2006
Сообщений: 189
|
Урок 5. Создание веб-портала с помощью Hibernate + Spring + Spring MVC
Наш dto-объект отличается от соответствующего ему доменного только отсутствием полей типа Set.
Аналогично делаем StoryDto, RatingDto. В нашем приложении других дто-объектов нам не понадобиться. На самом деле dto объект не обязательно должен внешне быть похожим на доменный объект, всё зависит от того, какие данные мы хотим передавать Ну вот - с бек-ендом покончено. Переходим к UI. У нас в качестве UI используется Spring MVC. Что такое MVC? Это шаблон проектирования Model View Controller. В чём его смысл? Давайте рассмотрим следующёю схему: Пользователь производит какие-то действия, например нажимает на ссылку, это действие передаётся оперделённому классу, который его обработает, он достанет из бекенда необходимые данные (либо сохранит их) и покажет пользователю результат его действий. Тут как раз и описана схема работы MVC: Наш класс, который обрабатывает запросы от пользователя - это контроллер. Бизнес методы в месте с доменной моделью - это модель Результат, который отображается пользователю - это view (представление) Модель у нас уже есть. Осталось разобраться с view и controllers Возьмём к примеру страничку логина. Создадим в папке war\web-inf\jsp файл userLogin.jsp: Код:
Код:
теги к нашей страничке, и потом используем их, например так: Код:
<input type="text" name="name" value="${status.value}"> посредством ${} мы можем вставлять в наш код выражения. В данном случае мы вставляем значение переменной. Откуда тут взялась переменная? В данном случае она относится к строке Код:
Код:
Внутри этого тега появляется возможность заполнить в поле формы для переменной userToLogin поле name. Откуда взялась переменная userToLogin? Её передал на нашу страничку контроллер. Давайте перейдём к его рассмотрению. Создадим класс UserLoginFormController.java в ComedyClub\src\com\comedyClub\web: |
17.12.2007, 12:01 | #37 |
Форумчанин
Регистрация: 10.11.2006
Сообщений: 189
|
Урок 5. Создание веб-портала с помощью Hibernate + Spring + Spring MVC
Код:
formBackingObject подготавливает для нашей странички новый объект типа UserDto. Именно в его поля мы будем на страничке записывать логин и пароль. Код:
Как же связывактся между собой котроллер и представление (view)? Все связи прописываются в контексте. Перед тем как описать их, рассмотрим более общие файлы в конфигурации: web.xml: Код:
Код:
Код:
Код:
Код:
Код:
(даже если такой старинчки в принципе нету). Соответсвие между html страничкой и одним из наших контроллеров будет определяться в comedyclub-servlet.xml Код:
(у неё расширение .htm а не .html потому, что противном случае она обрабатывалась бы нашим сервлетом см. выше, а это обычная страничка) Код:
Теперь рассмотрим comedyclub-servlet.xml: Код:
Код:
|
17.12.2007, 12:18 | #38 |
Форумчанин
Регистрация: 10.11.2006
Сообщений: 189
|
Урок 5. Создание веб-портала с помощью Hibernate + Spring + Spring MVC
Код:
имя объекта, который мы будем передавать в представление (мы его инициализировали методом formBackingObject), тип, этого объекта, валидатор, который будет проверать данные формы, имя представления, с которым связан наш котроллер, имя представления. на которое мы перейдём в случае успешного воода данных, а также тут мы просечиваем конкретную реализацию IUserManagerService. Код:
Код:
(мы не будем руками работать с сессиями hibernate, Спринг сделает это за нас) Код:
/WEB-INF/jsp/ <bean id="messageSource" class="org.springframework.context. support.ResourceBundleMessageSource "> <property name="basename"><value>messages</value></property> </bean> тут мы подключаем файл сообщений. Рассмотрим UserLoginFormValidator - валидатор значений формы введённых на страничке логина: |
17.12.2007, 12:20 | #39 |
Форумчанин
Регистрация: 10.11.2006
Сообщений: 189
|
Урок 5. Создание веб-портала с помощью Hibernate + Spring + Spring MVC
Код:
тот который мы заполняли на страничке логина под именем userToLogin. validate - собственно процедура валидации данных: ValidationUtils.rejectIfEmpty(error s, "name", "user.empty"); - если поле имя было пустое - вернуть ошибку далее пытаемся получить из базы юзера по логину и паролю, и если вылетает ексепшен, предполагаем, что такого юзера нету и возвращаем ошибку (не лучший вариант). Рассмотрим ещё, например, котроллер AddFriendController: Код:
(в предыдущем примере метод onSubmit вызывался уже после того как мы нажимали кнопку на нашей страничке) Обратите внимание на строки Код:
просто ввести в строке адреса http://localhost:8080/comedyclub/addFriend.html) тут мы проверяем - если юзера нету в сессии, то выкидываем но страницу логина |
17.12.2007, 12:21 | #40 |
Форумчанин
Регистрация: 10.11.2006
Сообщений: 189
|
Урок 5. Создание веб-портала с помощью Hibernate + Spring + Spring MVC
файл comedyclub-service.xml я подробно описывать не буду - он служит для соединения с базой.
Вот и всё. Все остальные файлы написаны подобно тем что мы уже рассмотрели. теперь осталось запустить наш портал. Для этого нужно: 1. В mysql (с помощью heidisql) создать базу comedyclub и юзера user c паролем user, который имеет все права на данную базу 2. Проверить, что у нас установлены и настроены ant, tomcat (томкат должен находится в с:\tomcat иначе нужно править файлы конфиеурации) 3. в папке CpmedyClub выполнить команду ant deploy 4. выполнить команду catalina start 5. перейти по адресу http://localhost:8080/comedyclub Я на самом деле пропускал некоторыt моменты, но это потому что я просто не в состоянии все их описть. Если вы хотите углубить свои познания в Spring и Hibernate советую прочитать книги 1. Spring in action 2. Java persistence with Hibernate Вот и всё. Будут вопросы - не стесняётесь - задавайте. Ещё раз привожу адрес, откуда можно скачать исходные коды портала: http://ifolder.ru/4589986 Если у меня будет время и желание, я покажу как можно проще и удобнее сделать UI с помошью JSF - Java Server Faces |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ассемблер - Быстрый старт | Ev3658 | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 12 | 17.01.2023 22:16 |
Старт в ВЕБе | AVer | Свободное общение | 5 | 29.03.2015 20:55 |
Старт в Java | Artem Vitalievich | Общие вопросы по Java, Java SE, Kotlin | 1 | 03.07.2014 13:15 |
Ищу веб-програмиста для старт-апа | Валентин Андреевич | Фриланс | 2 | 19.10.2011 10:25 |
Старт в Java for Mobile: Уроки | [Smarik] | Общие вопросы по Java, Java SE, Kotlin | 6 | 14.07.2010 15:17 |