Платформа J2EE Сервис: Java Naming Directory (JNDI) – универсальный сервис хранения объектов в иерархической структуре имен (аналогично файловой системе) Ресурс: DataSource - объект, позволяющий приложению получить доступ к соединению к БД
Структура J2EE Web-приложения
Настройка DataSource в Apache Tomcat Использование DataSource: // Создаем начальный контекст JNDI (Java Naming Directory) InitialContext ctx = new InitialContext(); // Достаем из контекста источник данных DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/sample"); // Получаем соединение с БД из источника данных return ds.getConnection(); Настройка DataSource: Файл /META-INF/context.xml
J2EE: Сервлеты Пример: public class MyServlet extends javax.servlet.http.HttpServlet { protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {} public void destroy() { this.log("Servlet destroyed"); } public void init(ServletConfig cfg) throws ServletException { this.log("Servlet inited"); }
Основные классы Servlet API (javax.servlet.http.*) HttpServletRequest – класс, экземпляры кот. представляют запрос от браузера String getContextPath() – возвращает путь к контексту приложения String getServletPath() – URL вызванного сервлета (JSP) HttpSession getSession() – Сессия пользователя Object getAttribute() / void setAttribute(String name, Object value) – Хранение пользовательских атрибутов, связанных с запросом String getParameter(String value) – Параметр запроса (и для GET и для POST) void setCharacterEncoding(String enc) – Кодировка значений параметров запроса (windows-1251, UTF-8) HttpServletResponse – класс, экземпляры кот. представляют ответ браузеру void setContentType(String contentType) – MIME-тип ответа браузеру java.io.PrintWriter getWriter() – поток вывода для ответа браузеру void sendRedirect(String location) – перенаправление на другую страницу HttpSession – класс, экземпляры кот. хранят состояние сессии клиента Object getAttribute() / void setAttribute(String key, Object value) – Атрибуты сессии (сохраняются между запросами одного клиента) HttpServletContext – класс, экземпляры кот. представляют все web-приложение Object getAttribute() / void setAttribute(String key, Object value) – Атрибуты контекста (общие для всех пользователей и запросов к web-приложению)
J2EE: Java Server Pages Жизненный цикл 1. Жизненный цикл класса страницы 2. Жизненный цикл объекта страницы Элемент JSP Представление в JSP-файле Преобразуется в java- класс как Импорт пакета import java.util.*; Скриптлет: jsp_service() { … List items=new ArrayList(); //любой java-код … } Вывод на страницу out.write(new Date());
J2EE: Java Server Pages (JSP) import java.util.*; public final class hello_jsp extends org.apache.jasper.runtime.HttpJspBase { // Объявляется поле в классе страницы int my_integer_field = 777; // Объявляется метод в классе страницы private String make_greeting(String name) { return "Hello, "+name + "!"; } public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { PageContext pageContext = null; HttpSession session = null; JspWriter out = null; Object page = this; response.setContentType("text/html; charset=UTF-8"); session = pageContext.getSession(); out = pageContext.getOut(); out.write(" \n"); out.write("\t Sample Hello world page \n"); out.write(" \n"); out.write(" \r\n"); // Скриптлет 1 for (int i=0; i
Model View Controller (MVC) Model Модель отображаемых данных Controller Контроллер запроса пользователя View Шаблон представления данных 1. Получает или сохраняет модель в БД 2. Определяет нужное view и передает ему управление 3. Накладывает модель на шаблон представления
Model View Controller в Web-приложении Model Модель отображаемых данных Controller Контроллер запроса пользователя View Шаблон представления данных - Java beans классы -классы с get/set методами) - Java Server pages или - XSLT или - Velocity - … - Java классы приложения Front Controller Диспетчер запросов от пользователей Controller Контроллер запроса пользователя Controller Контроллеры конкретных запросов - DispatcherServlet (всегда один) View Шаблон представления данных View Шаблоны представления данных Model Модель отображаемых данных Model Модель отображаемых данных Services Сервисы приложения Services Сервисы приложения Services Сервисы приложения - Java классы с логикой приложения 1. HTTP-запрос 2. Ищет конкретный контроллер и передает ему управление 3. Получает данные из БД 4. Заполняет модель данными 5. Выбирает нужное view и передает ему модель и управление 6. Накладывает модель на шаблон, получая HTML-страницу
Архитектура слоев приложения UI Layer Слой интерфейса пользователя отвечает за взаимодействие с пользователем ViewsControllers Service Layer Слой сервисов приложения отвечает за выполнение бизнес- логики приложения Services Data Access Layer Отвечает за работу приложения с БД Data Access Objects (DAOs) Domain Model Объектная модель данных приложения Domain entities X X