2013-08-04 4 views
0

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

Подключение к базе данных с уровня JSP (как полагают многие учебные пособия в Интернете), на мой взгляд, очень плохая идея, поскольку JSP должен использоваться только для представления, а не для логики.

Должен ли я создать класс для получения данных из базы данных? И инициализировать его каким-то образом с помощью тега useBean? Как обработать исключение в случае сбоя подключения к базе данных? Я хорошо знаю Java SE, но в Java EE я являюсь полным новичком, поэтому любой совет и образец кода будут очень полезны.

ответ

2

Ваша интуиция правильная. Вы не должны подключаться из JSP напрямую к базе данных, если это возможно. Большинство программ состоят из нескольких слоев. Например:

У вас есть DAO (объект доступа к данным), который несет одну ответственность: получение данных из базы данных. Неважно, что происходит с этими данными, но оно извлекает его.

Тогда у вас есть слой услуг, который делает бизнес-логику, расчеты и т.д. Это не заботится, где данные приходит, он только предполагает, что данные есть (но это от дао)

Тогда вы иметь слой пользовательского интерфейса, который подготавливает информацию, которая будет использоваться в JSP, делает преобразования, которые JSP не может сделать, отфильтровывать информацию, которая не требуется, и т. д. И еще раз, он ничего не знает о том, откуда поступают данные, это просто получает его из служебного уровня.

Я предлагаю вам создать приложение таким образом. Это также облегчает тестирование, потому что вам нужно только протестировать БД и не заботиться об пользовательском интерфейсе, или проверить только пользовательский интерфейс и не заботиться о БД. Большинство серьезных приложений структурированы таким образом, хотя в них участвуют еще больше слоев.

Обратите внимание, что для создания уровня DAO не требуется создавать системы, такие как JPA или Hibernate или Spring Data могут генерировать большую часть данных.

+0

Большое спасибо за ваш комментарий. Это объясняло мне много. Я собираюсь создать свой сайт таким образом. Мои только два вопроса: сначала о обработке исключений подключения к базе данных. Должны ли методы DAO выдавать исключения (чтобы их можно было обрабатывать с бизнес-уровня) или ловить их? И второй вопрос: хороша ли практика ведения бизнес-логики в сервлете, а затем перенаправить ее на правильную страницу JSP? –

+0

Ну, я удалил свой пост, так или иначе, для новичка его хороший вызов, чтобы начать изучать Spring/DAO/Hibernate. Этот метод подходит для «больших» сайтов с высоким обменом данными. Удачи –

+0

Вы не должны беспокоиться о исключениях DAO. Если ваша база данных недоступна или недоступна, вероятно, ваше приложение больше ничего не сделает, и тип исключения не имеет особого значения. Вы можете поймать исключение, чтобы иметь возможность показывать сообщение «Веб-сайт вниз» для пользователя, но кроме этого вы мало что можете сделать. –

0

Если вы собираетесь написать сервлетов/JSP -На веб-приложение, вы должны быть осведомлены о двух моделей, которые используются:

Архитектура модели 1 (стр.) Основана на страницах. Клиентский браузер будет проходить через ряд страниц, каждый из которых может использовать JavaBean для ведения бизнес-логики. Суть этой архитектуры заключается в том, что каждая страница обрабатывает свой собственный вход. Эта архитектура подходит для небольших проектов.

enter image description here

Model 2 архитектуры (MVC, Servlet ориентированный) отделяет создание контента и представления контента. Он имеет сервлет-контроллер между клиентским браузером и JSP (или сервлетами, представляющими контент). Контроллер сервлета отправляет запросы на соответствующую страницу JSP. В этой модели части презентации (JSP) изолированы друг от друга. Это более гибкая, расширяемая архитектура.

enter image description here

Для работы с базой данных, вы можете создать пул соединений в отдельном JavaBean (в первом случае), или в init() методы servlet- контроллера (во втором случае), используя шаблон Singleton.

Вы также можете ознакомиться с каркасами, которые реализуют шаблон MVC и используют их - Apache Struts, Spring MVC.

+0

Есть ли у вас хороший пример кода использования модели MVC? Любое аутентификация пользователя или что-то еще? –

+0

Посмотрите здесь, например, [Учебник Java EE 5] (http://docs.oracle.com/javaee/5/tutorial/doc/bnahb.html) –

+0

А также [Магазин домашних животных для Java] (http: // www.oracle.com/technetwork/java/petstore1-3-1-02-139690.html) –

1

Независимо от того, что сказал thesaurier_rex, это правильно.

Но я просто даю еще несколько слоев

UI (ваш JSP/HTML)

  1. контроллер уровень()
  2. уровня службы (фактическая работа)
  3. Dao слой (будет разговаривать с базой данных)
  4. презентационный слой (данные модели)

Вы можете получить дополнительную информацию here

Смежные вопросы